]>
Commit | Line | Data |
---|---|---|
15b6757b FM |
1 | ///////////////////////////////////////////////////////////////////////////// |
2 | // Name: treectrl | |
3 | // Purpose: topic overview | |
4 | // Author: wxWidgets team | |
5 | // RCS-ID: $Id$ | |
6 | // Licence: wxWindows license | |
7 | ///////////////////////////////////////////////////////////////////////////// | |
8 | ||
9 | /*! | |
36c9828f | 10 | |
15b6757b | 11 | @page treectrl_overview wxTreeCtrl overview |
36c9828f | 12 | |
15b6757b FM |
13 | Classes: #wxTreeCtrl, #wxImageList |
14 | The tree control displays its items in a tree like structure. Each item has its | |
15 | own (optional) icon and a label. An item may be either collapsed (meaning that | |
16 | its children are not visible) or expanded (meaning that its children are | |
17 | shown). Each item in the tree is identified by its @e itemId which is of | |
18 | opaque data type @e wxTreeItemId. You can test whether an item is valid | |
19 | by calling wxTreeItemId::IsOk. | |
36c9828f FM |
20 | The items text and image may be retrieved and changed with |
21 | #GetItemText/#SetItemText | |
22 | and | |
15b6757b FM |
23 | #GetItemImage/#SetItemImage. |
24 | In fact, an item may even have two images associated with it: the normal one | |
36c9828f FM |
25 | and another one for selected state which is set/retrieved with |
26 | #SetItemSelectedImage/#GetItemSelectedImage | |
15b6757b FM |
27 | functions, but this functionality might be unavailable on some platforms. |
28 | Tree items have several attributes: an item may be selected or not, visible or | |
29 | not, bold or not. It may also be expanded or collapsed. All these attributes | |
36c9828f FM |
30 | may be retrieved with the corresponding functions: |
31 | #IsSelected, | |
32 | #IsVisible, #IsBold | |
15b6757b | 33 | and #IsExpanded. Only one item at a time may be |
36c9828f | 34 | selected, selecting another one (with |
15b6757b FM |
35 | #SelectItem) automatically unselects the |
36 | previously selected one. | |
37 | In addition to its icon and label, a user-specific data structure may be associated | |
38 | with all tree items. If you wish to do it, you should derive a class from @e wxTreeItemData which is a very simple class having only one function @e GetId() which returns the id of the item this data is associated with. This | |
39 | data will be freed by the control itself when the associated item is deleted | |
40 | (all items are deleted when the control is destroyed), so you shouldn't delete | |
36c9828f | 41 | it yourself (if you do it, you should call |
15b6757b | 42 | #SetItemData(@NULL) to prevent the tree from |
36c9828f | 43 | deleting the pointer second time). The associated data may be retrieved with |
15b6757b FM |
44 | #GetItemData() function. |
45 | Working with trees is relatively straightforward if all the items are added to | |
46 | the tree at the moment of its creation. However, for large trees it may be | |
47 | very inefficient. To improve the performance you may want to delay adding the | |
48 | items to the tree until the branch containing the items is expanded: so, in the | |
36c9828f | 49 | beginning, only the root item is created (with |
15b6757b FM |
50 | #AddRoot). Other items are added when |
51 | EVT_TREE_ITEM_EXPANDING event is received: then all items lying immediately | |
52 | under the item being expanded should be added, but, of course, only when this | |
53 | event is received for the first time for this item - otherwise, the items would | |
54 | be added twice if the user expands/collapses/re-expands the branch. | |
55 | The tree control provides functions for enumerating its items. There are 3 | |
56 | groups of enumeration functions: for the children of a given item, for the | |
57 | sibling of the given item and for the visible items (those which are currently | |
58 | shown to the user: an item may be invisible either because its branch is | |
59 | collapsed or because it is scrolled out of view). Child enumeration functions | |
60 | require the caller to give them a @e cookie parameter: it is a number which | |
61 | is opaque to the caller but is used by the tree control itself to allow | |
62 | multiple enumerations to run simultaneously (this is explicitly allowed). The | |
36c9828f FM |
63 | only thing to remember is that the @e cookie passed to |
64 | #GetFirstChild and to | |
15b6757b FM |
65 | #GetNextChild should be the same variable (and |
66 | that nothing should be done with it by the user code). | |
36c9828f | 67 | Among other features of the tree control are: item sorting with |
15b6757b FM |
68 | #SortChildren which uses the user-defined comparison |
69 | function #OnCompareItems (by default the | |
70 | comparison is the alphabetic comparison of tree labels), hit testing | |
71 | (determining to which portion of the control the given point belongs, useful | |
36c9828f | 72 | for implementing drag-and-drop in the tree) with |
15b6757b FM |
73 | #HitTest and editing of the tree item labels in |
74 | place (see #EditLabel). | |
75 | Finally, the tree control has a keyboard interface: the cursor navigation (arrow) keys | |
76 | may be used to change the current selection. HOME and END are used to go to | |
77 | the first/last sibling of the current item. '+', '-' and '*' expand, collapse | |
78 | and toggle the current branch. Note, however, that DEL and INS keys do | |
79 | nothing by default, but it is common to associate them with deleting an item from | |
80 | a tree and inserting a new one into it. | |
36c9828f | 81 | |
15b6757b | 82 | */ |
36c9828f FM |
83 | |
84 |