]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/treectrl/treetest.h
CriticalSection update for OS/2
[wxWidgets.git] / samples / treectrl / treetest.h
index a72ee5fa51e2ffff84b824936d79d210e7c240cd..dc193c2954443ee2c48dc7e69d0f5c3ba806938f 100644 (file)
 // Created:     04/01/98
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart and Markus Holzem
-// Licence:    wxWindows license
+// Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
 // Define a new application type
-class MyApp: public wxApp
-{ public:
-    bool OnInit(void);
+class MyApp : public wxApp
+{
+public:
+    bool OnInit();
+};
 
-    wxImageList *m_imageListNormal;
+class MyTreeItemData : public wxTreeItemData
+{
+public:
+    MyTreeItemData(const wxString& desc) : m_desc(desc) { }
+
+    void ShowInfo(wxTreeCtrl *tree);
+    const char *GetDesc() const { return m_desc.c_str(); }
+
+private:
+    wxString m_desc;
 };
 
-class MyTreeCtrl: public wxTreeCtrl
+class MyTreeCtrl : public wxTreeCtrl
 {
 public:
-       MyTreeCtrl(wxWindow *parent, const wxWindowID id, const wxPoint& pos,
-    const wxSize& size, long style);
-       ~MyTreeCtrl();
-
-       void AddItemsRecursively(const wxTreeItemId& idParent,
-                                     size_t numChildren,
-                                     size_t depth);
-       void AddTestItemsToTree(size_t numChildren,
-                                    size_t depth);
-
-
-       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 OnKeyDown(wxTreeEvent& event);
-
-   DECLARE_EVENT_TABLE()
+    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;
+    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:
-    MyTreeCtrl *m_treeCtrl;
-    wxTextCtrl *m_logWindow;
-
+{
+public:
+    // ctor and dtor
     MyFrame(const wxString& title, int x, int y, int w, int h);
-    ~MyFrame(void);
-    
- public:
+    virtual ~MyFrame();
+
+    // menu callbacks
     void OnQuit(wxCommandEvent& event);
     void OnAbout(wxCommandEvent& event);
-       bool OnClose(void) { return TRUE; }
 
-   DECLARE_EVENT_TABLE()
-};
+    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); }
 
-class MyTreeItemData : public wxTreeItemData
-{
-public:
-  MyTreeItemData(const wxString& desc) : m_desc(desc) { }
+    void OnAddItem(wxCommandEvent& event);
+
+    void OnIncIndent(wxCommandEvent& event);
+    void OnDecIndent(wxCommandEvent& event);
 
-       void ShowInfo(wxTreeCtrl *tree);
+    void OnIncSpacing(wxCommandEvent& event);
+    void OnDecSpacing(wxCommandEvent& event);
+
+    void OnToggleIcon(wxCommandEvent& event);
 
 private:
-  wxString m_desc;
-};
+    void DoSort(bool reverse = FALSE);
 
-// ID for the menu quit command
-#define TREE_QUIT      1
-#define TREE_ABOUT     102
+    MyTreeCtrl *m_treeCtrl;
+
+    void DoSetBold(bool bold = TRUE);
 
-#define TREE_CTRL   1000
+    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_IncIndent,
+    TreeTest_DecIndent,
+    TreeTest_IncSpacing,
+    TreeTest_DecSpacing,
+    TreeTest_ToggleIcon,
+    TreeTest_Select,
+    TreeTest_Unselect,
+    TreeTest_Ctrl = 1000
 };