Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
295a1c716b
commit
c2ebd76023
221
js/ui/mxgraph/src/js/util/mxClipboard.js
Normal file
221
js/ui/mxgraph/src/js/util/mxClipboard.js
Normal file
|
@ -0,0 +1,221 @@
|
|||
/**
|
||||
* Copyright (c) 2006-2015, JGraph Ltd
|
||||
* Copyright (c) 2006-2015, Gaudenz Alder
|
||||
*/
|
||||
var mxClipboard =
|
||||
{
|
||||
/**
|
||||
* Class: mxClipboard
|
||||
*
|
||||
* Singleton that implements a clipboard for graph cells.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* (code)
|
||||
* mxClipboard.copy(graph);
|
||||
* mxClipboard.paste(graph2);
|
||||
* (end)
|
||||
*
|
||||
* This copies the selection cells from the graph to the clipboard and
|
||||
* pastes them into graph2.
|
||||
*
|
||||
* For fine-grained control of the clipboard data the <mxGraph.canExportCell>
|
||||
* and <mxGraph.canImportCell> functions can be overridden.
|
||||
*
|
||||
* To restore previous parents for pasted cells, the implementation for
|
||||
* <copy> and <paste> can be changed as follows.
|
||||
*
|
||||
* (code)
|
||||
* mxClipboard.copy = function(graph, cells)
|
||||
* {
|
||||
* cells = cells || graph.getSelectionCells();
|
||||
* var result = graph.getExportableCells(cells);
|
||||
*
|
||||
* mxClipboard.parents = new Object();
|
||||
*
|
||||
* for (var i = 0; i < result.length; i++)
|
||||
* {
|
||||
* mxClipboard.parents[i] = graph.model.getParent(cells[i]);
|
||||
* }
|
||||
*
|
||||
* mxClipboard.insertCount = 1;
|
||||
* mxClipboard.setCells(graph.cloneCells(result));
|
||||
*
|
||||
* return result;
|
||||
* };
|
||||
*
|
||||
* mxClipboard.paste = function(graph)
|
||||
* {
|
||||
* if (!mxClipboard.isEmpty())
|
||||
* {
|
||||
* var cells = graph.getImportableCells(mxClipboard.getCells());
|
||||
* var delta = mxClipboard.insertCount * mxClipboard.STEPSIZE;
|
||||
* var parent = graph.getDefaultParent();
|
||||
*
|
||||
* graph.model.beginUpdate();
|
||||
* try
|
||||
* {
|
||||
* for (var i = 0; i < cells.length; i++)
|
||||
* {
|
||||
* var tmp = (mxClipboard.parents != null && graph.model.contains(mxClipboard.parents[i])) ?
|
||||
* mxClipboard.parents[i] : parent;
|
||||
* cells[i] = graph.importCells([cells[i]], delta, delta, tmp)[0];
|
||||
* }
|
||||
* }
|
||||
* finally
|
||||
* {
|
||||
* graph.model.endUpdate();
|
||||
* }
|
||||
*
|
||||
* // Increments the counter and selects the inserted cells
|
||||
* mxClipboard.insertCount++;
|
||||
* graph.setSelectionCells(cells);
|
||||
* }
|
||||
* };
|
||||
* (end)
|
||||
*
|
||||
* Variable: STEPSIZE
|
||||
*
|
||||
* Defines the step size to offset the cells after each paste operation.
|
||||
* Default is 10.
|
||||
*/
|
||||
STEPSIZE: 10,
|
||||
|
||||
/**
|
||||
* Variable: insertCount
|
||||
*
|
||||
* Counts the number of times the clipboard data has been inserted.
|
||||
*/
|
||||
insertCount: 1,
|
||||
|
||||
/**
|
||||
* Variable: cells
|
||||
*
|
||||
* Holds the array of <mxCells> currently in the clipboard.
|
||||
*/
|
||||
cells: null,
|
||||
|
||||
/**
|
||||
* Function: setCells
|
||||
*
|
||||
* Sets the cells in the clipboard. Fires a <mxEvent.CHANGE> event.
|
||||
*/
|
||||
setCells: function(cells)
|
||||
{
|
||||
mxClipboard.cells = cells;
|
||||
},
|
||||
|
||||
/**
|
||||
* Function: getCells
|
||||
*
|
||||
* Returns the cells in the clipboard.
|
||||
*/
|
||||
getCells: function()
|
||||
{
|
||||
return mxClipboard.cells;
|
||||
},
|
||||
|
||||
/**
|
||||
* Function: isEmpty
|
||||
*
|
||||
* Returns true if the clipboard currently has not data stored.
|
||||
*/
|
||||
isEmpty: function()
|
||||
{
|
||||
return mxClipboard.getCells() == null;
|
||||
},
|
||||
|
||||
/**
|
||||
* Function: cut
|
||||
*
|
||||
* Cuts the given array of <mxCells> from the specified graph.
|
||||
* If cells is null then the selection cells of the graph will
|
||||
* be used. Returns the cells that have been cut from the graph.
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* graph - <mxGraph> that contains the cells to be cut.
|
||||
* cells - Optional array of <mxCells> to be cut.
|
||||
*/
|
||||
cut: function(graph, cells)
|
||||
{
|
||||
cells = mxClipboard.copy(graph, cells);
|
||||
mxClipboard.insertCount = 0;
|
||||
mxClipboard.removeCells(graph, cells);
|
||||
|
||||
return cells;
|
||||
},
|
||||
|
||||
/**
|
||||
* Function: removeCells
|
||||
*
|
||||
* Hook to remove the given cells from the given graph after
|
||||
* a cut operation.
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* graph - <mxGraph> that contains the cells to be cut.
|
||||
* cells - Array of <mxCells> to be cut.
|
||||
*/
|
||||
removeCells: function(graph, cells)
|
||||
{
|
||||
graph.removeCells(cells);
|
||||
},
|
||||
|
||||
/**
|
||||
* Function: copy
|
||||
*
|
||||
* Copies the given array of <mxCells> from the specified
|
||||
* graph to <cells>. Returns the original array of cells that has
|
||||
* been cloned. Descendants of cells in the array are ignored.
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* graph - <mxGraph> that contains the cells to be copied.
|
||||
* cells - Optional array of <mxCells> to be copied.
|
||||
*/
|
||||
copy: function(graph, cells)
|
||||
{
|
||||
cells = cells || graph.getSelectionCells();
|
||||
var result = graph.getExportableCells(graph.model.getTopmostCells(cells));
|
||||
mxClipboard.insertCount = 1;
|
||||
mxClipboard.setCells(graph.cloneCells(result));
|
||||
|
||||
return result;
|
||||
},
|
||||
|
||||
/**
|
||||
* Function: paste
|
||||
*
|
||||
* Pastes the <cells> into the specified graph restoring
|
||||
* the relation to <parents>, if possible. If the parents
|
||||
* are no longer in the graph or invisible then the
|
||||
* cells are added to the graph's default or into the
|
||||
* swimlane under the cell's new location if one exists.
|
||||
* The cells are added to the graph using <mxGraph.importCells>
|
||||
* and returned.
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* graph - <mxGraph> to paste the <cells> into.
|
||||
*/
|
||||
paste: function(graph)
|
||||
{
|
||||
var cells = null;
|
||||
|
||||
if (!mxClipboard.isEmpty())
|
||||
{
|
||||
cells = graph.getImportableCells(mxClipboard.getCells());
|
||||
var delta = mxClipboard.insertCount * mxClipboard.STEPSIZE;
|
||||
var parent = graph.getDefaultParent();
|
||||
cells = graph.importCells(cells, delta, delta, parent);
|
||||
|
||||
// Increments the counter and selects the inserted cells
|
||||
mxClipboard.insertCount++;
|
||||
graph.setSelectionCells(cells);
|
||||
}
|
||||
|
||||
return cells;
|
||||
}
|
||||
|
||||
};
|
Loading…
Reference in New Issue
Block a user