GimmickView(Gimmick*, int number_of_threads = 0 );
/// Virtual destructor
virtual ~GimmickView();
-
-
/// Initializes the view :
/// Creates the TreeViews for all the TreeHandler of the Controller
///
/// 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)
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;}
/// 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
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)
+ /// 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<ImageEventType> ImageEventQueueType;
+ ImageEventQueueType mImageEventQueue;
};
// EO class GimmickView