Umasoft
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
TreeView.h
1 //
2 // TreeView.h
3 //
4 // Copyright (c) 2001-2008 Virtual Terrain Project
5 // Free for all uses, see license.txt for details.
6 //
7 
8 #include "wx/treectrl.h"
9 #include "wx/imaglist.h"
10 #include "wx/image.h"
11 
12 #include "Layer.h"
13 
14 class Builder;
15 
16 class MyTreeItemData : public wxTreeItemData
17 {
18 public:
19  MyTreeItemData(vtLayer *pLayer) { m_pLayer = pLayer; }
20  MyTreeItemData(LayerType lt) { m_type = lt; m_pLayer = NULL; }
21  vtLayerPtr m_pLayer;
22  LayerType m_type;
23 };
24 
25 class MyTreeCtrl : public wxTreeCtrl
26 {
27 public:
28  enum
29  {
30  TreeCtrlIcon_File,
31  TreeCtrlIcon_FileSelected,
32  TreeCtrlIcon_Folder,
33  TreeCtrlIcon_FolderSelected,
34  TreeCtrlIcon_FolderOpened,
35  TreeCtrlIcon_Building,
36  TreeCtrlIcon_Road,
37  TreeCtrlIcon_Grid,
38  TreeCtrlIcon_Image,
39  TreeCtrlIcon_Veg1,
40  TreeCtrlIcon_Water,
41  TreeCtrlIcon_Transit,
42  TreeCtrlIcon_Utility,
43  TreeCtrlIcon_Raw
44  };
45 
46  MyTreeCtrl() { }
47  MyTreeCtrl(wxWindow *parent, const wxWindowID id,
48  const wxPoint& pos, const wxSize& size,
49  long style);
50  virtual ~MyTreeCtrl();
51 
52  void SetShowPaths(bool b) { m_bShowPaths = b; }
53  bool GetShowPaths() { return m_bShowPaths; }
54 
55  void CreateImageList(int size = 16);
56  wxString MakeItemName(vtLayerPtr lp);
57 
58  wxTreeItemId AddRootItem(int image, const wxString &text);
59  void RefreshTreeItems(Builder *pBuilder);
60  void RefreshTreeStatus(Builder *pBuilder);
61 
62  void DoSortChildren(const wxTreeItemId& item, bool reverse = FALSE)
63  { m_reverseSort = reverse; wxTreeCtrl::SortChildren(item); }
64  void DoEnsureVisible() { EnsureVisible(m_lastItem); }
65 
66  void DoToggleIcon(const wxTreeItemId& item);
67 
68  LayerType m_clicked_layer_type;
69 
70 protected:
71  void OnBeginDrag(wxTreeEvent& event);
72  void OnBeginRDrag(wxTreeEvent& event);
73  void OnEndDrag(wxTreeEvent& event);
74  void OnBeginLabelEdit(wxTreeEvent& event);
75  void OnEndLabelEdit(wxTreeEvent& event);
76  void OnDeleteItem(wxTreeEvent& event);
77  void OnGetInfo(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 OnItemRightClick(wxTreeEvent& event);
87  void OnRMouseDClick(wxMouseEvent& event);
88 
89  virtual int OnCompareItems(const wxTreeItemId& i1, const wxTreeItemId& i2);
90 
91 private:
92  wxImageList *m_imageListNormal;
93  bool m_reverseSort; // flag for OnCompareItems
94  wxTreeItemId m_lastItem; // for OnEnsureVisible()
95  bool m_bShowPaths;
96  bool m_bUser;
97 
98  // NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS()
99  // if you want your overloaded OnCompareItems() to be called.
100  // OTOH, if you don't want it you may omit the next line - this will
101  // make default (alphabetical) sorting much faster under wxMSW.
102  DECLARE_DYNAMIC_CLASS(MyTreeCtrl)
103  DECLARE_EVENT_TABLE()
104 };
105