X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOGimmickView.h;h=011e47141e6bd533cd51c906baee552f8cebfb53;hb=7c5180e6b19690ba9a264f2a66c04bc0a03c53ef;hp=62dc2d12ee8df2328fecbf6aa964a306c01dc0b9;hpb=403cc3cf787a717b7a9cdf2d148758a66dbdce27;p=creaImageIO.git diff --git a/src2/creaImageIOGimmickView.h b/src2/creaImageIOGimmickView.h index 62dc2d1..011e471 100644 --- a/src2/creaImageIOGimmickView.h +++ b/src2/creaImageIOGimmickView.h @@ -35,8 +35,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,6 +53,9 @@ namespace creaImageIO /// Finalize virtual void Finalize(); + //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) @@ -63,12 +64,29 @@ namespace creaImageIO virtual void GetSelectedFiles(std::vector& s) { GimmickError("INTERNAL ERROR : GetSelectedFiles not implemented"); } + virtual void OnSelectionChange(std::vector& 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& 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& s,std::vector 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;} @@ -85,6 +103,10 @@ 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); private: /// Controller which manages the interaction with the model @@ -95,7 +117,23 @@ namespace creaImageIO std::string mMess; /// Multi-thread image reader MultiThreadImageReader mReader; - + /// Map of images' names to nodes + std::map mImageFileNameToNode; + /// type of image 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(vtkImageData* im ) + : image(im) {} + tree::Node* node; + vtkImageData* image; + }; + // queue of image event + typedef std::deque ImageEventQueueType; + ImageEventQueueType mImageEventQueue; }; // EO class GimmickView