]> Creatis software - creaImageIO.git/blob - src2/creaImageIOWxTreeView.h
Made a slight change to eliminate an error when creating databases with different...
[creaImageIO.git] / src2 / creaImageIOWxTreeView.h
1 #ifndef __creaImageIOWxTreeView_h_INCLUDED__
2 #define __creaImageIOWxTreeView_h_INCLUDED__
3
4 #ifdef USE_WXWIDGETS
5
6 #include <creaImageIOTreeView.h>
7 #include <creaWx.h>
8
9 #include <wx/listctrl.h>
10 #include <wx/splitter.h>
11 //#include <vector>
12
13 namespace creaImageIO
14 {
15
16   /**
17    * \ingroup View
18    */
19   //=====================================================================
20   
21   //=====================================================================
22   /// Abstract class that handles the view of a Tree through its TreeHandler
23   class WxTreeView : public wxPanel, virtual public TreeView
24     {
25     public:
26       /// Ctor
27       WxTreeView(TreeHandler*, GimmickView*, 
28                  wxWindow* parent, const wxWindowID id);
29       /// Virtual destructor
30       virtual ~WxTreeView();
31
32       
33       /// Updates the view of a level given the selected items of upper level
34       virtual void UpdateLevel( int );
35
36       ///Removes selected nodes on given level
37       virtual void RemoveSelected();
38
39           ///Returns the last selected level
40           virtual unsigned int GetLastSelectedLevel(){return mLastLevel;}
41
42       /// Callback for item selection
43       void OnItemSelected(wxListEvent& event);
44
45       /// Callback for item deselection
46       void OnItemDeSelected(wxListEvent& event);
47       
48       /// Callback for column click
49       void OnColClick(wxListEvent& event);
50       
51       /// Callback when the user needs the items sorted
52       void OnPopupSort(wxCommandEvent& event);
53       
54       ///Callback when the user need the items filtered
55       void OnPopupFilter(wxCommandEvent& event);
56
57           ///Callback when the user needs the item copied to the local disk
58       void OnLocalCopy(wxCommandEvent& event);
59
60           ///Callback when the user needs to edit a field
61       void OnEditField(wxCommandEvent& event);
62       
63       ///Callback on mouse click
64       void OnMouseClick(wxMouseEvent& event);
65
66           /// Displays a menu for items
67           void OnItemMenu(wxListEvent &event);
68           
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);
71
72           ///Sets the non visible attributes and refreshes the GUI
73           void SetNonVisibleAttributes(const std::vector<std::string>& notShown, int level);
74
75           ///Creates a new listctrl
76           void CreateCtrl(std::vector<std::string>& notShown, int nlevel);
77   
78           ///Returns true if the attribute passed as a parameter is visible or not
79           bool IsAttributeVisible(const std::string& val, int level);
80       
81       /// Actual processing of item selection/deselection 
82       /// Called by OnItemSelected and OnItemDeSelected
83       //      void ProcessItem
84     private:
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
88       struct LevelType
89       {
90         // The List Control
91         wxListCtrl* wxCtrl;
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
102         bool SortAscending;
103         //The vector of not shown attributes
104         std::vector<std::string> notShownAtts; 
105       };
106       /// The vector of levels : one for each level of the tree      
107       std::vector<LevelType> mLevelList;
108       
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
131       /// Recursive method
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);
141
142           void OnKeyDown(wxListEvent &event);
143       /// Sorts the level
144       void SortLevel(int level);
145       
146       /// Currently Selected Column
147       int mColumnSelected;
148       ///The last selected item on the list (left click)
149       long mLastSelected;
150
151           ///The last selected item on the list (right click)
152           long mLastRightSelected;
153
154           ///The last selected level (by right click)
155           int mLastRightLevel;
156       ///The color map
157       typedef std::map<tree::Node*,wxColour> ColorMap;
158       typedef std::pair<tree::Node*,wxColour> NodeColorPair;
159       ColorMap mColorMap;
160       ///Initial color palette
161       std::vector<std::string> mColorPalette;
162
163       wxMenu* menu;
164           
165       wxObject* senderCtrl;
166       int mAscendingID;
167       int mDescendingID;
168       int mFilterID;
169       unsigned int mLastLevel;
170       
171           wxMenu* menuItem;
172           int mAnonymizingID;
173           int mLocalCopyID;
174           int mEditFieldID;
175           
176       // If set to true then OnSelectedChanged returns immediately.
177       // Used to do avoid useless process during multiple selections 
178       // or sorting
179       bool mIgnoreSelectedChanged;
180
181
182       DECLARE_EVENT_TABLE()
183     };
184     // EO class WxTreeView
185     //=====================================================================
186
187
188
189 } // EO namespace creaImageIO
190
191
192 #endif // USE_WIDGETS
193 // EOF
194 #endif