Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
28f929ac60
commit
6a48be848b
101
js/ui/mxgraph/src/js/layout/mxCompositeLayout.js
Normal file
101
js/ui/mxgraph/src/js/layout/mxCompositeLayout.js
Normal file
|
@ -0,0 +1,101 @@
|
|||
/**
|
||||
* Copyright (c) 2006-2015, JGraph Ltd
|
||||
* Copyright (c) 2006-2015, Gaudenz Alder
|
||||
*/
|
||||
/**
|
||||
* Class: mxCompositeLayout
|
||||
*
|
||||
* Allows to compose multiple layouts into a single layout. The master layout
|
||||
* is the layout that handles move operations if another layout than the first
|
||||
* element in <layouts> should be used. The <master> layout is not executed as
|
||||
* the code assumes that it is part of <layouts>.
|
||||
*
|
||||
* Example:
|
||||
* (code)
|
||||
* var first = new mxFastOrganicLayout(graph);
|
||||
* var second = new mxParallelEdgeLayout(graph);
|
||||
* var layout = new mxCompositeLayout(graph, [first, second], first);
|
||||
* layout.execute(graph.getDefaultParent());
|
||||
* (end)
|
||||
*
|
||||
* Constructor: mxCompositeLayout
|
||||
*
|
||||
* Constructs a new layout using the given layouts. The graph instance is
|
||||
* required for creating the transaction that contains all layouts.
|
||||
*
|
||||
* Arguments:
|
||||
*
|
||||
* graph - Reference to the enclosing <mxGraph>.
|
||||
* layouts - Array of <mxGraphLayouts>.
|
||||
* master - Optional layout that handles moves. If no layout is given then
|
||||
* the first layout of the above array is used to handle moves.
|
||||
*/
|
||||
function mxCompositeLayout(graph, layouts, master)
|
||||
{
|
||||
mxGraphLayout.call(this, graph);
|
||||
this.layouts = layouts;
|
||||
this.master = master;
|
||||
};
|
||||
|
||||
/**
|
||||
* Extends mxGraphLayout.
|
||||
*/
|
||||
mxCompositeLayout.prototype = new mxGraphLayout();
|
||||
mxCompositeLayout.prototype.constructor = mxCompositeLayout;
|
||||
|
||||
/**
|
||||
* Variable: layouts
|
||||
*
|
||||
* Holds the array of <mxGraphLayouts> that this layout contains.
|
||||
*/
|
||||
mxCompositeLayout.prototype.layouts = null;
|
||||
|
||||
/**
|
||||
* Variable: layouts
|
||||
*
|
||||
* Reference to the <mxGraphLayouts> that handles moves. If this is null
|
||||
* then the first layout in <layouts> is used.
|
||||
*/
|
||||
mxCompositeLayout.prototype.master = null;
|
||||
|
||||
/**
|
||||
* Function: moveCell
|
||||
*
|
||||
* Implements <mxGraphLayout.moveCell> by calling move on <master> or the first
|
||||
* layout in <layouts>.
|
||||
*/
|
||||
mxCompositeLayout.prototype.moveCell = function(cell, x, y)
|
||||
{
|
||||
if (this.master != null)
|
||||
{
|
||||
this.master.move.apply(this.master, arguments);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.layouts[0].move.apply(this.layouts[0], arguments);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Function: execute
|
||||
*
|
||||
* Implements <mxGraphLayout.execute> by executing all <layouts> in a
|
||||
* single transaction.
|
||||
*/
|
||||
mxCompositeLayout.prototype.execute = function(parent)
|
||||
{
|
||||
var model = this.graph.getModel();
|
||||
|
||||
model.beginUpdate();
|
||||
try
|
||||
{
|
||||
for (var i = 0; i < this.layouts.length; i++)
|
||||
{
|
||||
this.layouts[i].execute.apply(this.layouts[i], arguments);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
model.endUpdate();
|
||||
}
|
||||
};
|
Loading…
Reference in New Issue
Block a user