]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOWxTreeView.h
Added local copy functionality.
[creaImageIO.git] / src2 / creaImageIOWxTreeView.h
index 678c626039ccb04bd83bcb316ce4fff4b63db9a7..9d8c34afdbc9de07c6b4f4e29c01d77420835bd3 100644 (file)
@@ -6,8 +6,13 @@
 #include <creaImageIOTreeView.h>
 #include <creaWx.h>
 
+#include <wx/listctrl.h>
+#include <wx/splitter.h>
+//#include <vector>
+
 namespace creaImageIO
 {
+
   /**
    * \ingroup View
    */
@@ -19,21 +24,144 @@ namespace creaImageIO
     {
     public:
       /// Ctor
-      WxTreeView(TreeHandler*, wxWindow* parent, const wxWindowID id);
+      WxTreeView(TreeHandler*, GimmickView*, 
+                wxWindow* parent, const wxWindowID id);
       /// Virtual destructor
       virtual ~WxTreeView();
 
       
-      /// Something like that ...
-      virtual void UpdateView();
+      /// Updates the view of a level given the selected items of upper level
+      virtual void UpdateLevel( int );
+
+      ///Removes selected nodes on given level
+      virtual void RemoveSelected();
+
+         ///Returns the last selected level
+         virtual unsigned int GetLastSelectedLevel(){return mLastLevel;}
+
+      /// Callback for item selection
+      void OnItemSelected(wxListEvent& event);
+
+      /// Callback for item deselection
+      void OnItemDeSelected(wxListEvent& event);
       
+      /// Callback for column click
+      void OnColClick(wxListEvent& event);
+      
+      /// Callback when the user needs the items sorted
+      void OnPopupSort(wxCommandEvent& event);
+      
+      ///Callback when the user need the items filtered
+      void OnPopupFilter(wxCommandEvent& event);
 
+         ///Callback when the user need the items filtered
+      void OnLocalCopy(wxCommandEvent& event);
+      
+      ///Callback on mouse click
+      void OnMouseClick(wxMouseEvent& event);
+
+         // Display a menu for items
+         void OnItemMenu(wxListEvent &event);
+      
+      /// Actual processing of item selection/deselection 
+      /// Called by OnItemSelected and OnItemDeSelected
+      //      void ProcessItem
     private:
+      /// The struct holding the data for one level
+      /// Holds the wx control and other data
+      /// such as the vector of attribute keys corresponding to the columns
+      struct LevelType
+      {
+       // The List Control
+       wxListCtrl* wxCtrl;
+       wxSplitterWindow* wxSplitter;
+       std::vector<std::string> key;
+       // The vector of currently selected nodes of the level
+       std::vector<tree::Node*> Selected;
+       // True iff the vector Selected is up to date
+       bool SelectedUpToDate;
+       // The column used for sorting
+       unsigned int SortColumn;
+       ///Boolean that defines the direction of the sort
+       ///True is ascending order and false is descending
+       bool SortAscending;
+       // 
+      };
+      /// The vector of levels : one for each level of the tree      
+      std::vector<LevelType> mLevelList;
+      
+      /// return the wxListCtrl of one level
+      wxListCtrl* GetCtrl(int l) { return mLevelList[l].wxCtrl; }
+      /// return the wxSplitter of one level
+      wxSplitterWindow* GetSplitter(int l) { return mLevelList[l].wxSplitter; }
+      //Returns the maximum number of levels
+      int GetNumberOfLevels(){ return mLevelList.size(); }
+      /// Gets the user selected data from the level passed as a parameter
+      /// Updates the vector if necessary
+      const std::vector<tree::Node*>& GetSelected(int level);
+      /// Set the bool SelectedUpToDate for level l
+      void SetSelectedUpToDate(int l, bool v) { mLevelList[l].SelectedUpToDate = v; }
+      /// Get the bool SelectedUpToDate for level l
+      bool GetSelectedUpToDate(int l) { return mLevelList[l].SelectedUpToDate; }
+       ///Validates the selected images
+      void ValidateSelectedImages(bool isSelection);   
+      ///Gets selected filenames
+      void GetSelectedAsString(std::vector<std::string>&s);
+          ///Gets the filenames of the given nodes and returns them on the given vector. Is recursive.
+         void GetFilenamesAsString(const std::vector<tree::Node*>& nodes, std::vector<std::string>&s);
+        /// Gets the next nodes on the list, be it up(true) or down(false).
+      void GetNodes(std::vector<tree::Node*>& nodes, bool direction);
+      /// Updates the view of a level given the selected items of upper level
+      /// Recursive method
+      virtual void RecursiveUpdateLevel( int );
+      ///Sets the color of a selected item
+      void SetColor(int level, int item);
+      ///Creates the color palette for the first level
+      void CreateColorPalette();
+      ///Selects all the elements of a level 
+      void SelectAll(int level);
+      ///UnSelects all the elements of a level 
+      void UnSelectAll(int level);
+
+         void OnKeyDown(wxListEvent &event);
+      /// Sorts the level
+      void SortLevel(int level);
+      
+      /// Currently Selected Column
+      int mColumnSelected;
+      ///The last selected item on the list
+      long mLastSelected;
+      ///The color map
+      typedef std::map<tree::Node*,wxColour> ColorMap;
+      typedef std::pair<tree::Node*,wxColour> NodeColorPair;
+      ColorMap mColorMap;
+      ///Initial color palette
+      std::vector<std::string> mColorPalette;
+
+      wxMenu* menu;
+         
+      wxObject* senderCtrl;
+      int mAscendingID;
+      int mDescendingID;
+      int mFilterID;
+      unsigned int mLastLevel;
+      
+         wxMenu* menuItem;
+         int mAnonymizingID;
+         int mLocalCopyID;
+      // If set to true then OnSelectedChanged returns immediately.
+      // Used to do avoid useless process during multiple selections 
+      // or sorting
+      bool mIgnoreSelectedChanged;
 
+
+      DECLARE_EVENT_TABLE()
     };
     // EO class WxTreeView
     //=====================================================================
-  
+
+
+
 } // EO namespace creaImageIO