anatomist  5.1.2
3D neuroimaging data viewer
roimanagementaction.h
Go to the documentation of this file.
1 /* This software and supporting documentation are distributed by
2  * Institut Federatif de Recherche 49
3  * CEA/NeuroSpin, Batiment 145,
4  * 91191 Gif-sur-Yvette cedex
5  * France
6  *
7  * This software is governed by the CeCILL-B license under
8  * French law and abiding by the rules of distribution of free software.
9  * You can use, modify and/or redistribute the software under the
10  * terms of the CeCILL-B license as circulated by CEA, CNRS
11  * and INRIA at the following URL "http://www.cecill.info".
12  *
13  * As a counterpart to the access to the source code and rights to copy,
14  * modify and redistribute granted by the license, users are provided only
15  * with a limited warranty and the software's author, the holder of the
16  * economic rights, and the successive licensors have only limited
17  * liability.
18  *
19  * In this respect, the user's attention is drawn to the risks associated
20  * with loading, using, modifying and/or developing or reproducing the
21  * software by the user in light of its specific status of free software,
22  * that may mean that it is complicated to manipulate, and that also
23  * therefore means that it is reserved for developers and experienced
24  * professionals having in-depth computer knowledge. Users are therefore
25  * encouraged to load and test the software's suitability as regards their
26  * requirements in conditions enabling the security of their systems and/or
27  * data to be ensured and, more generally, to use and operate it in the
28  * same conditions as regards security.
29  *
30  * The fact that you are presently reading this means that you have had
31  * knowledge of the CeCILL-B license and that you accept its terms.
32  */
33 
34 #ifndef ROI_MANAGEMENT_ACTION_H
35 #define ROI_MANAGEMENT_ACTION_H
36 
41 #include <string>
42 #include <qstringlist.h>
43 #include <qlayout.h>
44 #include <qdialog.h>
45 #include <map>
46 
47 class AStringList;
48 class AWindow3D;
49 class QListWidget;
50 class QListWidgetItem;
51 class QComboBox;
52 
53 namespace anatomist
54 {
55  class AObject ;
56  class Transformation ;
57  class AGraph ;
58  class AGraphObject ;
59  class Hierarchy ;
60 
61  class RoiManagementAction ;
62  class RoiManagementActionSharedData ;
63  struct RoiManagementActionView_Private ;
64 }
65 
66 class RegionsFusionWindow : public QDialog
67 {
68  Q_OBJECT
69 
70 public:
71  RegionsFusionWindow( QWidget * parent, const QStringList& regions ) ;
72 
73  std::set<std::string> regionsToBeFusioned() ;
74  std::string newRegionName() ;
75 
76 public slots:
78 
79 private:
80  QStringList mySelectedRegions ;
81  QString myNewRegionName ;
82  QListWidget * selectRegions ;
83  QComboBox * selectRegionName ;
84 } ;
85 
86 class RoiManagementActionView : public QWidget, public anatomist::Observer
87 {
88 
89  Q_OBJECT
90 
91 public:
93  QWidget * parent ) ;
95 
96  virtual void update( const anatomist::Observable *, void * ) ;
97 
98  std::string askName( const std::string& type,
99  const std::string& originalName,
100  const std::string& message, bool noHierarchy = true ) ;
102 
103 private slots :
104  void selectGraph( int );
105  void renameGraph( QListWidgetItem * ) ;
106  void selectRegion( int ) ;
107  void renameRegion( QListWidgetItem * ) ;
108  void selectImage( int ) ;
109  void contextMenu( const QPoint & );
110  void selectGraphContextMenu( const QPoint & );
111  void selectRegionContextMenu( const QPoint & );
112  void selectImageContextMenu( const QPoint & );
113  void newGraph( ) ;
114  void deleteGraph( ) ;
115  void loadGraph( ) ;
116  void saveGraphAs( ) ;
117  void reloadGraph( ) ;
118  void saveGraph( ) ;
119  void newRegion( ) ;
120  void deleteRegion( ) ;
121  void exportAsMask( ) ;
122  void regionsFusion( ) ;
123  // void refresh() ;
124  void neuroFrameWork() ;
125  void lateralNeuroFrameWork() ;
126  void sulciFrameWork() ;
127  void ratFrameWork() ;
128  void freeFrameWork() ;
129  void newUserDefinedFrameWork() ;
130  void loadUserDefinedFrameWork() ;
131  void saveUserDefinedFrameWork() ;
132  void defineNewFWRegionName() ;
133  void modifyFWRegionName() ;
134  void modifyFWRegionColor() ;
135  void deleteFWRegionName() ;
136 // void saveUserDefinedFrameWorkAs() ;
137  //void updateRecentFrameWorksMenu( QPopupMenu * pop ) ;
138  void createAxialWindow() ;
139  void createCoronalWindow() ;
140  void createSagittalWindow() ;
141  // void createObliqueWindow() ;
142  void create3DWindow() ;
143  void cleanSession() ;
144  void cleanRegion() ;
145  void regionTransparencyChange( int alpha ) ;
146  void graphTransparencyChange( int alpha ) ;
147  void regionStats() ;
148 
149 private:
150  anatomist::RoiManagementActionView_Private * _private ;
151 
152  bool myUpdatingFlag ;
153  bool mySelectingImage ;
154  bool mySelectingGraph ;
155  bool mySelectingRegion ;
156  bool myChangingGraphTransparency ;
157  bool myChangingRegionTransparency ;
158  bool myGettingImageNames ;
159  bool myGettingGraphNames ;
160  bool myGettingRegionNames ;
161  bool myGettingHierarchyNames ;
162  bool myGettingHierarchyRegionNames ;
163 
164  QString myHierarchyRoiName ;
165  QStringList myHierarchyRoiNames ;
166 
169  const std::string& name = "" ) ;
170  QStringList getImageNames() ;
171  QStringList getHierarchyNames( ) ;
172  QStringList getGraphNames() ;
173  QStringList getCurrentGraphRegions() ;
174  std::string getSelectedGraphName( ) ;
175  QStringList getCurrentHierarchyRoiNames( ) ;
176 
177  QStringList myImageNames ;
178  QStringList myGraphNames ;
179  QStringList myRegions ;
180  QStringList myRecentFrameWorks ;
181 } ;
182 
183 namespace anatomist{
184 
186  {
187  public:
189 
190  AObject * getObjectByName( int objType,
191  const std::string& name = "" ) const ;
192  std::string currentImage() const { return myCurrentImage ; }
193  std::string currentGraph() const { return myCurrentGraph ; }
195 
196  AGraphObject * getGraphObjectByName( const std::string& graphName,
197  const std::string& roiName ) const ;
198  void refresh();
199  virtual void update( const Observable*, void* );
200 
201  protected:
203 
204  private:
205  friend class RoiManagementAction ;
206 
208  static RoiManagementActionSharedData * _instance ;
209 
210  // Attributes
211  std::set<std::string> myHierarchyNames ;
212  bool myHierarchyNamesChanged ;
213 
214  std::set<std::string> myGraphNames ;
215  bool myGraphNamesChanged ;
216 
217  std::set<std::string> myImageNames ;
218  bool myImageNamesChanged ;
219 
220  std::set<std::string> myCurrentGraphRegions ;
221  bool myCurrentGraphRegionsChanged ;
222 
223  std::set<std::string> myCurrentHierarchyRoiNames ;
224  bool myCurrentHierarchyRoiNamesChanged ;
225 
226  AObject * getSelectedObject( int objType ) const ;
227  void completeSelection( AGraph * g ) const ;
228 
229  void printState() ;
230  void refreshGraphs() const ;
231 
232  std::string mySelectedHierarchy ;
233  int mySelectedHierarchyId ;
234  std::string myUserDefinedHierarchy ;
235  std::string myGraphName ;
236  std::string myCurrentGraph ;
237  int myCurrentGraphId ;
238  std::string myCurrentImage ;
239  int myCurrentImageId ;
240  std::string myRegionName ;
241  std::string myPartialRegionName ;
242  int myCurrentRegionId ;
243 
244  };
245 
246 
248  {
249  public:
252 
253  virtual std::string name() const;
254 
255  static Action * creator() ;
256 
257  std::set<std::string> getHierarchyNames() ;
258  std::set<std::string> getGraphNames() ;
259  std::set<std::string> getImageNames() ;
260  std::set<std::string> getCurrentGraphRegions() ;
261  std::set<std::string> getCurrentHierarchyRoiNames( ) ;
262  const std::string& getCurrentHierarchy() const { return _sharedData->mySelectedHierarchy ; }
264  std::set<std::string>& names ) ;
265  bool getSelectedGraphName( std::string& ) ;
266  void addRegion( const std::string& name ) ;
267  void selectHierarchy( const std::string& hieName, int hieId ) ;
268  void loadHierarchy( ) ;
269  std::string newUDHierarchy( const std::string& name ) ;
270  std::string loadUDHierarchy( const std::string& hierarchyName ) ;
271  bool saveUDHierarchy( ) ;
272  void defineNewFWRegionName(const std::string & name, int red, int green, int blue ) ;
273  void deleteFWRegionName(const std::string & name) ;
274  void modifyUDFWRegionName(const std::string & oldName, const std::string & newName ) ;
275  void modifyUDFWRegionColor( const std::string & name,
276  int red, int green, int blue ) ;
277  void selectGraph( const std::string & graphName, int graphId ) ;
278  void newGraph( const std::string& name ) ;
279  void selectImage( const std::string & imageName, int imageId ) ;
280  void refresh() ;
281  void renameGraph( const std::string& name, int graphId ) ;
282  void deleteGraph( ) ;
283  void loadGraph( const QStringList& ) ;
284  void saveGraphAs( ) ;
285  void reloadGraph( ) ;
286  void saveGraph( ) ;
287  void selectRegion( const std::string& regionName, int regionId ) ;
288  void selectRegionName( const std::string& regionName ) ;
289  void smartSelectRegionName( const std::string & partialRegionName ) ;
290  void newRegion( const std::string& name ) ;
291  void renameRegion( const std::string & name, int regionId ) ;
292  void deleteRegion( ) ;
293  void exportAsMask( ) ;
294  static void exportRegion( AGraphObject * o) ;
295  void regionsFusion( const std::set<std::string>& regions,
296  const std::string& newName) ;
297  void createWindow( const std::string& type ) ;
298 
299  int selectedHierarchyId() { return _sharedData->mySelectedHierarchyId ; }
301  { return _sharedData->myCurrentGraphId ; }
302  int currentImageId() { return _sharedData->myCurrentImageId ; }
303  int currentRegionId() { return _sharedData->myCurrentRegionId ; }
304 
305  virtual QWidget * actionView( QWidget * ) ;
306  virtual bool viewableAction( ) const { return true ; }
307 
308  // Transfer Observer property to shared data
309  void changeRegionTransparency( float alpha ) ;
310  void changeGraphTransparency( float alpha ) ;
311  float graphTransparency( ) ;
312 
313  void addObserver (Observer *observer) { _sharedData->addObserver(observer) ; }
314  void deleteObserver (Observer *observer) { _sharedData->deleteObserver(observer) ;}
315  void notifyObservers (void *arg=0) { _sharedData->notifyObservers(arg) ; }
317  bool hasChanged () const { return _sharedData->hasChanged() ; }
318  void setChanged () { _sharedData->setChanged() ; }
319  void cleanSession() ;
321  bool savableGraph() ;
322  void regionStats() ;
323 
324  const std::string& selectedHierarchy() const { return _sharedData->mySelectedHierarchy ; }
325  const std::string& userDefinedHierarchy() const { return _sharedData->myUserDefinedHierarchy ; }
326 
327  private:
328  // void createGraph( AObject * volume ) ;
329  // void addRegion( AGraph * graph ) ;
330  RoiManagementActionSharedData * _sharedData ;
331 
332  } ;
333 }
334 
335 #endif
336 
#define slots
3D window, OpenGL rendering
Definition: window3D.h:74
std::string newRegionName()
std::set< std::string > regionsToBeFusioned()
RegionsFusionWindow(QWidget *parent, const QStringList &regions)
void selectedRegionsChanged()
std::string askName(const std::string &type, const std::string &originalName, const std::string &message, bool noHierarchy=true)
RoiManagementActionView(anatomist::RoiManagementAction *myAction, QWidget *parent)
virtual void update(const anatomist::Observable *, void *)
This method is called whenever the observed object is changed.
static void objectLoaded(anatomist::Observable *)
Anatomist graph object: a list that manages destruction of its sub-elements.
Definition: GraphObject.h:53
AGraph object class.
Definition: Graph.h:57
Base Anatomist object (abstract)
Definition: Object.h:96
ObjectType
Base object type identifiers.
Definition: Object.h:106
@ OTHER
External object type (unknown from the base anatomist library)
Definition: Object.h:130
This class can be subclassed to represent an object that the programmer wants to have observed.
Definition: Observable.h:68
void addObserver(Observer *observer)
Adds an observer to the set of observers for this object.
void setChanged() const
Indicates that this object has changed.
Definition: Observable.h:184
bool hasChanged() const
Tests if this object has changed.
Definition: Observable.h:176
virtual void notifyUnregisterObservers()
Notifies observable destruction to all observers and unregisters them.
void deleteObserver(Observer *observer)
Deletes an observer from the set of observers of this object.
virtual void notifyObservers(void *arg=0)
If this object has changed, as indicated by the hasChanged method, then notify all of its observers.
A class can implement the Observer interface when it wants to be informed of changes in observable ob...
Definition: Observer.h:55
AGraphObject * getGraphObjectByName(const std::string &graphName, const std::string &roiName) const
virtual void update(const Observable *, void *)
This method is called whenever the observed object is changed.
static RoiManagementActionSharedData * instance()
virtual void unregisterObservable(Observable *)
Called when an observable is destroyed, only called by Observable: don't use this function directly.
AObject * getObjectByName(int objType, const std::string &name="") const
void selectHierarchy(const std::string &hieName, int hieId)
void changeRegionTransparency(float alpha)
virtual std::string name() const
std::set< std::string > getHierarchyNames()
void deleteFWRegionName(const std::string &name)
void addRegion(const std::string &name)
void selectGraph(const std::string &graphName, int graphId)
void renameRegion(const std::string &name, int regionId)
void newGraph(const std::string &name)
void cleanRegion(anatomist::AGraphObject *)
void loadGraph(const QStringList &)
void recursiveHierarchyNameExtraction(Tree *subtree, std::set< std::string > &names)
void selectRegion(const std::string &regionName, int regionId)
void smartSelectRegionName(const std::string &partialRegionName)
bool getSelectedGraphName(std::string &)
const std::string & getCurrentHierarchy() const
void selectRegionName(const std::string &regionName)
void changeGraphTransparency(float alpha)
std::set< std::string > getCurrentHierarchyRoiNames()
void modifyUDFWRegionName(const std::string &oldName, const std::string &newName)
void createWindow(const std::string &type)
void renameGraph(const std::string &name, int graphId)
std::set< std::string > getImageNames()
void regionsFusion(const std::set< std::string > &regions, const std::string &newName)
void addObserver(Observer *observer)
void defineNewFWRegionName(const std::string &name, int red, int green, int blue)
std::set< std::string > getGraphNames()
void deleteObserver(Observer *observer)
std::set< std::string > getCurrentGraphRegions()
const std::string & userDefinedHierarchy() const
void newRegion(const std::string &name)
void modifyUDFWRegionColor(const std::string &name, int red, int green, int blue)
static void exportRegion(AGraphObject *o)
std::string newUDHierarchy(const std::string &name)
std::string loadUDHierarchy(const std::string &hierarchyName)
virtual QWidget * actionView(QWidget *)
const std::string & selectedHierarchy() const
void selectImage(const std::string &imageName, int imageId)