}
SetupNode (node);
-
+#if NET_2_0
+ // UIA Framework Event: Collection Changed
+ if (tree_view != null)
+ tree_view.OnUIACollectionChanged (owner, new CollectionChangeEventArgs (CollectionChangeAction.Add, node));
+#endif
return res;
}
if (owner != null) {
tree_view = owner.TreeView;
if (tree_view != null) {
- tree_view.highlighted_node = null;
- tree_view.selected_node = null;
tree_view.UpdateBelow (owner);
tree_view.RecalculateVisibleOrder (owner);
tree_view.UpdateScrollBars (false);
public bool Contains (TreeNode node)
{
- return (Array.BinarySearch (nodes, node) > 0);
+ return Array.IndexOf (nodes, node, 0, count) != -1;
}
#if NET_2_0
public virtual bool ContainsKey (string key)
TreeNode removed = nodes [index];
TreeNode prev = GetPrevNode (removed);
TreeNode new_selected = null;
+ bool re_set_selected = false;
bool visible = removed.IsVisible;
TreeView tree_view = null;
tree_view.RecalculateVisibleOrder (prev);
if (removed == tree_view.SelectedNode) {
+ re_set_selected = true;
OpenTreeNodeEnumerator oe = new OpenTreeNodeEnumerator (removed);
if (oe.MoveNext () && oe.MoveNext ()) {
new_selected = oe.CurrentNode;
} else {
oe = new OpenTreeNodeEnumerator (removed);
oe.MovePrevious ();
- new_selected = oe.CurrentNode;
+ new_selected = oe.CurrentNode == removed ? null : oe.CurrentNode;
}
}
}
if (nodes.Length > OrigSize && nodes.Length > (count * 2))
Shrink ();
- if (tree_view != null && new_selected != null) {
+ if (tree_view != null && re_set_selected) {
tree_view.SelectedNode = new_selected;
}
tree_view.UpdateScrollBars (false);
tree_view.UpdateBelow (parent);
}
+#if NET_2_0
+ // UIA Framework Event: Collection Changed
+ if (tree_view != null)
+ tree_view.OnUIACollectionChanged (owner, new CollectionChangeEventArgs (CollectionChangeAction.Remove, removed));
+#endif
}
#if NET_2_0
tree_view = owner.TreeView;
if (tree_view != null) {
- TreeNode prev = GetPrevNode (node);
+ bool sorted = false;
+ if (tree_view.Sorted || tree_view.TreeViewNodeSorter != null) {
+ owner.Nodes.Sort (tree_view.TreeViewNodeSorter);
+ tree_view.sorted = sorted = true;
+ }
+
+ // We may need to invalidate this entire node collection if sorted.
+ TreeNode prev = sorted ? owner : GetPrevNode (node);
if (tree_view.IsHandleCreated && node.ArePreviousNodesExpanded)
tree_view.RecalculateVisibleOrder (prev);
}
if (owner != null && tree_view != null && (owner.IsExpanded || owner.IsRoot)) {
- // tree_view.UpdateBelow (owner);
- tree_view.UpdateNode (owner);
- tree_view.UpdateNode (node);
+ tree_view.UpdateBelow (owner);
} else if (owner != null && tree_view != null) {
tree_view.UpdateBelow (owner);
}