Ejemplo n.º 1
0
        /// <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();
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Implementation of "cut" action
        /// </summary>
        /// <param name="node"></param>
        public static JTokenTreeNode ClipboardCut(this JTokenTreeNode node)
        {
            EditorClipboard <JTokenTreeNode> .Set(node, false);

            return(node);
        }