home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / samples / treectrl / treetest.h < prev    next >
C/C++ Source or Header  |  2003-01-03  |  9KB  |  278 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        treectrl.h
  3. // Purpose:     wxTreeCtrl sample
  4. // Author:      Julian Smart
  5. // Modified by:
  6. // Created:     04/01/98
  7. // RCS-ID:      $Id: treetest.h,v 1.31.2.1 2002/12/29 07:48:16 RL Exp $
  8. // Copyright:   (c) Julian Smart and Markus Holzem
  9. // Licence:     wxWindows license
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  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.  
  22. // Define a new application type
  23. class MyApp : public wxApp
  24. {
  25. public:
  26.     MyApp() { m_showImages = TRUE; m_showButtons = FALSE; }
  27.  
  28.     bool OnInit();
  29.  
  30.     void SetShowImages(bool show) { m_showImages = show; }
  31.     bool ShowImages() const { return m_showImages; }
  32.  
  33.     void SetShowButtons(bool show) { m_showButtons = show; }
  34.     bool ShowButtons() const { return m_showButtons; }
  35.  
  36. private:
  37.     bool m_showImages, m_showButtons;
  38. };
  39.  
  40. class MyTreeItemData : public wxTreeItemData
  41. {
  42. public:
  43.     MyTreeItemData(const wxString& desc) : m_desc(desc) { }
  44.  
  45.     void ShowInfo(wxTreeCtrl *tree);
  46.     const wxChar *GetDesc() const { return m_desc.c_str(); }
  47.  
  48. private:
  49.     wxString m_desc;
  50. };
  51.  
  52. class MyTreeCtrl : public wxTreeCtrl
  53. {
  54. public:
  55.     enum
  56.     {
  57.         TreeCtrlIcon_File,
  58.         TreeCtrlIcon_FileSelected,
  59.         TreeCtrlIcon_Folder,
  60.         TreeCtrlIcon_FolderSelected,
  61.         TreeCtrlIcon_FolderOpened
  62.     };
  63.  
  64.     MyTreeCtrl() { }
  65.     MyTreeCtrl(wxWindow *parent, const wxWindowID id,
  66.                const wxPoint& pos, const wxSize& size,
  67.                long style);
  68.     virtual ~MyTreeCtrl();
  69.  
  70.     void OnBeginDrag(wxTreeEvent& event);
  71.     void OnBeginRDrag(wxTreeEvent& event);
  72.     void OnEndDrag(wxTreeEvent& event);
  73.     void OnBeginLabelEdit(wxTreeEvent& event);
  74.     void OnEndLabelEdit(wxTreeEvent& event);
  75.     void OnDeleteItem(wxTreeEvent& event);
  76.     void OnRMouseUp(wxMouseEvent& event);
  77.     void OnGetInfo(wxTreeEvent& event);
  78.     void OnTreeRMouseClick(wxTreeEvent& event);
  79.     void OnItemRightClick(wxTreeEvent& event);
  80.     void OnSetInfo(wxTreeEvent& event);
  81.     void OnItemExpanded(wxTreeEvent& event);
  82.     void OnItemExpanding(wxTreeEvent& event);
  83.     void OnItemCollapsed(wxTreeEvent& event);
  84.     void OnItemCollapsing(wxTreeEvent& event);
  85.     void OnSelChanged(wxTreeEvent& event);
  86.     void OnSelChanging(wxTreeEvent& event);
  87.     void OnTreeKeyDown(wxTreeEvent& event);
  88.     void OnItemActivated(wxTreeEvent& event);
  89.     void OnRMouseDClick(wxMouseEvent& event);
  90.  
  91.     void GetItemsRecursively(const wxTreeItemId& idParent, long cookie);
  92.  
  93.     void CreateImageList(int size = 16);
  94.     void CreateButtonsImageList(int size = 11);
  95.  
  96.     void AddTestItemsToTree(size_t numChildren, size_t depth);
  97.  
  98.     void DoSortChildren(const wxTreeItemId& item, bool reverse = FALSE)
  99.         { m_reverseSort = reverse; wxTreeCtrl::SortChildren(item); }
  100.     void DoEnsureVisible() { EnsureVisible(m_lastItem); }
  101.  
  102.     void DoToggleIcon(const wxTreeItemId& item);
  103.  
  104.     void ShowMenu(wxTreeItemId id, const wxPoint& pt);
  105.  
  106.     int ImageSize(void) const { return m_imageSize; }
  107.  
  108. protected:
  109.     virtual int OnCompareItems(const wxTreeItemId& i1, const wxTreeItemId& i2);
  110.  
  111.     // is this the test item which we use in several event handlers?
  112.     bool IsTestItem(const wxTreeItemId& item)
  113.     {
  114.         // the test item is the first child folder
  115.         return GetItemParent(item) == GetRootItem() && !GetPrevSibling(item);
  116.     }
  117.  
  118. private:
  119.     void AddItemsRecursively(const wxTreeItemId& idParent,
  120.                              size_t nChildren,
  121.                              size_t depth,
  122.                              size_t folder);
  123.  
  124.     int          m_imageSize;               // current size of images
  125.     bool         m_reverseSort;             // flag for OnCompareItems
  126.     wxTreeItemId m_lastItem,                // for OnEnsureVisible()
  127.                  m_draggedItem;             // item being dragged right now
  128.  
  129.     // NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS()
  130.     //     if you want your overloaded OnCompareItems() to be called.
  131.     //     OTOH, if you don't want it you may omit the next line - this will
  132.     //     make default (alphabetical) sorting much faster under wxMSW.
  133.     DECLARE_DYNAMIC_CLASS(MyTreeCtrl)
  134.     DECLARE_EVENT_TABLE()
  135. };
  136.  
  137. // Define a new frame type
  138. class MyFrame: public wxFrame
  139. {
  140. public:
  141.     // ctor and dtor
  142.     MyFrame(const wxString& title, int x, int y, int w, int h);
  143.     virtual ~MyFrame();
  144.  
  145.     // menu callbacks
  146.     void OnQuit(wxCommandEvent& event);
  147.     void OnAbout(wxCommandEvent& event);
  148.  
  149.     void OnTogButtons(wxCommandEvent& event)
  150.         { TogStyle(event.GetId(), wxTR_HAS_BUTTONS); }
  151.     void OnTogTwist(wxCommandEvent& event)
  152.         { TogStyle(event.GetId(), wxTR_TWIST_BUTTONS); }
  153.     void OnTogLines(wxCommandEvent& event)
  154.         { TogStyle(event.GetId(), wxTR_NO_LINES); }
  155.     void OnTogEdit(wxCommandEvent& event)
  156.         { TogStyle(event.GetId(), wxTR_EDIT_LABELS); }
  157.     void OnTogHideRoot(wxCommandEvent& event)
  158.         { TogStyle(event.GetId(), wxTR_HIDE_ROOT); }
  159.     void OnTogRootLines(wxCommandEvent& event)
  160.         { TogStyle(event.GetId(), wxTR_LINES_AT_ROOT); }
  161.     void OnTogBorder(wxCommandEvent& event)
  162.         { TogStyle(event.GetId(), wxTR_ROW_LINES); }
  163.     void OnTogFullHighlight(wxCommandEvent& event)
  164.         { TogStyle(event.GetId(), wxTR_FULL_ROW_HIGHLIGHT); }
  165.  
  166.     void OnResetStyle(wxCommandEvent& WXUNUSED(event))
  167.         { CreateTreeWithDefStyle(); }
  168.  
  169.     void OnSetFgColour(wxCommandEvent& event);
  170.     void OnSetBgColour(wxCommandEvent& event);
  171.  
  172.     void OnDump(wxCommandEvent& event);
  173. #ifndef NO_MULTIPLE_SELECTION
  174.     void OnDumpSelected(wxCommandEvent& event);
  175.     void OnSelect(wxCommandEvent& event);
  176.     void OnUnselect(wxCommandEvent& event);
  177.     void OnToggleSel(wxCommandEvent& event);
  178. #endif // NO_MULTIPLE_SELECTION
  179.     void OnDelete(wxCommandEvent& event);
  180.     void OnDeleteChildren(wxCommandEvent& event);
  181.     void OnDeleteAll(wxCommandEvent& event);
  182.  
  183.     void OnRecreate(wxCommandEvent& event);
  184.     void OnToggleButtons(wxCommandEvent& event);
  185.     void OnToggleImages(wxCommandEvent& event);
  186.     void OnSetImageSize(wxCommandEvent& event);
  187.     void OnCollapseAndReset(wxCommandEvent& event);
  188.  
  189.     void OnSetBold(wxCommandEvent& WXUNUSED(event)) { DoSetBold(TRUE); }
  190.     void OnClearBold(wxCommandEvent& WXUNUSED(event)) { DoSetBold(FALSE); }
  191.  
  192.     void OnEnsureVisible(wxCommandEvent& event);
  193.  
  194.     void OnCount(wxCommandEvent& event);
  195.     void OnCountRec(wxCommandEvent& event);
  196.  
  197.     void OnRename(wxCommandEvent& event);
  198.     void OnSort(wxCommandEvent& event) { DoSort(); }
  199.     void OnSortRev(wxCommandEvent& event) { DoSort(TRUE); }
  200.  
  201.     void OnAddItem(wxCommandEvent& event);
  202.     void OnInsertItem(wxCommandEvent& event);
  203.  
  204.     void OnIncIndent(wxCommandEvent& event);
  205.     void OnDecIndent(wxCommandEvent& event);
  206.  
  207.     void OnIncSpacing(wxCommandEvent& event);
  208.     void OnDecSpacing(wxCommandEvent& event);
  209.  
  210.     void OnToggleIcon(wxCommandEvent& event);
  211.  
  212.     void OnSize(wxSizeEvent& event);
  213.  
  214. private:
  215.     void TogStyle(int id, long flag);
  216.  
  217.     void DoSort(bool reverse = FALSE);
  218.  
  219.     void Resize();
  220.  
  221.     void CreateTreeWithDefStyle();
  222.     void CreateTree(long style);
  223.  
  224.     MyTreeCtrl *m_treeCtrl;
  225.     wxTextCtrl *m_textCtrl;
  226.  
  227.     void DoSetBold(bool bold = TRUE);
  228.  
  229.     DECLARE_EVENT_TABLE()
  230. };
  231.  
  232. // menu and control ids
  233. enum
  234. {
  235.     TreeTest_Quit,
  236.     TreeTest_About,
  237.     TreeTest_TogButtons,
  238.     TreeTest_TogTwist,
  239.     TreeTest_TogLines,
  240.     TreeTest_TogEdit,
  241.     TreeTest_TogHideRoot,
  242.     TreeTest_TogRootLines,
  243.     TreeTest_TogBorder,
  244.     TreeTest_TogFullHighlight,
  245.     TreeTest_SetFgColour,
  246.     TreeTest_SetBgColour,
  247.     TreeTest_ResetStyle,
  248.     TreeTest_Dump,
  249.     TreeTest_DumpSelected,
  250.     TreeTest_Count,
  251.     TreeTest_CountRec,
  252.     TreeTest_Sort,
  253.     TreeTest_SortRev,
  254.     TreeTest_SetBold,
  255.     TreeTest_ClearBold,
  256.     TreeTest_Rename,
  257.     TreeTest_Delete,
  258.     TreeTest_DeleteChildren,
  259.     TreeTest_DeleteAll,
  260.     TreeTest_Recreate,
  261.     TreeTest_ToggleImages,
  262.     TreeTest_ToggleButtons,
  263.     TreeTest_SetImageSize,
  264.     TreeTest_ToggleSel,
  265.     TreeTest_CollapseAndReset,
  266.     TreeTest_EnsureVisible,
  267.     TreeTest_AddItem,
  268.     TreeTest_InsertItem,
  269.     TreeTest_IncIndent,
  270.     TreeTest_DecIndent,
  271.     TreeTest_IncSpacing,
  272.     TreeTest_DecSpacing,
  273.     TreeTest_ToggleIcon,
  274.     TreeTest_Select,
  275.     TreeTest_Unselect,
  276.     TreeTest_Ctrl = 1000
  277. };
  278.