-
- //====================================================================
- // 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<std::string>&){ return; }
- /// Returns the vector of images corresponding to selection
- virtual void GetSelectedImages(std::vector<vtkImageData*>&){ return; }
- /// Returns the vector of DicomNode corresponding to selection
- virtual void GetSelectedDicomNodes(std::vector<DicomNode*>&){ return; }
- /// Returns the vector of TreeItemId corresponding to selection
- virtual void GetSelectedItems(std::vector<TreeItemId>&){ return; }
- /// Returns the DicomNode corresponding to the tree item
- virtual DicomNode* GetDicomNodeOfItem(const TreeItemId& i);
-
-
- /// Type of list of DicomDatabase
- typedef std::vector<DicomDatabase*> 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<std::string, TreeView*> 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<vtkImageData*>& s, int dim)
+ { GimmickError("INTERNAL ERROR : GetSelectedImages not implemented"); }
+
+ virtual void GetSelectedFiles(std::vector<std::string>& s)
+ { GimmickError("INTERNAL ERROR : GetSelectedFiles not implemented"); }
+
+ virtual void GetImages(int dim, std::vector<std::string> files, std::vector<vtkImageData*>& s)
+ { GimmickError("INTERNAL ERROR : GetImages not implemented"); }
+
+ virtual void OnSelectionChange(const std::vector<tree::Node*>& 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<std::string>& filenames)
+ { GimmickError("INTERNAL ERROR : CopyFiles not implemented"); }
+
+ ///Edits the fields of a given node
+ virtual void CreateEditFieldsDialog(tree::Node* node, std::vector<std::string> names, std::vector<std::string> keys)
+ { GimmickError("INTERNAL ERROR : EditFields not implemented"); }
+
+ ///Copies selected files
+ virtual void SaveAs(const std::vector<std::string>& 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<vtkImageData*>& s,std::vector<std::string> 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<void (bool)> 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: