\helpref{wxEvtHandler}{wxevthandler}\\
\helpref{wxObject}{wxobject}
+\wxheading{Include files}
+
+<wx/treectrl.h>
+
\wxheading{Window styles}
\twocolwidtha{5cm}
\begin{twocollist}\itemsep=0pt
\twocolitem{\windowstyle{wxTR\_HAS\_BUTTONS}}{Use this style to show + and - buttons to the
-left of parent items.}
+left of parent items. Win32 only. }
+\twocolitem{\windowstyle{wxTR\_NO\_LINES}}{Use this style to hide vertical lines.
+Win32 only. }
+\twocolitem{\windowstyle{wxTR\_LINES\_AT\_ROOT}}{Use this style to show lines at the
+tree root. Win32 only.}
\twocolitem{\windowstyle{wxTR\_EDIT\_LABELS}}{Use this style if you wish the user to be
able to edit labels in the tree control.}
+\twocolitem{\windowstyle{wxTR\_MULTIPLE}}{Use this style to allow the user to
+select more than one item in the control - by default, only one item may be
+selected.}
\end{twocollist}
See also \helpref{window styles overview}{windowstyles}.
\begin{twocollist}\itemsep=0pt
\twocolitem{{\bf EVT\_TREE\_BEGIN\_DRAG(id, func)}}{Begin dragging with the left mouse button.}
\twocolitem{{\bf EVT\_TREE\_BEGIN\_RDRAG(id, func)}}{Begin dragging with the right mouse button.}
-\twocolitem{{\bf EVT\_TREE\_BEGIN\_LABEL\_EDIT(id, func)}}{Begin editing a label.}
-\twocolitem{{\bf EVT\_TREE\_END\_LABEL\_EDIT(id, func)}}{Finish editing a label.}
+\twocolitem{{\bf EVT\_TREE\_BEGIN\_LABEL\_EDIT(id, func)}}{Begin editing a label. This can be prevented by calling \helpref{Veto()}{wxnotifyeventveto}.}
+\twocolitem{{\bf EVT\_TREE\_END\_LABEL\_EDIT(id, func)}}{Finish editing a label. This can be prevented by calling \helpref{Veto()}{wxnotifyeventveto}.}
\twocolitem{{\bf EVT\_TREE\_DELETE\_ITEM(id, func)}}{Delete an item.}
\twocolitem{{\bf EVT\_TREE\_GET\_INFO(id, func)}}{Request information from the application.}
\twocolitem{{\bf EVT\_TREE\_SET\_INFO(id, func)}}{Information is being supplied.}
+\twocolitem{{\bf EVT\_TREE\_ITEM\_ACTIVATED(id, func)}}{The item has been activated, i.e. chosen by double clicking it with mouse or from keyboard}
+\twocolitem{{\bf EVT\_TREE\_ITEM\_COLLAPSED(id, func)}}{Parent has been collapsed.}
+\twocolitem{{\bf EVT\_TREE\_ITEM\_COLLAPSING(id, func)}}{Parent is being collapsed. This can be prevented by calling \helpref{Veto()}{wxnotifyeventveto}.}
\twocolitem{{\bf EVT\_TREE\_ITEM\_EXPANDED(id, func)}}{Parent has been expanded.}
-\twocolitem{{\bf EVT\_TREE\_ITEM\_EXPANDING(id, func)}}{Parent is being expanded.}
+\twocolitem{{\bf EVT\_TREE\_ITEM\_EXPANDING(id, func)}}{Parent is being expanded. This can be prevented by calling \helpref{Veto()}{wxnotifyeventveto}.}
\twocolitem{{\bf EVT\_TREE\_SEL\_CHANGED(id, func)}}{Selection has changed.}
-\twocolitem{{\bf EVT\_TREE\_SEL\_CHANGING(id, func)}}{Selection is changing.}
+\twocolitem{{\bf EVT\_TREE\_SEL\_CHANGING(id, func)}}{Selection is changing. This can be prevented by calling \helpref{Veto()}{wxnotifyeventveto}.}
\twocolitem{{\bf EVT\_TREE\_KEY\_DOWN(id, func)}}{A key has been pressed.}
\end{twocollist}%
\helpref{wxTreeItemData}{wxtreeitemdata}, \helpref{wxTreeCtrl overview}{wxtreectrloverview}, \helpref{wxListBox}{wxlistbox}, \helpref{wxListCtrl}{wxlistctrl},\rtfsp
\helpref{wxImageList}{wximagelist}, \helpref{wxTreeEvent}{wxtreeevent}
+\wxheading{Win32 notes}
+
+wxTreeCtrl class uses the standard common treeview control under Win32
+implemented in the system library {\tt comctl32.dll}. Some versions of this
+library are known to have bugs with handling the tree control colours: the
+usual symptom is that the expanded items leave black (or otherwise incorrectly
+coloured) background behind them, especially for the controls using non
+default background colour. The recommended solution is to upgrade the {\tt comctl32.dll}
+to a newer version: see
+\urlref{http://www.microsoft.com/msdownload/ieplatform/ie/comctrlx86.asp}{http://www.microsoft.com/msdownload/ieplatform/ie/comctrlx86.asp}.
+
\latexignore{\rtfignore{\wxheading{Members}}}
\membersection{wxTreeCtrl::wxTreeCtrl}\label{wxtreectrlconstr}
\membersection{wxTreeCtrl::EditLabel}\label{wxtreectrleditlabel}
-\func{wxTextCtrl*}{EditLabel}{\param{const wxTreeItemId\&}{ item}, \param{wxClassInfo*}{ textControlClass = CLASSINFO(wxTextCtrl)}}
-
-Starts editing the label of the given item, returning the text control that the tree control uses for editing.
+\func{void}{EditLabel}{\param{const wxTreeItemId\&}{ item}}
-Pass another {\it textControlClass} if a derived class is required. It usually will be, in order for
-the application to detect when editing has finished and to call \helpref{wxTreeCtrl::EndEditLabel}{wxtreectrlendeditlabel}.
+Starts editing the label of the given item. This function generates a
+EVT\_TREE\_BEGIN\_LABEL\_EDIT event which can be vetoed so that no
+text control will appear for in-place editing.
-Do not delete the text control yourself.
-
-This function is currently supported under Windows only.
+If the user changed the label (i.e. s/he does not press ESC or leave
+the text control without changes, a EVT\_TREE\_END\_LABEL\_EDIT event
+will be sent which can be vetoed as well.
\wxheading{See also}
-\helpref{wxTreeCtrl::EndEditLabel}{wxtreectrlendeditlabel}
+\helpref{wxTreeCtrl::EndEditLabel}{wxtreectrlendeditlabel},
+\helpref{wxTreeEvent}{wxtreeevent}
\membersection{wxTreeCtrl::EndEditLabel}\label{wxtreectrlendeditlabel}
\membersection{wxTreeCtrl::GetBoundingRect}\label{wxtreectrlgetitemrect}
-\constfunc{void}{GetBoundingRect}{\param{const wxTreeItemId\&}{ item}, \param{wxRect\& }{rect}, \param{bool }{textOnly = FALSE}}
+\constfunc{bool}{GetBoundingRect}{\param{const wxTreeItemId\&}{ item}, \param{wxRect\& }{rect}, \param{bool }{textOnly = FALSE}}
+
+Retrieves the rectangle bounding the {\it item}. If {\it textOnly} is TRUE,
+only the rectangle around the items label will be returned, otherwise the
+items image is also taken into account.
-Returns the position and size of the rectangle bounding the item.
+The return value is TRUE if the rectangle was successfully retrieved or FALSE
+if it was not (in this case {\it rect} is not changed) - for example, if the
+item is currently invisible.
+
+\pythonnote{The wxPython version of this method requires only the
+{\tt item} and {\tt textOnly} parameters. The return value is either a
+{\tt wxRect} object or {\tt None}.}
\membersection{wxTreeCtrl::GetChildrenCount}\label{wxtreectrlgetchildrencount}
enumeration on one and the same object simultaneously). The cookie passed to
GetFirstChild and GetNextChild should be the same.
-Returns 0 if there are no further children.
+Returns an invalid tree item if there are no further children.
\wxheading{See also}
\helpref{wxTreeCtrl::GetNextChild}{wxtreectrlgetnextchild}
+\pythonnote{In wxPython the returned wxTreeItemId and the new cookie
+value are both returned as a tuple containing the two values.}
+
\membersection{wxTreeCtrl::GetFirstVisibleItem}\label{wxtreectrlgetfirstvisibleitem}
\constfunc{wxTreeItemId}{GetFirstVisibleItem}{\void}
\membersection{wxTreeCtrl::GetImageList}\label{wxtreectrlgetimagelist}
-\constfunc{wxImageList*}{GetImageList}{\param{int }{which = wxIMAGE\_LIST\_NORMAL}}
+\constfunc{wxImageList*}{GetImageList}{\void}
-Returns the specified image list. {\it which} may be one of:
-
-\twocolwidtha{5cm}
-\begin{twocollist}\itemsep=0pt
-\twocolitem{\windowstyle{wxIMAGE\_LIST\_NORMAL}}{The normal (large icon) image list.}
-\twocolitem{\windowstyle{wxIMAGE\_LIST\_SMALL}}{The small icon image list.}
-\twocolitem{\windowstyle{wxIMAGE\_LIST\_STATE}}{The user-defined state image list (unimplemented).}
-\end{twocollist}
+Returns the normal image list.
\membersection{wxTreeCtrl::GetIndent}\label{wxtreectrlgetindent}
\helpref{wxTreeItemData}{wxtreeitemdata}
+\pythonnote{wxPython provides the following shortcut method:
+
+\indented{2cm}{\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf GetPyData(item)}}{Returns the Python Object
+associated with the wxTreeItemData for the given item Id.}
+\end{twocollist}}
+}
+
\membersection{wxTreeCtrl::GetItemImage}\label{wxtreectrlgetitemimage}
-\constfunc{int}{GetItemImage}{\param{const wxTreeItemId\& }{item}}
+\constfunc{int}{GetItemImage}{\param{const wxTreeItemId\& }{item},
+ \param{wxTreeItemIcon }{which = wxTreeItemIcon\_Normal}}
-Gets the normal item image.
+Gets the specified item image. The value of {\it which} may be:
+
+\begin{itemize}\itemsep=0pt
+\item{wxTreeItemIcon\_Normal} to get the normal item image
+\item{wxTreeItemIcon\_Selected} to get the selected item image (i.e. the image
+which is shown when the item is currently selected)
+\item{wxTreeItemIcon\_Expanded} to get the expanded image (this only
+makes sense for items which have children - then this image is shown when the
+item is expanded and the normal image is shown when it is collapsed)
+\item{wxTreeItemIcon\_SelectedExpanded} to get the selected expanded image
+(which is shown when an expanded item is currently selected)
+\end{itemize}
\membersection{wxTreeCtrl::GetItemText}\label{wxtreectrlgetitemtext}
\constfunc{wxTreeItemId}{GetLastChild}{\param{const wxTreeItemId\&}{ item}}
-Returns the last child of the item (or 0 if this item has no children).
+Returns the last child of the item (or an invalid tree item if this item has no children).
\wxheading{See also}
-\helpref{GetFirstChild}{wxtreectrlgetfirstchild},
+\helpref{GetFirstChild}{wxtreectrlgetfirstchild},
\helpref{GetLastChild}{wxtreectrlgetlastchild}
\membersection{wxTreeCtrl::GetNextChild}\label{wxtreectrlgetnextchild}
enumeration on one and the same object simultaneously). The cookie passed to
GetFirstChild and GetNextChild should be the same.
-Returns 0 if there are no further children.
+Returns an invalid tree item if there are no further children.
\wxheading{See also}
\helpref{wxTreeCtrl::GetFirstChild}{wxtreectrlgetfirstchild}
+\pythonnote{In wxPython the returned wxTreeItemId and the new cookie
+value are both returned as a tuple containing the two values.}
+
\membersection{wxTreeCtrl::GetNextSibling}\label{wxtreectrlgetnextsibling}
\constfunc{wxTreeItemId}{GetNextSibling}{\param{const wxTreeItemId\&}{ item}}
Returns the next sibling of the specified item; call \helpref{wxTreeCtrl::GetPrevSibling}{wxtreectrlgetprevsibling} for the previous sibling.
-Returns 0 if there are no further siblings.
+Returns an invalid tree item if there are no further siblings.
\wxheading{See also}
Returns the item's parent.
+\pythonnote{This method is named {\tt GetItemParent} to avoid a name
+clash with wxWindow::GetParent.}
+
\membersection{wxTreeCtrl::GetPrevSibling}\label{wxtreectrlgetprevsibling}
\constfunc{wxTreeItemId}{GetPrevSibling}{\param{const wxTreeItemId\&}{ item}}
Returns the previous sibling of the specified item; call \helpref{wxTreeCtrl::GetNextSibling}{wxtreectrlgetnextsibling} for the next sibling.
-Returns 0 if there are no further children.
+Returns an invalid tree item if there are no further children.
\wxheading{See also}
Returns the root item for the tree control.
-\membersection{wxTreeCtrl::GetSelectedItemImage}\label{wxtreectrlgetselecteditemimage}
+\membersection{wxTreeCtrl::GetItemSelectedImage}\label{wxtreectrlgetitemselectedimage}
-\constfunc{int}{GetSelectedItemImage}{\param{const wxTreeItemId\& }{item}}
+\constfunc{int}{GetItemSelectedImage}{\param{const wxTreeItemId\& }{item}}
-Gets the selected item image.
+Gets the selected item image (this function is obsolete, use
+{\tt GetItemImage(item, wxTreeItemIcon\_Selected}) instead).
\membersection{wxTreeCtrl::GetSelection}\label{wxtreectrlgetselection}
\constfunc{wxTreeItemId}{GetSelection}{\void}
-Returns the selection, or 0 if there is no selection.
+Returns the selection, or an invalid item if there is no selection.
+This function only works with the controls without wxTR\_MULTIPLE style, use
+\helpref{GetSelections}{wxtreectrlgetselections} for the controls which do have
+this style.
+
+\membersection{wxTreeCtrl::GetSelections}\label{wxtreectrlgetselections}
+
+\constfunc{size\_t}{GetSelections}{\param{wxArrayTreeItemIds\& }{selection}}
+
+Fills the array of tree items passed in with the currently selected items. This
+function can be called only if the control has the wxTR\_MULTIPLE style.
+
+Returns the number of selected items.
+
+\pythonnote{The wxPython version of this method accepts no parameters
+and returns a Python list of {\tt wxTreeItemId}s.}
+
+\membersection{wxTreeCtrl::GetStateImageList}\label{wxtreectrlgetstateimagelist}
+
+\constfunc{wxImageList*}{GetStateImageList}{\void}
+
+Returns the state image list (from which application-defined state images are taken).
\membersection{wxTreeCtrl::HitTest}\label{wxtreectrlhittest}
-\func{long}{HitTest}{\param{const wxPoint\& }{point}, \param{int\& }{flags}}
+\func{wxTreeItemId}{HitTest}{\param{const wxPoint\& }{point}, \param{int\& }{flags}}
-Calculates which (if any) item is under the given point, returning extra information
-in {\it flags}. {\it flags} is a bitlist of the following:
+Calculates which (if any) item is under the given point, returning the tree item
+id at this point plus extra information {\it flags}. {\it flags} is a bitlist of the following:
\twocolwidtha{5cm}
\begin{twocollist}\itemsep=0pt
\twocolitem{wxTREE\_HITTEST\_TORIGHT}{To the left of the client area.}
\end{twocollist}
+\pythonnote{in wxPython both the wxTreeItemId and the flags are
+returned as a tuple.}
+
\membersection{wxTreeCtrl::InsertItem}\label{wxtreectrlinsertitem}
\func{wxTreeItemId}{InsertItem}{\param{const wxTreeItemId\& }{parent}, \param{const wxTreeItemId\& }{previous}, \param{const wxString\&}{ text},
\param{int}{ image = -1}, \param{int}{ selImage = -1}, \param{wxTreeItemData*}{ data = NULL}}
-Inserts an item after a given one.
+\func{wxTreeItemId}{InsertItem}{\param{const wxTreeItemId\& }{parent}, \param{size\_t}{ before}, \param{const wxString\&}{ text},
+ \param{int}{ image = -1}, \param{int}{ selImage = -1}, \param{wxTreeItemData*}{ data = NULL}}
+
+Inserts an item after a given one ({\it previous}) or before one identified by its position ({\it before}).
If {\it image} > -1 and {\it selImage} is -1, the same image is used for
both selected and unselected items.
+\pythonnote{The second form of this method is called
+\tt{InsertItemBefore} in wxPython.}
+
+\membersection{wxTreeCtrl::IsBold}\label{wxtreectrlisbold}
+
+\constfunc{bool}{IsBold}{\param{const wxTreeItemId\& }{item}}
+
+Returns TRUE if the given item is in bold state.
+
+See also: \helpref{SetItemBold}{wxtreectrlsetitembold}
+
\membersection{wxTreeCtrl::IsExpanded}\label{wxtreectrlisexpanded}
\constfunc{bool}{IsExpanded}{\param{const wxTreeItemId\&}{ item}}
Returns TRUE if the item has children.
+\membersection{wxTreeCtrl::OnCompareItems}\label{wxtreectrloncompareitems}
+
+\func{int}{OnCompareItems}{\param{const wxTreeItemId\& }{item1}, \param{const wxTreeItemId\& }{item2}}
+
+Override this function in the derived class to change the sort order of the
+items in the tree control. The function should return a negative, zero or
+positive value if the first item is less than, equal to or greater than the
+second one.
+
+The base class version compares items alphabetically.
+
+See also: \helpref{SortChildren}{wxtreectrlsortchildren}
+
\membersection{wxTreeCtrl::PrependItem}\label{wxtreectrlprependitem}
\func{wxTreeItemId}{PrependItem}{\param{const wxTreeItemId\& }{parent}, \param{const wxString\&}{ text},
\membersection{wxTreeCtrl::SetImageList}\label{wxtreectrlsetimagelist}
-\func{void}{SetImageList}{\param{wxImageList*}{ imageList}, \param{int }{which = wxIMAGE\_LIST\_NORMAL}}
+\func{void}{SetImageList}{\param{wxImageList*}{ imageList}}
+
+Sets the normal image list.
+
+\membersection{wxTreeCtrl::SetItemBackgroundColour}\label{wxtreectrlsetitembackgroundcolour}
+
+\func{void}{SetItemBackgroundColour}{\param{const wxTreeItemId\&}{ item}, \param{const wxColour\& }{col}}
+
+Sets the colour of the items background.
+
+\membersection{wxTreeCtrl::SetItemBold}\label{wxtreectrlsetitembold}
+
+\func{void}{SetItemBold}{\param{const wxTreeItemId\& }{item}, \param{bool}{ bold = TRUE}}
+
+Makes item appear in bold font if {\it bold} parameter is TRUE or resets it to
+the normal state.
-Sets the image list. {\it which} should be one of wxIMAGE\_LIST\_NORMAL, wxIMAGE\_LIST\_SMALL and
-wxIMAGE\_LIST\_STATE.
+See also: \helpref{IsBold}{wxtreectrlisbold}
\membersection{wxTreeCtrl::SetItemData}\label{wxtreectrlsetitemdata}
Sets the item client data.
+\pythonnote{wxPython provides the following shortcut method:\par
+\indented{2cm}{\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf SetPyData(item, obj)}}{Associate the given Python
+Object with the wxTreeItemData for the given item Id.}
+\end{twocollist}}
+}
+
+\membersection{wxTreeCtrl::SetItemFont}\label{wxtreectrlsetitemfont}
+
+\func{void}{SetItemFont}{\param{const wxTreeItemId\&}{ item}, \param{const wxFont\& }{font}}
+
+Sets the items font. All items in the tree should have the same height to avoid
+text clipping, so the fonts height should be the same for all of them,
+although font attributes may vary.
+
+\wxheading{See also}
+
+\helpref{SetItemBold}{wxtreectrlsetitembold}
+
\membersection{wxTreeCtrl::SetItemHasChildren}\label{wxtreectrlsetitemhaschildren}
\func{void}{SetItemHasChildren}{\param{const wxTreeItemId\&}{ item}, \param{bool }{hasChildren = TRUE}}
\membersection{wxTreeCtrl::SetItemImage}\label{wxtreectrlsetitemimage}
-\func{void}{SetItemImage}{\param{const wxTreeItemId\&}{ item}, \param{int }{image}}
+\func{void}{SetItemImage}{\param{const wxTreeItemId\&}{ item},
+ \param{int }{image}, \param{wxTreeItemIcon }{which = wxTreeItemIcon\_Normal}}
-Sets the normal item image. This is an index into the assciated image list.
+Sets the specified item image. See \helpref{GetItemImage}{wxtreectrlgetitemimage}
+for the description of the {\it which} parameter.
\membersection{wxTreeCtrl::SetItemSelectedImage}\label{wxtreectrlsetitemselectedimage}
\func{void}{SetItemSelectedImage}{\param{const wxTreeItemId\&}{ item}, \param{int }{selImage}}
-Sets the item selected image. This is an index into the assciated image list.
+Sets the selected item image (this function is obsolete, use {\tt SetItemImage(item, wxTreeItemIcon\_Selected}) instead).
\membersection{wxTreeCtrl::SetItemText}\label{wxtreectrlsetitemtext}
Sets the item label.
-\membersection{wxTreeCtrl::SortChildren}\label{wxtreectrlsortchildren}
+\membersection{wxTreeCtrl::SetItemTextColour}\label{wxtreectrlsetitemtextcolour}
-\func{void}{SortChildren}{\param{const wxTreeItemId\&}{ item}, \param{wxTreeItemCmpFunc*}{ cmpFunction = NULL}}
+\func{void}{SetItemTextColour}{\param{const wxTreeItemId\&}{ item}, \param{const wxColour\& }{col}}
-Sorts the children of the given item. If {\it cmpFunction} is NULL, sorts in ascending alphabetical order;
-otherwise the custom sort function is used, as follows:
+Sets the colour of the items text.
-{\small
-\begin{verbatim}
-// a callback function used for sorting tree items, it should return -1 if the
-// first item precedes the second, +1 if the second precedes the first or 0 if
-// they're equivalent
-class wxTreeItemData;
-typedef int (*wxTreeItemCmpFunc)(wxTreeItemData *item1, wxTreeItemData *item2);
-\end{verbatim}
-}
+\membersection{wxTreeCtrl::SetStateImageList}\label{wxtreectrlsetstateimagelist}
+
+\func{void}{SetStateImageList}{\param{wxImageList*}{ imageList}}
+
+Sets the state image list (from which application-defined state images are taken).
+
+\membersection{wxTreeCtrl::SortChildren}\label{wxtreectrlsortchildren}
+
+\func{void}{SortChildren}{\param{const wxTreeItemId\&}{ item}}
+
+Sorts the children of the given item using
+\helpref{OnCompareItems}{wxtreectrloncompareitems} method of wxTreeCtrl. You
+should override that method to change the sort order (the default is ascending
+alphabetical order).
\wxheading{See also}
-\helpref{wxTreeItemData}{wxtreeitemdata}
+\helpref{wxTreeItemData}{wxtreeitemdata}, \helpref{OnCompareItems}{wxtreectrloncompareitems}
\membersection{wxTreeCtrl::Toggle}\label{wxtreectrltoggle}
Removes the selection from the currently selected item (if any).
+\membersection{wxTreeCtrl::UnselectAll}\label{wxtreectrlunselectall}
+
+\func{void}{UnselectAll}{\void}
+
+This function either behaves the same as \helpref{Unselect}{wxtreectrlunselect}
+if the control doesn't have wxTR\_MULTIPLE style, or removes the selection from
+all items if it does have this style.
+
\section{\class{wxTreeItemData}}\label{wxtreeitemdata}
wxTreeItemData is some (arbitrary) user class associated with some item. The
wxTreeItemId
+\wxheading{Include files}
+
+<wx/treectrl.h>
+
\wxheading{See also}
\helpref{wxTreeCtrl}{wxtreectrl}
Default constructor.
+\pythonnote{The wxPython version of this constructor optionally
+accepts any Python object as a parameter. This object is then
+associated with the tree item using the wxTreeItemData as a
+container.
+
+In addition, the following methods are added in wxPython for accessing
+the object:
+
+\indented{2cm}{\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf GetData()}}{Returns a reference to the Python Object}
+\twocolitem{{\bf SetData(obj)}}{Associates a new Python Object with the
+wxTreeItemData}
+\end{twocollist}}
+}
+
+
\membersection{wxTreeItemData::\destruct{wxTreeItemData}}
\func{void}{\destruct{wxTreeItemData}}{\void}