]> Creatis software - bbtk.git/blob - kernel/src/ThirdParty/wx/treemultictrl/TreeMultiItemNode.cpp
Started the devel of a wx package browser
[bbtk.git] / kernel / src / ThirdParty / wx / treemultictrl / TreeMultiItemNode.cpp
1 //---------------------------------------------------------------------------\r
2 // $RCSfile: TreeMultiItemNode.cpp,v $\r
3 // $Source: /cvs/creatis/bbtk/kernel/src/ThirdParty/wx/treemultictrl/TreeMultiItemNode.cpp,v $\r
4 // $Revision: 1.1 $\r
5 // $Date: 2008/03/28 13:42:18 $\r
6 //---------------------------------------------------------------------------\r
7 // Author:      Jorgen Bodde\r
8 // Copyright:   (c) Jorgen Bodde\r
9 // License:     wxWidgets License
10 //---------------------------------------------------------------------------
11
12 #ifdef __GNUG__
13     #pragma implementation "TreeMultiItemNode.cpp"
14 #endif
15
16 /* for compilers that support precompilation
17    includes "wx/wx.h" */
18
19 #include "wx/wxprec.h"
20
21 #ifdef __BORLANDC__
22     #pragma hdrstop\r
23 #endif\r
24 \r
25 #include "wx/treemultictrl/TreeMultiItemNode.h"\r
26 \r
27 #include "wx/arrimpl.cpp"\r
28 WX_DEFINE_OBJARRAY(TreeMultiItemBaseArray);\r
29
30 /** TreeMultiItemNode
31   * This class is a container holder for multiple TreeMultiItemBase classes.
32   * Since both a TreeMultiItemNode and a TreeMultiItemWindow are a descendant
33   * from a TreeMultiItemBase class, it can hold multiple of these.
34   * In the case of a directory tree structure, it can hold multiple
35   * directories, and leafs (files).
36   */
37
38 // default constructor for container composite
39 TreeMultiItemNode::TreeMultiItemNode(TreeMultiItemNode *parent, const wxString &caption, const wxString &name)
40         : TreeMultiItemBase(parent)
41         , _caption(caption)
42         , _nodeExpanded(true)
43
44 {
45         _name = name;
46         Clear();
47 }
48
49 //------------------------------------------------------------
50
51 TreeMultiItemNode::~TreeMultiItemNode()
52 {
53     // delete all items on this level
54     Clear();
55 }
56
57 //------------------------------------------------------------
58
59 void TreeMultiItemNode::AddNode(TreeMultiItemBase *node)
60 {
61         if(node)
62                 _items.Add(node);\r
63 }\r
64 \r
65 void TreeMultiItemNode::InsertNode(TreeMultiItemBase* NodePtr, size_t Position)\r
66 {\r
67         if (NodePtr != NULL)\r
68                 this->_items.Insert(NodePtr,Position);\r
69 }\r
70 \r
71 //------------------------------------------------------------\r
72 \r
73 void TreeMultiItemNode::DeleteNode(TreeMultiItemBase *node)\r
74 {
75         // this is wrong. The RemoveAt and Remove should delete
76         // the object
77         if(node)
78         {
79                 _items.Detach(Index(node));
80                 delete node;
81         }
82
83 }
84
85 //------------------------------------------------------------
86
87 void TreeMultiItemNode::DeleteNode(int index)
88 {
89         // this is wrong. The RemoveAt and Remove should delete
90         // the object
91         if(index < (int)_items.Count() && index >= 0)
92                 _items.RemoveAt(index);
93 }
94
95 //------------------------------------------------------------
96
97 int TreeMultiItemNode::GetNodeCount() const
98 {
99         return _items.Count();
100 }
101
102 //------------------------------------------------------------
103
104 TreeMultiItemBase *TreeMultiItemNode::GetNode(int index) const
105 {
106         TreeMultiItemBase *value = 0;
107
108         if(index < (int)_items.Count() && index >= 0)
109                 value = &_items.Item(index);
110
111         return value;
112 }
113
114 //------------------------------------------------------------
115
116 TreeMultiItemBase *TreeMultiItemNode::RemoveNode(TreeMultiItemBase *node)
117 {
118         if(node)
119                 _items.Detach(_items.Index(*node));
120
121         return node;
122 }
123
124 //------------------------------------------------------------
125
126 TreeMultiItemBase * TreeMultiItemNode::RemoveNode(int index)
127 {
128         TreeMultiItemBase *value = 0;
129
130         if(index < (int)_items.Count() && index > 0)
131         {
132                 value = &_items.Item(index);
133                 _items.Detach(index);
134         }
135
136         return value;
137 }
138
139 //------------------------------------------------------------
140
141 int TreeMultiItemNode::Index(TreeMultiItemBase *node,  bool searchFromEnd) const
142 {
143         wxCHECK(node, -1);
144
145         return _items.Index(*node, searchFromEnd);
146 }
147
148 //------------------------------------------------------------
149
150 void  TreeMultiItemNode::Clear()
151 {
152         _items.Clear();
153 }
154
155 //------------------------------------------------------------
156
157 TreeMultiItemBase * TreeMultiItemNode::GetNodeNext(int &cookie) const
158 {
159         TreeMultiItemBase *value = 0;
160
161         if(cookie >= 0 && cookie < (int)_items.Count())
162         {
163                 value = &_items[cookie];
164                 cookie++;
165         }
166
167         return value;
168 }
169 \r
170 //------------------------------------------------------------\r
171 \r
172 TreeMultiItemBase* TreeMultiItemNode::First() const\r
173 {\r
174   if (this->_items.GetCount() > 0)\r
175     return &(this->_items[0]);\r
176   else\r
177     return NULL;\r
178 } /* TreeMultiItemNode::First() const */\r
179 \r
180 TreeMultiItemBase* TreeMultiItemNode::Last() const\r
181 {\r
182         if(this->_items.GetCount() > 0)\r
183           return &(this->_items.Last());\r
184         else\r
185           return NULL;\r
186 } /* TreeMultiItemNode::Last() const */\r
187 \r