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