Browse Source

Allow drag'n'drop reordering of assembly tree nodes.

pull/1/head
Daniel Grunwald 14 years ago
parent
commit
3de637c632
  1. 30
      ILSpy/AssemblyListTreeNode.cs
  2. 4
      ILSpy/AssemblyTreeNode.cs
  3. 1
      SharpTreeView/SharpTreeNode.cs
  4. 16
      SharpTreeView/SharpTreeView.cs

30
ILSpy/AssemblyListTreeNode.cs

@ -7,6 +7,8 @@ using System.IO; @@ -7,6 +7,8 @@ using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows;
using ICSharpCode.TreeView;
using Mono.Cecil;
@ -33,9 +35,33 @@ namespace ICSharpCode.ILSpy @@ -33,9 +35,33 @@ namespace ICSharpCode.ILSpy
this.Children.Remove(node);
}
public override DropEffect CanDrop(System.Windows.IDataObject data, DropEffect requestedEffect)
public override DropEffect CanDrop(IDataObject data, DropEffect requestedEffect)
{
if (data.GetDataPresent(AssemblyTreeNode.DataFormat))
return DropEffect.Move;
else
return DropEffect.None;
}
public override void Drop(IDataObject data, int index, DropEffect finalEffect)
{
return requestedEffect;
string[] files = data.GetData(AssemblyTreeNode.DataFormat) as string[];
if (files != null) {
var nodes = (from file in files
select OpenAssembly(file) into node
where node != null
select node).Distinct().ToList();
foreach (AssemblyTreeNode node in nodes) {
int nodeIndex = this.Children.IndexOf(node);
if (nodeIndex < index)
index--;
this.Children.RemoveAt(nodeIndex);
}
nodes.Reverse();
foreach (AssemblyTreeNode node in nodes) {
this.Children.Insert(index, node);
}
}
}
public AssemblyTreeNode OpenAssembly(string file)

4
ILSpy/AssemblyTreeNode.cs

@ -152,10 +152,12 @@ namespace ICSharpCode.ILSpy @@ -152,10 +152,12 @@ namespace ICSharpCode.ILSpy
Parent.DeleteCore(nodes); // handle deletion in the AssemblyListTreeNode
}
internal const string DataFormat = "ILSpyAssemblies";
public override IDataObject Copy(SharpTreeNode[] nodes)
{
DataObject dataObject = new DataObject();
dataObject.SetData("ILSpyAssemblies", nodes.OfType<AssemblyTreeNode>());
dataObject.SetData(DataFormat, nodes.OfType<AssemblyTreeNode>().Select(n => n.fileName).ToArray());
return dataObject;
}
}

1
SharpTreeView/SharpTreeNode.cs

@ -558,6 +558,7 @@ namespace ICSharpCode.TreeView @@ -558,6 +558,7 @@ namespace ICSharpCode.TreeView
public virtual void Drop(IDataObject data, int index, DropEffect finalEffect)
{
throw new NotSupportedException(GetType().Name + " does not support Drop()");
}
#endregion

16
SharpTreeView/SharpTreeView.cs

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Controls;
@ -251,12 +252,17 @@ namespace ICSharpCode.TreeView @@ -251,12 +252,17 @@ namespace ICSharpCode.TreeView
internal void HandleDrop(SharpTreeViewItem item, DragEventArgs e)
{
HidePreview();
e.Handled = true;
try {
HidePreview();
e.Handled = true;
var target = GetDropTarget(item, e);
if (target != null) {
target.Node.InternalDrop(e, target.Index);
var target = GetDropTarget(item, e);
if (target != null) {
target.Node.InternalDrop(e, target.Index);
}
} catch (Exception ex) {
Debug.WriteLine(ex.ToString());
throw;
}
}

Loading…
Cancel
Save