]>
Commit | Line | Data |
---|---|---|
4414cc1d JS |
1 | \section{\class{wxTreeLayout}}\label{wxtreelayout} |
2 | ||
babc9758 JS |
3 | wxTreeLayout provides layout of simple trees with one root node, drawn left-to-right, |
4 | with user-defined spacing between nodes. | |
5 | ||
6 | wxTreeLayout is an abstract class that must be subclassed. The programmer | |
7 | defines various member functions which will access whatever data structures | |
8 | are appropriate for the application, and wxTreeLayout uses these when laying | |
9 | out the tree. | |
4414cc1d JS |
10 | |
11 | Nodes are identified by long integer identifiers. The derived class | |
babc9758 JS |
12 | communicates the actual tree structure to wxTreeLayout by defining \helpref{wxTreeLayout::GetChildren}{wxtreelayoutgetchildren}\rtfsp |
13 | and \helpref{wxTreeLayout::GetNodeParent}{wxtreelayoutgetnodeparent} functions. | |
4414cc1d | 14 | |
babc9758 | 15 | The application should call \helpref{wxTreeLayout::DoLayout}{wxtreelayoutdolayout} to do the tree |
4414cc1d | 16 | layout. Depending on how the derived class has been defined, either |
94799627 | 17 | \rtfsp\helpref{wxTreeLayout::Draw}{wxtreelayoutdraw} must be called (for example by the OnPaint member |
4414cc1d JS |
18 | of a wxScrolledWindow) or the application-defined drawing code should be called |
19 | as normal. | |
20 | ||
21 | For example, if you have an image drawing system already defined, you | |
22 | may want wxTreeLayout to position existing node images in that system. So you | |
23 | just need a way for wxTreeLayout to set the node image positions according to | |
24 | the layout algorithm, and the rest will be done by your own image drawing | |
25 | system. | |
26 | ||
babc9758 JS |
27 | The algorithm is due to Gabriel Robins \cite{robins87}, a linear-time |
28 | algorithm originally implemented in LISP for AI applications. | |
29 | ||
30 | The original algorithm has been modified so that both X and Y planes | |
31 | are calculated simultaneously, increasing efficiency slightly. The basic | |
32 | code is only a page or so long. | |
33 | ||
34 | \helponly{Below is the example tree generated by the program test.cc. | |
35 | ||
36 | \begin{figure} | |
37 | $$\image{11cm;0cm}{treetst.ps}$$ | |
38 | \caption{Example tree}\label{exampletree} | |
39 | \end{figure} | |
40 | } | |
41 | ||
4414cc1d JS |
42 | \wxheading{Derived from} |
43 | ||
44 | wxObject | |
45 | ||
babc9758 JS |
46 | \wxheading{See also} |
47 | ||
94799627 | 48 | \helpref{wxTreeLayoutStored}{wxtreelayoutstored} |
babc9758 | 49 | |
4414cc1d JS |
50 | \latexignore{\rtfignore{\wxheading{Members}}} |
51 | ||
52 | \membersection{wxTreeLayout::wxTreeLayout} | |
53 | ||
54 | \func{}{wxTreeLayout}{\void} | |
55 | ||
56 | Constructor. | |
57 | ||
babc9758 | 58 | \membersection{wxTreeLayout::ActivateNode}\label{wxtreelayoutactivatenode} |
4414cc1d JS |
59 | |
60 | \func{void}{ActivateNode}{\param{long}{ id}, \param{bool }{active}} | |
61 | ||
62 | Define this so wxTreeLayout can turn nodes on and off for drawing purposes | |
94799627 | 63 | (not all nodes may be connected in the tree). See also \helpref{wxTreeLayout::NodeActive}{wxtreelayoutnodeactive}. |
4414cc1d JS |
64 | |
65 | \membersection{wxTreeLayout::CalcLayout} | |
66 | ||
67 | \func{void}{CalcLayout}{\param{long}{ id}, \param{int}{ level}} | |
68 | ||
69 | Private function for laying out a branch. | |
70 | ||
babc9758 | 71 | \membersection{wxTreeLayout::DoLayout}\label{wxtreelayoutdolayout} |
4414cc1d JS |
72 | |
73 | \func{void}{DoLayout}{\param{wxDC\&}{ dc}, \param{long}{ topNode = -1}} | |
74 | ||
75 | Calculates the layout for the tree, optionally specifying the top node. | |
76 | ||
babc9758 | 77 | \membersection{wxTreeLayout::Draw}\label{wxtreelayoutdraw} |
4414cc1d JS |
78 | |
79 | \func{void}{Draw}{\param{wxDC\&}{ dc}} | |
80 | ||
81 | Call this to let wxTreeLayout draw the tree itself, once the layout has been | |
94799627 | 82 | calculated with \helpref{wxTreeLayout::DoLayout}{wxtreelayoutdolayout}. |
4414cc1d JS |
83 | |
84 | \membersection{wxTreeLayout::DrawBranch} | |
85 | ||
86 | \func{void}{DrawBranch}{\param{long}{ from}, \param{long}{ to}, \param{wxDC\&}{ dc}} | |
87 | ||
88 | Defined by wxTreeLayout to draw an arc between two nodes. | |
89 | ||
90 | \membersection{wxTreeLayout::DrawBranches} | |
91 | ||
92 | \func{void}{DrawBranches}{\param{wxDC\&}{ dc}} | |
93 | ||
94 | Defined by wxTreeLayout to draw the arcs between nodes. | |
95 | ||
96 | \membersection{wxTreeLayout::DrawNode} | |
97 | ||
98 | \func{void}{DrawNode}{\param{long}{ id}, \param{wxDC\&}{ dc}} | |
99 | ||
100 | Defined by wxTreeLayout to draw a node. | |
101 | ||
102 | \membersection{wxTreeLayout::DrawNodes} | |
103 | ||
104 | \func{void}{DrawNodes}{\param{wxDC\&}{ dc}} | |
105 | ||
106 | Defined by wxTreeLayout to draw the nodes. | |
107 | ||
babc9758 | 108 | \membersection{wxTreeLayout::GetChildren}\label{wxtreelayoutgetchildren} |
4414cc1d JS |
109 | |
110 | \func{void}{GetChildren}{\param{long}{ id}, \param{wxList \&}{list}} | |
111 | ||
112 | Must be defined to return the children of node {\it id} in the given list | |
113 | of integers. | |
114 | ||
babc9758 | 115 | \membersection{wxTreeLayout::GetNextNode}\label{wxtreelayoutgetnextnode} |
4414cc1d JS |
116 | |
117 | \func{long}{GetNextNode}{\param{long}{ id}} | |
118 | ||
119 | Must be defined to return the next node after {\it id}, so that wxTreeLayout can | |
120 | iterate through all relevant nodes. The ordering is not important. | |
121 | The function should return -1 if there are no more nodes. | |
122 | ||
123 | \membersection{wxTreeLayout::GetNodeName} | |
124 | ||
125 | \constfunc{wxString}{GetNodeName}{\param{long}{ id}} | |
126 | ||
127 | May optionally be defined to get a node's name (for example if leaving | |
128 | the drawing to wxTreeLayout). | |
129 | ||
130 | \membersection{wxTreeLayout::GetNodeSize} | |
131 | ||
132 | \constfunc{void}{GetNodeSize}{\param{long}{ id}, \param{long*}{ x}, \param{long*}{ y}} | |
133 | ||
134 | Can be defined to indicate a node's size, or left to wxTreeLayout to use the | |
135 | name as an indication of size. | |
136 | ||
babc9758 | 137 | \membersection{wxTreeLayout::GetNodeParent}\label{wxtreelayoutgetnodeparent} |
4414cc1d JS |
138 | |
139 | \constfunc{long}{GetNodeParent}{\param{long}{ id}} | |
140 | ||
141 | Must be defined to return the parent node of {\it id}. | |
142 | The function should return -1 if there is no parent. | |
143 | ||
144 | \membersection{wxTreeLayout::GetNodeX} | |
145 | ||
146 | \constfunc{long}{GetNodeX}{\param{long}{ id}} | |
147 | ||
148 | Must be defined to return the current X position of the node. Note that | |
149 | coordinates are assumed to be at the top-left of the node so some conversion | |
150 | may be necessary for your application. | |
151 | ||
152 | \membersection{wxTreeLayout::GetNodeY} | |
153 | ||
154 | \constfunc{long}{GetNodeY}{\param{long}{ id}} | |
155 | ||
156 | Must be defined to return the current Y position of the node. Note that | |
157 | coordinates are assumed to be at the top-left of the node so some conversion | |
158 | may be necessary for your application. | |
159 | ||
160 | \membersection{wxTreeLayout::GetLeftMargin} | |
161 | ||
162 | \constfunc{long}{GetLeftMargin}{\void} | |
163 | ||
94799627 | 164 | Gets the left margin set with \helpref{wxTreeLayout::SetMargins}{wxtreelayoutsetmargins}. |
4414cc1d JS |
165 | |
166 | \membersection{wxTreeLayout::GetOrientation} | |
167 | ||
168 | \constfunc{bool}{GetOrientation}{\void} | |
169 | ||
170 | Gets the orientation: TRUE means top-to-bottom, FALSE means left-to-right (the default). | |
171 | ||
172 | \membersection{wxTreeLayout::GetTopMargin} | |
173 | ||
174 | \constfunc{long}{GetTopMargin}{\void} | |
175 | ||
94799627 | 176 | Gets the top margin set with \helpref{wxTreeLayout::SetMargins}{wxtreelayoutsetmargins}. |
4414cc1d JS |
177 | |
178 | \membersection{wxTreeLayout::GetTopNode} | |
179 | ||
180 | \constfunc{long}{GetTopNode}{\void} | |
181 | ||
182 | wxTreeLayout calls this to get the top of the tree. Don't redefine this; call | |
94799627 | 183 | \rtfsp\helpref{wxTreeLayout::SetTopNode}{wxtreelayoutsettopnode} instead before calling \helpref{wxTreeLayout::DoLayout}{wxtreelayoutdolayout}. |
4414cc1d JS |
184 | |
185 | \membersection{wxTreeLayout::GetXSpacing} | |
186 | ||
187 | \constfunc{long}{GetXSpacing}{\void} | |
188 | ||
189 | Gets the horizontal spacing between nodes. | |
190 | ||
191 | \membersection{wxTreeLayout::GetYSpacing} | |
192 | ||
193 | \constfunc{long}{GetYSpacing}{\void} | |
194 | ||
195 | Gets the vertical spacing between nodes. | |
196 | ||
197 | \membersection{wxTreeLayout::Initialize} | |
198 | ||
199 | \func{void}{Initialize}{\void} | |
200 | ||
201 | Initializes wxTreeLayout. Call from application or overridden {\bf Initialize} | |
202 | or constructor. | |
203 | ||
babc9758 | 204 | \membersection{wxTreeLayout::NodeActive}\label{wxtreelayoutnodeactive} |
4414cc1d JS |
205 | |
206 | \func{bool}{NodeActive}{\param{long}{ id}} | |
207 | ||
208 | Define this so wxTreeLayout can know which nodes are to be drawn (not all | |
94799627 | 209 | nodes may be connected in the tree). See also \helpref{wxTreeLayout::ActivateNode}{wxtreelayoutactivatenode}. |
4414cc1d JS |
210 | |
211 | \membersection{wxTreeLayout::SetNodeName} | |
212 | ||
213 | \func{void}{SetNodeName}{\param{long}{ id}, \param{const wxString\& }{ name}} | |
214 | ||
215 | May optionally be defined to set a node's name. | |
216 | ||
217 | \membersection{wxTreeLayout::SetNodeX} | |
218 | ||
219 | \func{void}{SetNodeX}{\param{long}{ id}, \param{long}{ x}} | |
220 | ||
221 | Must be defined to set the current X position of the node. Note that | |
222 | coordinates are assumed to be at the top-left of the node so some conversion | |
223 | may be necessary for your application. | |
224 | ||
225 | \membersection{wxTreeLayout::SetNodeY} | |
226 | ||
227 | \func{void}{SetNodeY}{\param{long}{ id}, \param{long}{ y}} | |
228 | ||
229 | Must be defined to set the current Y position of the node. Note that | |
230 | coordinates are assumed to be at the top-left of the node so some conversion | |
231 | may be necessary for your application. | |
232 | ||
233 | \membersection{wxTreeLayout::SetOrientation} | |
234 | ||
235 | \func{void}{SetOrientation}{\param{bool}{ orientation}} | |
236 | ||
237 | Sets the tree orientation: TRUE means top-to-bottom, FALSE means left-to-right (the default). | |
238 | ||
babc9758 | 239 | \membersection{wxTreeLayout::SetTopNode}\label{wxtreelayoutsettopnode} |
4414cc1d JS |
240 | |
241 | \func{void}{SetTopNode}{\param{long}{ id}} | |
242 | ||
243 | Call this to identify the top of the tree to wxTreeLayout. | |
244 | ||
245 | \membersection{wxTreeLayout::SetSpacing} | |
246 | ||
247 | \func{void}{SetSpacing}{\param{long}{ x}, \param{long}{ y}} | |
248 | ||
249 | Sets the horizontal and vertical spacing between nodes in the tree. | |
250 | ||
babc9758 | 251 | \membersection{wxTreeLayout::SetMargins}\label{wxtreelayoutsetmargins} |
4414cc1d JS |
252 | |
253 | \func{void}{SetMargins}{\param{long}{ x}, \param{long}{ y}} | |
254 | ||
255 | Sets the left and top margins of the whole tree. | |
256 | ||
94799627 | 257 | \section{\class{wxTreeLayoutStored}}\label{wxtreelayoutstored} |
4414cc1d | 258 | |
94799627 | 259 | wxTreeLayoutStored provides storage for node labels, position and client data. It also provides hit-testing |
4414cc1d JS |
260 | (which node a mouse event occurred on). It is usually a more convenient class to use than wxTreeLayout. |
261 | ||
262 | \wxheading{Derived from} | |
263 | ||
babc9758 JS |
264 | \helpref{wxTreeLayout}{wxtreelayout}\\ |
265 | \helpref{wxObject}{wxobject} | |
266 | ||
267 | \wxheading{See also} | |
268 | ||
94799627 | 269 | \helpref{wxTreeLayout}{wxtreelayout} |
4414cc1d JS |
270 | |
271 | \latexignore{\rtfignore{\wxheading{Members}}} | |
272 | ||
94799627 | 273 | \membersection{wxTreeLayoutStored::wxTreeLayoutStored} |
4414cc1d | 274 | |
94799627 | 275 | \func{}{wxTreeLayoutStored}{\param{int }{noNodes = 200}} |
4414cc1d JS |
276 | |
277 | Constructor. Specify the maximum number of nodes to be allocated. | |
278 | ||
94799627 | 279 | \membersection{wxTreeLayoutStored::AddChild}\label{wxtreelayoutstoredaddchild} |
4414cc1d JS |
280 | |
281 | \func{long}{AddChild}{\param{const wxString\&}{ name}, \param{const wxString\&}{ parent = ""}} | |
282 | ||
283 | Adds a child with a given parent, returning the node id. | |
284 | ||
94799627 | 285 | \membersection{wxTreeLayoutStored::GetClientData}\label{wxtreelayoutstoredgetclientdata} |
4414cc1d JS |
286 | |
287 | \constfunc{long}{GetClientData}{\param{long}{ id}} | |
288 | ||
289 | Gets the client data for the given node. | |
290 | ||
94799627 | 291 | \membersection{wxTreeLayoutStored::GetNode}\label{wxtreelayoutstoredgetnode} |
4414cc1d JS |
292 | |
293 | \constfunc{wxStoredNode*}{GetNode}{\param{long}{ id}} | |
294 | ||
295 | Returns the wxStoredNode object for the given node id. | |
296 | ||
94799627 | 297 | \membersection{wxTreeLayoutStored::GetNodeCount}\label{wxtreelayoutstoredgetnodecount} |
4414cc1d JS |
298 | |
299 | \constfunc{int}{GetNodeCount}{\void} | |
300 | ||
301 | Returns the current number of nodes. | |
302 | ||
94799627 | 303 | \membersection{wxTreeLayoutStored::GetNumNodes}\label{wxtreelayoutstoredgetnumnodes} |
4414cc1d JS |
304 | |
305 | \constfunc{int}{GetNumNodes}{\void} | |
306 | ||
307 | Returns the maximum number of nodes. | |
308 | ||
94799627 | 309 | \membersection{wxTreeLayoutStored::HitTest}\label{wxtreelayoutstoredhittest} |
4414cc1d JS |
310 | |
311 | \func{wxString}{HitTest}{\param{wxMouseEvent\&}{ event}, \param{wxDC\& }{dc}} | |
312 | ||
313 | Returns a string with the node name corresponding to the position of the mouse event, or the empty string if no node | |
314 | was detected. | |
315 | ||
94799627 | 316 | \membersection{wxTreeLayoutStored::NameToId}\label{wxtreelayoutstorednametoid} |
4414cc1d JS |
317 | |
318 | \func{long}{NameToId}{\param{const wxString\&}{ name}} | |
319 | ||
320 | Returns the id for the given node name, or -1 if there was no such node. | |
321 | ||
94799627 | 322 | \membersection{wxTreeLayoutStored::SetClientData}\label{wxtreelayoutstoredsetclientdata} |
4414cc1d JS |
323 | |
324 | \func{void}{SetClientData}{\param{long}{ id}, \param{long}{ clientData}} | |
325 | ||
326 | Sets client data for the given node. | |
327 |