]> git.saurik.com Git - wxWidgets.git/blame - samples/treectrl/treectrl.h
don't crash when invalid colour is set as fg/bg colour
[wxWidgets.git] / samples / treectrl / treectrl.h
CommitLineData
457814b5 1/////////////////////////////////////////////////////////////////////////////
5301d933 2// Name: treectrl.h
457814b5
JS
3// Purpose: wxTreeCtrl sample
4// Author: Julian Smart
5// Modified by:
6// Created: 04/01/98
7// RCS-ID: $Id$
8// Copyright: (c) Julian Smart and Markus Holzem
5a43154b 9// Licence: wxWindows license
457814b5
JS
10/////////////////////////////////////////////////////////////////////////////
11
484523cf
JS
12#define USE_GENERIC_TREECTRL 0
13
14#if USE_GENERIC_TREECTRL
15#include "wx/generic/treectlg.h"
16#ifndef wxTreeCtrl
17#define wxTreeCtrl wxGenericTreeCtrl
18#define sm_classwxTreeCtrl sm_classwxGenericTreeCtrl
19#endif
20#endif
21
457814b5 22// Define a new application type
5a43154b
VZ
23class MyApp : public wxApp
24{
25public:
2c8e4738
VZ
26 MyApp() { m_showImages = TRUE; }
27
5f939e78 28 bool OnInit();
2c8e4738
VZ
29
30 void SetShowImages(bool show) { m_showImages = show; }
31 bool ShowImages() const { return m_showImages; }
32
33private:
34 bool m_showImages;
5a43154b 35};
457814b5 36
5a43154b
VZ
37class MyTreeItemData : public wxTreeItemData
38{
39public:
5f939e78 40 MyTreeItemData(const wxString& desc) : m_desc(desc) { }
5a43154b 41
5f939e78
VZ
42 void ShowInfo(wxTreeCtrl *tree);
43 const char *GetDesc() const { return m_desc.c_str(); }
5a43154b
VZ
44
45private:
5f939e78 46 wxString m_desc;
457814b5
JS
47};
48
5a43154b 49class MyTreeCtrl : public wxTreeCtrl
457814b5
JS
50{
51public:
5f939e78
VZ
52 enum
53 {
54 TreeCtrlIcon_File,
74b31181
VZ
55 TreeCtrlIcon_FileSelected,
56 TreeCtrlIcon_Folder,
57 TreeCtrlIcon_FolderSelected,
58 TreeCtrlIcon_FolderOpened
5f939e78
VZ
59 };
60
61 MyTreeCtrl() { }
62 MyTreeCtrl(wxWindow *parent, const wxWindowID id,
63 const wxPoint& pos, const wxSize& size,
64 long style);
65 virtual ~MyTreeCtrl();
66
67 void OnBeginDrag(wxTreeEvent& event);
68 void OnBeginRDrag(wxTreeEvent& event);
5888ef1e 69 void OnEndDrag(wxTreeEvent& event);
5f939e78
VZ
70 void OnBeginLabelEdit(wxTreeEvent& event);
71 void OnEndLabelEdit(wxTreeEvent& event);
72 void OnDeleteItem(wxTreeEvent& event);
e3d0aa77 73 void OnRMouseUp(wxMouseEvent& event);
5f939e78 74 void OnGetInfo(wxTreeEvent& event);
e3d0aa77
VZ
75 void OnTreeRMouseClick(wxTreeEvent& event);
76 void OnItemRightClick(wxTreeEvent& event);
5f939e78
VZ
77 void OnSetInfo(wxTreeEvent& event);
78 void OnItemExpanded(wxTreeEvent& event);
79 void OnItemExpanding(wxTreeEvent& event);
80 void OnItemCollapsed(wxTreeEvent& event);
81 void OnItemCollapsing(wxTreeEvent& event);
82 void OnSelChanged(wxTreeEvent& event);
83 void OnSelChanging(wxTreeEvent& event);
84 void OnTreeKeyDown(wxTreeEvent& event);
85 void OnItemActivated(wxTreeEvent& event);
86 void OnRMouseDClick(wxMouseEvent& event);
87
88 void GetItemsRecursively(const wxTreeItemId& idParent, long cookie);
89
dee1b66f 90 void CreateImageList(int size = 16);
2c8e4738 91
5f939e78
VZ
92 void AddTestItemsToTree(size_t numChildren, size_t depth);
93
94 void DoSortChildren(const wxTreeItemId& item, bool reverse = FALSE)
9dfbf520 95 { m_reverseSort = reverse; wxTreeCtrl::SortChildren(item); }
5f939e78 96 void DoEnsureVisible() { EnsureVisible(m_lastItem); }
e1ee62bd 97
9dfbf520
VZ
98 void DoToggleIcon(const wxTreeItemId& item);
99
e3d0aa77
VZ
100 void ShowMenu(wxTreeItemId id, const wxPoint& pt);
101
e1ee62bd 102protected:
5f939e78 103 virtual int OnCompareItems(const wxTreeItemId& i1, const wxTreeItemId& i2);
e1ee62bd 104
5ea47806
VZ
105 // is this the test item which we use in several event handlers?
106 bool IsTestItem(const wxTreeItemId& item)
107 {
108 // the test item is the first child folder
109 return GetParent(item) == GetRootItem() && !GetPrevSibling(item);
110 }
111
5a43154b 112private:
5f939e78
VZ
113 void AddItemsRecursively(const wxTreeItemId& idParent,
114 size_t nChildren,
115 size_t depth,
116 size_t folder);
117
118 wxImageList *m_imageListNormal;
5888ef1e
VZ
119 bool m_reverseSort; // flag for OnCompareItems
120 wxTreeItemId m_lastItem, // for OnEnsureVisible()
121 m_draggedItem; // item being dragged right now
5f939e78
VZ
122
123 // NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS()
124 // if you want your overloaded OnCompareItems() to be called.
125 // OTOH, if you don't want it you may omit the next line - this will
126 // make default (alphabetical) sorting much faster under wxMSW.
127 DECLARE_DYNAMIC_CLASS(MyTreeCtrl)
128 DECLARE_EVENT_TABLE()
457814b5
JS
129};
130
131// Define a new frame type
132class MyFrame: public wxFrame
019bf128
UU
133{
134public:
5f939e78
VZ
135 // ctor and dtor
136 MyFrame(const wxString& title, int x, int y, int w, int h);
137 virtual ~MyFrame();
f135ff73 138
5f939e78
VZ
139 // menu callbacks
140 void OnQuit(wxCommandEvent& event);
141 void OnAbout(wxCommandEvent& event);
f135ff73 142
5f939e78 143 void OnDump(wxCommandEvent& event);
9dfbf520 144#ifndef NO_MULTIPLE_SELECTION
91b8de8d 145 void OnDumpSelected(wxCommandEvent& event);
9dfbf520
VZ
146 void OnSelect(wxCommandEvent& event);
147 void OnUnselect(wxCommandEvent& event);
7cc8c988 148 void OnToggleSel(wxCommandEvent& event);
9dfbf520 149#endif // NO_MULTIPLE_SELECTION
5f939e78
VZ
150 void OnDelete(wxCommandEvent& event);
151 void OnDeleteChildren(wxCommandEvent& event);
152 void OnDeleteAll(wxCommandEvent& event);
2c8e4738 153
5f939e78 154 void OnRecreate(wxCommandEvent& event);
2c8e4738
VZ
155 void OnToggleImages(wxCommandEvent& event);
156 void OnSetImageSize(wxCommandEvent& event);
5f939e78 157 void OnCollapseAndReset(wxCommandEvent& event);
add28c55 158
5f939e78
VZ
159 void OnSetBold(wxCommandEvent& WXUNUSED(event)) { DoSetBold(TRUE); }
160 void OnClearBold(wxCommandEvent& WXUNUSED(event)) { DoSetBold(FALSE); }
f65635b5 161
5f939e78
VZ
162 void OnEnsureVisible(wxCommandEvent& event);
163
5fd11f09
RR
164 void OnCount(wxCommandEvent& event);
165 void OnCountRec(wxCommandEvent& event);
75c74ca0 166
5f939e78
VZ
167 void OnRename(wxCommandEvent& event);
168 void OnSort(wxCommandEvent& event) { DoSort(); }
169 void OnSortRev(wxCommandEvent& event) { DoSort(TRUE); }
170
171 void OnAddItem(wxCommandEvent& event);
75c74ca0 172 void OnInsertItem(wxCommandEvent& event);
9dfbf520 173
cf724bce
RR
174 void OnIncIndent(wxCommandEvent& event);
175 void OnDecIndent(wxCommandEvent& event);
176
177 void OnIncSpacing(wxCommandEvent& event);
178 void OnDecSpacing(wxCommandEvent& event);
e1ee62bd 179
9dfbf520
VZ
180 void OnToggleIcon(wxCommandEvent& event);
181
7cc8c988
VZ
182 void OnSize(wxSizeEvent& event);
183
f135ff73 184private:
5f939e78 185 void DoSort(bool reverse = FALSE);
e1ee62bd 186
7cc8c988
VZ
187 void Resize(const wxSize& size);
188
5f939e78 189 MyTreeCtrl *m_treeCtrl;
7cc8c988 190 wxTextCtrl *m_textCtrl;
457814b5 191
5f939e78 192 void DoSetBold(bool bold = TRUE);
add28c55 193
5f939e78 194 DECLARE_EVENT_TABLE()
5a43154b 195};
457814b5 196
5a43154b
VZ
197// menu and control ids
198enum
199{
5f939e78
VZ
200 TreeTest_Quit,
201 TreeTest_About,
202 TreeTest_Dump,
9dfbf520 203 TreeTest_DumpSelected,
5fd11f09
RR
204 TreeTest_Count,
205 TreeTest_CountRec,
5f939e78
VZ
206 TreeTest_Sort,
207 TreeTest_SortRev,
208 TreeTest_Bold,
209 TreeTest_UnBold,
210 TreeTest_Rename,
211 TreeTest_Delete,
212 TreeTest_DeleteChildren,
213 TreeTest_DeleteAll,
214 TreeTest_Recreate,
2c8e4738
VZ
215 TreeTest_ToggleImages,
216 TreeTest_SetImageSize,
7cc8c988 217 TreeTest_ToggleSel,
5f939e78
VZ
218 TreeTest_CollapseAndReset,
219 TreeTest_EnsureVisible,
220 TreeTest_AddItem,
75c74ca0 221 TreeTest_InsertItem,
cf724bce
RR
222 TreeTest_IncIndent,
223 TreeTest_DecIndent,
224 TreeTest_IncSpacing,
225 TreeTest_DecSpacing,
9dfbf520
VZ
226 TreeTest_ToggleIcon,
227 TreeTest_Select,
228 TreeTest_Unselect,
229 TreeTest_Ctrl = 1000
f65635b5 230};