]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOGimmickView.h
create a TreeView and display it for addDB event
[creaImageIO.git] / src2 / creaImageIOGimmickView.h
index b044e2fc9fe5d5fb12bcc001ea4d91e6878f2626..347471561d4dffdf660f05fa2be4eb880aa7ea4c 100644 (file)
-namespace creaImageIO
-{
-    /**
-       * \ingroup View
-       */
+#ifndef __creaImageIOGimmickView_h_INCLUDED__
+#define __creaImageIOGimmickView_h_INCLUDED__
 
-       //=====================================================================  
-    
-    //=====================================================================
-    /// Abstract class to handle tree item information
-    struct TreeListCtrl
-    { 
-      TreeListCtrl() {}
-      virtual ~TreeListCtrl() {}
-    };
-       // EO class TreeListCtrl
+#include <creaImageIOGimmick.h>
+#include <creaImageIOTreeView.h>
+#include <creaImageIOSystem.h>
+#include <creaImageIOImagePointerHolder.h>
 
-       /**
-       * \ingroup View
-       */
-       //=====================================================================  
-    
-    //=====================================================================
-    /// Abstract class to handle tree item ids
-    struct TreeItemId
-    { 
-      TreeItemId() {}
-      virtual ~TreeItemId() {}
-    };
-       // EO class TreeItemId
+//#include <map>
+#include <vtkImageData.h>
+#include <creaImageIOMultiThreadImageReader.h>
+
+// Signal/slot mechanism for progress events
+#include <boost/signal.hpp>
+#include <boost/bind.hpp>
+
+#define GIMMICK_NO_IMAGE_SELECTION 0
+#define GIMMICK_2D_IMAGE_SELECTION 2
+#define GIMMICK_3D_IMAGE_SELECTION 3
+#define GIMMICK_4D_IMAGE_SELECTION 4
+
+#define NATIVE 0
+#define _2D 2
+#define _3D 3
 
+
+namespace creaImageIO
+{
        /**
        * \ingroup View
        */
+        
+       class ImageExtent;
     //=====================================================================
     
     //=====================================================================
     ///Abstract class that handles views, attributes and previews (GUI) for Gimmick.
-       class GimmickView
+       class GimmickView: public MultiThreadImageReaderUser
     {
     public:
       /// Ctor
-      GimmickView();
+      GimmickView(Gimmick*, int number_of_threads = 0 );
       /// Virtual destructor
       virtual ~GimmickView();
+      /// Initializes the view : 
+      /// Creates the TreeViews for all the TreeHandler of the Controller
+      /// 
+      virtual void Initialize();
+
+      /// Type of map from View name to TreeView* 
+      /// (This map is equivalent for Views of the TreeHandlerMap of Gimmick)
+      typedef std::map<std::string, TreeView*> TreeViewMapType;
+      
+      /// Returns the TreeViewMap (ref)
+      TreeViewMapType& GetTreeViewMap() { return mTreeViewMap; }
+      /// Returns the TreeViewMap (const ref)
+      const TreeViewMapType& GetTreeViewMap() const
+      { return mTreeViewMap; }
+
+      /// Finalize 
+      virtual void Finalize();
+
+         //Returns the maximal priority
+         int GetMaximalPriority(){return mReader.GetMaximalPriority();}
+
+      ///Adds the selected Images to the given vector and validates to see if they comply with the given parameter (4D)
+      virtual void GetSelectedImages(std::vector<vtkImageData*>& s, int dim) 
+         { GimmickError("INTERNAL ERROR : GetSelectedImages not implemented"); }
+
+      virtual void GetSelectedFiles(std::vector<std::string>& s)
+      { GimmickError("INTERNAL ERROR : GetSelectedFiles not implemented"); }
+
+         virtual void GetImages(int dim, std::vector<std::string> files, std::vector<vtkImageData*>& s) 
+         { GimmickError("INTERNAL ERROR : GetImages not implemented"); }
+
+      virtual void OnSelectionChange(const std::vector<tree::Node*>& s, bool isSelection, int selection, bool mProcess)
+      { GimmickError("INTERNAL ERROR : OnSelectionChange not implemented"); }
+
+          virtual void ClearSelection()
+      { GimmickError("INTERNAL ERROR : ClearSelection not implemented"); }
+      
+      
+      ///Validates the dimension compliance of the images with the maximum and minimum given, and between their sizes
+      bool ValidateSelected (tree::Node* sel, int min_dim, int max_dim);
+      
+      ///Reads the vector of images, builds it in the dimension required and returns them in the supplied vector.
+         void ReadImagesNotThreaded(std::vector<vtkImageData*>& s,std::vector<std::string> files, int dim);
+      ///Requests the reading of an image with priority and index in the 
+      /// current selection (-1 if not in selection)
+      void RequestReading(tree::Node* n, int prio, int selection_index , ImagePointerHolder *p);
+     
+      
+      ///Obtains the message of the state
+      std::string GetMessage(){return mMess;}
+      ///Obtains the message of the state
+      void SetMessage(std::string mess){mMess=mess;}
+         ///Resets the data of the extent and begins a new selection
+         void ResetExtent();
+
+      /// Create the tree views 
+      void CreateTreeViews();
+
+         /// Create a tree view with a given name
+         void CreateSingleTreeView(std::string &i_name);
+
+      /// Create the tree view for TreeHandler provided
+      virtual void CreateTreeView( TreeHandler*, TimestampDatabaseHandler* ) 
+      { GimmickError("INTERNAL ERROR : CreateTreeView not implemented"); }
+
+      /// Updates the TreeView of given name from level l to bottom
+      /// (calls the virtual method TreeView::UpdateLevel(l))
+      virtual void UpdateTreeViewLevel(const std::string&, int l);
+         // Multi-thread image reader callback
+         void OnMultiThreadImageReaderEvent(const std::string& filename,
+                                      MultiThreadImageReaderUser::EventType t,
+                                      vtkImageData* image);
+
+      vtkImageData* GetDefaultImage() { return mReader.GetImage(""); }
+
+
+      //=============================================
+      typedef boost::signal<void (bool)>  ValidationSignalType;
+      typedef ValidationSignalType::slot_function_type ValidationCallbackType;
+      //=============================================
+
+     //==================================================================
+      /// Adds the function f to the list of functions to call 
+      /// when the addition progresses.
+      /// f is of type ProgressCallbackType which is:
+      /// void (*ProgressCallbackType)(Progress&)
+      /// To pass a member function 'f' of an instance 'c' of a class 'C' 
+      /// as callback you have to 'bind' it, i.e. call:
+      /// ConnectValidationObserver ( boost::bind( &C::f , c, _1 ) );
+      void ConnectValidationObserver(ValidationCallbackType callback);
+     //==================================================================
+
+       void modifyValidationSignal(bool ivalid);
+
+    private:
+       
+      /// Controller which manages the interaction with the model
+      Gimmick* mGimmick;
+      /// The views 
+      TreeViewMapType mTreeViewMap;
+      /// The message that results from the validation
+      std::string mMess;
+
+      /// Multi-thread image reader
+      MultiThreadImageReader mReader;
+      /// Internal type of image reading event
+      /// If the image pointer is non null then the image is available (loaded)
+      /// else it has been unloaded
+      struct ImageEventType
+      {
+       ImageEventType( tree::Node* no = 0,   
+                       int sel_index = -1,
+                       ImagePointerHolder* ph= 0)
+         : node(no), index(sel_index),  pointerHolder(ph){}
+        ImageEventType(vtkImageData* im )
+         : image(im) {}
+        tree::Node* node;
+        vtkImageData* image;
+               int index;
+               ImagePointerHolder* pointerHolder;
+      };
+      typedef std::map<std::string,ImageEventType> ImageEventTypeMap;
+      /// Map of images' names to ImageEventType
+      /// Used to associated a filename to a the data of a request
+      ImageEventTypeMap mImageEventMap;
+      // queue of image event 
+      typedef std::deque<ImageEventType> ImageEventQueueType;
+      //ImageEventQueueType mImageEventQueue;
+
+         ///The current image extent
+         ImageExtent* mImageExtent;
+         ///The validation signal
+         ValidationSignalType mValidationSignal;
+         ///Boolean that determines if the selection is valid
+         bool valid;
+         ///Boolean that determines if the reader has been started
+         bool mReaderStarted;
+      
+       };
+  // EO class GimmickView
+    //=====================================================================
+  
+
+  /*
+
+
+
+
+
+
+
 
        //====================================================================
        // General
@@ -58,9 +208,7 @@ namespace creaImageIO
     virtual void GetSelectedImages(std::vector<vtkImageData*>&){ return; }
     /// Returns the vector of DicomNode corresponding to selection
     virtual void GetSelectedDicomNodes(std::vector<DicomNode*>&){ return; }
-    /// Returns the vector of TreeItemId corresponding to selection
-    virtual void GetSelectedItems(std::vector<TreeItemId>&){ return; }
-       /// Returns the DicomNode corresponding to the tree item
+   /// Returns the DicomNode corresponding to the tree item
     virtual DicomNode* GetDicomNodeOfItem(const TreeItemId& i);
 
        
@@ -73,18 +221,7 @@ namespace creaImageIO
     virtual const DicomDatabaseListType& GetDicomDatabaseList() const 
     { return null; }
 
-       /// Returns the TreeListCtrl of the main view
-    TreeListCtrl* GetTreeListCtrl() { return null; }
-    /// Returns the TreeListCtrl of the main view (const)
-    const TreeListCtrl* GetTreeListCtrl() const { return null; }
-
        protected:
-       ///Inserts a TreeItem in a specified database
-       virtual void InsertDicomDatabase(TreeItemId& id, DicomDatabase* r);
-       ///Deletes a TreeItem from a specified database
-    virtual void DeleteDicomDatabase(TreeItemId& id, DicomDatabase* r);
-       ///Loads the children of the specified TreeItem
-       virtual void LoadChildren( TreeItemId& id );
        ///Opens an existing database, or else, creates a local database.
     virtual void OpenOrNewDatabase(bool open){ return; }
        ///Shows the help
@@ -112,15 +249,6 @@ namespace creaImageIO
 
 
        public:
-       /// Sets a new configuration file
-    virtual void SetConfigurationFile(const std::string& filename){ return; }
-       ///Loads a configuration file with the parameters for the favorites database
-    virtual void LoadConfiguration(){ return; }
-       ///Saves a configuration file with the parameters for the favorites database
-    virtual void SaveConfiguration(){ return; }
-       ///Sets the status for the save configuration on close to the new value 
-       ///specified by the parameter
-    virtual void SetSaveConfigurationOnClose(bool v) { return; }
        ///Loads or creates a favorites database
     virtual void LoadOrCreateFavoritesDatabase(){ return; }
        private:
@@ -155,16 +283,7 @@ namespace creaImageIO
     /// to the DicomNode provided.
     /// parent is its parent in the tree (where to insert / remove it)
        virtual void UpdateDicomNodeView(DicomNode* n, const TreeItemId& parent){ return; }
-    /// Recursively deletes 
-    virtual void DeleteObsoleteChildren(TreeItemId& id){ return; }
-    /// Create the column titles of the children of the item
-    virtual TreeItemId CreateChildrenColumnsTitles(TreeItemId& item,
-                                            DicomNode::Type t){ return null }
-    /// Updates the titles of the columns
-    virtual void UpdateColumnsTitles(TreeItemId& item, DicomNode::Type t){ return; }
-    /// Updates the information on the columns
-    virtual void UpdateColumns(TreeItemId& item, bool only_first = false){ return; }
-
+    
        private:
        ///Type definition of the data regarding the tree
     typedef WxGimmickTreeItemData TreeItemData;
@@ -187,24 +306,15 @@ namespace creaImageIO
     DicomDatabaseListType mDicomDatabaseList;
        ///Favorites database
     DicomDatabase* mFavoriteDatabase;
-       ///The tree list controller
-    TreeListCtrl* mTreeListCtrl;
-       ///Path to the user settings directory
-    std::string mUserSettingsDirectory;
-    ///Path to the configuration file    
-    std::string mConfigurationFile;
+
        ///Path to the database list file
     std::string mDatabaseListFile;
-       ///Boolean to check wether to save on close or not
-    bool mSaveConfigurationOnClose;
        ///Extension of the database
     std::string mDatabaseExtension;
 
     bool mJustStarted;
 
     int  mFirstDicomDatabaseIconIndex;
-    // Id of the item which activated the popup menu 
-    TreeItemId mItemOfMenu;
 
    // Previewer
     vtkImageViewer2* mViewer;
@@ -217,14 +327,9 @@ namespace creaImageIO
     MultiThreadImageReader mReader;
     // map of images name to node
     std::map<std::string,DicomNode*> mImageFileNameToNode;
-    // Cur image item to show
-    TreeItemId mCurImageItemToShow;
-
-    };
-    // EO class GimmickView
-    //=====================================================================
-  
+  */
 } // EO namespace creaImageIO
 
 // EOF
-#endif  
\ No newline at end of file
+#endif