1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     wxTreeCtrl sample 
   4 // Author:      Julian Smart 
   8 // Copyright:   (c) Julian Smart and Markus Holzem 
   9 // Licence:     wxWindows license 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 #define USE_GENERIC_TREECTRL 0 
  14 #if USE_GENERIC_TREECTRL 
  15 #include "wx/generic/treectlg.h" 
  17 #define wxTreeCtrl wxGenericTreeCtrl 
  18 #define sm_classwxTreeCtrl sm_classwxGenericTreeCtrl 
  22 // Define a new application type 
  23 class MyApp 
: public wxApp
 
  26     MyApp() { m_showImages 
= TRUE
; } 
  30     void SetShowImages(bool show
) { m_showImages 
= show
; } 
  31     bool ShowImages() const { return m_showImages
; } 
  37 class MyTreeItemData 
: public wxTreeItemData
 
  40     MyTreeItemData(const wxString
& desc
) : m_desc(desc
) { } 
  42     void ShowInfo(wxTreeCtrl 
*tree
); 
  43     const char *GetDesc() const { return m_desc
.c_str(); } 
  49 class MyTreeCtrl 
: public wxTreeCtrl
 
  55         TreeCtrlIcon_FileSelected
, 
  57         TreeCtrlIcon_FolderSelected
, 
  58         TreeCtrlIcon_FolderOpened
 
  62     MyTreeCtrl(wxWindow 
*parent
, const wxWindowID id
, 
  63                const wxPoint
& pos
, const wxSize
& size
, 
  65     virtual ~MyTreeCtrl(); 
  67     void OnBeginDrag(wxTreeEvent
& event
); 
  68     void OnBeginRDrag(wxTreeEvent
& event
); 
  69     void OnEndDrag(wxTreeEvent
& event
); 
  70     void OnBeginLabelEdit(wxTreeEvent
& event
); 
  71     void OnEndLabelEdit(wxTreeEvent
& event
); 
  72     void OnDeleteItem(wxTreeEvent
& event
); 
  73     void OnGetInfo(wxTreeEvent
& event
); 
  74     void OnSetInfo(wxTreeEvent
& event
); 
  75     void OnItemExpanded(wxTreeEvent
& event
); 
  76     void OnItemExpanding(wxTreeEvent
& event
); 
  77     void OnItemCollapsed(wxTreeEvent
& event
); 
  78     void OnItemCollapsing(wxTreeEvent
& event
); 
  79     void OnSelChanged(wxTreeEvent
& event
); 
  80     void OnSelChanging(wxTreeEvent
& event
); 
  81     void OnTreeKeyDown(wxTreeEvent
& event
); 
  82     void OnItemActivated(wxTreeEvent
& event
); 
  83     void OnRMouseDClick(wxMouseEvent
& event
); 
  85     void GetItemsRecursively(const wxTreeItemId
& idParent
, long cookie
); 
  87     void CreateImageList(int size 
= 16); 
  89     void AddTestItemsToTree(size_t numChildren
, size_t depth
); 
  91     void DoSortChildren(const wxTreeItemId
& item
, bool reverse 
= FALSE
) 
  92         { m_reverseSort 
= reverse
; wxTreeCtrl::SortChildren(item
); } 
  93     void DoEnsureVisible() { EnsureVisible(m_lastItem
); } 
  95     void DoToggleIcon(const wxTreeItemId
& item
); 
  98     virtual int OnCompareItems(const wxTreeItemId
& i1
, const wxTreeItemId
& i2
); 
 100     // is this the test item which we use in several event handlers? 
 101     bool IsTestItem(const wxTreeItemId
& item
) 
 103         // the test item is the first child folder 
 104         return GetParent(item
) == GetRootItem() && !GetPrevSibling(item
); 
 108     void AddItemsRecursively(const wxTreeItemId
& idParent
, 
 113     wxImageList 
*m_imageListNormal
; 
 114     bool         m_reverseSort
;             // flag for OnCompareItems 
 115     wxTreeItemId m_lastItem
,                // for OnEnsureVisible() 
 116                  m_draggedItem
;             // item being dragged right now 
 118     // NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS() 
 119     //     if you want your overloaded OnCompareItems() to be called. 
 120     //     OTOH, if you don't want it you may omit the next line - this will 
 121     //     make default (alphabetical) sorting much faster under wxMSW. 
 122     DECLARE_DYNAMIC_CLASS(MyTreeCtrl
) 
 123     DECLARE_EVENT_TABLE() 
 126 // Define a new frame type 
 127 class MyFrame
: public wxFrame
 
 131     MyFrame(const wxString
& title
, int x
, int y
, int w
, int h
); 
 135     void OnQuit(wxCommandEvent
& event
); 
 136     void OnAbout(wxCommandEvent
& event
); 
 138     void OnDump(wxCommandEvent
& event
); 
 139 #ifndef NO_MULTIPLE_SELECTION 
 140     void OnDumpSelected(wxCommandEvent
& event
); 
 141     void OnSelect(wxCommandEvent
& event
); 
 142     void OnUnselect(wxCommandEvent
& event
); 
 143     void OnToggleSel(wxCommandEvent
& event
); 
 144 #endif // NO_MULTIPLE_SELECTION 
 145     void OnDelete(wxCommandEvent
& event
); 
 146     void OnDeleteChildren(wxCommandEvent
& event
); 
 147     void OnDeleteAll(wxCommandEvent
& event
); 
 149     void OnRecreate(wxCommandEvent
& event
); 
 150     void OnToggleImages(wxCommandEvent
& event
); 
 151     void OnSetImageSize(wxCommandEvent
& event
); 
 152     void OnCollapseAndReset(wxCommandEvent
& event
); 
 154     void OnSetBold(wxCommandEvent
& WXUNUSED(event
)) { DoSetBold(TRUE
); } 
 155     void OnClearBold(wxCommandEvent
& WXUNUSED(event
)) { DoSetBold(FALSE
); } 
 157     void OnEnsureVisible(wxCommandEvent
& event
); 
 159     void OnCount(wxCommandEvent
& event
); 
 160     void OnCountRec(wxCommandEvent
& event
); 
 162     void OnRename(wxCommandEvent
& event
); 
 163     void OnSort(wxCommandEvent
& event
) { DoSort(); } 
 164     void OnSortRev(wxCommandEvent
& event
) { DoSort(TRUE
); } 
 166     void OnAddItem(wxCommandEvent
& event
); 
 167     void OnInsertItem(wxCommandEvent
& event
); 
 169     void OnIncIndent(wxCommandEvent
& event
); 
 170     void OnDecIndent(wxCommandEvent
& event
); 
 172     void OnIncSpacing(wxCommandEvent
& event
); 
 173     void OnDecSpacing(wxCommandEvent
& event
); 
 175     void OnToggleIcon(wxCommandEvent
& event
); 
 177     void OnSize(wxSizeEvent
& event
); 
 180     void DoSort(bool reverse 
= FALSE
); 
 182     void Resize(const wxSize
& size
); 
 184     MyTreeCtrl 
*m_treeCtrl
; 
 185     wxTextCtrl 
*m_textCtrl
; 
 187     void DoSetBold(bool bold 
= TRUE
); 
 189     DECLARE_EVENT_TABLE() 
 192 // menu and control ids 
 198     TreeTest_DumpSelected
, 
 207     TreeTest_DeleteChildren
, 
 210     TreeTest_ToggleImages
, 
 211     TreeTest_SetImageSize
, 
 213     TreeTest_CollapseAndReset
, 
 214     TreeTest_EnsureVisible
,