123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- /**
- * 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;
- }
- };
- __mxOutput.mxClipboard = typeof mxClipboard !== 'undefined' ? mxClipboard : undefined;
|