1 /** 2 * Creates a new ClipboardController. 3 * Handles copy, cut and paste commands. 4 * 5 * @constructor 6 * 7 * @param {mindmaps.EventBus} eventBus 8 * @param {mindmaps.CommandRegistry} commandRegistry 9 * @param {mindmaps.MindMapModel} mindmapModel 10 */ 11 mindmaps.ClipboardController = function(eventBus, commandRegistry, mindmapModel) { 12 var node, copyCommand, cutCommand, pasteCommand; 13 14 function init() { 15 copyCommand = commandRegistry.get(mindmaps.CopyNodeCommand); 16 copyCommand.setHandler(doCopy); 17 18 cutCommand = commandRegistry.get(mindmaps.CutNodeCommand); 19 cutCommand.setHandler(doCut); 20 21 pasteCommand = commandRegistry.get(mindmaps.PasteNodeCommand); 22 pasteCommand.setHandler(doPaste); 23 pasteCommand.setEnabled(false); 24 25 eventBus.subscribe(mindmaps.Event.DOCUMENT_CLOSED, function() { 26 copyCommand.setEnabled(false); 27 cutCommand.setEnabled(false); 28 pasteCommand.setEnabled(false); 29 }); 30 31 eventBus.subscribe(mindmaps.Event.DOCUMENT_OPENED, function() { 32 copyCommand.setEnabled(true); 33 cutCommand.setEnabled(true); 34 pasteCommand.setEnabled(node != null); 35 }); 36 37 } 38 39 function copySelectedNode() { 40 node = mindmapModel.selectedNode.clone(); 41 pasteCommand.setEnabled(true); 42 } 43 44 function doCopy() { 45 copySelectedNode(); 46 } 47 48 function doCut() { 49 copySelectedNode(); 50 mindmapModel.deleteNode(mindmapModel.selectedNode); 51 } 52 53 function doPaste() { 54 if (!node) { 55 return; 56 } 57 58 // send a cloned copy of our node, so we can paste multiple times 59 mindmapModel.createNode(node.clone(), mindmapModel.selectedNode); 60 } 61 62 init(); 63 };