using System; using System.ComponentModel.Design; using System.Collections.ObjectModel; namespace Aga.Controls.Tree.NodeControls { public class NodeControlsCollection : Collection { private TreeViewAdv _tree; public NodeControlsCollection(TreeViewAdv tree) { _tree = tree; } protected override void ClearItems() { _tree.BeginUpdate(); try { while (this.Count != 0) this.RemoveAt(this.Count - 1); } finally { _tree.EndUpdate(); } } protected override void InsertItem(int index, NodeControl item) { if (item == null) throw new ArgumentNullException("item"); if (item.Parent == this._tree) return; if (item.Parent != null) { item.Parent.NodeControls.Remove(item); } base.InsertItem(index, item); item.AssignParent(this._tree); this._tree.FullUpdate(); } protected override void RemoveItem(int index) { NodeControl value = this[index]; value.AssignParent(null); base.RemoveItem(index); _tree.FullUpdate(); } protected override void SetItem(int index, NodeControl item) { if (item == null) throw new ArgumentNullException("item"); _tree.BeginUpdate(); try { RemoveAt(index); InsertItem(index, item); } finally { _tree.EndUpdate(); } } } internal class NodeControlCollectionEditor : CollectionEditor { private Type[] _types; public NodeControlCollectionEditor(Type type) : base(type) { _types = new[] { typeof(NodeTextBox), typeof(NodeIntegerTextBox), typeof(NodeIcon), }; } protected override Type[] CreateNewItemTypes() { return _types; } } }