/// <summary> /// Exception handling error mechanism in place. /// </summary> /// <param name="child"></param> private void AddChild(AManaged child) { OnPreAddChild(child); _children.Add(child); }
/// <summary> /// /// </summary> /// <param name="child"></param> private void RemoveChild(AManaged child) { OnPreRemoveChild(child); _children.Remove(child); }
protected virtual void OnPreRemoveChild(AManaged child) { }
protected virtual void OnPreAddChild(AManaged child) { }
// This needs to be a separate call so that the children can define precisely when to attach to parent. protected void Initialize(AManaged parent, string name) { // Keep this order, the _parent assigned first, then the _parent.AddChild. _parent = parent; _name = name; if (_parent != null) { _parent.AddChild(this); } }
/// <summary> /// When cloning, new item is not assigned to original item's parent. /// New created item is left to exist freely. /// </summary> /// <param name="managed"></param> protected void CloneTo(AManaged managed) { managed._name = _name; managed._closed = _closed; // foreach(AManaged child in this.Children) // { // AManaged newChild = (AManaged)child.Clone(); // newChild._parent = managed; // managed.AddChild(newChild); // } }
private void SynchronizeCollectionWithNode(TreeNode parentNode, int startingIndex, AManaged[] items) { for (int i = startingIndex; i < items.Length + startingIndex; i++) { AManaged item = items[i - startingIndex]; if (parentNode.Nodes.Count > i && parentNode.Nodes[i].Tag == item) {// Node with this index exists and is proper one. parentNode.Nodes[i].ImageIndex = item.ImageIndex; parentNode.Nodes[i].SelectedImageIndex = item.ImageIndex; parentNode.Nodes[i].Text = item.Name; } else {// No existing node or improper one. if (parentNode.Nodes.Count > i) {// This is invalid existing node, remove. parentNode.Nodes.RemoveAt(i); } TreeNode newNode = new TreeNode(item.Name, item.ImageIndex, item.ImageIndex); newNode.Tag = item; parentNode.Nodes.Add(newNode); } // Recursively synchronize the children. SynchronizeCollectionWithNode(parentNode.Nodes[i], 0, item.ChildrenArray); } for (int j = items.Length + startingIndex; j < parentNode.Nodes.Count; j++) {// Clean up the remaining nodes that are no longer valid. parentNode.Nodes.RemoveAt(j); } }