Browse Source

Simplify SharpTreeView's CanDelete() calls.

pull/1/head
Daniel Grunwald 14 years ago
parent
commit
8fd9c3c312
  1. 16
      ILSpy/TreeNodes/AssemblyListTreeNode.cs
  2. 12
      ILSpy/TreeNodes/AssemblyTreeNode.cs
  3. 37
      SharpTreeView/SharpTreeNode.cs
  4. 70
      SharpTreeView/SharpTreeView.cs
  5. 61
      SharpTreeView/SharpTreeViewItem.cs

16
ILSpy/TreeNodes/AssemblyListTreeNode.cs

@ -44,22 +44,6 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -44,22 +44,6 @@ namespace ICSharpCode.ILSpy.TreeNodes
this.assemblyList = assemblyList;
}
public override bool CanDelete(SharpTreeNode[] nodes)
{
return nodes.All(n => n is AssemblyTreeNode);
}
public override void Delete(SharpTreeNode[] nodes)
{
DeleteCore(nodes);
}
public override void DeleteCore(SharpTreeNode[] nodes)
{
foreach (AssemblyTreeNode node in nodes)
assemblyList.Assemblies.Remove(node);
}
public override DropEffect CanDrop(IDataObject data, DropEffect requestedEffect)
{
if (data.GetDataPresent(AssemblyTreeNode.DataFormat))

12
ILSpy/TreeNodes/AssemblyTreeNode.cs

@ -160,19 +160,19 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -160,19 +160,19 @@ namespace ICSharpCode.ILSpy.TreeNodes
return nodes.All(n => n is AssemblyTreeNode);
}
public override bool CanDelete(SharpTreeNode[] nodes)
public override bool CanDelete()
{
return Parent != null && Parent.CanDelete(nodes); // handle deletion in the AssemblyListTreeNode
return true;
}
public override void Delete(SharpTreeNode[] nodes)
public override void Delete()
{
Parent.Delete(nodes); // handle deletion in the AssemblyListTreeNode
DeleteCore();
}
public override void DeleteCore(SharpTreeNode[] nodes)
public override void DeleteCore()
{
Parent.DeleteCore(nodes); // handle deletion in the AssemblyListTreeNode
assemblyList.Assemblies.Remove(this);
}
internal const string DataFormat = "ILSpyAssemblies";

37
SharpTreeView/SharpTreeNode.cs

@ -22,7 +22,7 @@ namespace ICSharpCode.TreeView @@ -22,7 +22,7 @@ namespace ICSharpCode.TreeView
{
SelectedNodes = new HashSet<SharpTreeNode>();
ActiveNodes = new HashSet<SharpTreeNode>();
StartCuttedDataWatcher();
//StartCuttedDataWatcher();
}
public static HashSet<SharpTreeNode> SelectedNodes { get; private set; }
@ -325,7 +325,7 @@ namespace ICSharpCode.TreeView @@ -325,7 +325,7 @@ namespace ICSharpCode.TreeView
#endregion
#region Cut / Copy / Paste / Delete
/*
static List<SharpTreeNode> cuttedNodes = new List<SharpTreeNode>();
static IDataObject cuttedData;
static EventHandler requerySuggestedHandler; // for weak event
@ -419,40 +419,32 @@ namespace ICSharpCode.TreeView @@ -419,40 +419,32 @@ namespace ICSharpCode.TreeView
ClearCuttedData();
}
}
*/
internal bool InternalCanDelete()
{
return CanDelete(ActiveNodesArray);
}
internal void InternalDelete()
{
Delete(ActiveNodesArray);
}
public virtual bool CanDelete(SharpTreeNode[] nodes)
public virtual bool CanDelete()
{
return false;
}
public virtual void Delete(SharpTreeNode[] nodes)
public virtual void Delete()
{
throw new NotSupportedException(GetType().Name + " does not support deletion");
}
public virtual void DeleteCore(SharpTreeNode[] nodes)
public virtual void DeleteCore()
{
throw new NotSupportedException(GetType().Name + " does not support deletion");
}
public virtual bool CanCopy(SharpTreeNode[] nodes)
public virtual IDataObject Copy(SharpTreeNode[] nodes)
{
return false;
throw new NotSupportedException(GetType().Name + " does not support copy/paste or drag'n'drop");
}
public virtual IDataObject Copy(SharpTreeNode[] nodes)
/*
public virtual bool CanCopy(SharpTreeNode[] nodes)
{
throw new NotSupportedException(GetType().Name + " does not support copy/paste or drag'n'drop");
return false;
}
public virtual bool CanPaste(IDataObject data)
@ -465,7 +457,7 @@ namespace ICSharpCode.TreeView @@ -465,7 +457,7 @@ namespace ICSharpCode.TreeView
EnsureLazyChildren();
Drop(data, Children.Count, DropEffect.Copy);
}
*/
#endregion
#region Drag and Drop
@ -498,7 +490,8 @@ namespace ICSharpCode.TreeView @@ -498,7 +490,8 @@ namespace ICSharpCode.TreeView
Drop(e.Data, index, finalEffect);
if (finalEffect == DropEffect.Move) {
DeleteCore(ActiveNodesArray);
foreach (SharpTreeNode node in ActiveNodesArray)
node.DeleteCore();
}
}
@ -507,7 +500,7 @@ namespace ICSharpCode.TreeView @@ -507,7 +500,7 @@ namespace ICSharpCode.TreeView
var requestedEffect = GetDropEffect(e);
var result = CanDrop(e.Data, requestedEffect);
if (result == DropEffect.Move) {
if (!CanDelete(ActiveNodesArray)) {
if (!ActiveNodesArray.All(n => n.CanDelete())) {
return DropEffect.None;
}
}

70
SharpTreeView/SharpTreeView.cs

@ -35,6 +35,8 @@ namespace ICSharpCode.TreeView @@ -35,6 +35,8 @@ namespace ICSharpCode.TreeView
VirtualizingStackPanel.VirtualizationModeProperty.OverrideMetadata(typeof(SharpTreeView),
new FrameworkPropertyMetadata(VirtualizationMode.Recycling));
RegisterCommands();
}
public static ResourceKey DefaultItemContainerStyleKey { get; private set; }
@ -518,5 +520,73 @@ namespace ICSharpCode.TreeView @@ -518,5 +520,73 @@ namespace ICSharpCode.TreeView
}
#endregion
#region Cut / Copy / Paste / Delete Commands
static void RegisterCommands()
{
CommandManager.RegisterClassCommandBinding(typeof(SharpTreeView),
new CommandBinding(ApplicationCommands.Cut, HandleExecuted_Cut, HandleCanExecute_Cut));
CommandManager.RegisterClassCommandBinding(typeof(SharpTreeView),
new CommandBinding(ApplicationCommands.Copy, HandleExecuted_Copy, HandleCanExecute_Copy));
CommandManager.RegisterClassCommandBinding(typeof(SharpTreeView),
new CommandBinding(ApplicationCommands.Paste, HandleExecuted_Paste, HandleCanExecute_Paste));
CommandManager.RegisterClassCommandBinding(typeof(SharpTreeView),
new CommandBinding(ApplicationCommands.Delete, HandleExecuted_Delete, HandleCanExecute_Delete));
}
static void HandleExecuted_Cut(object sender, ExecutedRoutedEventArgs e)
{
}
static void HandleCanExecute_Cut(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = false;
}
static void HandleExecuted_Copy(object sender, ExecutedRoutedEventArgs e)
{
}
static void HandleCanExecute_Copy(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = false;
}
static void HandleExecuted_Paste(object sender, ExecutedRoutedEventArgs e)
{
}
static void HandleCanExecute_Paste(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = false;
}
static void HandleExecuted_Delete(object sender, ExecutedRoutedEventArgs e)
{
SharpTreeView treeView = (SharpTreeView)sender;
foreach (SharpTreeNode node in treeView.GetTopLevelSelection())
node.Delete();
}
static void HandleCanExecute_Delete(object sender, CanExecuteRoutedEventArgs e)
{
SharpTreeView treeView = (SharpTreeView)sender;
e.CanExecute = treeView.GetTopLevelSelection().All(node => node.CanDelete());
}
IEnumerable<SharpTreeNode> GetTopLevelSelection()
{
// TODO: return only top-level selection
return this.SelectedItems.OfType<SharpTreeNode>().ToList();
}
#endregion
}
}

61
SharpTreeView/SharpTreeViewItem.cs

@ -19,8 +19,6 @@ namespace ICSharpCode.TreeView @@ -19,8 +19,6 @@ namespace ICSharpCode.TreeView
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(SharpTreeViewItem),
new FrameworkPropertyMetadata(typeof(SharpTreeViewItem)));
RegisterCommands();
}
public SharpTreeNode Node
@ -136,64 +134,5 @@ namespace ICSharpCode.TreeView @@ -136,64 +134,5 @@ namespace ICSharpCode.TreeView
}
#endregion
#region Cut / Copy / Paste / Delete Commands
static void RegisterCommands()
{
CommandManager.RegisterClassCommandBinding(typeof(SharpTreeViewItem),
new CommandBinding(ApplicationCommands.Cut, HandleExecuted_Cut, HandleCanExecute_Cut));
CommandManager.RegisterClassCommandBinding(typeof(SharpTreeViewItem),
new CommandBinding(ApplicationCommands.Copy, HandleExecuted_Copy, HandleCanExecute_Copy));
CommandManager.RegisterClassCommandBinding(typeof(SharpTreeViewItem),
new CommandBinding(ApplicationCommands.Paste, HandleExecuted_Paste, HandleCanExecute_Paste));
CommandManager.RegisterClassCommandBinding(typeof(SharpTreeViewItem),
new CommandBinding(ApplicationCommands.Delete, HandleExecuted_Delete, HandleCanExecute_Delete));
}
static void HandleExecuted_Cut(object sender, ExecutedRoutedEventArgs e)
{
(sender as SharpTreeViewItem).Node.InternalCut();
}
static void HandleCanExecute_Cut(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = (sender as SharpTreeViewItem).Node.InternalCanCut();
}
static void HandleExecuted_Copy(object sender, ExecutedRoutedEventArgs e)
{
(sender as SharpTreeViewItem).Node.InternalCopy();
}
static void HandleCanExecute_Copy(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = (sender as SharpTreeViewItem).Node.InternalCanCopy();
}
static void HandleExecuted_Paste(object sender, ExecutedRoutedEventArgs e)
{
(sender as SharpTreeViewItem).Node.InternalPaste();
}
static void HandleCanExecute_Paste(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = (sender as SharpTreeViewItem).Node.InternalCanPaste();
}
static void HandleExecuted_Delete(object sender, ExecutedRoutedEventArgs e)
{
(sender as SharpTreeViewItem).Node.InternalDelete();
}
static void HandleCanExecute_Delete(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = (sender as SharpTreeViewItem).Node.InternalCanDelete();
}
#endregion
}
}

Loading…
Cancel
Save