]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOGimmickView.h
create a TreeView and display it for addDB event
[creaImageIO.git] / src2 / creaImageIOGimmickView.h
index 011e47141e6bd533cd51c906baee552f8cebfb53..347471561d4dffdf660f05fa2be4eb880aa7ea4c 100644 (file)
@@ -4,11 +4,16 @@
 #include <creaImageIOGimmick.h>
 #include <creaImageIOTreeView.h>
 #include <creaImageIOSystem.h>
+#include <creaImageIOImagePointerHolder.h>
 
 //#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
@@ -24,6 +29,8 @@ namespace creaImageIO
        /**
        * \ingroup View
        */
+        
+       class ImageExtent;
     //=====================================================================
     
     //=====================================================================
@@ -56,48 +63,48 @@ namespace creaImageIO
          //Returns the maximal priority
          int GetMaximalPriority(){return mReader.GetMaximalPriority();}
 
-         ///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();}
-  
+      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"); }
 
-         ///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 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*) 
+      virtual void CreateTreeView( TreeHandler*, TimestampDatabaseHandler* 
       { GimmickError("INTERNAL ERROR : CreateTreeView not implemented"); }
 
       /// Updates the TreeView of given name from level l to bottom
@@ -108,35 +115,73 @@ namespace creaImageIO
                                       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;
-         /// 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;
+               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;
+      //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
+       };
+  // EO class GimmickView
     //=====================================================================
   
 
@@ -287,4 +332,4 @@ namespace creaImageIO
 } // EO namespace creaImageIO
 
 // EOF
-#endif  
+#endif