1 #ifndef __creaImageIOWxTreeView_h_INCLUDED__
2 #define __creaImageIOWxTreeView_h_INCLUDED__
6 #include <creaImageIOTreeView.h>
9 #include <wx/listctrl.h>
10 #include <wx/splitter.h>
19 //=====================================================================
21 //=====================================================================
22 /// Abstract class that handles the view of a Tree through its TreeHandler
23 class WxTreeView : public wxPanel, virtual public TreeView
27 WxTreeView(TreeHandler*, GimmickView*,
28 wxWindow* parent, const wxWindowID id);
29 /// Virtual destructor
30 virtual ~WxTreeView();
33 /// Updates the view of a level given the selected items of upper level
34 virtual void UpdateLevel( int );
36 ///Removes selected nodes on given level
37 virtual void RemoveSelected();
39 ///Returns the last selected level
40 virtual unsigned int GetLastSelectedLevel(){return mLastLevel;}
42 /// Callback for item selection
43 void OnItemSelected(wxListEvent& event);
45 /// Callback for item deselection
46 void OnItemDeSelected(wxListEvent& event);
48 /// Callback for column click
49 void OnColClick(wxListEvent& event);
51 /// Callback when the user needs the items sorted
52 void OnPopupSort(wxCommandEvent& event);
54 ///Callback when the user need the items filtered
55 void OnPopupFilter(wxCommandEvent& event);
57 ///Callback when the user needs the item copied to the local disk
58 void OnLocalCopy(wxCommandEvent& event);
60 ///Callback when the user needs to edit a field
61 void OnEditField(wxCommandEvent& event);
63 ///Callback on mouse click
64 void OnMouseClick(wxMouseEvent& event);
66 /// Displays a menu for items
67 void OnItemMenu(wxListEvent &event);
69 /// Gets the attributes that are being shown and the ones that have been blocked on a specific level
70 void GetAttributes(std::vector<std::string>& areShown, std::vector<std::string>& notShown, int level);
72 ///Sets the non visible attributes and refreshes the GUI
73 void SetNonVisibleAttributes(const std::vector<std::string>& notShown, int level);
75 ///Creates a new listctrl
76 void CreateCtrl(std::vector<std::string>& notShown, int nlevel);
78 ///Returns true if the attribute passed as a parameter is visible or not
79 bool IsAttributeVisible(const std::string& val, int level);
81 /// Actual processing of item selection/deselection
82 /// Called by OnItemSelected and OnItemDeSelected
85 /// The struct holding the data for one level
86 /// Holds the wx control and other data
87 /// such as the vector of attribute keys corresponding to the columns
92 wxSplitterWindow* wxSplitter;
93 std::vector<std::string> key;
94 // The vector of currently selected nodes of the level
95 std::vector<tree::Node*> Selected;
96 // True iff the vector Selected is up to date
97 bool SelectedUpToDate;
98 // The column used for sorting
99 unsigned int SortColumn;
100 ///Boolean that defines the direction of the sort
101 ///True is ascending order and false is descending
103 //The vector of not shown attributes
104 std::vector<std::string> notShownAtts;
106 /// The vector of levels : one for each level of the tree
107 std::vector<LevelType> mLevelList;
109 /// return the wxListCtrl of one level
110 wxListCtrl* GetCtrl(int l) { return mLevelList[l].wxCtrl; }
111 /// return the wxSplitter of one level
112 wxSplitterWindow* GetSplitter(int l) { return mLevelList[l].wxSplitter; }
113 //Returns the maximum number of levels
114 int GetNumberOfLevels(){ return mLevelList.size(); }
115 /// Gets the user selected data from the level passed as a parameter
116 /// Updates the vector if necessary
117 const std::vector<tree::Node*>& GetSelected(int level);
118 /// Set the bool SelectedUpToDate for level l
119 void SetSelectedUpToDate(int l, bool v) { mLevelList[l].SelectedUpToDate = v; }
120 /// Get the bool SelectedUpToDate for level l
121 bool GetSelectedUpToDate(int l) { return mLevelList[l].SelectedUpToDate; }
122 ///Validates the selected images
123 void ValidateSelectedImages(bool isSelection);
124 ///Gets selected filenames
125 void GetSelectedAsString(std::vector<std::string>&s);
126 ///Gets the filenames of the given nodes and returns them on the given vector. Is recursive.
127 void GetFilenamesAsString(const std::vector<tree::Node*>& nodes, std::vector<std::string>&s);
128 /// Gets the next nodes on the list, be it up(true) or down(false).
129 void GetNodes(std::vector<tree::Node*>& nodes, bool direction);
130 /// Updates the view of a level given the selected items of upper level
132 virtual void RecursiveUpdateLevel( int );
133 ///Sets the color of a selected item
134 void SetColor(int level, int item);
135 ///Creates the color palette for the first level
136 void CreateColorPalette();
137 ///Selects all the elements of a level
138 void SelectAll(int level);
139 ///UnSelects all the elements of a level
140 void UnSelectAll(int level);
142 void OnKeyDown(wxListEvent &event);
144 void SortLevel(int level);
146 /// Currently Selected Column
148 ///The last selected item on the list (left click)
151 ///The last selected item on the list (right click)
152 long mLastRightSelected;
154 ///The last selected level (by right click)
157 typedef std::map<tree::Node*,wxColour> ColorMap;
158 typedef std::pair<tree::Node*,wxColour> NodeColorPair;
160 ///Initial color palette
161 std::vector<std::string> mColorPalette;
165 wxObject* senderCtrl;
169 unsigned int mLastLevel;
176 // If set to true then OnSelectedChanged returns immediately.
177 // Used to do avoid useless process during multiple selections
179 bool mIgnoreSelectedChanged;
182 DECLARE_EVENT_TABLE()
184 // EO class WxTreeView
185 //=====================================================================
189 } // EO namespace creaImageIO
192 #endif // USE_WIDGETS