/// <summary> /// Implementation of "paste" action using 2 delegates for the concrete action on JToken tree and TreeView. /// </summary> /// <param name="node"></param> /// <param name="pasteJTokenImplementation">Implementation of paste action in the JToken tree.</param> /// <param name="pasteTreeNodeImplementation">Implementation of paste action in the treeView.</param> private static void ClipboardPaste(this JTokenTreeNode node, Action <JToken> pasteJTokenImplementation, Action <TreeNode> pasteTreeNodeImplementation) { var sourceJTokenTreeNode = EditorClipboard <JTokenTreeNode> .Get(); var jTokenSource = sourceJTokenTreeNode.JTokenTag.DeepClone(); try { pasteJTokenImplementation(jTokenSource); } catch (Exception exception) { // If cut was asked, the clipboard is now empty and source should be inserted again in clipboard if (EditorClipboard <JTokenTreeNode> .IsEmpty()) { EditorClipboard <JTokenTreeNode> .Set(sourceJTokenTreeNode, false); } throw new JTokenTreeNodePasteException(exception); } var treeView = node.TreeView; treeView.BeginUpdate(); pasteTreeNodeImplementation(JsonTreeNodeFactory.Create(jTokenSource)); treeView.EndUpdate(); // If cut was asked, the clipboard is now empty and source should be removed from treeview if (EditorClipboard <JTokenTreeNode> .IsEmpty()) { sourceJTokenTreeNode.EditDelete(); } }
/// <summary> /// Implementation of "cut" action /// </summary> /// <param name="node"></param> public static JTokenTreeNode ClipboardCut(this JTokenTreeNode node) { EditorClipboard <JTokenTreeNode> .Set(node, false); return(node); }