anatomist 6.0.4
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
47class AStringList;
48class AWindow3D;
49class QListWidget;
50class QListWidgetItem;
51class QComboBox;
52
53namespace anatomist
54{
55 class AObject ;
56 class Transformation ;
57 class AGraph ;
58 class AGraphObject ;
59 class Hierarchy ;
60
63 struct RoiManagementActionView_Private ;
64}
65
66
67class RegionsFusionWindow : public QDialog
68{
69 Q_OBJECT
70
71public:
72 RegionsFusionWindow( QWidget * parent, const QStringList& regions ) ;
73
74 std::set<std::string> regionsToBeFusioned() ;
75 std::string newRegionName() ;
76
77public slots:
79
80private:
81 QStringList mySelectedRegions ;
82 QString myNewRegionName ;
83 QListWidget * selectRegions ;
84 QComboBox * selectRegionName ;
85} ;
86
87
88class RoiManagementActionView : public QWidget, public anatomist::Observer
89{
90
91 Q_OBJECT
92
93public:
95 QWidget * parent ) ;
97
98 virtual void update( const anatomist::Observable *, void * ) ;
99
100 std::string askName( const std::string& type,
101 const std::string& originalName,
102 const std::string& message, bool noHierarchy = true ) ;
104 int graphId( const std::string & graphName );
105 int imageId( const std::string & imageName );
106
107private slots :
108 void selectGraph( int );
109 void renameGraph( QListWidgetItem * ) ;
110 void selectRegion( int ) ;
111 void renameRegion( QListWidgetItem * ) ;
112 void selectImage( int ) ;
113 void contextMenu( const QPoint & );
114 void selectGraphContextMenu( const QPoint & );
115 void selectRegionContextMenu( const QPoint & );
116 void selectImageContextMenu( const QPoint & );
117 void newGraph( ) ;
118 void deleteGraph( ) ;
119 void loadGraph( ) ;
120 void saveGraphAs( ) ;
121 void reloadGraph( ) ;
122 void saveGraph( ) ;
123 void newRegion( ) ;
124 void deleteRegion( ) ;
125 void exportAsMask( ) ;
126 void regionsFusion( ) ;
127 // void refresh() ;
128 void neuroFrameWork() ;
129 void lateralNeuroFrameWork() ;
130 void sulciFrameWork() ;
131 void ratFrameWork() ;
132 void freeFrameWork() ;
133 void newUserDefinedFrameWork() ;
134 void loadUserDefinedFrameWork() ;
135 void saveUserDefinedFrameWork() ;
136 void defineNewFWRegionName() ;
137 void modifyFWRegionName() ;
138 void modifyFWRegionColor() ;
139 void deleteFWRegionName() ;
140// void saveUserDefinedFrameWorkAs() ;
141 //void updateRecentFrameWorksMenu( QPopupMenu * pop ) ;
142 void createAxialWindow() ;
143 void createCoronalWindow() ;
144 void createSagittalWindow() ;
145 // void createObliqueWindow() ;
146 void create3DWindow() ;
147 void cleanSession() ;
148 void cleanRegion() ;
149 void regionTransparencyChange( int alpha ) ;
150 void graphTransparencyChange( int alpha ) ;
151 void regionStats() ;
152
153private:
154 anatomist::RoiManagementActionView_Private * _private ;
155
156 bool myUpdatingFlag ;
157 bool mySelectingImage ;
158 bool mySelectingGraph ;
159 bool mySelectingRegion ;
160 bool myChangingGraphTransparency ;
161 bool myChangingRegionTransparency ;
162 bool myGettingImageNames ;
163 bool myGettingGraphNames ;
164 bool myGettingRegionNames ;
165 bool myGettingHierarchyNames ;
166 bool myGettingHierarchyRegionNames ;
167
168 QString myHierarchyRoiName ;
169 QStringList myHierarchyRoiNames ;
170
173 const std::string& name = "" ) ;
174 QStringList getImageNames() ;
175 QStringList getHierarchyNames( ) ;
176 QStringList getGraphNames() ;
177 QStringList getCurrentGraphRegions() ;
178 std::string getSelectedGraphName( ) ;
179 QStringList getCurrentHierarchyRoiNames( ) ;
180
181 QStringList myImageNames ;
182 QStringList myGraphNames ;
183 QStringList myRegions ;
184 QStringList myRecentFrameWorks ;
185} ;
186
187namespace anatomist{
188
189 class RoiManagementActionSharedData : public Observable, public Observer
190 {
191 public:
193
194 AObject * getObjectByName( int objType,
195 const std::string& name = "" ) const ;
196 std::string currentImage() const { return myCurrentImage ; }
197 std::string currentGraph() const { return myCurrentGraph ; }
198 static RoiManagementActionSharedData* instance() ;
199
200 AGraphObject * getGraphObjectByName( const std::string& graphName,
201 const std::string& roiName ) const ;
202 void refresh();
203 virtual void update( const Observable*, void* );
204
205 protected:
207
208 private:
209 friend class RoiManagementAction ;
210
211 RoiManagementActionSharedData() ;
212 static RoiManagementActionSharedData * _instance ;
213
214 // Attributes
215 std::set<std::string> myHierarchyNames ;
216 bool myHierarchyNamesChanged ;
217
218 std::set<std::string> myGraphNames ;
219 bool myGraphNamesChanged ;
220
221 std::set<std::string> myImageNames ;
222 bool myImageNamesChanged ;
223
224 std::set<std::string> myCurrentGraphRegions ;
225 bool myCurrentGraphRegionsChanged ;
226
227 std::set<std::string> myCurrentHierarchyRoiNames ;
228 bool myCurrentHierarchyRoiNamesChanged ;
229
230 AObject * getSelectedObject( int objType ) const ;
231 void completeSelection( AGraph * g ) const ;
232
233 void printState() ;
234 void refreshGraphs() const ;
235
236 std::string mySelectedHierarchy ;
237 int mySelectedHierarchyId ;
238 std::string myUserDefinedHierarchy ;
239 std::string myCurrentGraph ;
240 std::string myCurrentImage ;
241 std::string myRegionName ;
242 std::string myPartialRegionName ;
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 ) ;
269 std::string newUDHierarchy( const std::string& name ) ;
270 std::string loadUDHierarchy( const std::string& hierarchyName ) ;
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 );
278 void selectGraph( const std::string & graphName,
279 const std::string & regionName );
280 void newGraph( const std::string& name ) ;
281 void selectImage( const std::string & imageName ) ;
282 void refresh() ;
283 void renameGraph( const std::string& name ) ;
284 void deleteGraph( ) ;
285 void loadGraph( const QStringList& ) ;
286 void saveGraphAs( ) ;
287 void reloadGraph( ) ;
288 void saveGraph( ) ;
290 void selectRegion( const std::string& regionName, bool force = false );
292 void selectRegionName( const std::string& regionName );
293 void smartSelectRegionName( const std::string & partialRegionName );
294 void newRegion( const std::string& name ) ;
295 void renameRegion( const std::string & name ) ;
296 void deleteRegion( ) ;
297 void exportAsMask( ) ;
298 static void exportRegion( AGraphObject * o) ;
299 void regionsFusion( const std::set<std::string>& regions,
300 const std::string& newName) ;
301 void createWindow( const std::string& type ) ;
303
304 std::string currentGraph() const { return _sharedData->myCurrentGraph; }
305 std::string currentRegionName() const { return _sharedData->myRegionName; }
306 std::string currentImage() const { return _sharedData->myCurrentImage; }
307
308 virtual QWidget * actionView( QWidget * ) ;
309 virtual bool viewableAction( ) const { return true ; }
310
311 // Transfer Observer property to shared data
312 void changeRegionTransparency( float alpha ) ;
313 void changeGraphTransparency( float alpha ) ;
315
316 void addObserver (Observer *observer) { _sharedData->addObserver(observer) ; }
317 void deleteObserver (Observer *observer) { _sharedData->deleteObserver(observer) ;}
318 void notifyObservers (void *arg=0) { _sharedData->notifyObservers(arg) ; }
319 void notifyUnregisterObservers () { _sharedData->notifyUnregisterObservers() ; }
320 bool hasChanged () const { return _sharedData->hasChanged() ; }
321 void setChanged () { _sharedData->setChanged() ; }
325 void regionStats() ;
326
327 const std::string& selectedHierarchy() const { return _sharedData->mySelectedHierarchy ; }
328 const std::string& userDefinedHierarchy() const { return _sharedData->myUserDefinedHierarchy ; }
329 int selectedHierarchyId() { return _sharedData->mySelectedHierarchyId ; }
330
331 private:
332 // void createGraph( AObject * volume ) ;
333 // void addRegion( AGraph * graph ) ;
334 RoiManagementActionSharedData * _sharedData ;
335
336 } ;
337}
338
339#endif
340
#define slots
3D window, OpenGL rendering
Definition window3D.h:75
std::set< std::string > regionsToBeFusioned()
std::string newRegionName()
RegionsFusionWindow(QWidget *parent, const QStringList &regions)
void selectedRegionsChanged()
int imageId(const std::string &imageName)
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 *)
int graphId(const std::string &graphName)
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:97
ObjectType
Base object type identifiers.
Definition Object.h:107
@ OTHER
External object type (unknown from the base anatomist library)
Definition Object.h:131
Nomenclature hierarchy object.
Definition hierarchy.h:52
This class can be subclassed to represent an object that the programmer wants to have observed.
Definition Observable.h:68
A class can implement the Observer interface when it wants to be informed of changes in observable ob...
Definition Observer.h:55
friend class Observable
Definition Observer.h:90
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.
AGraphObject * getGraphObjectByName(const std::string &graphName, const std::string &roiName) const
AObject * getObjectByName(int objType, const std::string &name="") const
void selectRegion(const std::string &regionName, bool force=false)
use the general selection system to select a region
const std::string & selectedHierarchy() const
void selectHierarchy(const std::string &hieName, int hieId)
void changeRegionTransparency(float alpha)
virtual std::string name() const
void deleteFWRegionName(const std::string &name)
void addRegion(const std::string &name)
void newGraph(const std::string &name)
void selectGraph(const std::string &graphName, const std::string &regionName)
const std::string & getCurrentHierarchy() const
std::set< std::string > getHierarchyNames()
void cleanRegion(anatomist::AGraphObject *)
void loadGraph(const QStringList &)
void recursiveHierarchyNameExtraction(Tree *subtree, std::set< std::string > &names)
const std::string & userDefinedHierarchy() const
void smartSelectRegionName(const std::string &partialRegionName)
bool getSelectedGraphName(std::string &)
std::set< std::string > getImageNames()
std::set< std::string > getCurrentGraphRegions()
void selectRegionName(const std::string &regionName)
just set the internal current region name
void changeGraphTransparency(float alpha)
void modifyUDFWRegionName(const std::string &oldName, const std::string &newName)
void createWindow(const std::string &type)
void renameRegion(const std::string &name)
void regionsFusion(const std::set< std::string > &regions, const std::string &newName)
void addObserver(Observer *observer)
virtual QWidget * actionView(QWidget *)
void defineNewFWRegionName(const std::string &name, int red, int green, int blue)
void selectGraph(const std::string &graphName)
void deleteObserver(Observer *observer)
void renameGraph(const std::string &name)
void newRegion(const std::string &name)
void modifyUDFWRegionColor(const std::string &name, int red, int green, int blue)
static void exportRegion(AGraphObject *o)
std::set< std::string > getGraphNames()
std::string newUDHierarchy(const std::string &name)
std::string loadUDHierarchy(const std::string &hierarchyName)
void selectImage(const std::string &imageName)
std::set< std::string > getCurrentHierarchyRoiNames()
Transformation between two referentials.