X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOGimmickView.h;h=83b74078d5dc10887b81e8bb39d71343b59b468a;hb=71365e2ce56b1ccf93054818d5d5cf64bcbaafb4;hp=62dc2d12ee8df2328fecbf6aa964a306c01dc0b9;hpb=403cc3cf787a717b7a9cdf2d148758a66dbdce27;p=creaImageIO.git diff --git a/src2/creaImageIOGimmickView.h b/src2/creaImageIOGimmickView.h index 62dc2d1..83b7407 100644 --- a/src2/creaImageIOGimmickView.h +++ b/src2/creaImageIOGimmickView.h @@ -4,11 +4,16 @@ #include #include #include +#include //#include #include #include +// Signal/slot mechanism for progress events +#include +#include + #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; //===================================================================== //===================================================================== @@ -35,8 +42,6 @@ namespace creaImageIO GimmickView(Gimmick*, int number_of_threads = 0 ); /// Virtual destructor virtual ~GimmickView(); - - /// Initializes the view : /// Creates the TreeViews for all the TreeHandler of the Controller /// @@ -55,25 +60,42 @@ namespace creaImageIO /// Finalize virtual void Finalize(); - ///Returns the selected Images and validates to see if they comply with the given parameter(<4D) - vtkImageData* GetSelectedImage(int dim); + //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& s, int dim) { GimmickError("INTERNAL ERROR : GetSelectedImages not implemented"); } - virtual void GetSelectedFiles(std::vector& s) - { GimmickError("INTERNAL ERROR : GetSelectedFiles not implemented"); } + virtual void GetSelectedFiles(std::vector& s) + { GimmickError("INTERNAL ERROR : GetSelectedFiles not implemented"); } - ///Validates the dimension compliance of the images with the maximum and minimum given, and between their sizes - bool ValidateSelected (std::vector& sel, int min_dim, int max_dim); + virtual void GetImages(int dim, std::vector files, std::vector& s) + { GimmickError("INTERNAL ERROR : GetImages not implemented"); } - ///Reads the vector of nodes, builds images in the dimension required and returns them in the supplied vector. - void ReadImagesNotThreaded(std::vector& s,std::vector im, int dim); + virtual void OnSelectionChange(const std::vector& 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& s,std::vector 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(); @@ -85,20 +107,78 @@ namespace creaImageIO /// 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 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; - + /// 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 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 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 + }; + // EO class GimmickView //===================================================================== @@ -249,4 +329,4 @@ namespace creaImageIO } // EO namespace creaImageIO // EOF -#endif +#endif