]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/CutModule/interface/CutModelMainPanel.cxx
fdd26301b176256512ac50ca38ca80eba0cdc150
[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/08/31 08:46:09 $
7   Version:   $Revision: 1.1 $
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
24
25 #include <wx/colordlg.h>
26 #include <wx/bmpbuttn.h>
27
28 #include <Add.xpm>
29 #include <Undo.xpm>
30 #include <Redo.xpm>
31 #include <OkAll.xpm>
32
33 CutModelMainPanel* CutModelMainPanel::instance=NULL;
34
35 CutModelMainPanel::CutModelMainPanel( wxWindow* parent)
36 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize){
37
38         cutmanager=NULL;
39
40         initialize();
41
42 }
43 CutModelMainPanel::~CutModelMainPanel( ){
44         
45
46 }
47
48 void CutModelMainPanel::initialize(){
49         cutmanager = new CutModelManager();
50
51         _panelid = 0;
52         _wxauimanager = new wxAuiManager(this); 
53         
54         wxAuiPaneInfo paneinfo;
55         _wxauimanager->AddPane(new ToolBarCutModel(this),paneinfo.ToolbarPane().Top());         
56
57         _wxauimanager->Update();
58 }
59
60 CutModelMainPanel* CutModelMainPanel::getInstance(wxWindow* parent){
61         if(instance==NULL){
62                 instance = new CutModelMainPanel(parent);
63         }
64         return instance;
65 }
66
67 CutModelMainPanel* CutModelMainPanel::getInstance(){
68         return instance;
69 }
70
71 void CutModelMainPanel::setImageData(vtkImageData* img){
72         try{
73                 checkInvariant();
74                 cutmanager->setImageData(img);
75         }catch(CutModelException e){
76                 showErrorDialog(e.getCause());
77         }
78 }
79
80 void CutModelMainPanel::setInteractor(vtkRenderWindowInteractor* interactor){
81         try{
82                 checkInvariant();
83                 cutmanager->setInteractor(interactor);
84         }catch(CutModelException e){
85                 showErrorDialog(e.getCause());
86         }
87 }
88
89 void CutModelMainPanel::setRenderer(vtkRenderer* renderer){
90     try{
91                 checkInvariant();
92                 cutmanager->setRenderer(renderer);
93         }catch(CutModelException e){
94                 showErrorDialog(e.getCause());
95         }
96 }
97
98 void CutModelMainPanel::checkInvariant()throw (CutModelException){
99         if(cutmanager==NULL){
100                 throw CutModelException("The manager is not initialize");
101         }       
102 }
103
104 void CutModelMainPanel::showErrorDialog(std::string str){       
105         wxMessageDialog* diag = new wxMessageDialog(this, wxString(str.c_str(),wxConvUTF8 ), wxString(str.c_str(),wxConvUTF8 ), wxICON_ERROR);
106         diag->ShowModal();
107 }
108
109 void CutModelMainPanel::RemoveActor(int id){
110      try{
111                 checkInvariant();
112
113                 for(int i = 0; i < viewpanels.size()-1;i++){
114                         if(viewpanels[i]->getId()==id){
115                                 for(int j = i; j < viewpanels.size()-1;j++){
116                     viewpanels[j]=viewpanels[j+1];
117                                 }
118                                 i = viewpanels.size();
119                         }
120                 }
121                 viewpanels.pop_back();
122
123
124                 cutmanager->RemoveActor(id);
125
126         }catch(CutModelException e){
127                 showErrorDialog(e.getCause());
128         }
129 }
130
131 void CutModelMainPanel::onAddCutModel(){
132     try{
133                 checkInvariant();
134
135                 int id = addNewViewPanel();             
136                 cutmanager->onAddCutModel(id, getModelView(id));
137
138                 _panelid++;
139
140                 ShowCurrentPanel(id);
141
142         }catch(CutModelException e){
143                 showErrorDialog(e.getCause());
144         }
145 }
146 void CutModelMainPanel::ShowCurrentPanel(int id){
147         for(int i = 0; i < viewpanels.size();i++){              
148                 if(viewpanels[i]->getId()==id){
149                         _wxauimanager->GetPane(viewpanels[i]).Show(true);
150                 }else{
151                         _wxauimanager->GetPane(viewpanels[i]).Show(false);
152                 }
153         }
154         _wxauimanager->Update();
155 }
156 int CutModelMainPanel::addNewViewPanel()throw( CutModelException){
157         
158         CutModelView* viewpanel = new CutModelView(this,cutmanager->getImageRange());
159
160         wxAuiPaneInfo paneinfo0;
161         _wxauimanager->AddPane(viewpanel, paneinfo0.DefaultPane().DestroyOnClose().Centre());   
162         
163         viewpanel->setId(_panelid);
164         viewpanels.push_back(viewpanel);        
165
166         return viewpanel->getId();
167         
168         
169 }
170 CutModelView* CutModelMainPanel::getModelView(int id)throw( CutModelException){
171
172         CutModelView* current = NULL;
173         for(int i = 0; i < viewpanels.size();i++){
174                 if(viewpanels[i]->getId()==id){
175             current = viewpanels[i];
176                 }
177         }
178         if(current == NULL){
179                 std::string s = "Id not found";
180                 throw CutModelException(s);
181         }
182         return current;
183 }
184 void CutModelMainPanel::onUndo(){
185
186 }
187
188 void CutModelMainPanel::onRedo(){
189
190 }
191
192 void CutModelMainPanel::changeOpacity(int id,int opacity){
193         try{
194                 checkInvariant();               
195                 cutmanager->changeOpacity(id, opacity);
196
197         }catch(CutModelException e){
198                 showErrorDialog(e.getCause());
199         }
200 }
201
202 void CutModelMainPanel::ShowViewBox(int id,bool check){
203     try{
204                 checkInvariant();               
205                 cutmanager->ShowViewBox(id, check);
206
207         }catch(CutModelException e){
208                 showErrorDialog(e.getCause());
209         }
210 }
211 void CutModelMainPanel::ShowPopUpMenu(int id){
212         showErrorDialog("test");
213 }
214 void CutModelMainPanel::changeColor(int id,double r,double g,double b){
215
216         try{
217                 checkInvariant();               
218                 cutmanager->changeColor(id, r, g, b);
219
220         }catch(CutModelException e){
221                 showErrorDialog(e.getCause());
222         }
223         
224 }
225 void CutModelMainPanel::ChangeShape(int id,int selection){
226         try{
227                 checkInvariant();
228                 
229                 cutmanager->ChangeShape(id, selection);
230
231         }catch(CutModelException e){
232                 showErrorDialog(e.getCause());
233         }
234 }
235 void CutModelMainPanel::updateActorDirection(int id){
236     try{
237                 checkInvariant();
238                 
239                 cutmanager->updateActorDirection(id);
240
241         }catch(CutModelException e){
242                 showErrorDialog(e.getCause());
243         }
244 }
245
246 void CutModelMainPanel::ExecuteCut(int id, double* range, bool isinside){
247         try{
248                 checkInvariant();
249                 cutmanager->ExecuteCut(id, range, isinside);
250         }catch(CutModelException e){
251                 showErrorDialog(e.getCause());
252         }
253 }
254
255 void CutModelMainPanel::ExecuteAll(){
256         for(int i = 0; i < viewpanels.size();i++){
257                 viewpanels[i]->ExecuteCut();
258         }
259
260 }
261 vtkImageData* CutModelMainPanel::GetResultImage(){
262     try{
263                 checkInvariant();
264                 return cutmanager->GetResultImage();
265         }catch(CutModelException e){
266                 showErrorDialog(e.getCause());
267         }
268         return NULL;
269 }
270 /**
271 **
272 **/
273
274 ToolBarCutModel::ToolBarCutModel(wxWindow * parent)
275 : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize)
276 {
277
278         wxBitmap bitmap10(Add_xpm);
279         this->AddTool(10, wxString(_T("Add")),bitmap10);
280
281         this->AddSeparator();
282
283         wxBitmap bitmap20(Undo_xpm);
284         this->AddTool(20, wxString(_T("Undo")),bitmap20);
285
286         wxBitmap bitmap30(Redo_xpm);
287         this->AddTool(30, wxString(_T("Redo")),bitmap30);       
288
289         this->AddSeparator();
290
291         wxBitmap bitmap40(OkAll_xpm);
292         this->AddTool(40, wxString(_T("Ok All")),bitmap40);     
293
294         this->Realize();
295
296         _evthand = new ToolBarEventHandlerCutModel();
297         this->SetEventHandler(_evthand);
298
299 }
300
301 ToolBarCutModel::~ToolBarCutModel(void){
302 }
303
304 ToolBarEventHandlerCutModel::ToolBarEventHandlerCutModel()
305 : wxEvtHandler(){
306 }
307 ToolBarEventHandlerCutModel::~ToolBarEventHandlerCutModel(){
308 }
309
310 void ToolBarEventHandlerCutModel::onAdd(wxCommandEvent& event){
311         CutModelMainPanel::getInstance()->onAddCutModel();
312 }
313
314 void ToolBarEventHandlerCutModel::onUndo(wxCommandEvent& event){
315         CutModelMainPanel::getInstance()->onUndo();     
316 }
317
318 void ToolBarEventHandlerCutModel::onRedo(wxCommandEvent& event){
319         CutModelMainPanel::getInstance()->onRedo();
320 }
321
322 void ToolBarEventHandlerCutModel::onExecuteAll(wxCommandEvent& event){
323         CutModelMainPanel::getInstance()->ExecuteAll();
324 }
325
326
327 BEGIN_EVENT_TABLE(ToolBarEventHandlerCutModel, wxEvtHandler)
328         EVT_MENU(10, ToolBarEventHandlerCutModel::onAdd)
329         EVT_MENU(20, ToolBarEventHandlerCutModel::onUndo)
330         EVT_MENU(30, ToolBarEventHandlerCutModel::onRedo)
331         EVT_MENU(40, ToolBarEventHandlerCutModel::onExecuteAll)
332 END_EVENT_TABLE()
333