Browse Source

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

pull/1/head
Daniel Grunwald 14 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 @@ -20,13 +20,13 @@ namespace ICSharpCode.TreeView
static SharpTreeNode()
{
SelectedNodes = new List<SharpTreeNode>();
ActiveNodes = new List<SharpTreeNode>();
SelectedNodes = new HashSet<SharpTreeNode>();
ActiveNodes = new HashSet<SharpTreeNode>();
StartCuttedDataWatcher();
}
public static List<SharpTreeNode> SelectedNodes { get; private set; }
public static List<SharpTreeNode> ActiveNodes { get; private set; }
public static HashSet<SharpTreeNode> SelectedNodes { get; private set; }
public static HashSet<SharpTreeNode> ActiveNodes { get; private set; }
static SharpTreeNode[] ActiveNodesArray
{

17
SharpTreeView/SharpTreeView.cs

@ -166,7 +166,7 @@ namespace ICSharpCode.TreeView @@ -166,7 +166,7 @@ namespace ICSharpCode.TreeView
SharpTreeNode.SelectedNodes.Remove(node);
}
foreach (SharpTreeNode node in e.AddedItems) {
SharpTreeNode.SelectedNodes.AddOnce(node);
SharpTreeNode.SelectedNodes.Add(node);
}
if (IsKeyboardFocusWithin) {
@ -174,9 +174,8 @@ namespace ICSharpCode.TreeView @@ -174,9 +174,8 @@ namespace ICSharpCode.TreeView
SharpTreeNode.ActiveNodes.Remove(node);
}
foreach (SharpTreeNode node in e.AddedItems) {
SharpTreeNode.ActiveNodes.AddOnce(node);
SharpTreeNode.ActiveNodes.Add(node);
}
SortActiveNodes();
}
base.OnSelectionChanged(e);
}
@ -184,9 +183,8 @@ namespace ICSharpCode.TreeView @@ -184,9 +183,8 @@ namespace ICSharpCode.TreeView
protected override void OnPreviewGotKeyboardFocus(KeyboardFocusChangedEventArgs e)
{
foreach (SharpTreeNode node in SelectedItems) {
SharpTreeNode.ActiveNodes.AddOnce(node);
SharpTreeNode.ActiveNodes.Add(node);
}
SortActiveNodes();
}
protected override void OnPreviewLostKeyboardFocus(KeyboardFocusChangedEventArgs e)
@ -195,15 +193,6 @@ namespace ICSharpCode.TreeView @@ -195,15 +193,6 @@ namespace ICSharpCode.TreeView
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

Loading…
Cancel
Save