X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=src2%2FcreaImageIOGimmickView.h;h=9230ba38f10fece6a08cb9b70207fc00c46ce5bd;hb=e4a54c9026a2a0c17e3be0b5915c34688a9385ad;hp=b044e2fc9fe5d5fb12bcc001ea4d91e6878f2626;hpb=9bcef355910f147e16a71ae068c1dcb99c1686de;p=creaImageIO.git diff --git a/src2/creaImageIOGimmickView.h b/src2/creaImageIOGimmickView.h index b044e2f..9230ba3 100644 --- a/src2/creaImageIOGimmickView.h +++ b/src2/creaImageIOGimmickView.h @@ -1,230 +1,211 @@ -namespace creaImageIO -{ - /** - * \ingroup View - */ +#ifndef __creaImageIOGimmickView_h_INCLUDED__ +#define __creaImageIOGimmickView_h_INCLUDED__ - //===================================================================== - - //===================================================================== - /// Abstract class to handle tree item information - struct TreeListCtrl - { - TreeListCtrl() {} - virtual ~TreeListCtrl() {} - }; - // EO class TreeListCtrl +#include +#include +#include +#include - /** - * \ingroup View - */ - //===================================================================== - - //===================================================================== - /// Abstract class to handle tree item ids - struct TreeItemId - { - TreeItemId() {} - virtual ~TreeItemId() {} - }; - // EO class TreeItemId +//#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 +#define GIMMICK_4D_IMAGE_SELECTION 4 + +#define NATIVE 0 +#define _2D 2 +#define _3D 3 + + +namespace creaImageIO +{ /** * \ingroup View */ + + class ImageExtent; //===================================================================== //===================================================================== ///Abstract class that handles views, attributes and previews (GUI) for Gimmick. - class GimmickView + class GimmickView: public MultiThreadImageReaderUser { public: /// Ctor - GimmickView(); + GimmickView(Gimmick*, int number_of_threads = 0 ); /// Virtual destructor virtual ~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 vector of TreeItemId corresponding to selection - virtual void GetSelectedItems(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; } - - /// Returns the TreeListCtrl of the main view - TreeListCtrl* GetTreeListCtrl() { return null; } - /// Returns the TreeListCtrl of the main view (const) - const TreeListCtrl* GetTreeListCtrl() const { return null; } - - protected: - ///Inserts a TreeItem in a specified database - virtual void InsertDicomDatabase(TreeItemId& id, DicomDatabase* r); - ///Deletes a TreeItem from a specified database - virtual void DeleteDicomDatabase(TreeItemId& id, DicomDatabase* r); - ///Loads the children of the specified TreeItem - virtual void LoadChildren( TreeItemId& id ); - ///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: - /// Sets a new configuration file - virtual void SetConfigurationFile(const std::string& filename){ return; } - ///Loads a configuration file with the parameters for the favorites database - virtual void LoadConfiguration(){ return; } - ///Saves a configuration file with the parameters for the favorites database - virtual void SaveConfiguration(){ return; } - ///Sets the status for the save configuration on close to the new value - ///specified by the parameter - virtual void SetSaveConfigurationOnClose(bool v) { return; } - ///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; } - /// Recursively deletes - virtual void DeleteObsoleteChildren(TreeItemId& id){ return; } - /// Create the column titles of the children of the item - virtual TreeItemId CreateChildrenColumnsTitles(TreeItemId& item, - DicomNode::Type t){ return null } - /// Updates the titles of the columns - virtual void UpdateColumnsTitles(TreeItemId& item, DicomNode::Type t){ return; } - /// Updates the information on the columns - virtual void UpdateColumns(TreeItemId& item, bool only_first = false){ 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 - //==================================================================== - + /// Initializes the view : + /// Creates the TreeViews for all the TreeHandler of the Controller + /// + virtual void Initialize(); + + /// Type of map from View name to TreeView* + /// (This map is equivalent for Views of the TreeHandlerMap of Gimmick) + typedef std::map TreeViewMapType; + + /// Returns the TreeViewMap (ref) + TreeViewMapType& GetTreeViewMap() { return mTreeViewMap; } + /// Returns the TreeViewMap (const ref) + const TreeViewMapType& GetTreeViewMap() const + { return mTreeViewMap; } + + /// Finalize + virtual void Finalize(); + + //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 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"); } + + ///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"); } + + ///Copies selected files + virtual void SaveAs(const std::vector& filenames) + { GimmickError("INTERNAL ERROR : SaveAs 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(); + + /// 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* ) + { 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() { 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: - int mSelectionType; - int mSelectionMaxImageDimension; - int mCurrentSelectionImageSize[4]; - - ///Existent Database List - DicomDatabaseListType mDicomDatabaseList; - ///Favorites database - DicomDatabase* mFavoriteDatabase; - ///The tree list controller - TreeListCtrl* mTreeListCtrl; - ///Path to the user settings directory - std::string mUserSettingsDirectory; - ///Path to the configuration file - std::string mConfigurationFile; - ///Path to the database list file - std::string mDatabaseListFile; - ///Boolean to check wether to save on close or not - bool mSaveConfigurationOnClose; - ///Extension of the database - std::string mDatabaseExtension; - - bool mJustStarted; - - int mFirstDicomDatabaseIconIndex; - // Id of the item which activated the popup menu - TreeItemId mItemOfMenu; - - // 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; - // Cur image item to show - TreeItemId mCurImageItemToShow; - - }; - // EO class GimmickView + /// 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; + /// 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 namespace creaImageIO // EOF -#endif \ No newline at end of file +#endif