private void treeView_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(TreeNode)))
{
Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
var tnTarget = ((TreeView)sender).GetNodeAt(pt);
var tnDrag = (TreeNode)e.Data.GetData(typeof(TreeNode));
if (null != tnTarget?.Tag &&
tnDrag != tnTarget &&
tnTarget.Tag is ProjectLayout &&
tnTarget.TreeView == tnDrag.TreeView)
{
int nDragIdx = tnDrag.Index;
int nTargetIdx = tnTarget.Index;
tnTarget.Parent.Nodes.RemoveAt(nDragIdx);
tnTarget.Parent.Nodes.Insert(nTargetIdx, tnDrag);
var zProject = tnTarget.Parent.Tag as Project;
if (null != zProject)
{
var listLayouts = zProject.Layout.ToList();
listLayouts.RemoveAt(nDragIdx);
listLayouts.Insert(nTargetIdx, (ProjectLayout) tnDrag.Tag);
zProject.Layout = listLayouts.ToArray();
}
ProjectManager.Instance.FireProjectUpdated(true);
}
}
}