X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOGimmickView.h;h=0510c1742e1ada032b8b8a21407b3e3b4598a2b9;hb=e79fb1c492e93cdd1a5a95ba0ab491b868cf5992;hp=2687d383504a2cb072b25bb3c21dbf708df5e2aa;hpb=1bc65575c477b90bac7c4b02869e40a0d9fb11b0;p=creaImageIO.git diff --git a/src2/creaImageIOGimmickView.h b/src2/creaImageIOGimmickView.h index 2687d38..0510c17 100644 --- a/src2/creaImageIOGimmickView.h +++ b/src2/creaImageIOGimmickView.h @@ -4,6 +4,7 @@ #include #include #include +#include //#include #include @@ -19,15 +20,16 @@ #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, int number_of_threads = 0 ); /// Virtual destructor virtual ~GimmickView(); /// Initializes the view : @@ -57,65 +59,99 @@ 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& 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& s, int dim) { GimmickError("INTERNAL ERROR : GetSelectedImages not implemented"); } virtual void GetSelectedFiles(std::vector& s) { GimmickError("INTERNAL ERROR : GetSelectedFiles not implemented"); } - virtual void OnSelectionChange(std::vector& s) + + virtual void GetImages(int dim, std::vector files, std::vector& s) + { GimmickError("INTERNAL ERROR : GetImages not implemented"); } + + virtual void OnSelectionChange(const std::vector& 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"); } - ///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 with priority and index in the - /// current selection (-1 if not in selection) - void RequestReading(tree::Node* n, int prio, int selection_index); - - ///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;} - ///Returns the next in line EventType's index in selection - int GetNextSelectionIndexQueued(){return mImageEventQueue.front().index;} - ///Unqueus the next in line EventType - void UnqueueNext(){mImageEventQueue.pop_front();} + ///Copies selected files + virtual void CopyFiles(const std::vector& filenames) + { GimmickError("INTERNAL ERROR : CopyFiles not implemented"); } + + ///Edits the fields of a given node + virtual void CreateEditFieldsDialog(tree::Node* node, std::vector names, std::vector keys) + { GimmickError("INTERNAL ERROR : EditFields not implemented"); } + /// Display all Dicom Tags + virtual void DumpTags(const std::string filename) + {GimmickError("INTERNAL ERROR : DumpTags not implemented"); } + + ///Edits the fields of a given node + virtual void ExportToStorage(const std::vector keys) + { GimmickError("INTERNAL ERROR : ExportToStorage not implemented"); } + ///Copies selected files + virtual void SaveAs(const std::vector& 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& s,std::vector 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& 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); + void RequestReading(tree::Node* n, int prio, int selection_index , boost::shared_ptr p); + ///Obtains the message of the state std::string GetMessage(){return mMess;} - ///Obtains the message of the state + + ///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() { mReader.GetImage(""); } - + vtkImageData* GetDefaultImage() { return mReader.GetImage(""); } //============================================= typedef boost::signal ValidationSignalType; @@ -133,192 +169,68 @@ namespace creaImageIO void ConnectValidationObserver(ValidationCallbackType callback); //================================================================== + void modifyValidationSignal(bool ivalid); private: + + double OrderTheFileNameVector(std::vector &im); + /// 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; + /// 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, - vtkImageData* im = 0, + ImageEventType( tree::Node* no = 0, int sel_index = -1) - : node(no), image(im), index(sel_index) {} +// ImagePointerHolder* ph= 0) + : node(no), index(sel_index){}//, pointerHolder(ph){} ImageEventType(vtkImageData* im ) : image(im) {} tree::Node* node; vtkImageData* image; - int index; + int index; + boost::shared_ptr 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; - 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&){ return; } - /// Returns the vector of images corresponding to selection - virtual void GetSelectedImages(std::vector&){ return; } - /// Returns the vector of DicomNode corresponding to selection - virtual void GetSelectedDicomNodes(std::vector&){ return; } - /// Returns the DicomNode corresponding to the tree item - virtual DicomNode* GetDicomNodeOfItem(const TreeItemId& i); - - - /// Type of list of DicomDatabase - typedef std::vector 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; - - - //==================================================================== - // Class Attributes - //==================================================================== + //ImageEventQueueType mImageEventQueue; - - int mSelectionType; - int mSelectionMaxImageDimension; - int mCurrentSelectionImageSize[4]; + ///The current image extent + boost::shared_ptr mImageExtent; - ///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 mImageFileNameToNode; - */ } // EO namespace creaImageIO // EOF -#endif +#endif