]> Creatis software - creaContours.git/blob - lib/Interface_Icons_NDimensions/interfMainPanel.cxx
*** empty log message ***
[creaContours.git] / lib / Interface_Icons_NDimensions / interfMainPanel.cxx
1 #include "interfMainPanel.h"
2
3
4 #include "interfNewContourMenu.h"
5 #include "interfIOMenu.h"
6 #include "interfEditMenu.h"
7 #include "interfDeleteMenu.h"
8 #include "interfToolsMenu.h"
9 #include "interfToolsSpreadPanel.h"
10 #include "interfMenuBar.h"
11 #include "interfSegmentationMenu.h"
12
13
14 interfMainPanel* interfMainPanel::interfmainpanel=NULL;
15
16 interfMainPanel::interfMainPanel(wxWindow * parent, int sizex, int sizey, wxEvtHandler * evtHandler, std::string datadir)
17 : wxPanel(parent, -1, wxDefaultPosition, wxSize(sizex, sizey), wxBORDER_SUNKEN)
18 {
19
20         PANEL = "New Contour";
21         PANEL1 = "I/O";
22         PANEL2 = "Edit";
23         PANEL3 = "Delete";
24         PANEL4 = "Tools";  
25         PANEL5 = "Segmentation";
26
27         splitterwindow = new wxSplitterWindow(this,-1, wxDefaultPosition, wxSize(sizex, sizey), wxSP_3DSASH, wxString(""));
28         
29         sizey = sizey/8;
30         currentWindow = NULL;
31
32         wxPanel* toolpanel = new wxPanel(splitterwindow, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(""));
33
34         wxFlexGridSizer* flexsizer = new wxFlexGridSizer(6,2,1,1);      
35         toolpanel->SetSizer(flexsizer, true);
36         toolpanel->SetAutoLayout( true );
37
38         wxButton* b = getButton(toolpanel);
39         b->SetClientData(&PANEL);
40         wxButton* b1 = getButton(toolpanel);
41         b1->SetClientData(&PANEL1);
42         wxButton* b2 = getButton(toolpanel);
43         b2->SetClientData(&PANEL2);
44         wxButton* b3 = getButton(toolpanel);
45         b3->SetClientData(&PANEL3);
46         wxButton* b4 = getButton(toolpanel);
47         b4->SetClientData(&PANEL4);
48         wxButton* b5 = getButton(toolpanel);
49         b5->SetClientData(&PANEL5);
50
51         wxPanel* mentex = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(""));
52         wxPanel* mentex1 = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(""));
53         wxPanel* mentex2 = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(""));
54         wxPanel* mentex3 = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(""));
55         wxPanel* mentex4 = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(""));
56         wxPanel* mentex5 = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(""));
57         
58         menubar = new interfNewContourMenu(mentex, sizex, sizey, evtHandler, datadir);          
59         menubar1 = new interfIOMenu(mentex1, sizex, sizey, evtHandler, datadir);        
60         menubar2 = new interfEditMenu(mentex2, sizex, sizey, evtHandler, datadir);      
61         menubar3 = new interfDeleteMenu(mentex3, sizex, sizey, evtHandler, datadir);    
62         menubar4 = new interfToolsMenu(mentex4, sizex,sizey, evtHandler, datadir);
63         menubar5 = new interfSegmentationMenu(mentex5, sizex,sizey, evtHandler, datadir);
64                 
65         statictext = getText(mentex, PANEL);    
66         statictext1 = getText(mentex1, PANEL1); 
67         statictext2 = getText(mentex2, PANEL2); 
68         statictext3 = getText(mentex3, PANEL3); 
69         statictext4 = getText(mentex4, PANEL4); 
70         statictext5 = getText(mentex5, PANEL5); 
71         
72         flexsizer->Add(b, wxFIXED_MINSIZE);
73         flexsizer->Add(setMenuTextSizer(mentex, menubar,statictext), wxFIXED_MINSIZE);
74
75         flexsizer->Add(b1, wxFIXED_MINSIZE);
76         flexsizer->Add(setMenuTextSizer(mentex1, menubar1,statictext1), wxFIXED_MINSIZE);
77         
78         flexsizer->Add(b2, wxFIXED_MINSIZE);
79         flexsizer->Add(setMenuTextSizer(mentex2, menubar2,statictext2), wxFIXED_MINSIZE);
80         
81         flexsizer->Add(b3, wxFIXED_MINSIZE);
82         flexsizer->Add(setMenuTextSizer(mentex3, menubar3,statictext3), wxFIXED_MINSIZE);
83         
84         flexsizer->Add(b4, wxFIXED_MINSIZE);
85         flexsizer->Add(setMenuTextSizer(mentex4, menubar4,statictext4), wxFIXED_MINSIZE);
86
87         flexsizer->Add(b5, wxFIXED_MINSIZE);
88         flexsizer->Add(setMenuTextSizer(mentex5, menubar5,statictext5), wxFIXED_MINSIZE);
89
90         toolpanel->Update();
91         toolpanel->Layout();
92
93         infoPanel = new wxPanel(splitterwindow, -1, wxDefaultPosition, wxDefaultSize, wxNO_BORDER, wxString(""));
94         wxFlexGridSizer* infosizer = new wxFlexGridSizer(1,1,2,2);      
95         infoPanel->SetSizer(infosizer, true);
96         infoPanel->SetAutoLayout( true );       
97                 
98         splitterwindow->Initialize(toolpanel);
99         splitterwindow->SplitHorizontally(toolpanel, infoPanel);        
100                 
101         Connect(b->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
102         Connect(b1->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
103         Connect(b2->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
104         Connect(b3->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
105         Connect(b4->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
106         Connect(b5->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
107
108         this->Layout();
109         /*sizey = sizey/8;
110         currentWindow = NULL;
111
112         PANEL = "New Contour";
113         PANEL1 = "I/O";
114         PANEL2 = "Edit";
115         PANEL3 = "Delete";
116         PANEL4 = "Tools";   
117
118         
119         wxPanel* toolpanel = new wxPanel(this, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(""));
120
121         wxFlexGridSizer* flexsizer = new wxFlexGridSizer(6,2,2,2);      
122         toolpanel->SetSizer(flexsizer, true);
123         toolpanel->SetAutoLayout( true );
124
125         wxButton* b = getButton(toolpanel);
126         b->SetClientData(&PANEL);
127         wxButton* b1 = getButton(toolpanel);
128         b1->SetClientData(&PANEL1);
129         wxButton* b2 = getButton(toolpanel);
130         b2->SetClientData(&PANEL2);
131         wxButton* b3 = getButton(toolpanel);
132         b3->SetClientData(&PANEL3);
133         wxButton* b4 = getButton(toolpanel);
134         b4->SetClientData(&PANEL4);
135
136
137         wxPanel* mentex = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(""));
138         wxPanel* mentex1 = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(""));
139         wxPanel* mentex2 = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(""));
140         wxPanel* mentex3 = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(""));
141         wxPanel* mentex4 = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(""));
142         
143         menubar = new interfNewContourMenu(mentex, sizex, sizey, evtHandler);           
144         menubar1 = new interfIOMenu(mentex1, sizex, sizey, evtHandler); 
145         menubar2 = new interfEditMenu(mentex2, sizex, sizey, evtHandler);       
146         menubar3 = new interfDeleteMenu(mentex3, sizex, sizey, evtHandler);     
147         menubar4 = new interfToolsMenu(mentex4, sizex,sizey, evtHandler);
148                 
149 //              this->initializeToolsPanel(mentex4, sizex, sizey, evtHandler);          
150
151         statictext = getText(mentex, PANEL);    
152         statictext1 = getText(mentex1, PANEL1); 
153         statictext2 = getText(mentex2, PANEL2); 
154         statictext3 = getText(mentex3, PANEL3); 
155         statictext4 = getText(mentex4, PANEL4);
156         
157         
158
159         flexsizer->Add(b, wxFIXED_MINSIZE);
160         flexsizer->Add(setMenuTextSizer(mentex, menubar,statictext), wxFIXED_MINSIZE);
161
162         flexsizer->Add(b1, wxFIXED_MINSIZE);
163         flexsizer->Add(setMenuTextSizer(mentex1, menubar1,statictext1), wxFIXED_MINSIZE);
164         
165         flexsizer->Add(b2, wxFIXED_MINSIZE);
166         flexsizer->Add(setMenuTextSizer(mentex2, menubar2,statictext2), wxFIXED_MINSIZE);
167         
168         flexsizer->Add(b3, wxFIXED_MINSIZE);
169         flexsizer->Add(setMenuTextSizer(mentex3, menubar3,statictext3), wxFIXED_MINSIZE);
170         
171         flexsizer->Add(b4, wxFIXED_MINSIZE);
172         flexsizer->Add(setMenuTextSizer(mentex4, menubar4,statictext4), wxFIXED_MINSIZE);
173
174         toolpanel->Layout();
175
176         infoPanel = new wxPanel(this, -1, wxDefaultPosition, wxDefaultSize, wxNO_BORDER, wxString(""));
177         wxFlexGridSizer* infosizer = new wxFlexGridSizer(5,2,2,2);      
178         infoPanel->SetSizer(infosizer, true);
179         infoPanel->SetAutoLayout( true );       
180         
181
182
183         wxFlexGridSizer* mainsizer = new wxFlexGridSizer(1);    
184         this->SetSizer(mainsizer, true);
185         this->SetAutoLayout( true );
186
187
188         mainsizer->Add(toolpanel,wxEXPAND);
189         mainsizer->Add(new wxSplitterWindow(this,-1, wxDefaultPosition, wxDefaultSize, wxSP_3DBORDER, wxString("")), wxEXPAND); 
190         mainsizer->Add(infoPanel, wxEXPAND);
191
192         
193         Connect(b->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
194         Connect(b1->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
195         Connect(b2->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
196         Connect(b3->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
197         Connect(b4->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
198
199         this->Layout();*/
200
201 }
202
203 interfMainPanel::~interfMainPanel(void)
204 {
205 }
206
207 interfMainPanel* interfMainPanel::getInstance(wxWindow* parent, wxEvtHandler * evtHandler, std::string datadir){        
208
209         wxFrame* newframe = new wxFrame(parent, -1, wxT("New Interface"), wxPoint(1,1), wxSize(380,750),wxFRAME_TOOL_WINDOW|wxSYSTEM_MENU | wxCAPTION |  wxCLIP_CHILDREN |wxFRAME_FLOAT_ON_PARENT);
210         
211                                                                                                                                                                                 
212         if(interfmainpanel == NULL){
213                 interfmainpanel = new interfMainPanel(newframe, 380, 750, evtHandler, datadir);
214         }
215
216         newframe->Show(TRUE);
217         return interfmainpanel;
218 }
219
220 interfMainPanel* interfMainPanel::getInstance(wxWindow* parent, wxEvtHandler * evtHandler){     
221
222         wxFrame* newframe = new wxFrame(parent, -1, wxT("New Interface"), wxPoint(1,1), wxSize(380,750),wxFRAME_TOOL_WINDOW|wxSYSTEM_MENU | wxCAPTION |  wxCLIP_CHILDREN |wxFRAME_FLOAT_ON_PARENT );
223
224         if(interfmainpanel == NULL){
225                 interfmainpanel = new interfMainPanel(newframe, 380, 750, evtHandler);
226         }
227
228         newframe->Show(TRUE);
229         return interfmainpanel;
230 }
231
232 interfMainPanel* interfMainPanel::getInstance(){        
233
234         return interfmainpanel;
235 }
236
237
238 wxPanel* interfMainPanel::initializeToolsPanel(wxWindow* parent, int sizex, int sizey, wxEvtHandler * evtHandler){
239
240
241         wxPanel* panel = new wxPanel(parent, -1, wxDefaultPosition, wxSize(sizex, sizey), wxBORDER_SUNKEN, wxString("Spread"));
242
243         wxFlexGridSizer* flexsizer = new wxFlexGridSizer(2,1,2,2)       ;
244         panel->SetSizer(flexsizer, true);
245         panel->SetAutoLayout( true );
246
247         interfToolsMenu* menu = new interfToolsMenu(panel, sizex, sizey, evtHandler);
248         toolspread = new interfToolsSpreadPanel(panel, sizex, 300, evtHandler);
249
250         flexsizer->Add(menu, wxFIXED_MINSIZE);
251         flexsizer->Add(toolspread, wxFIXED_MINSIZE);
252         
253         panel->Layout();        
254         
255
256         return panel;
257 }
258
259
260 /**
261 **      Adds a new checkbox to the scrolledwindow using the checkboxsizer
262 **      @Params id of contour
263 **      
264 **/
265 void interfMainPanel::addContourCheckBox(std::string id){
266         toolspread->addContourCheckBox(id);
267 }
268
269 /**
270 **      Removes a checkbox from the list of checkboxes in the flexsizer (checkboxsizer)
271 **      @Params id of contour
272 **      
273 **/
274 void interfMainPanel::removeContourCheckBox(std::string id){
275         toolspread->removeContourCheckBox(id);
276 }
277
278 void interfMainPanel::onActionButtonPressed1( wxCommandEvent& event ){
279         wxButton* b = (wxButton*)event.GetEventObject();
280         wxPanel* dmenu;
281         wxStaticText* text;
282         std::string dstring = *((std::string*) b->GetClientData());
283         int sizechange=0;
284
285
286         if(dstring==PANEL){
287                 dmenu = menubar;
288                 text = statictext;
289         }else if( dstring==PANEL1){
290                 dmenu = menubar1;       
291                 text = statictext1;
292         }else if(dstring==PANEL2){
293                 dmenu = menubar2;
294                 text = statictext2;
295         }else if(dstring==PANEL3){
296                 dmenu = menubar3;
297                 text = statictext3;
298         }else if(dstring==PANEL4){
299                 dmenu = menubar4;
300                 text = statictext4;
301         }else if(dstring==PANEL5){
302                 dmenu = menubar5;
303                 text = statictext5;
304         }
305
306         if(b->GetLabel() == "+" ){
307                 dmenu->Show(true);
308                 sizechange = 1;
309                 b->SetLabel("-");
310         }else{
311                 dmenu->Show(false);             
312                 sizechange = -1;
313                 b->SetLabel("+");
314         }       
315         
316         sizechange *= dmenu->GetSize().GetHeight();
317         splitterwindow->SetSashPosition(splitterwindow->GetSashPosition()+sizechange);
318         
319         this->Layout();
320         this->Refresh();
321 }
322
323 wxStaticText* interfMainPanel::getText(wxWindow* parent, std::string nom){
324         return new wxStaticText(parent, -1, wxString(nom), wxDefaultPosition, 
325                                                         wxDefaultSize, wxALIGN_CENTRE, wxString(nom));
326 }
327
328 wxButton* interfMainPanel::getButton(wxWindow* parent){
329         wxButton* b = new wxButton(parent, -1, wxString("-"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT, 
330                                                                 wxDefaultValidator, wxString("-"));     
331         return b;
332 }
333
334 wxPanel* interfMainPanel::setMenuTextSizer(wxWindow* parent, wxPanel* panel, wxStaticText* text){
335
336         wxFlexGridSizer* flexsizer = new wxFlexGridSizer(2,1,2,2);      
337         parent->SetSizer(flexsizer, true);
338         parent->SetAutoLayout( true );
339
340         flexsizer->Add(text, wxFLEX_GROWMODE_ALL);
341         flexsizer->Add(panel, wxFLEX_GROWMODE_ALL);
342
343         parent->Layout();
344         return (wxPanel*)parent;
345         
346 }
347
348 /**
349 **      Shows the panel in the 
350 **/
351 void interfMainPanel::showPanel(wxWindow* panel){
352
353         wxSizer* sizer = infoPanel->GetSizer();
354
355         if(currentWindow != NULL){
356                 currentWindow->Hide();
357                 sizer->Remove(currentWindow);
358         }       
359         sizer->Add(panel);
360     currentWindow = panel;
361         currentWindow->Show(true);
362
363         splitterwindow->SetSashPosition(splitterwindow->GetSashPosition()+1);
364         splitterwindow->SetSashPosition(splitterwindow->GetSashPosition()-1);
365
366         this->Layout();
367         this->Refresh();
368
369 }
370
371 /**
372 **      Gets the Information panel
373 **/
374 wxPanel* interfMainPanel::getInfoPanel(){
375         return infoPanel;
376 }