]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOGimmickView.h
_T
[creaImageIO.git] / src2 / creaImageIOGimmickView.h
index f2baa23406faefbdd82a54255669c1c9b12f0c7a..463b12a73baad29fd0b81eb7dc90f2b81224a9fd 100644 (file)
@@ -4,6 +4,7 @@
 #include <creaImageIOGimmick.h>
 #include <creaImageIOTreeView.h>
 #include <creaImageIOSystem.h>
+#include <creaImageIOImagePointerHolder.h>
 
 //#include <map>
 #include <vtkImageData.h>
 #define GIMMICK_4D_IMAGE_SELECTION 4
 
 #define NATIVE 0
-#define _2D 2
-#define _3D 3
-
+#define _2D    2
+#define _3D    3
 
 namespace creaImageIO
 {
        /**
        * \ingroup View
        */
+        
+       class ImageExtent;
     //=====================================================================
     
     //=====================================================================
@@ -36,7 +38,7 @@ namespace creaImageIO
     {
     public:
       /// Ctor
-      GimmickView(Gimmick*, int number_of_threads = 0 );
+      GimmickView(boost::shared_ptr<Gimmick>, int number_of_threads = 0 );
       /// Virtual destructor
       virtual ~GimmickView();
       /// Initializes the view : 
@@ -57,62 +59,93 @@ namespace creaImageIO
       /// Finalize 
       virtual void Finalize();
 
-         //Returns the maximal priority
-         int GetMaximalPriority(){return mReader.GetMaximalPriority();}
+         ///Returns the maximal priority
+      int GetMaximalPriority(){return mReader.GetMaximalPriority();}
+
+      ///Adds the selected Images to the given vector
+      virtual void GetSelectedImagesInVector(std::vector<vtkImageData*>& s, int dim)
+       { GimmickError("INTERNAL ERROR : GetSelectedImagesInVector not implemented"); }
 
-         ///Returns the selected Images and validates to see if they comply with the given parameter(<4D)
-         vtkImageData* GetSelectedImage(int dim);
       ///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 OnSelectionChange(std::vector<tree::Node*>& s)
-         { GimmickError("INTERNAL ERROR : OnSelectionChange not implemented"); }
-
-         ///Validates the dimension compliance of the images with the maximum and minimum given, and between their sizes
-         bool ValidateSelected (std::vector<tree::Node*>& sel, int min_dim, int max_dim);
-
-         ///Reads the vector of nodes, builds images in the dimension required and returns them in the supplied vector.
-         void ReadImagesNotThreaded(std::vector<vtkImageData*>& s,std::vector<tree::Node*> im, int dim);
-         ///Requests the reading of an image
-         void RequestReading(tree::Node* n, int prio){mReader.Request(this,n->GetAttribute("FullFileName"),prio);}
-         ///Adds an entry to the filename to node map
-         void AddEntryToMap(tree::Node* node){mImageFileNameToNode[node->GetAttribute("FullFileName")] = node;}
-         ///Returns true if the ImageEventQueue is empty
-         bool IsQueueEmpty(){return mImageEventQueue.empty();}
-         ///Clears the queue
-         void ClearQueue(){mImageEventQueue.clear();}
-         ///Returns the next in line EventType's image
-         vtkImageData* GetNextImageQueued(){return mImageEventQueue.front().image;}
-         ///Returns the next in line EventType's node
-         tree::Node* GetNextNodeQueued(){return mImageEventQueue.front().node;}
-         ///Unqueus the next in line EventType
-         void UnqueueNext(){mImageEventQueue.pop_front();}
-  
-
-         ///Obtains the message of the state
-         std::string GetMessage(){return mMess;}
-         ///Obtains the message of the state
-         void SetMessage(std::string mess){mMess=mess;}
+      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"); }
+
+         ///Adds a file to ignore
+         virtual void AddIgnoreFile(tree::Node* toRemove)
+         { GimmickError("INTERNAL ERROR : AddIgnoreFile not implemented"); }
+      
+         ///Copies selected files
+         virtual void CopyFiles(const std::vector<std::string>& filenames)
+         { GimmickError("INTERNAL ERROR : CopyFiles not implemented"); }
+
+         ///Edits the fields of a given node
+         virtual void CreateEditFieldsDialog(tree::Node* node, std::vector<std::string> names, std::vector<std::string> keys)
+         { GimmickError("INTERNAL ERROR : EditFields not implemented"); }
+      
+          ///Copies selected files
+         virtual void SaveAs(const std::vector<std::string>& filenames)
+         { GimmickError("INTERNAL ERROR : SaveAs not implemented"); }
+
+         /// No selected image
+         bool NoValidateSelected();
+
+      ///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);
+
+      ///Reads the vector of images, builds it in the dimension required and returns them in the supplied vector.
+         void ReadImagesNotThreadedInVector(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);
+         void RequestReading(tree::Node* n, int prio, int selection_index , boost::shared_ptr<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*) 
+      virtual void CreateTreeView( TreeHandler* 
       { 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;
       //=============================================
@@ -128,185 +161,66 @@ namespace creaImageIO
       void ConnectValidationObserver(ValidationCallbackType callback);
      //==================================================================
 
+       void modifyValidationSignal(bool ivalid);
+
     private:
+
       /// Controller which manages the interaction with the model
-      Gimmick* mGimmick;
+      boost::shared_ptr< Gimmick> mGimmick;
+
       /// The views 
       TreeViewMapType mTreeViewMap;
-         /// The message that results from the validation
-         std::string mMess;
-         /// Multi-thread image reader
-         MultiThreadImageReader mReader;
-         /// Map of images' names to nodes
-         std::map<std::string,tree::Node*> mImageFileNameToNode;
-         /// type of image event
-         /// If the image pointer is non null then the image is available (loaded)
+
+      /// 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,  vtkImageData* im )
-         : node(no), image(im) {}
+       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;
+               boost::shared_ptr<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;
-
-         ValidationSignalType mValidationSignal;
-      
-    };
-    // EO class GimmickView
-    //=====================================================================
-  
-
-  /*
-
-
-
-
-
-
-
-
-       //====================================================================
-       // General
-       //====================================================================
-
-    /// Returns the size of the current selection
-    virtual int GetSelectionSize() { return 0; } 
-    /// Returns true if there is a valid selection
-    virtual bool IsSelectionValid(){ return false; }
-    /// Returns the vector of full filenames of selected images
-    virtual void GetSelectedFiles(std::vector<std::string>&){ return; }
-    /// Returns the vector of images corresponding to selection
-    virtual void GetSelectedImages(std::vector<vtkImageData*>&){ return; }
-    /// Returns the vector of DicomNode corresponding to selection
-    virtual void GetSelectedDicomNodes(std::vector<DicomNode*>&){ return; }
-   /// Returns the DicomNode corresponding to the tree item
-    virtual DicomNode* GetDicomNodeOfItem(const TreeItemId& i);
-
-       
-       /// Type of list of DicomDatabase
-    typedef std::vector<DicomDatabase*> DicomDatabaseListType;
-    /// Returns the list of DicomDatabase open
-    virtual DicomDatabaseListType& GetDicomDatabaseList() 
-    { return null; }
-    /// Returns the list of DicomDatabase open (const)
-    virtual const DicomDatabaseListType& GetDicomDatabaseList() const 
-    { return null; }
-
-       protected:
-       ///Opens an existing database, or else, creates a local database.
-    virtual void OpenOrNewDatabase(bool open){ return; }
-       ///Shows the help
-       virtual void ShowHelp();
-
-       private:
-       ///Gets the extension of the database
-       const std::string& GetDatabaseExtension() { return null; }
-       ///Sets the extension of the database
-    virtual void SetDatabaseExtension(const std::string& ext){ return; }
-
-
-       //====================================================================
-    // Preview Display Related
-       //====================================================================
-
-
-    ///Shows the image sent as a parameter
-       private:
-        virtual void ShowImage(vtkImageData* image){ return; }
-
-       //====================================================================
-    // Favorites Related
-       //====================================================================
-
-
-       public:
-       ///Loads or creates a favorites database
-    virtual void LoadOrCreateFavoritesDatabase(){ return; }
-       private:
-       ///Creates the user settings directory
-    void CreateUserSettingsDirectory(){ return; }
-       ///Obtains the user settings directory
-       const std::string& GetUserSettingsDirectory(){ return null; }
-
-       //====================================================================  
-       // Attribute Display Related
-       //====================================================================
-
-
-       ///Shows the Information regarding the node sent as a parameter
-       private:
-     virtual void ShowInformation(DicomNode*){ return; }
-   
-       //====================================================================
-    // Tree Display Related
-    //====================================================================
-
-       protected:
-    /// Completely rebuilds the view with 
-    /// current DicomDatabaseList
-    virtual void RebuildView(){ return; }
-       /// Recursively updates the part of the view corresponding 
-    /// to the DicomDatabase passed
-    /// i.e. creates items for the DicomNode which do not have
-    ///      deletes obsolete items (whose DicomNode has been deleted)
-    virtual void UpdateDicomDatabaseView(DicomDatabase*){ return; }
-    /// Recursively updates the part of the view corresponding 
-    /// 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; }
-    
-       private:
-       ///Type definition of the data regarding the tree
-    typedef WxGimmickTreeItemData TreeItemData;
-       ///Gets the item data of the tree item passed as a parameter
-    TreeItemData* GetItemData(const TreeItemId& id){ return null; }
-    ///Type definition of the data insid a node of the tree
-    typedef WxGimmickDicomNodeData NodeData;
 
+      //ImageEventQueueType mImageEventQueue;
 
-       //====================================================================
-    // Class Attributes
-    //====================================================================
+         ///The current image extent
+         boost::shared_ptr<ImageExtent> mImageExtent;
 
-       
-       int mSelectionType;
-    int mSelectionMaxImageDimension;
-    int mCurrentSelectionImageSize[4];
-
-       ///Existent Database List
-    DicomDatabaseListType mDicomDatabaseList;
-       ///Favorites database
-    DicomDatabase* mFavoriteDatabase;
+         ///The validation signal
+         ValidationSignalType mValidationSignal;
 
-       ///Path to the database list file
-    std::string mDatabaseListFile;
-       ///Extension of the database
-    std::string mDatabaseExtension;
+         ///Boolean that determines if the selection is valid
+         bool valid;
 
-    bool mJustStarted;
+         ///Boolean that determines if the reader has been started
+         bool mReaderStarted;
 
-    int  mFirstDicomDatabaseIconIndex;
+       };
+  // EO class GimmickView
+    //=====================================================================
 
-   // Previewer
-    vtkImageViewer2* mViewer;
-    
-    int mx1,mx2,my1,my2,mz1,mz2;
-    double mspx,mspy,mspz;
-  
-    // Image preview :
-    // Multi-thread image reader
-    MultiThreadImageReader mReader;
-    // map of images name to node
-    std::map<std::string,DicomNode*> mImageFileNameToNode;
-  */
  
 } // EO namespace creaImageIO
 
 // EOF
-#endif  
+#endif