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