From b33f1a988cef80ad9dcf2a35ffe79cbe2957fee1 Mon Sep 17 00:00:00 2001 From: David Sparer Date: Fri, 6 May 2016 19:13:00 -0600 Subject: [PATCH] extracted the code for moving treenodes into its own class --- .../Connection/ConnectionInfoInheritance.cs | 2 +- mRemoteV1/Tree/ConnectionTreeNode.cs | 3 +- mRemoteV1/Tree/TreeNodeMover.cs | 93 +++++++++++++++++++ mRemoteV1/UI/Window/ConnectionTreeWindow.cs | 83 ++++------------- mRemoteV1/mRemoteV1.csproj | 1 + 5 files changed, 113 insertions(+), 69 deletions(-) create mode 100644 mRemoteV1/Tree/TreeNodeMover.cs diff --git a/mRemoteV1/Connection/ConnectionInfoInheritance.cs b/mRemoteV1/Connection/ConnectionInfoInheritance.cs index 976ec628..921d865d 100644 --- a/mRemoteV1/Connection/ConnectionInfoInheritance.cs +++ b/mRemoteV1/Connection/ConnectionInfoInheritance.cs @@ -340,7 +340,7 @@ namespace mRemoteNG.Connection public void TurnOffInheritanceCompletely() { - SetAllValues(false); + //SetAllValues(false); } #endregion diff --git a/mRemoteV1/Tree/ConnectionTreeNode.cs b/mRemoteV1/Tree/ConnectionTreeNode.cs index 2463c67e..e7423d35 100644 --- a/mRemoteV1/Tree/ConnectionTreeNode.cs +++ b/mRemoteV1/Tree/ConnectionTreeNode.cs @@ -6,6 +6,7 @@ using System; using System.Windows.Forms; using mRemoteNG.Messages; using mRemoteNG.Root.PuttySessions; +using mRemoteNG.Tree.Root; namespace mRemoteNG.Tree { @@ -63,7 +64,7 @@ namespace mRemoteNG.Tree if (treeNode.Tag is PuttySessionsNodeInfo) return TreeNodeType.PuttyRoot; - else if (treeNode.Tag is Root.RootNodeInfo) + else if (treeNode.Tag is RootNodeInfo) return TreeNodeType.Root; else if (treeNode.Tag is ContainerInfo) return TreeNodeType.Container; diff --git a/mRemoteV1/Tree/TreeNodeMover.cs b/mRemoteV1/Tree/TreeNodeMover.cs new file mode 100644 index 00000000..c2016094 --- /dev/null +++ b/mRemoteV1/Tree/TreeNodeMover.cs @@ -0,0 +1,93 @@ +using mRemoteNG.App; +using mRemoteNG.Connection; +using mRemoteNG.Container; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace mRemoteNG.Tree +{ + public class TreeNodeMover + { + TreeNode _nodeBeingMoved; + + public TreeNodeMover (TreeNode NodeBeingMoved) + { + _nodeBeingMoved = NodeBeingMoved; + } + + public void MoveNode(TreeNode TargetNode) + { + if (WeAreAllowedToMoveThisNode(TargetNode)) + { + RemoveNodeFromCurrentLocation(); + AddNodeToNewLocation(TargetNode); + UpdateParentReferences(); + SelectTheNewNode(); + Runtime.SaveConnectionsBG(); + } + } + + private bool WeAreAllowedToMoveThisNode(TreeNode targetNode) + { + bool weShouldMoveThisNode = true; + + if (_nodeBeingMoved == targetNode) + weShouldMoveThisNode = false; + if (ConnectionTreeNode.GetNodeType(_nodeBeingMoved) == TreeNodeType.Root) + weShouldMoveThisNode = false; + if (_nodeBeingMoved == targetNode.Parent) + weShouldMoveThisNode = false; + + return weShouldMoveThisNode; + } + + private void RemoveNodeFromCurrentLocation() + { + _nodeBeingMoved.Remove(); + } + + private void AddNodeToNewLocation(TreeNode targetNode) + { + //If there is no targetNode add dropNode to the bottom of + //the TreeView root nodes, otherwise add it to the end of + //the dropNode child nodes + if (ConnectionTreeNode.GetNodeType(targetNode) == TreeNodeType.Root | ConnectionTreeNode.GetNodeType(targetNode) == TreeNodeType.Container) + targetNode.Nodes.Insert(0, _nodeBeingMoved); + else + targetNode.Parent.Nodes.Insert(targetNode.Index + 1, _nodeBeingMoved); + } + + private void UpdateParentReferences() + { + if (ConnectionTreeNode.GetNodeType(_nodeBeingMoved) == TreeNodeType.Connection | ConnectionTreeNode.GetNodeType(_nodeBeingMoved) == TreeNodeType.Container) + { + if (ConnectionTreeNode.GetNodeType(_nodeBeingMoved.Parent) == TreeNodeType.Container) + { + ((ContainerInfo)_nodeBeingMoved.Tag).Parent = (ContainerInfo)_nodeBeingMoved.Parent.Tag; + } + else if (ConnectionTreeNode.GetNodeType(_nodeBeingMoved.Parent) == TreeNodeType.Root) + { + if (ConnectionTreeNode.GetNodeType(_nodeBeingMoved) == TreeNodeType.Connection) + { + ((ConnectionInfo)_nodeBeingMoved.Tag).Parent = null; + ((ConnectionInfo)_nodeBeingMoved.Tag).Inherit.TurnOffInheritanceCompletely(); + } + else if (ConnectionTreeNode.GetNodeType(_nodeBeingMoved) == TreeNodeType.Container) + { + ((ContainerInfo)_nodeBeingMoved.Tag).Parent = null; + ((ContainerInfo)_nodeBeingMoved.Tag).ConnectionInfo.Inherit.TurnOffInheritanceCompletely(); + } + } + } + } + + private void SelectTheNewNode() + { + _nodeBeingMoved.EnsureVisible(); + _nodeBeingMoved.TreeView.SelectedNode = _nodeBeingMoved; + } + } +} \ No newline at end of file diff --git a/mRemoteV1/UI/Window/ConnectionTreeWindow.cs b/mRemoteV1/UI/Window/ConnectionTreeWindow.cs index 1e532310..bd2de7d4 100644 --- a/mRemoteV1/UI/Window/ConnectionTreeWindow.cs +++ b/mRemoteV1/UI/Window/ConnectionTreeWindow.cs @@ -385,78 +385,27 @@ namespace mRemoteNG.UI.Window static public void tvConnections_DragDrop(object sender, DragEventArgs e) { try - { - //Check that there is a TreeNode being dragged - if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode", true) == false) - { - return; - } - - //Get the TreeView raising the event (in case multiple on form) - TreeView selectedTreeview = (TreeView) sender; - - //Get the TreeNode being dragged - TreeNode dropNode = (TreeNode) (e.Data.GetData("System.Windows.Forms.TreeNode")); - - //The target node should be selected from the DragOver event - TreeNode targetNode = selectedTreeview.SelectedNode; - - if (dropNode == targetNode) - return; - - if (ConnectionTreeNode.GetNodeType(dropNode) == TreeNodeType.Root) - return; - - if (dropNode == targetNode.Parent) - return; - - //Remove the drop node from its current location - dropNode.Remove(); - - //If there is no targetNode add dropNode to the bottom of - //the TreeView root nodes, otherwise add it to the end of - //the dropNode child nodes - - if (ConnectionTreeNode.GetNodeType(targetNode) == TreeNodeType.Root | ConnectionTreeNode.GetNodeType(targetNode) == TreeNodeType.Container) - targetNode.Nodes.Insert(0, dropNode); - else - targetNode.Parent.Nodes.Insert(targetNode.Index + 1, dropNode); - - if (ConnectionTreeNode.GetNodeType(dropNode) == TreeNodeType.Connection | ConnectionTreeNode.GetNodeType(dropNode) == TreeNodeType.Container) - { - if (ConnectionTreeNode.GetNodeType(dropNode.Parent) == TreeNodeType.Container) - { - ((ContainerInfo)dropNode.Tag).Parent = (ContainerInfo)dropNode.Parent.Tag; - } - else if (ConnectionTreeNode.GetNodeType(dropNode.Parent) == TreeNodeType.Root) - { - if (ConnectionTreeNode.GetNodeType(dropNode) == TreeNodeType.Connection) - { - ((ConnectionInfo)dropNode.Tag).Parent = null; - ((ConnectionInfo)dropNode.Tag).Inherit.TurnOffInheritanceCompletely(); - } - else if (ConnectionTreeNode.GetNodeType(dropNode) == TreeNodeType.Container) - { - ((ContainerInfo)dropNode.Tag).Parent = null; - ((ContainerInfo)dropNode.Tag).ConnectionInfo.Inherit.TurnOffInheritanceCompletely(); - } - } - } - - //Ensure the newly created node is visible to - //the user and select it - dropNode.EnsureVisible(); - selectedTreeview.SelectedNode = dropNode; + { + //Check that there is a TreeNode being dragged + if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode", true) == false) + return; - Runtime.SaveConnectionsBG(); - } - catch (Exception ex) + TreeView treeviewThatSentTheEvent = (TreeView)sender; + TreeNode nodeBeingDragged = (TreeNode)(e.Data.GetData("System.Windows.Forms.TreeNode")); + TreeNode nodeBeingTargetedByDragOverEvent = treeviewThatSentTheEvent.SelectedNode; + + TreeNodeMover treeNodeMover = new TreeNodeMover(nodeBeingDragged); + treeNodeMover.MoveNode(nodeBeingTargetedByDragOverEvent); + } + catch (Exception ex) { Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, "tvConnections_DragDrop (UI.Window.Tree) failed" + Environment.NewLine + ex.Message, true); } } - - static public void tvConnections_DragEnter(object sender, DragEventArgs e) + + + + static public void tvConnections_DragEnter(object sender, DragEventArgs e) { try { diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj index 6b709e01..426b6b2c 100644 --- a/mRemoteV1/mRemoteV1.csproj +++ b/mRemoteV1/mRemoteV1.csproj @@ -225,6 +225,7 @@ + Component