Index: Core/Common/src/Core.Common.Controls.TreeView/DragDropHandler.cs
===================================================================
diff -u -r688579f00220a59473f60b78f10253633743b853 -r46a14ec1ad945f15590e3362d8fe47498110e10d
--- Core/Common/src/Core.Common.Controls.TreeView/DragDropHandler.cs (.../DragDropHandler.cs) (revision 688579f00220a59473f60b78f10253633743b853)
+++ Core/Common/src/Core.Common.Controls.TreeView/DragDropHandler.cs (.../DragDropHandler.cs) (revision 46a14ec1ad945f15590e3362d8fe47498110e10d)
@@ -49,23 +49,17 @@
{
ClearPlaceHolders(treeView);
- Point point = treeView.PointToClient(new Point(e.X, e.Y));
+ var point = treeView.PointToClient(new Point(e.X, e.Y));
var nodeOver = treeView.GetNodeAt(point);
+ var draggedNode = (TreeNode) e.Data.GetData(typeof(TreeNode));
- var nodeDragging = e.Data.GetData(typeof(TreeNode)) as TreeNode;
-
- if (nodeOver == null || nodeDragging == null)
+ if (nodeOver == null)
{
- if (nodeOver != null)
- {
- e.Effect = DragDropEffects.All;
- }
-
return;
}
// Handle dragged items which were originally higher up in the tree under the same parent (all indices shift by one)
- if (e.Effect.Equals(DragDropEffects.Move) && nodeDragging.Parent == nodeDropTarget && nodeOver.Index > nodeDragging.Index && dropAtLocation > 0)
+ if (e.Effect.Equals(DragDropEffects.Move) && draggedNode.Parent == nodeDropTarget && nodeOver.Index > draggedNode.Index && dropAtLocation > 0)
{
dropAtLocation--;
}
@@ -77,31 +71,31 @@
}
var treeNodeInfo = getTreeNodeInfoForData(nodeDropTarget.Tag);
- var previousParentNode = nodeDragging.Parent;
+ var formerParentNode = draggedNode.Parent;
- previousParentNode.Nodes.Remove(nodeDragging);
- nodeDropTarget.Nodes.Insert(dropAtLocation, nodeDragging);
+ // Move the tree node
+ formerParentNode.Nodes.Remove(draggedNode);
+ nodeDropTarget.Nodes.Insert(dropAtLocation, draggedNode);
// Ensure the dragged node is visible afterwards
- nodeDragging.EnsureVisible();
+ draggedNode.EnsureVisible();
// Restore any lost selection
- treeView.SelectedNode = nodeDragging;
+ treeView.SelectedNode = draggedNode;
if (treeNodeInfo.OnDrop != null)
{
- treeNodeInfo.OnDrop(nodeDragging.Tag, nodeDragging.Parent.Tag, previousParentNode.Tag, dropAtLocation, treeViewControl);
+ treeNodeInfo.OnDrop(draggedNode.Tag, draggedNode.Parent.Tag, formerParentNode.Tag, dropAtLocation, treeViewControl);
}
}
///
/// This method handles the event for a .
///
/// The of the .
- /// The sender of the event.
/// The arguments of the event.
/// A function for obtaining the object corresponding to a provided data object.
- public void HandleDragOver(FormsTreeView treeView, object sender, DragEventArgs e, Func getTreeNodeInfoForData)
+ public void HandleDragOver(FormsTreeView treeView, DragEventArgs e, Func getTreeNodeInfoForData)
{
if (lastDragOverPoint.X == e.X && lastDragOverPoint.Y == e.Y)
{
@@ -112,30 +106,30 @@
var point = treeView.PointToClient(lastDragOverPoint);
var nodeOver = treeView.GetNodeAt(point);
- var nodeDragging = e.Data.GetData(typeof(TreeNode)) as TreeNode;
+ var draggedNode = (TreeNode) e.Data.GetData(typeof(TreeNode));
- if (nodeOver == null || nodeDragging == null || nodeOver == nodeDragging || IsChildOf(nodeOver, nodeDragging))
+ if (nodeOver == null || nodeOver == draggedNode || IsChildOf(nodeOver, draggedNode))
{
ClearPlaceHolders(treeView);
return;
}
- ScrollIntoView(point, nodeOver, sender);
+ ScrollIntoView(point, nodeOver, treeView);
- PlaceholderLocation placeholderLocation = GetPlaceHoldersLocation(treeView, nodeDragging, nodeOver, e, getTreeNodeInfoForData);
+ var placeholderLocation = GetPlaceHoldersLocation(treeView, draggedNode, nodeOver, e, getTreeNodeInfoForData);
- if (null == nodeDropTarget)
+ if (nodeDropTarget == null)
{
return;
}
var treeNodeInfo = getTreeNodeInfoForData(nodeDropTarget.Tag);
- var canDrop = treeNodeInfo.CanDrop != null && treeNodeInfo.CanDrop(nodeDragging.Tag, nodeDropTarget.Tag);
+ var canDrop = treeNodeInfo.CanDrop != null && treeNodeInfo.CanDrop(draggedNode.Tag, nodeDropTarget.Tag);
e.Effect = canDrop ? DragDropEffects.Move : DragDropEffects.None;
- if (PlaceholderLocation.None == placeholderLocation)
+ if (placeholderLocation == PlaceholderLocation.None)
{
return;
}
@@ -160,26 +154,20 @@
/// A function for obtaining the object corresponding to a provided data object.
public void HandleItemDrag(FormsTreeView treeView, ItemDragEventArgs e, Func getTreeNodeInfoForData)
{
- // gather allowed effects for the current item.
- var sourceNode = (TreeNode) e.Item;
- var treeNodeInfo = getTreeNodeInfoForData(sourceNode.Tag);
- var parentTag = sourceNode.Parent != null ? sourceNode.Parent.Tag : null;
+ var draggedNode = (TreeNode) e.Item;
+ var treeNodeInfo = getTreeNodeInfoForData(draggedNode.Tag);
+ var parentTag = draggedNode.Parent != null ? draggedNode.Parent.Tag : null;
- var canDrag = treeNodeInfo.CanDrag != null && treeNodeInfo.CanDrag(sourceNode.Tag, parentTag);
+ var canDrag = treeNodeInfo.CanDrag != null && treeNodeInfo.CanDrag(draggedNode.Tag, parentTag);
if (!canDrag)
{
return;
}
- // store both treenode and tag of treenode in dataobject
- // to be dragged.
- IDataObject dataObject = new DataObject();
- dataObject.SetData(typeof(TreeNode), sourceNode);
+ // Provide the drag drop operation with a data object containing the dragged tree node
+ var dataObject = new DataObject();
- if (sourceNode.Tag != null)
- {
- dataObject.SetData(sourceNode.Tag.GetType(), sourceNode.Tag);
- }
+ dataObject.SetData(typeof(TreeNode), draggedNode);
treeView.DoDragDrop(dataObject, DragDropEffects.Move);
}
@@ -193,20 +181,20 @@
ClearPlaceHolders(treeView);
}
- private void DrawPlaceholder(FormsTreeView treeView, TreeNode node, PlaceholderLocation location)
+ private void DrawPlaceholder(FormsTreeView treeView, TreeNode node, PlaceholderLocation placeHolderLocation)
{
- if (lastPlaceholderNode == node && lastPlaceholderLocation == location)
+ if (lastPlaceholderNode == node && lastPlaceholderLocation == placeHolderLocation)
{
return;
}
ClearPlaceHolders(treeView);
lastPlaceholderNode = node;
- lastPlaceholderLocation = location;
+ lastPlaceholderLocation = placeHolderLocation;
placeHolderGraphics = treeView.CreateGraphics();
- node.DrawPlaceHolder(location, treeView.CreateGraphics());
+ node.DrawPlaceHolder(placeHolderLocation, treeView.CreateGraphics());
}
private void ClearPlaceHolders(FormsTreeView treeView)
@@ -222,7 +210,7 @@
}
}
- private bool IsChildOf(TreeNode childNode, TreeNode node)
+ private static bool IsChildOf(TreeNode childNode, TreeNode node)
{
while (childNode != null && childNode.Parent != null)
{
@@ -237,23 +225,20 @@
return false;
}
- private static void ScrollIntoView(Point point, TreeNode nodeOver, object sender)
+ private static void ScrollIntoView(Point point, TreeNode nodeOver, FormsTreeView treeView)
{
- var treeView = sender as FormsTreeView;
- if (treeView == null)
- {
- return;
- }
int delta = treeView.Height - point.Y;
- if ((delta < treeView.Height/2) && (delta > 0))
+
+ if (delta < treeView.Height/2 && delta > 0)
{
var nextVisibleNode = nodeOver.NextVisibleNode;
if (nextVisibleNode != null)
{
nextVisibleNode.EnsureVisible();
}
}
- if ((delta > treeView.Height/2) && (delta < treeView.Height))
+
+ if (delta > treeView.Height/2 && delta < treeView.Height)
{
var previousVisibleNode = nodeOver.PrevVisibleNode;
if (previousVisibleNode != null)
@@ -265,7 +250,7 @@
private PlaceholderLocation GetPlaceHoldersLocation(FormsTreeView treeView, TreeNode nodeDragging, TreeNode nodeOver, DragEventArgs e, Func getTreeNodeInfoForData)
{
- var loc = PlaceholderLocation.None;
+ var placeholderLocation = PlaceholderLocation.None;
int offsetY = treeView.PointToClient(Cursor.Position).Y - nodeOver.Bounds.Top;
if (offsetY < nodeOver.Bounds.Height/3 && nodeDragging.NextNode != nodeOver)
@@ -277,56 +262,59 @@
{
nodeDropTarget = nodeOver.Parent;
dropAtLocation = nodeOver.Parent == null ? 0 : nodeOver.Parent.Nodes.IndexOf(nodeOver);
- loc = PlaceholderLocation.Top;
+ placeholderLocation = PlaceholderLocation.Top;
}
else
{
nodeDropTarget = nodeOver;
dropAtLocation = 0;
- loc = PlaceholderLocation.Middle;
+ placeholderLocation = PlaceholderLocation.Middle;
}
}
else
{
nodeDropTarget = nodeOver;
dropAtLocation = 0;
- loc = PlaceholderLocation.Middle;
+ placeholderLocation = PlaceholderLocation.Middle;
}
}
- else if ((nodeOver.Parent != null) && (offsetY > nodeOver.Bounds.Height - nodeOver.Bounds.Height/3) &&
- nodeDragging.PrevNode != nodeOver)
+ else if (nodeOver.Parent != null
+ && offsetY > nodeOver.Bounds.Height - nodeOver.Bounds.Height/3
+ && nodeDragging.PrevNode != nodeOver)
{
var treeNodeInfo = getTreeNodeInfoForData(nodeOver.Parent.Tag);
if (treeNodeInfo.CanInsert != null && treeNodeInfo.CanInsert(nodeDragging.Tag, nodeOver.Tag))
{
nodeDropTarget = nodeOver.Parent;
- dropAtLocation = nodeOver.Parent == null
- ? 0
- : nodeOver.Parent.Nodes.IndexOf(nodeOver) + 1;
- loc = PlaceholderLocation.Bottom;
+ dropAtLocation = nodeOver.Parent != null
+ ? nodeOver.Parent.Nodes.IndexOf(nodeOver) + 1
+ : 0;
+ placeholderLocation = PlaceholderLocation.Bottom;
}
else
{
nodeDropTarget = nodeOver;
dropAtLocation = 0;
- loc = PlaceholderLocation.Middle;
+ placeholderLocation = PlaceholderLocation.Middle;
}
}
- else if (nodeDragging != nodeOver && offsetY < nodeOver.Bounds.Height - nodeOver.Bounds.Height/4
+ else if (nodeDragging != nodeOver
+ && offsetY < nodeOver.Bounds.Height - nodeOver.Bounds.Height/4
&& offsetY > nodeOver.Bounds.Height/4)
{
nodeDropTarget = nodeOver;
dropAtLocation = 0;
- loc = PlaceholderLocation.Middle;
+ placeholderLocation = PlaceholderLocation.Middle;
}
- if (loc == PlaceholderLocation.None ||
- (loc == PlaceholderLocation.Middle && nodeDropTarget == nodeDragging.Parent))
+ if (placeholderLocation == PlaceholderLocation.None
+ || (placeholderLocation == PlaceholderLocation.Middle && nodeDropTarget == nodeDragging.Parent))
{
ClearPlaceHolders(treeView);
e.Effect = DragDropEffects.None;
}
- return loc;
+
+ return placeholderLocation;
}
}
}
\ No newline at end of file
Index: Core/Common/src/Core.Common.Controls.TreeView/TreeViewControl.cs
===================================================================
diff -u -re2e9b8f56864fad784b080c62dfb0145e0c0d4b3 -r46a14ec1ad945f15590e3362d8fe47498110e10d
--- Core/Common/src/Core.Common.Controls.TreeView/TreeViewControl.cs (.../TreeViewControl.cs) (revision e2e9b8f56864fad784b080c62dfb0145e0c0d4b3)
+++ Core/Common/src/Core.Common.Controls.TreeView/TreeViewControl.cs (.../TreeViewControl.cs) (revision 46a14ec1ad945f15590e3362d8fe47498110e10d)
@@ -753,7 +753,7 @@
private void TreeViewDragOver(object sender, DragEventArgs e)
{
- dragDropHandler.HandleDragOver(treeView, sender, e, GetTreeNodeInfoForData);
+ dragDropHandler.HandleDragOver(treeView, e, GetTreeNodeInfoForData);
}
private void TreeViewItemDrag(object sender, ItemDragEventArgs e)