]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOWxTreeView.h
For a given file, display all dicom tags.
[creaImageIO.git] / src2 / creaImageIOWxTreeView.h
index 3e6c10675f606c41552103a6970faf7c32914234..49dd62b9c3fc87344db462404c77767e9793fce0 100644 (file)
@@ -9,10 +9,25 @@
 #include <wx/listctrl.h>
 #include <wx/splitter.h>
 //#include <vector>
-
+const std::string empty_string("");
 namespace creaImageIO
 {
 
+         //=====================================================================
+  /// Data stored by the list items
+  struct ItemData
+  {
+    ItemData() : node(0), id(-1), attr(&empty_string) {}
+    // The corresponding Node
+    tree::Node* node;
+    // The id ?
+    int id;
+    // The pointer on the current attribute string to sort on
+    const std::string* attr;
+    // Was the item previously selected ?
+    // Useful for reselecting the item after sort
+    bool selected;
+  };
   /**
    * \ingroup View
    */
@@ -33,23 +48,59 @@ namespace creaImageIO
       /// 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( int );
+      ///Removes selected nodes on given level
+         virtual void RemoveSelected(std::string &i_save);
+
+         ///Returns the last selected level
+         virtual unsigned int GetLastSelectedLevel(){return mLastLevel;}
 
-         /// Callback for selection change
-      void OnSelectedChanged(wxListEvent& event);
+      /// Callback for item selection
+      void OnItemSelected(wxListEvent& event);
 
-         /// Callback for column click
+      /// 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 needs the items sorted
-         void OnPopupSort(wxCommandEvent& event);
+         ///Callback when the user needs the item copied to the local disk
+      void OnLocalCopy(wxCommandEvent& event);
 
-         ///Callback when the user need the items filtered
-          void OnPopupFilter(wxCommandEvent& event);
+         ///Callback when the user needs to edit a field
+      void OnEditField(wxCommandEvent& event);
 
+         ///Callback when the user needs to display alll dicom tags for a file
+         void OnDumpTags(wxCommandEvent &event);
+      
+      ///Callback on mouse click
+      void OnMouseClick(wxMouseEvent& event);
+
+         /// Displays a menu for items
+         void OnItemMenu(wxListEvent &event);
+         
+         /// Gets the attributes that are being shown and the ones that have been blocked on a specific level
+         void GetAttributes(std::vector<std::string>& areShown, std::vector<std::string>& notShown, int level);
+
+         ///Sets the non visible attributes and refreshes the GUI
+         void SetNonVisibleAttributes(const std::vector<std::string>& notShown, int level);
+
+         ///Creates a new listctrl
+         void CreateCtrl(std::vector<std::string>& notShown, int nlevel);
+  
+         ///Returns true if the attribute passed as a parameter is visible or not
+         bool IsAttributeVisible(const std::string& val, int level);
+      
+      /// Actual processing of item selection/deselection 
+      /// Called by OnItemSelected and OnItemDeSelected
+      //      void ProcessItem
     private:
+               wxBoxSizer      *msizer;
       /// 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
@@ -59,6 +110,17 @@ namespace creaImageIO
        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 not shown attributes
+       std::vector<std::string> notShownAtts; 
       };
       /// The vector of levels : one for each level of the tree      
       std::vector<LevelType> mLevelList;
@@ -67,61 +129,92 @@ namespace creaImageIO
       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
-      std::vector<tree::Node*> GetSelected(int level);
-         ///Validates the selected images
+      //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 next nodes on the list, be it up(true) or down(false).
+      ///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 the lowest level (images)
-         void SelectLowerLevel();
-         ///Sorts items
-         void OnSort(int level);
-
-
-
+      ///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;
-         ///Boolean that defines the direction of the organization
-         ///True is ascending order and false is descending
-         bool mDirection;
-         ///The last selected item on the list
-         long mLastSelected;
-         ///The last selection of nodes (for every level, except the last)
-         std::vector<tree::Node*> mSelected;
-         ///The last selection of nodes (for the last level)
-         std::vector<tree::Node*> mLastLevelSelected;
-         ///The color map
-         typedef std::map<tree::Node*,wxColour> ColorMap;
-         typedef std::pair<tree::Node*,wxColour> NodeColorPair;
+      int mColumnSelected;
+      ///The last selected item on the list (left click)
+      long mLastSelected;
+
+         ///The last selected item on the list (right click)
+         long mLastRightSelected;
+
+         ///The last selected level (by right click)
+         int mLastRightLevel;
+      ///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;
-         ///Boolean declaring if the last level selection has been made
-         bool mSelectionMade;
-         bool mProcess;
-         wxMenu* menu;
-         wxObject* senderCtrl;
-         int mAscendingID;
-         int mDescendingID;
-         int mFilterID;
+      ///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;
+         int mEditFieldID;
+         int mDumpID;
+         
+      // 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
     //=====================================================================
 
+       class RemoveAlertDlg : public wxDialog
+       {
+       public:
+               RemoveAlertDlg(wxWindow *parent, 
+                                              wxString title,    
+                                                  const wxSize& size);
+               ~RemoveAlertDlg();
+
+               bool isChecked();
+
+       private :
+               void onCheck(wxCommandEvent &Event);
+               bool mSave;
+               wxCheckBox *mcheck;
+
+       };
 
 
 } // EO namespace creaImageIO