#include "interfSegmentationMenu.h" #include "interfMainPanel.h" interfSegmentationMenu::interfSegmentationMenu(wxWindow * parent, int sizex, int sizey,wxEvtHandler* evtHandler, std::string datdir) : interfMenuBar(parent, sizex, sizey) { this->datadir = datdir; contourevent = (wxContourEventHandler*)evtHandler; infoWin = NULL; configPanel = NULL; segmentPanel = NULL; spreadPanel = NULL; segmentPanelITK = NULL; eventHandler = evtHandler; initButtons(this); } void interfSegmentationMenu::initButtons(wxEvtHandler* evtHandler) { std::vector path, nom; std::vector funct; path.push_back(datadir + "/Segmentation.png"); nom.push_back("Find shapes by automatic segmentation"); funct.push_back((wxObjectEventFunction) &interfSegmentationMenu:: onSegmentationPressed); path.push_back(datadir + "/ITK.png"); nom.push_back("Find shapes by automatic segmentation with ITK"); funct.push_back((wxObjectEventFunction) &interfSegmentationMenu:: onSegmentationPressedITK); path.push_back(datadir + "/snake.png"); nom.push_back("Find shapes using border snake interaction"); funct.push_back((wxObjectEventFunction) &interfSegmentationMenu:: onSnakePressed); this->addButtons(path, nom); this->setVectorFunction(funct); this->connectEvents(evtHandler); } interfSegmentationMenu::~interfSegmentationMenu() { } /** ** Responds to the events of the buttons, when the same panel is responsible for it. It gets the name ** of the button corresponding to the method that has to be executed, ** it uses attribute eventHandler to call the methods define by the application. ** see setEventHandler(wxEventHandler*) **/ void interfSegmentationMenu::onSegmentationPressed(wxCommandEvent& event){ if(segmentPanel == NULL){ segmentPanel = new wxPanel(interfMainPanel::getInstance()->getInfoPanel(), -1, wxDefaultPosition, wxDefaultSize, wxBORDER_STATIC, wxString(_T(""))); wxFlexGridSizer* flexsizer = new wxFlexGridSizer(1); segmentPanel->SetSizer(flexsizer, true); segmentPanel->SetAutoLayout( true ); segmentPanel->SetEventHandler(this->contourevent); wxPanel* panel = contourevent->getSegmentationPanel(segmentPanel); wxStaticText* stattext = new wxStaticText(segmentPanel, -1, wxString(_T(" Automatic Segmentation ")), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE|wxBORDER_SIMPLE|wxFULL_REPAINT_ON_RESIZE, wxString(_T(""))); flexsizer->Add(stattext,wxALIGN_CENTER | wxALIGN_CENTRE); flexsizer->Add(panel, wxEXPAND); segmentPanel->Layout(); } interfMainPanel::getInstance()->showPanel(segmentPanel); contourevent->showAxis(true); axisshown = true; } void interfSegmentationMenu::hideAxis(){ if(axisshown){ axisshown = false; contourevent->showAxis(axisshown); } } void interfSegmentationMenu::onSegmentationPressedITK(wxCommandEvent& event){ if(segmentPanelITK == NULL){ segmentPanelITK = new wxPanel(interfMainPanel::getInstance()->getInfoPanel(), -1, wxDefaultPosition, wxDefaultSize, wxBORDER_STATIC, wxString(_T(""))); wxFlexGridSizer* flexsizer = new wxFlexGridSizer(1); segmentPanelITK->SetSizer(flexsizer, true); segmentPanelITK->SetAutoLayout( true ); segmentPanelITK->SetEventHandler(this->contourevent); wxPanel* panel = contourevent->getSegmentationPanelITK(segmentPanelITK); wxStaticText* stattext = new wxStaticText(segmentPanelITK, -1, wxString(_T(" Automatic ITK Segmentation ")), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE|wxBORDER_SIMPLE|wxFULL_REPAINT_ON_RESIZE, wxString(_T(""))); flexsizer->Add(stattext,wxALIGN_CENTER | wxALIGN_CENTRE); flexsizer->Add(panel, wxEXPAND); segmentPanelITK->Layout(); } interfMainPanel::getInstance()->showPanel(segmentPanelITK); //contourevent->showAxis(true); //axisshown = true; } void interfSegmentationMenu::onSnakePressed(wxCommandEvent& event){ contourevent->onSnakePressed(this); }