X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6daa06370bdb080d3555b1e0f90292489a5e64f9..0dfef5a8124ac0f1bb2aed6ef5ddfa833e8e2c6e:/samples/treectrl/treetest.h diff --git a/samples/treectrl/treetest.h b/samples/treectrl/treetest.h index 9adacc8acf..0c0cd57395 100644 --- a/samples/treectrl/treetest.h +++ b/samples/treectrl/treetest.h @@ -13,108 +13,179 @@ class MyApp : public wxApp { public: - bool OnInit(); + bool OnInit(); }; class MyTreeItemData : public wxTreeItemData { public: - MyTreeItemData(const wxString& desc) : m_desc(desc) { } + MyTreeItemData(const wxString& desc) : m_desc(desc) { } - void ShowInfo(wxTreeCtrl *tree); + void ShowInfo(wxTreeCtrl *tree); + const char *GetDesc() const { return m_desc.c_str(); } private: - wxString m_desc; + wxString m_desc; }; class MyTreeCtrl : public wxTreeCtrl { public: - enum - { - TreeCtrlIcon_File, - TreeCtrlIcon_Folder - }; - - MyTreeCtrl(wxWindow *parent, const wxWindowID id, - const wxPoint& pos, const wxSize& size, - long style); - virtual ~MyTreeCtrl(); - - void OnBeginDrag(wxTreeEvent& event); - void OnBeginRDrag(wxTreeEvent& event); - void OnBeginLabelEdit(wxTreeEvent& event); - void OnEndLabelEdit(wxTreeEvent& event); - void OnDeleteItem(wxTreeEvent& event); - void OnGetInfo(wxTreeEvent& event); - void OnSetInfo(wxTreeEvent& event); - void OnItemExpanded(wxTreeEvent& event); - void OnItemExpanding(wxTreeEvent& event); - void OnItemCollapsed(wxTreeEvent& event); - void OnItemCollapsing(wxTreeEvent& event); - void OnSelChanged(wxTreeEvent& event); - void OnSelChanging(wxTreeEvent& event); - void OnTreeKeyDown(wxTreeEvent& event); - - void GetItemsRecursively(const wxTreeItemId& idParent, long cookie); - - void AddTestItemsToTree(size_t numChildren, - size_t depth); + enum + { + TreeCtrlIcon_File, + TreeCtrlIcon_FileSelected, + TreeCtrlIcon_Folder, + TreeCtrlIcon_FolderSelected, + TreeCtrlIcon_FolderOpened + }; + + MyTreeCtrl() { } + MyTreeCtrl(wxWindow *parent, const wxWindowID id, + const wxPoint& pos, const wxSize& size, + long style); + virtual ~MyTreeCtrl(); + + void OnBeginDrag(wxTreeEvent& event); + void OnBeginRDrag(wxTreeEvent& event); + void OnBeginLabelEdit(wxTreeEvent& event); + void OnEndLabelEdit(wxTreeEvent& event); + void OnDeleteItem(wxTreeEvent& event); + void OnGetInfo(wxTreeEvent& event); + void OnSetInfo(wxTreeEvent& event); + void OnItemExpanded(wxTreeEvent& event); + void OnItemExpanding(wxTreeEvent& event); + void OnItemCollapsed(wxTreeEvent& event); + void OnItemCollapsing(wxTreeEvent& event); + void OnSelChanged(wxTreeEvent& event); + void OnSelChanging(wxTreeEvent& event); + void OnTreeKeyDown(wxTreeEvent& event); + void OnItemActivated(wxTreeEvent& event); + void OnRMouseDClick(wxMouseEvent& event); + + void GetItemsRecursively(const wxTreeItemId& idParent, long cookie); + + void AddTestItemsToTree(size_t numChildren, size_t depth); + + void DoSortChildren(const wxTreeItemId& item, bool reverse = FALSE) + { m_reverseSort = reverse; wxTreeCtrl::SortChildren(item); } + void DoEnsureVisible() { EnsureVisible(m_lastItem); } + + void DoToggleIcon(const wxTreeItemId& item); + +protected: + virtual int OnCompareItems(const wxTreeItemId& i1, const wxTreeItemId& i2); + + // is this the test item which we use in several event handlers? + bool IsTestItem(const wxTreeItemId& item) + { + // the test item is the first child folder + return GetParent(item) == GetRootItem() && !GetPrevSibling(item); + } private: - void AddItemsRecursively(const wxTreeItemId& idParent, - size_t nChildren, - size_t depth, - size_t folder); - - wxImageList *m_imageListNormal; - - DECLARE_EVENT_TABLE() + void AddItemsRecursively(const wxTreeItemId& idParent, + size_t nChildren, + size_t depth, + size_t folder); + + wxImageList *m_imageListNormal; + bool m_reverseSort; // flag for OnCompareItems + wxTreeItemId m_lastItem; // for OnEnsureVisible() + + // NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS() + // if you want your overloaded OnCompareItems() to be called. + // OTOH, if you don't want it you may omit the next line - this will + // make default (alphabetical) sorting much faster under wxMSW. + DECLARE_DYNAMIC_CLASS(MyTreeCtrl) + DECLARE_EVENT_TABLE() }; // Define a new frame type class MyFrame: public wxFrame { public: - // ctor and dtor - MyFrame(const wxString& title, int x, int y, int w, int h); - virtual ~MyFrame(); + // ctor and dtor + MyFrame(const wxString& title, int x, int y, int w, int h); + virtual ~MyFrame(); + + // menu callbacks + void OnQuit(wxCommandEvent& event); + void OnAbout(wxCommandEvent& event); + + void OnDump(wxCommandEvent& event); +#ifndef NO_MULTIPLE_SELECTION + void OnDumpSelected(wxCommandEvent& event); + void OnSelect(wxCommandEvent& event); + void OnUnselect(wxCommandEvent& event); +#endif // NO_MULTIPLE_SELECTION + void OnDelete(wxCommandEvent& event); + void OnDeleteChildren(wxCommandEvent& event); + void OnDeleteAll(wxCommandEvent& event); + void OnRecreate(wxCommandEvent& event); + void OnCollapseAndReset(wxCommandEvent& event); + + void OnSetBold(wxCommandEvent& WXUNUSED(event)) { DoSetBold(TRUE); } + void OnClearBold(wxCommandEvent& WXUNUSED(event)) { DoSetBold(FALSE); } + + void OnEnsureVisible(wxCommandEvent& event); + + void OnCount(wxCommandEvent& event); + void OnCountRec(wxCommandEvent& event); + + void OnRename(wxCommandEvent& event); + void OnSort(wxCommandEvent& event) { DoSort(); } + void OnSortRev(wxCommandEvent& event) { DoSort(TRUE); } - // menu callbacks - void OnQuit(wxCommandEvent& event); - void OnAbout(wxCommandEvent& event); - void OnDump(wxCommandEvent& event); - void OnDelete(wxCommandEvent& event); - void OnDeleteAll(wxCommandEvent& event); - void OnRecreate(wxCommandEvent& event); + void OnAddItem(wxCommandEvent& event); + void OnInsertItem(wxCommandEvent& event); - void OnSetBold(wxCommandEvent& WXUNUSED(event)) { DoSetBold(TRUE); } - void OnClearBold(wxCommandEvent& WXUNUSED(event)) { DoSetBold(FALSE); } + void OnIncIndent(wxCommandEvent& event); + void OnDecIndent(wxCommandEvent& event); + + void OnIncSpacing(wxCommandEvent& event); + void OnDecSpacing(wxCommandEvent& event); + + void OnToggleIcon(wxCommandEvent& event); private: - MyTreeCtrl *m_treeCtrl; + void DoSort(bool reverse = FALSE); - void DoSetBold(bool bold = TRUE); + MyTreeCtrl *m_treeCtrl; - DECLARE_EVENT_TABLE() -}; + void DoSetBold(bool bold = TRUE); -// menu and control ids -enum -{ - TreeTest_Quit, - TreeTest_About, - TreeTest_Dump, - TreeTest_Bold, - TreeTest_UnBold, - TreeTest_Delete, - TreeTest_DeleteAll, - TreeTest_Recreate, - TreeTest_Ctrl = 100 + DECLARE_EVENT_TABLE() }; +// menu and control ids enum { - TreeCtrlIcon_File, - TreeCtrlIcon_Folder + TreeTest_Quit, + TreeTest_About, + TreeTest_Dump, + TreeTest_DumpSelected, + TreeTest_Count, + TreeTest_CountRec, + TreeTest_Sort, + TreeTest_SortRev, + TreeTest_Bold, + TreeTest_UnBold, + TreeTest_Rename, + TreeTest_Delete, + TreeTest_DeleteChildren, + TreeTest_DeleteAll, + TreeTest_Recreate, + TreeTest_CollapseAndReset, + TreeTest_EnsureVisible, + TreeTest_AddItem, + TreeTest_InsertItem, + TreeTest_IncIndent, + TreeTest_DecIndent, + TreeTest_IncSpacing, + TreeTest_DecSpacing, + TreeTest_ToggleIcon, + TreeTest_Select, + TreeTest_Unselect, + TreeTest_Ctrl = 1000 };