Browse Source

SharpTreeView: change SelectedNode/ActiveNodes from List to HashSet (fixes performance issue when selecting lots of nodes)

pull/1/head
Daniel Grunwald 15 years ago
parent
commit
0a6a267ad3
  1. 8
      SharpTreeView/SharpTreeNode.cs
  2. 17
      SharpTreeView/SharpTreeView.cs

8
SharpTreeView/SharpTreeNode.cs

@ -20,13 +20,13 @@ namespace ICSharpCode.TreeView
static SharpTreeNode() static SharpTreeNode()
{ {
SelectedNodes = new List<SharpTreeNode>(); SelectedNodes = new HashSet<SharpTreeNode>();
ActiveNodes = new List<SharpTreeNode>(); ActiveNodes = new HashSet<SharpTreeNode>();
StartCuttedDataWatcher(); StartCuttedDataWatcher();
} }
public static List<SharpTreeNode> SelectedNodes { get; private set; } public static HashSet<SharpTreeNode> SelectedNodes { get; private set; }
public static List<SharpTreeNode> ActiveNodes { get; private set; } public static HashSet<SharpTreeNode> ActiveNodes { get; private set; }
static SharpTreeNode[] ActiveNodesArray static SharpTreeNode[] ActiveNodesArray
{ {

17
SharpTreeView/SharpTreeView.cs

@ -166,7 +166,7 @@ namespace ICSharpCode.TreeView
SharpTreeNode.SelectedNodes.Remove(node); SharpTreeNode.SelectedNodes.Remove(node);
} }
foreach (SharpTreeNode node in e.AddedItems) { foreach (SharpTreeNode node in e.AddedItems) {
SharpTreeNode.SelectedNodes.AddOnce(node); SharpTreeNode.SelectedNodes.Add(node);
} }
if (IsKeyboardFocusWithin) { if (IsKeyboardFocusWithin) {
@ -174,9 +174,8 @@ namespace ICSharpCode.TreeView
SharpTreeNode.ActiveNodes.Remove(node); SharpTreeNode.ActiveNodes.Remove(node);
} }
foreach (SharpTreeNode node in e.AddedItems) { foreach (SharpTreeNode node in e.AddedItems) {
SharpTreeNode.ActiveNodes.AddOnce(node); SharpTreeNode.ActiveNodes.Add(node);
} }
SortActiveNodes();
} }
base.OnSelectionChanged(e); base.OnSelectionChanged(e);
} }
@ -184,9 +183,8 @@ namespace ICSharpCode.TreeView
protected override void OnPreviewGotKeyboardFocus(KeyboardFocusChangedEventArgs e) protected override void OnPreviewGotKeyboardFocus(KeyboardFocusChangedEventArgs e)
{ {
foreach (SharpTreeNode node in SelectedItems) { foreach (SharpTreeNode node in SelectedItems) {
SharpTreeNode.ActiveNodes.AddOnce(node); SharpTreeNode.ActiveNodes.Add(node);
} }
SortActiveNodes();
} }
protected override void OnPreviewLostKeyboardFocus(KeyboardFocusChangedEventArgs e) protected override void OnPreviewLostKeyboardFocus(KeyboardFocusChangedEventArgs e)
@ -195,15 +193,6 @@ namespace ICSharpCode.TreeView
SharpTreeNode.ActiveNodes.Remove(node); SharpTreeNode.ActiveNodes.Remove(node);
} }
} }
void SortActiveNodes()
{
SharpTreeNode.ActiveNodes.Sort(delegate(SharpTreeNode n1, SharpTreeNode n2) {
var index1 = Items.IndexOf(n1);
var index2 = Items.IndexOf(n2);
return index1.CompareTo(index2);
});
}
#endregion #endregion

Loading…
Cancel
Save