1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     wxTreeCtrl class 
   8 // Copyright:   (c) AUTHOR 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 #ifndef _WX_TREECTRL_H_ 
  13 #define _WX_TREECTRL_H_ 
  16 #pragma interface "treectrl.h" 
  19 #include "wx/control.h" 
  21 #include "wx/imaglist.h" 
  23 #define wxTREE_MASK_HANDLE          0x0001 
  24 #define wxTREE_MASK_STATE           0x0002 
  25 #define wxTREE_MASK_TEXT            0x0004 
  26 #define wxTREE_MASK_IMAGE           0x0008 
  27 #define wxTREE_MASK_SELECTED_IMAGE  0x0010 
  28 #define wxTREE_MASK_CHILDREN        0x0020 
  29 #define wxTREE_MASK_DATA            0x0040 
  31 #define wxTREE_STATE_BOLD           0x0001 
  32 #define wxTREE_STATE_DROPHILITED    0x0002 
  33 #define wxTREE_STATE_EXPANDED       0x0004 
  34 #define wxTREE_STATE_EXPANDEDONCE   0x0008 
  35 #define wxTREE_STATE_FOCUSED        0x0010 
  36 #define wxTREE_STATE_SELECTED       0x0020 
  37 #define wxTREE_STATE_CUT            0x0040 
  39 #define wxTREE_HITTEST_ABOVE            0x0001  // Above the client area. 
  40 #define wxTREE_HITTEST_BELOW            0x0002  // Below the client area. 
  41 #define wxTREE_HITTEST_NOWHERE          0x0004  // In the client area but below the last item. 
  42 #define wxTREE_HITTEST_ONITEMBUTTON     0x0010  // On the button associated with an item. 
  43 #define wxTREE_HITTEST_ONITEMICON       0x0020  // On the bitmap associated with an item. 
  44 #define wxTREE_HITTEST_ONITEMINDENT     0x0040  // In the indentation associated with an item. 
  45 #define wxTREE_HITTEST_ONITEMLABEL      0x0080  // On the label (string) associated with an item. 
  46 #define wxTREE_HITTEST_ONITEMRIGHT      0x0100  // In the area to the right of an item. 
  47 #define wxTREE_HITTEST_ONITEMSTATEICON  0x0200  // On the state icon for a tree view item that is in a user-defined state. 
  48 #define wxTREE_HITTEST_TOLEFT           0x0400  // To the right of the client area. 
  49 #define wxTREE_HITTEST_TORIGHT          0x0800  // To the left of the client area. 
  51 #define wxTREE_HITTEST_ONITEM (wxTREE_HITTEST_ONITEMICON | wxTREE_HITTEST_ONITEMLABEL | wxTREE_HITTEST_ONITEMSTATEICON) 
  53 // Flags for GetNextItem 
  55     wxTREE_NEXT_CARET
,                 // Retrieves the currently selected item. 
  56     wxTREE_NEXT_CHILD
,                 // Retrieves the first child item. The hItem parameter must be NULL. 
  57     wxTREE_NEXT_DROPHILITE
,            // Retrieves the item that is the target of a drag-and-drop operation. 
  58     wxTREE_NEXT_FIRSTVISIBLE
,          // Retrieves the first visible item. 
  59     wxTREE_NEXT_NEXT
,                 // Retrieves the next sibling item. 
  60     wxTREE_NEXT_NEXTVISIBLE
,           // Retrieves the next visible item that follows the specified item. 
  61     wxTREE_NEXT_PARENT
,                // Retrieves the parent of the specified item. 
  62     wxTREE_NEXT_PREVIOUS
,              // Retrieves the previous sibling item. 
  63     wxTREE_NEXT_PREVIOUSVISIBLE
,       // Retrieves the first visible item that precedes the specified item. 
  64     wxTREE_NEXT_ROOT                   
// Retrieves the first child item of the root item of which the specified item is a part. 
  67 // Flags for ExpandItem 
  70     wxTREE_EXPAND_COLLAPSE
, 
  71     wxTREE_EXPAND_COLLAPSE_RESET
, 
  75 // Flags for InsertItem 
  77     wxTREE_INSERT_LAST 
= -1, 
  78     wxTREE_INSERT_FIRST 
= -2, 
  79     wxTREE_INSERT_SORT 
= -3 
  82 class WXDLLEXPORT wxTreeItem
: public wxObject
 
  84  DECLARE_DYNAMIC_CLASS(wxTreeItem
) 
  99     inline long GetMask() const { return m_mask
; } 
 100     inline long GetItemId() const { return m_itemId
; } 
 101     inline long GetState() const { return m_state
; } 
 102     inline long GetStateMask() const { return m_stateMask
; } 
 103     inline wxString 
GetText() const { return m_text
; } 
 104     inline int GetImage() const { return m_image
; } 
 105     inline int GetSelectedImage() const { return m_selectedImage
; } 
 106     inline int GetChildren() const { return m_children
; } 
 107     inline long GetData() const { return m_data
; } 
 109     inline void SetMask(long mask
) { m_mask 
= mask
; } 
 110     inline void SetItemId(long id
) { m_itemId 
= m_itemId 
= id
; } 
 111     inline void SetState(long state
) { m_state 
= state
; } 
 112     inline void SetStateMask(long stateMask
) { m_stateMask 
= stateMask
; } 
 113     inline void GetText(const wxString
& text
) { m_text 
= text
; } 
 114     inline void SetImage(int image
) { m_image 
= image
; } 
 115     inline void GetSelectedImage(int selImage
) { m_selectedImage 
= selImage
; } 
 116     inline void SetChildren(int children
) { m_children 
= children
; } 
 117     inline void SetData(long data
) { m_data 
= data
; } 
 120 class WXDLLEXPORT wxTreeCtrl
: public wxControl
 
 131     inline wxTreeCtrl(wxWindow 
*parent
, wxWindowID id 
= -1, 
 132         const wxPoint
& pos 
= wxDefaultPosition
, 
 133         const wxSize
& size 
= wxDefaultSize
, 
 134         long style 
= wxTR_HAS_BUTTONS
|wxTR_LINES_AT_ROOT
, 
 135         const wxValidator
& validator 
= wxDefaultValidator
, 
 136         const wxString
& name 
= "wxTreeCtrl") 
 138         Create(parent
, id
, pos
, size
, style
, validator
, name
); 
 142     bool Create(wxWindow 
*parent
, wxWindowID id 
= -1, 
 143                 const wxPoint
& pos 
= wxDefaultPosition
, 
 144                 const wxSize
& size 
= wxDefaultSize
, 
 145                 long style 
= wxTR_HAS_BUTTONS
|wxTR_LINES_AT_ROOT
, 
 146                 const wxValidator
& validator 
= wxDefaultValidator
, 
 147                 const wxString
& name 
= "wxTreeCtrl"); 
 152     int GetCount() const; 
 155     int GetIndent() const; 
 156     void SetIndent(int indent
); 
 158     wxImageList 
*GetImageList(int which 
= wxIMAGE_LIST_NORMAL
) const; 
 159     void SetImageList(wxImageList 
*imageList
, int which 
= wxIMAGE_LIST_NORMAL
); 
 161       // navigation inside the tree 
 162     long GetNextItem(long item
, int code
) const; 
 163     bool ItemHasChildren(long item
) const; 
 164     long GetChild(long item
) const; 
 165     long GetParent(long item
) const; 
 166     long GetFirstVisibleItem() const; 
 167     long GetNextVisibleItem(long item
) const; 
 168     long GetSelection() const; 
 169     long GetRootItem() const; 
 171       // generic function for (g|s)etting item attributes 
 172     bool GetItem(wxTreeItem
& info
) const; 
 173     bool SetItem(wxTreeItem
& info
); 
 175     int  GetItemState(long item
, long stateMask
) const; 
 176     bool SetItemState(long item
, long state
, long stateMask
); 
 178     bool SetItemImage(long item
, int image
, int selImage
); 
 180     wxString 
GetItemText(long item
) const; 
 181     void SetItemText(long item
, const wxString
& str
); 
 182       // custom data associated with the item 
 183     long GetItemData(long item
) const; 
 184     bool SetItemData(long item
, long data
); 
 185       // convenience function 
 186     bool IsItemExpanded(long item
)  
 188       return (GetItemState(item
, wxTREE_STATE_EXPANDED
) &  
 189                            wxTREE_STATE_EXPANDED
) != 0; 
 193     bool GetItemRect(long item
, wxRect
& rect
, bool textOnly 
= FALSE
) const; 
 195     wxTextCtrl
* GetEditControl() const; 
 199       // adding/deleting items 
 200     bool DeleteItem(long item
); 
 201     long InsertItem(long parent
, wxTreeItem
& info
, 
 202                     long insertAfter 
= wxTREE_INSERT_LAST
); 
 203       // If image > -1 and selImage == -1, the same image is used for 
 204       // both selected and unselected items. 
 205     long InsertItem(long parent
, const wxString
& label
, 
 206                     int image 
= -1, int selImage 
= -1,  
 207                     long insertAfter 
= wxTREE_INSERT_LAST
); 
 209       // changing item state 
 210     bool ExpandItem(long item
)   { return ExpandItem(item
, wxTREE_EXPAND_EXPAND
);   } 
 211     bool CollapseItem(long item
) { return ExpandItem(item
, wxTREE_EXPAND_COLLAPSE
); } 
 212     bool ToggleItem(long item
)   { return ExpandItem(item
, wxTREE_EXPAND_TOGGLE
);   } 
 213       // common interface for {Expand|Collapse|Toggle}Item 
 214     bool ExpandItem(long item
, int action
); 
 217     bool SelectItem(long item
); 
 218     bool ScrollTo(long item
); 
 219     bool DeleteAllItems(); 
 221     // Edit the label (tree must have the focus) 
 222     wxTextCtrl
* EditLabel(long item
, wxClassInfo
* textControlClass 
= CLASSINFO(wxTextCtrl
)); 
 224     // End label editing, optionally cancelling the edit 
 225     bool EndEditLabel(bool cancel
); 
 227     long HitTest(const wxPoint
& point
, int& flags
); 
 228     //  wxImageList *CreateDragImage(long item); 
 229     bool SortChildren(long item
); 
 230     bool EnsureVisible(long item
); 
 232     void Command(wxCommandEvent
& event
) { ProcessCommand(event
); }; 
 235     wxTextCtrl
*  m_textCtrl
; 
 236     wxImageList
* m_imageListNormal
; 
 237     wxImageList
* m_imageListState
; 
 239     DECLARE_DYNAMIC_CLASS(wxTreeCtrl
) 
 243  wxEVT_COMMAND_TREE_BEGIN_DRAG, 
 244  wxEVT_COMMAND_TREE_BEGIN_RDRAG, 
 245  wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT, 
 246  wxEVT_COMMAND_TREE_END_LABEL_EDIT, 
 247  wxEVT_COMMAND_TREE_DELETE_ITEM, 
 248  wxEVT_COMMAND_TREE_GET_INFO, 
 249  wxEVT_COMMAND_TREE_SET_INFO, 
 250  wxEVT_COMMAND_TREE_ITEM_EXPANDED, 
 251  wxEVT_COMMAND_TREE_ITEM_EXPANDING, 
 252  wxEVT_COMMAND_TREE_ITEM_COLLAPSED, 
 253  wxEVT_COMMAND_TREE_ITEM_COLLAPSING, 
 254  wxEVT_COMMAND_TREE_SEL_CHANGED, 
 255  wxEVT_COMMAND_TREE_SEL_CHANGING, 
 256  wxEVT_COMMAND_TREE_KEY_DOWN 
 259 class WXDLLEXPORT wxTreeEvent
: public wxCommandEvent
 
 261   DECLARE_DYNAMIC_CLASS(wxTreeEvent
) 
 264   wxTreeEvent(wxEventType commandType 
= wxEVT_NULL
, int id 
= 0); 
 271   inline long GetOldItem() const { return m_oldItem
; } 
 272   inline wxTreeItem
& GetItem() const { return (wxTreeItem
&) m_item
; } 
 273   inline wxPoint 
GetPoint() const { return m_pointDrag
; } 
 274   inline int GetCode() const { return m_code
; } 
 277 typedef void (wxEvtHandler::*wxTreeEventFunction
)(wxTreeEvent
&); 
 279 #define EVT_TREE_BEGIN_DRAG(id, fn) { wxEVT_COMMAND_TREE_BEGIN_DRAG, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, 
 280 #define EVT_TREE_BEGIN_RDRAG(id, fn) { wxEVT_COMMAND_TREE_BEGIN_RDRAG, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, 
 281 #define EVT_TREE_BEGIN_LABEL_EDIT(id, fn) { wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, 
 282 #define EVT_TREE_END_LABEL_EDIT(id, fn) { wxEVT_COMMAND_TREE_END_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, 
 283 #define EVT_TREE_DELETE_ITEM(id, fn) { wxEVT_COMMAND_TREE_DELETE_ITEM, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, 
 284 #define EVT_TREE_GET_INFO(id, fn) { wxEVT_COMMAND_TREE_GET_INFO, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, 
 285 #define EVT_TREE_SET_INFO(id, fn) { wxEVT_COMMAND_TREE_SET_INFO, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, 
 286 #define EVT_TREE_ITEM_EXPANDED(id, fn) { wxEVT_COMMAND_TREE_ITEM_EXPANDED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, 
 287 #define EVT_TREE_ITEM_EXPANDING(id, fn) { wxEVT_COMMAND_TREE_ITEM_EXPANDING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, 
 288 #define EVT_TREE_ITEM_COLLAPSED(id, fn) { wxEVT_COMMAND_TREE_ITEM_COLLAPSED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, 
 289 #define EVT_TREE_ITEM_COLLAPSING(id, fn) { wxEVT_COMMAND_TREE_ITEM_COLLAPSING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, 
 290 #define EVT_TREE_SEL_CHANGED(id, fn) { wxEVT_COMMAND_TREE_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, 
 291 #define EVT_TREE_SEL_CHANGING(id, fn) { wxEVT_COMMAND_TREE_SEL_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, 
 292 #define EVT_TREE_KEY_DOWN(id, fn) { wxEVT_COMMAND_TREE_KEY_DOWN, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL },