]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/CutModule/interface/CutModelMainPanel.cxx
2991814153232b6e0f4aa64d6e9c9f253a093b6d
[creaMaracasVisu.git] / lib / maracasVisuLib / src / CutModule / interface / CutModelMainPanel.cxx
1 /*=========================================================================
2
3   Program:   wxMaracas
4   Module:    $RCSfile: CutModelMainPanel.cxx,v $
5   Language:  C++
6   Date:      $Date: 2009/09/08 08:14:25 $
7   Version:   $Revision: 1.3 $
8
9   Copyright: (c) 2002, 2003
10   License:
11
12      This software is distributed WITHOUT ANY WARRANTY; without even
13      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14      PURPOSE.  See the above copyright notice for more information.
15
16 =========================================================================*/
17
18
19
20 // EOF - wxMaracasMPR.cxx
21
22 #include "CutModelMainPanel.h"
23 #include "HistogramDialog.h"
24 #include "creaSystem.h"
25
26 #include <wx/colordlg.h>
27 #include <wx/bmpbuttn.h>
28
29 #include <Add.xpm>
30 #include <Undo.xpm>
31 #include <Redo.xpm>
32 #include <OkAll.xpm>
33
34
35
36 CutModelMainPanel* CutModelMainPanel::instance=NULL;
37
38 CutModelMainPanel::CutModelMainPanel( wxWindow* parent, std::string path)
39 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize){
40
41         cutmanager=NULL;
42
43         initialize(path);
44
45 }
46 CutModelMainPanel::~CutModelMainPanel( ){
47         
48         delete cutmanager;
49 }
50
51 void CutModelMainPanel::initialize(std::string path){
52         
53         cutmanager = new CutModelManager(path);
54
55         _panelid = 0;
56         _wxauimanager = new wxAuiManager(this); 
57         
58         wxAuiPaneInfo paneinfo;
59         _wxauimanager->AddPane(new ToolBarCutModel(this),paneinfo.ToolbarPane().Top());         
60
61         _wxauimanager->Update();
62 }
63
64 CutModelMainPanel* CutModelMainPanel::getInstance(wxWindow* parent, std::string path){
65         if(instance==NULL){
66                 if(parent == NULL){
67                         parent = new wxFrame();
68                 }
69                 instance = new CutModelMainPanel(parent, path);
70         }
71         return instance;
72 }
73
74 /*CutModelMainPanel* CutModelMainPanel::getInstance(){
75         return instance;
76 }*/
77
78 void CutModelMainPanel::setImageData(vtkImageData* img){
79         try{
80                 checkInvariant();
81                 cutmanager->setImageData(img);
82         }catch(CutModelException e){
83                 showErrorDialog(e.getCause());
84         }
85 }
86
87 void CutModelMainPanel::setInteractor(vtkRenderWindowInteractor* interactor){
88         try{
89                 checkInvariant();
90                 cutmanager->setInteractor(interactor);
91         }catch(CutModelException e){
92                 showErrorDialog(e.getCause());
93         }
94 }
95
96 void CutModelMainPanel::setRenderer(vtkRenderer* renderer){
97     try{
98                 checkInvariant();
99                 cutmanager->setRenderer(renderer);
100         }catch(CutModelException e){
101                 showErrorDialog(e.getCause());
102         }
103 }
104
105 void CutModelMainPanel::checkInvariant()throw (CutModelException){
106         if(cutmanager==NULL){
107                 throw CutModelException("The manager is not initialize");
108         }       
109 }
110
111 void CutModelMainPanel::showErrorDialog(std::string str){       
112         wxMessageDialog* diag = new wxMessageDialog(this, wxString(str.c_str(),wxConvUTF8 ), wxString(str.c_str(),wxConvUTF8 ), wxICON_ERROR);
113         diag->ShowModal();
114 }
115
116 void CutModelMainPanel::RemoveActor(int id){
117      try{
118                 checkInvariant();
119
120                 for(int i = 0; i < viewpanels.size()-1;i++){
121                         if(viewpanels[i]->getId()==id){
122                                 for(int j = i; j < viewpanels.size()-1;j++){
123                     viewpanels[j]=viewpanels[j+1];
124                                 }
125                                 i = viewpanels.size();
126                         }
127                 }
128                 viewpanels.pop_back();
129
130
131                 cutmanager->RemoveActor(id);
132
133         }catch(CutModelException e){
134                 showErrorDialog(e.getCause());
135         }
136 }
137
138 void CutModelMainPanel::onAddCutModel(){
139     try{
140                 checkInvariant();
141
142                 int id = addNewViewPanel();             
143                 cutmanager->onAddCutModel(id, getModelView(id));
144
145                 _panelid++;
146
147                 ShowCurrentPanel(id);
148
149         }catch(CutModelException e){
150                 showErrorDialog(e.getCause());
151         }
152 }
153 void CutModelMainPanel::ShowCurrentPanel(int id){
154         for(int i = 0; i < viewpanels.size();i++){              
155                 if(viewpanels[i]->getId()==id){
156                         _wxauimanager->GetPane(viewpanels[i]).Show(true);
157             cutmanager->RefreshActor(id);
158                 }else{
159                         _wxauimanager->GetPane(viewpanels[i]).Show(false);
160                 }
161         }
162         _wxauimanager->Update();
163 }
164 int CutModelMainPanel::addNewViewPanel()throw( CutModelException){
165         
166         CutModelView* viewpanel = new CutModelView(this,cutmanager->getImageRange());
167
168         wxAuiPaneInfo paneinfo0;
169         _wxauimanager->AddPane(viewpanel, paneinfo0.DefaultPane().DestroyOnClose().Centre());   
170         
171         viewpanel->setId(_panelid);
172         viewpanels.push_back(viewpanel);        
173
174         return viewpanel->getId();
175         
176         
177 }
178 CutModelView* CutModelMainPanel::getModelView(int id)throw( CutModelException){
179
180         CutModelView* current = NULL;
181         for(int i = 0; i < viewpanels.size();i++){
182                 if(viewpanels[i]->getId()==id){
183             current = viewpanels[i];
184                 }
185         }
186         if(current == NULL){
187                 std::string s = "Id not found";
188                 throw CutModelException(s);
189         }
190         return current;
191 }
192 void CutModelMainPanel::onUndo(){
193         try{
194                 checkInvariant();               
195                 int result = cutmanager->Undo();
196
197         }catch(CutModelException e){
198                 showErrorDialog(e.getCause());
199         }
200         
201 }
202
203 void CutModelMainPanel::onRedo(){
204
205         try{
206                 checkInvariant();               
207                 int result = cutmanager->Redo();
208
209         }catch(CutModelException e){
210                 showErrorDialog(e.getCause());
211         }
212         
213 }
214
215 void CutModelMainPanel::changeOpacity(int id,int opacity){
216         try{
217                 checkInvariant();               
218                 cutmanager->changeOpacity(id, opacity);
219
220         }catch(CutModelException e){
221                 showErrorDialog(e.getCause());
222         }
223 }
224
225 void CutModelMainPanel::ShowViewBox(int id,bool check){
226     try{
227                 checkInvariant();               
228                 cutmanager->ShowViewBox(id, check);
229
230         }catch(CutModelException e){
231                 showErrorDialog(e.getCause());
232         }
233 }
234 void CutModelMainPanel::ShowPopUpMenu(int id){
235         showErrorDialog("test");
236 }
237 void CutModelMainPanel::changeColor(int id,double r,double g,double b){
238
239         try{
240                 checkInvariant();               
241                 cutmanager->changeColor(id, r, g, b);
242
243         }catch(CutModelException e){
244                 showErrorDialog(e.getCause());
245         }
246         
247 }
248 void CutModelMainPanel::ChangeShape(int id,int selection){
249         try{
250                 checkInvariant();
251                 
252                 cutmanager->ChangeShape(id, selection);
253
254         }catch(CutModelException e){
255                 showErrorDialog(e.getCause());
256         }
257 }
258 void CutModelMainPanel::updateActorDirection(int id){
259     try{
260                 checkInvariant();
261                 
262                 cutmanager->updateActorDirection(id);
263
264         }catch(CutModelException e){
265                 showErrorDialog(e.getCause());
266         }
267 }
268
269 void CutModelMainPanel::ExecuteCut(int id, double* range, bool isinside){
270         try{
271                 checkInvariant();               
272
273                 cutmanager->ExecuteCut(id, range, isinside);
274         }catch(CutModelException e){
275                 showErrorDialog(e.getCause());
276         }
277 }
278
279 void CutModelMainPanel::ExecuteAll(){
280         for(int i = 0; i < viewpanels.size();i++){
281                 viewpanels[i]->ExecuteCut();
282         }
283
284 }
285 vtkImageData* CutModelMainPanel::GetResultImage(){
286     try{
287                 checkInvariant();
288                 return cutmanager->GetResultImage();
289         }catch(CutModelException e){
290                 showErrorDialog(e.getCause());
291         }
292         return NULL;
293 }
294
295 void CutModelMainPanel::ShowStatistics(int id){
296
297         checkInvariant();
298         HistogramDialog *histo = new HistogramDialog(this, _T("Statistics"));
299
300         histo->initializeHistogram(cutmanager->GetResultImage());
301
302         histo->ShowModal();
303
304         delete histo;
305 }
306
307 void CutModelMainPanel::SaveCutModelData(std::string filename){
308         cutmanager->SaveCutModelData(filename);
309 }
310
311 void CutModelMainPanel::LoadCutModelData(std::string filename){
312     cutmanager->LoadCutModelData(filename);
313 }
314 /**
315 **
316 **/
317
318 ToolBarCutModel::ToolBarCutModel(wxWindow * parent)
319 : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize)
320 {
321
322         wxBitmap bitmap10(Add_xpm);
323         this->AddTool(10, wxString(_T("Add")),bitmap10);
324
325         this->AddSeparator();
326
327         wxBitmap bitmap20(Undo_xpm);
328         this->AddTool(20, wxString(_T("Undo")),bitmap20);
329
330         wxBitmap bitmap30(Redo_xpm);
331         this->AddTool(30, wxString(_T("Redo")),bitmap30);       
332
333         this->AddSeparator();
334
335         wxBitmap bitmap40(OkAll_xpm);
336         this->AddTool(40, wxString(_T("Ok All")),bitmap40);     
337
338         this->Realize();
339
340         _evthand = new ToolBarEventHandlerCutModel();
341         this->SetEventHandler(_evthand);
342
343 }
344
345 ToolBarCutModel::~ToolBarCutModel(void){
346 }
347
348 ToolBarEventHandlerCutModel::ToolBarEventHandlerCutModel()
349 : wxEvtHandler(){
350 }
351 ToolBarEventHandlerCutModel::~ToolBarEventHandlerCutModel(){
352 }
353
354 void ToolBarEventHandlerCutModel::onAdd(wxCommandEvent& event){
355         CutModelMainPanel::getInstance()->onAddCutModel();
356 }
357
358 void ToolBarEventHandlerCutModel::onUndo(wxCommandEvent& event){
359         CutModelMainPanel::getInstance()->onUndo();     
360 }
361
362 void ToolBarEventHandlerCutModel::onRedo(wxCommandEvent& event){
363         CutModelMainPanel::getInstance()->onRedo();
364 }
365
366 void ToolBarEventHandlerCutModel::onExecuteAll(wxCommandEvent& event){
367         CutModelMainPanel::getInstance()->ExecuteAll();
368 }
369
370
371 BEGIN_EVENT_TABLE(ToolBarEventHandlerCutModel, wxEvtHandler)
372         EVT_MENU(10, ToolBarEventHandlerCutModel::onAdd)
373         EVT_MENU(20, ToolBarEventHandlerCutModel::onUndo)
374         EVT_MENU(30, ToolBarEventHandlerCutModel::onRedo)
375         EVT_MENU(40, ToolBarEventHandlerCutModel::onExecuteAll)
376 END_EVENT_TABLE()
377