]> Creatis software - creaContours.git/blob - lib/Interface_Icons_NDimensions/interfMainPanel.cxx
edf9fc2d572e7512d2e5258f5e0b98dc711a1b30
[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         if(interfmainpanel == NULL){
212                 interfmainpanel = new interfMainPanel(newframe, 380, 750, evtHandler, datadir);
213         }
214
215         newframe->Show(TRUE);
216         return interfmainpanel;
217 }
218
219 interfMainPanel* interfMainPanel::getInstance(wxWindow* parent, wxEvtHandler * evtHandler){     
220
221         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 );
222
223         if(interfmainpanel == NULL){
224                 interfmainpanel = new interfMainPanel(newframe, 380, 750, evtHandler);
225         }
226
227         newframe->Show(TRUE);
228         return interfmainpanel;
229 }
230
231 interfMainPanel* interfMainPanel::getInstance(){        
232
233         return interfmainpanel;
234 }
235
236
237 wxPanel* interfMainPanel::initializeToolsPanel(wxWindow* parent, int sizex, int sizey, wxEvtHandler * evtHandler){
238
239
240         wxPanel* panel = new wxPanel(parent, -1, wxDefaultPosition, wxSize(sizex, sizey), wxBORDER_SUNKEN, wxString("Spread"));
241
242         wxFlexGridSizer* flexsizer = new wxFlexGridSizer(2,1,2,2)       ;
243         panel->SetSizer(flexsizer, true);
244         panel->SetAutoLayout( true );
245
246         interfToolsMenu* menu = new interfToolsMenu(panel, sizex, sizey, evtHandler);
247         toolspread = new interfToolsSpreadPanel(panel, sizex, 300, evtHandler);
248
249         flexsizer->Add(menu, wxFIXED_MINSIZE);
250         flexsizer->Add(toolspread, wxFIXED_MINSIZE);
251         
252         panel->Layout();        
253         
254
255         return panel;
256 }
257
258
259 /**
260 **      Adds a new checkbox to the scrolledwindow using the checkboxsizer
261 **      @Params id of contour
262 **      
263 **/
264 void interfMainPanel::addContourCheckBox(std::string id){
265         toolspread->addContourCheckBox(id);
266 }
267
268 /**
269 **      Removes a checkbox from the list of checkboxes in the flexsizer (checkboxsizer)
270 **      @Params id of contour
271 **      
272 **/
273 void interfMainPanel::removeContourCheckBox(std::string id){
274         toolspread->removeContourCheckBox(id);
275 }
276
277 void interfMainPanel::onActionButtonPressed1( wxCommandEvent& event ){
278         wxButton* b = (wxButton*)event.GetEventObject();
279         wxPanel* dmenu;
280         wxStaticText* text;
281         std::string dstring = *((std::string*) b->GetClientData());
282         int sizechange=0;
283
284
285         if(dstring==PANEL){
286                 dmenu = menubar;
287                 text = statictext;
288         }else if( dstring==PANEL1){
289                 dmenu = menubar1;       
290                 text = statictext1;
291         }else if(dstring==PANEL2){
292                 dmenu = menubar2;
293                 text = statictext2;
294         }else if(dstring==PANEL3){
295                 dmenu = menubar3;
296                 text = statictext3;
297         }else if(dstring==PANEL4){
298                 dmenu = menubar4;
299                 text = statictext4;
300         }else if(dstring==PANEL5){
301                 dmenu = menubar5;
302                 text = statictext5;
303         }
304
305         if(b->GetLabel() == "+" ){
306                 dmenu->Show(true);
307                 sizechange = 1;
308                 b->SetLabel("-");
309         }else{
310                 dmenu->Show(false);             
311                 sizechange = -1;
312                 b->SetLabel("+");
313         }       
314         
315         sizechange *= dmenu->GetSize().GetHeight();
316         splitterwindow->SetSashPosition(splitterwindow->GetSashPosition()+sizechange);
317         
318         this->Layout();
319         this->Refresh();
320 }
321
322 wxStaticText* interfMainPanel::getText(wxWindow* parent, std::string nom){
323         return new wxStaticText(parent, -1, wxString(nom), wxDefaultPosition, 
324                                                         wxDefaultSize, wxALIGN_CENTRE, wxString(nom));
325 }
326
327 wxButton* interfMainPanel::getButton(wxWindow* parent){
328         wxButton* b = new wxButton(parent, -1, wxString("-"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT, 
329                                                                 wxDefaultValidator, wxString("-"));     
330         return b;
331 }
332
333 wxPanel* interfMainPanel::setMenuTextSizer(wxWindow* parent, wxPanel* panel, wxStaticText* text){
334
335         wxFlexGridSizer* flexsizer = new wxFlexGridSizer(2,1,2,2);      
336         parent->SetSizer(flexsizer, true);
337         parent->SetAutoLayout( true );
338
339         flexsizer->Add(text, wxFLEX_GROWMODE_ALL);
340         flexsizer->Add(panel, wxFLEX_GROWMODE_ALL);
341
342         parent->Layout();
343         return (wxPanel*)parent;
344         
345 }
346
347 /**
348 **      Shows the panel in the 
349 **/
350 void interfMainPanel::showPanel(wxWindow* panel){
351
352         wxSizer* sizer = infoPanel->GetSizer();
353
354         if(currentWindow != NULL){
355                 currentWindow->Hide();
356                 sizer->Remove(currentWindow);
357         }       
358         sizer->Add(panel);
359     currentWindow = panel;
360         currentWindow->Show(true);
361
362         splitterwindow->SetSashPosition(splitterwindow->GetSashPosition()+1);
363         splitterwindow->SetSashPosition(splitterwindow->GetSashPosition()-1);
364
365         this->Layout();
366         this->Refresh();
367
368 }
369
370 /**
371 **      Gets the Information panel
372 **/
373 wxPanel* interfMainPanel::getInfoPanel(){
374         return infoPanel;
375 }