]> Creatis software - creaContours.git/blob - lib/Interface_Icons_NDimensions/interfSegmentationMenu.cxx
8ae1df67c48eb73bdcee2a949ff6d7c4d5209db5
[creaContours.git] / lib / Interface_Icons_NDimensions / interfSegmentationMenu.cxx
1 #include "interfSegmentationMenu.h"
2 #include "interfMainPanel.h"
3
4 interfSegmentationMenu::interfSegmentationMenu(wxWindow * parent, int sizex, int sizey,wxEvtHandler* evtHandler, std::string datdir)
5         : interfMenuBar(parent, sizex, sizey)
6 {
7         this->datadir = datdir;
8         contourevent = (wxContourEventHandler*)evtHandler;
9         infoWin = NULL;
10         configPanel = NULL;
11         segmentPanel = NULL;
12         spreadPanel = NULL;
13         segmentPanelITK = NULL;
14         
15         eventHandler = evtHandler;
16
17         initButtons(this);
18 }
19
20 void interfSegmentationMenu::initButtons(wxEvtHandler* evtHandler) {
21
22         std::vector<std::string> path, nom;
23         std::vector<wxObjectEventFunction> funct;
24
25         path.push_back(datadir + "/Segmentation.png");
26         nom.push_back("Find shapes by automatic segmentation");
27         funct.push_back((wxObjectEventFunction) &interfSegmentationMenu:: onSegmentationPressed);
28
29         path.push_back(datadir + "/ITK.png");
30         nom.push_back("Find shapes by automatic segmentation with ITK");
31         funct.push_back((wxObjectEventFunction) &interfSegmentationMenu:: onSegmentationPressedITK);
32
33         path.push_back(datadir + "/snake.png");
34         nom.push_back("Find shapes using border snake interaction");
35         funct.push_back((wxObjectEventFunction) &interfSegmentationMenu:: onSnakePressed);
36
37         this->addButtons(path, nom);    
38         this->setVectorFunction(funct);
39
40         this->connectEvents(evtHandler);
41            
42
43 }
44
45 interfSegmentationMenu::~interfSegmentationMenu()
46 {
47 }
48
49 /**
50         **      Responds to the events of the buttons, when the same panel is responsible for it. It gets the name
51         **      of the button corresponding to the method that has to be executed,
52         **      it uses attribute eventHandler to call the methods define by the application.
53         **      see setEventHandler(wxEventHandler*)
54         **/
55
56
57 void  interfSegmentationMenu::onSegmentationPressed(wxCommandEvent& event){
58     if(segmentPanel == NULL){
59                 segmentPanel = new wxPanel(interfMainPanel::getInstance()->getInfoPanel(), -1, wxDefaultPosition, wxDefaultSize, wxBORDER_STATIC, wxString(_T("")));
60                         
61
62                 wxFlexGridSizer* flexsizer = new wxFlexGridSizer(1);    
63                 segmentPanel->SetSizer(flexsizer, true);
64                 segmentPanel->SetAutoLayout( true );    
65                 segmentPanel->SetEventHandler(this->contourevent);
66                 
67                 wxPanel* panel = contourevent->getSegmentationPanel(segmentPanel);
68         
69
70                 wxStaticText* stattext = new wxStaticText(segmentPanel, -1, wxString(_T("   Automatic Segmentation   ")), wxDefaultPosition,
71                         wxDefaultSize, wxALIGN_CENTRE|wxBORDER_SIMPLE|wxFULL_REPAINT_ON_RESIZE, wxString(_T("")));
72
73                 flexsizer->Add(stattext,wxALIGN_CENTER | wxALIGN_CENTRE);
74                 flexsizer->Add(panel, wxEXPAND);
75                 segmentPanel->Layout();
76         }
77         interfMainPanel::getInstance()->showPanel(segmentPanel);
78         contourevent->showAxis(true);
79         axisshown = true;
80 }
81
82
83 void interfSegmentationMenu::hideAxis(){
84         if(axisshown){
85                 axisshown = false;
86                 contourevent->showAxis(axisshown);
87         }
88 }
89
90 void  interfSegmentationMenu::onSegmentationPressedITK(wxCommandEvent& event){
91     if(segmentPanelITK == NULL){
92                 segmentPanelITK = new wxPanel(interfMainPanel::getInstance()->getInfoPanel(), -1, wxDefaultPosition, wxDefaultSize, wxBORDER_STATIC, wxString(_T("")));
93                         
94
95                 wxFlexGridSizer* flexsizer = new wxFlexGridSizer(1);    
96                 segmentPanelITK->SetSizer(flexsizer, true);
97                 segmentPanelITK->SetAutoLayout( true ); 
98                 segmentPanelITK->SetEventHandler(this->contourevent);
99                 
100                 wxPanel* panel = contourevent->getSegmentationPanelITK(segmentPanelITK);
101         
102
103                 wxStaticText* stattext = new wxStaticText(segmentPanelITK, -1, wxString(_T("   Automatic ITK Segmentation   ")), wxDefaultPosition,
104                         wxDefaultSize, wxALIGN_CENTRE|wxBORDER_SIMPLE|wxFULL_REPAINT_ON_RESIZE, wxString(_T("")));
105
106                 flexsizer->Add(stattext,wxALIGN_CENTER | wxALIGN_CENTRE);
107                 flexsizer->Add(panel, wxEXPAND);
108                 segmentPanelITK->Layout();
109         }
110         interfMainPanel::getInstance()->showPanel(segmentPanelITK);
111         //contourevent->showAxis(true);
112         //axisshown = true;
113 }
114
115 void  interfSegmentationMenu::onSnakePressed(wxCommandEvent& event){
116     
117         contourevent->onSnakePressed(this);
118
119 }