1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
4 using System
.Collections
.Generic
;
6 using System
.Collections
.ObjectModel
;
7 using System
.Windows
.Forms
;
10 namespace Aga
.Controls
.Tree
14 #region NodeCollection
16 private class NodeCollection
: Collection
<Node
>
20 public NodeCollection(Node owner
)
25 protected override void ClearItems()
27 while (this.Count
!= 0)
28 this.RemoveAt(this.Count
- 1);
31 protected override void InsertItem(int index
, Node item
)
34 throw new ArgumentNullException("item");
36 if (item
.Parent
!= _owner
)
38 if (item
.Parent
!= null)
39 item
.Parent
.Nodes
.Remove(item
);
40 item
._parent
= _owner
;
42 for (int i
= index
; i
< Count
; i
++)
44 base.InsertItem(index
, item
);
46 TreeModel model
= _owner
.FindModel();
48 model
.OnNodeInserted(_owner
, index
, item
);
52 protected override void RemoveItem(int index
)
54 Node item
= this[index
];
57 for (int i
= index
+ 1; i
< Count
; i
++)
59 base.RemoveItem(index
);
61 TreeModel model
= _owner
.FindModel();
63 model
.OnNodeRemoved(_owner
, index
, item
);
66 protected override void SetItem(int index
, Node item
)
69 throw new ArgumentNullException("item");
72 InsertItem(index
, item
);
80 private TreeModel _model
;
81 internal TreeModel Model
83 get { return _model; }
84 set { _model = value; }
87 private NodeCollection _nodes
;
88 public Collection
<Node
> Nodes
90 get { return _nodes; }
96 get { return _parent; }
102 _parent
.Nodes
.Remove(this);
105 value.Nodes
.Add(this);
110 private int _index
= -1;
119 public Node PreviousNode
125 return _parent
.Nodes
[index
- 1];
136 if (index
>= 0 && index
< _parent
.Nodes
.Count
- 1)
137 return _parent
.Nodes
[index
+ 1];
143 private string _text
;
144 public virtual string Text
146 get { return _text; }
157 private CheckState _checkState
;
158 public virtual CheckState CheckState
160 get { return _checkState; }
163 if (_checkState
!= value)
171 private Image _image
;
174 get { return _image; }
189 set { _tag = value; }
192 public bool IsChecked
196 return CheckState
!= CheckState
.Unchecked
;
201 CheckState
= CheckState
.Checked
;
203 CheckState
= CheckState
.Unchecked
;
207 public virtual bool IsLeaf
222 public Node(string text
)
225 _nodes
= new NodeCollection(this);
228 public override string ToString()
233 private TreeModel
FindModel()
238 if (node
.Model
!= null)
245 protected void NotifyModel()
247 TreeModel model
= FindModel();
248 if (model
!= null && Parent
!= null)
250 TreePath path
= model
.GetPath(Parent
);
253 TreeModelEventArgs args
= new TreeModelEventArgs(path
, new int[] { Index }
, new object[] { this }
);
254 model
.OnNodesChanged(args
);