X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcreaDevManagerLib%2FwxCDMApplicationDescriptionPanel.cpp;h=bf0acee23ae8a81143a51ecb8ebddb56fa4f06e7;hb=752294dd30e2ee94f38be513d441f4716509ce13;hp=44ee9b10a49b74095b82bc165fc2bf9d81da7999;hpb=609d8d48cae96384e664ec6b000e8ecfcbad6459;p=crea.git diff --git a/lib/creaDevManagerLib/wxCDMApplicationDescriptionPanel.cpp b/lib/creaDevManagerLib/wxCDMApplicationDescriptionPanel.cpp index 44ee9b1..bf0acee 100644 --- a/lib/creaDevManagerLib/wxCDMApplicationDescriptionPanel.cpp +++ b/lib/creaDevManagerLib/wxCDMApplicationDescriptionPanel.cpp @@ -34,13 +34,17 @@ #include "wxCDMApplicationDescriptionPanel.h" +#include "CDMUtilities.h" #include "wxCDMMainFrame.h" +#include "wxCDMApplicationHelpDialog.h" + #include "creaDevManagerIds.h" #include "images/AIcon64.xpm" BEGIN_EVENT_TABLE(wxCDMApplicationDescriptionPanel, wxPanel) EVT_BUTTON(ID_BUTTON_PREV, wxCDMApplicationDescriptionPanel::OnBtnReturn) +EVT_BUTTON(ID_BUTTON_SET_NAME, wxCDMApplicationDescriptionPanel::OnBtnSetExeName) EVT_BUTTON(ID_BUTTON_CREATE_CLASS, wxCDMApplicationDescriptionPanel::OnBtnCreateClass) EVT_BUTTON(ID_BUTTON_CREATE_FOLDER, wxCDMApplicationDescriptionPanel::OnBtnCreateFolder) EVT_BUTTON(ID_BUTTON_EDIT_CMAKELISTSFILE, wxCDMApplicationDescriptionPanel::OnBtnEditCMakeLists) @@ -89,16 +93,21 @@ void wxCDMApplicationDescriptionPanel::CreateControls() returnbt->SetToolTip(wxT("Return to the active project description.")); sizer->Add(returnbt, 0, wxALIGN_CENTER | wxALL, 5); - //Welcome - sizer->Add(new wxStaticText(this, -1, _("Application")),0, wxALIGN_CENTER, 0); - - //Image - sizer->Add(new wxStaticBitmap(this, -1, wxBitmap(AIcon64)),0, wxALIGN_CENTER, 0); - - //Project Name - sizer->Add(new wxStaticText(this, -1, crea::std2wx(this->application->GetNameApplication())),0, wxALIGN_CENTER, 0); - - //Project Properties + //Header + wxBoxSizer* headerSizer = new wxBoxSizer(wxHORIZONTAL); + { + //Image + headerSizer->Add(new wxStaticBitmap(this, -1, wxBitmap(AIcon64)),0, wxALIGN_CENTER, 0); + wxBoxSizer* textSizer = new wxBoxSizer(wxVERTICAL); + //Title + textSizer->Add(new wxStaticText(this, -1, _("Application")),0, wxALIGN_LEFT, 0); + //Application Name + textSizer->Add(new wxStaticText(this, -1, crea::std2wx(this->application->GetName())),0, wxALIGN_LEFT, 0); + headerSizer->Add(textSizer, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5); + } + sizer->Add(headerSizer, 0, wxALIGN_CENTER); + + /* //Properties wxStaticBoxSizer* propertiesBox = new wxStaticBoxSizer(wxVERTICAL, this, wxT("&Properties")); wxPanel* propertiesPanel = new wxPanel(this); wxBoxSizer* propertiesPanelSizer = new wxBoxSizer(wxVERTICAL); @@ -107,10 +116,10 @@ void wxCDMApplicationDescriptionPanel::CreateControls() wxStaticText *pMainFile = new wxStaticText(propertiesPanel, -1, wxT("Executable Name")); wxBoxSizer* pMainFilesz = new wxBoxSizer(wxHORIZONTAL); - wxStaticText* pMainFiletc = new wxStaticText(propertiesPanel, wxID_ANY, crea::std2wx(this->application->GetExecutableName())); - wxButton* pMainFilebt = new wxButton(propertiesPanel, ID_BUTTON_SET_VERSION, wxT("Set")); + this->executableNametc = new wxStaticText(propertiesPanel, wxID_ANY, crea::std2wx(this->application->GetExecutableName())); + wxButton* pMainFilebt = new wxButton(propertiesPanel, ID_BUTTON_SET_NAME, wxT("Set")); pMainFilebt->SetToolTip(wxT("Set the name of the executable file for the application.")); - pMainFilesz->Add(pMainFiletc, 0, wxALIGN_CENTER_VERTICAL, 0); + pMainFilesz->Add(this->executableNametc, 0, wxALIGN_CENTER_VERTICAL, 0); pMainFilesz->Add(pMainFilebt, 0, wxALIGN_CENTER | wxLEFT, 10); propertiesGridSizer->Add(pMainFile, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); @@ -123,7 +132,7 @@ void wxCDMApplicationDescriptionPanel::CreateControls() propertiesPanelSizer->Fit(propertiesPanel); propertiesBox->Add(propertiesPanel, 0, wxEXPAND); sizer->Add(propertiesBox, 0, wxEXPAND | wxALL, 10); - + */ //Actions //actions StaticBoxSizer wxStaticBoxSizer* actionsBox = new wxStaticBoxSizer(wxVERTICAL, this, wxT("&Actions")); @@ -132,33 +141,45 @@ void wxCDMApplicationDescriptionPanel::CreateControls() wxPanel* actionsPanel = new wxPanel(this); //actions Sizer wxBoxSizer* actionsPanelSizer = new wxBoxSizer(wxHORIZONTAL); + //actionsGrid Sizer + wxFlexGridSizer* actionsGridSizer = new wxFlexGridSizer(2, 2, 9, 15); - wxButton* createClassbt = new wxButton(actionsPanel, ID_BUTTON_CREATE_CLASS, _T("Create Class")); + wxButton* createClassbt = new wxButton(actionsPanel, ID_BUTTON_CREATE_CLASS, _T("Create Class (Optional)")); createClassbt->SetToolTip(wxT("Create a new Class (.h and .cxx files).")); - wxButton* createFolderbt = new wxButton(actionsPanel, ID_BUTTON_CREATE_FOLDER, _T("Create Folder")); + wxButton* createFolderbt = new wxButton(actionsPanel, ID_BUTTON_CREATE_FOLDER, _T("Create Folder (Optional)")); createFolderbt->SetToolTip(wxT("Create a new Folder inside the application folder.")); - wxButton* editCMakebt = new wxButton(actionsPanel, ID_BUTTON_EDIT_CMAKELISTSFILE, _T("Edit CMakeLists File")); + wxButton* editCMakebt = new wxButton(actionsPanel, ID_BUTTON_EDIT_CMAKELISTSFILE, _T("B. Edit CMakeLists File")); editCMakebt->SetToolTip(wxT("Edit the CMakeLists.txt file inside this application.")); editCMakebt->Connect(wxEVT_ENTER_WINDOW, (wxObjectEventFunction)(wxEventFunction)(wxMouseEventFunction)&wxCDMApplicationDescriptionPanel::OnCMakeMouseEnter,NULL,this); editCMakebt->Connect(wxEVT_LEAVE_WINDOW, (wxObjectEventFunction)(wxEventFunction)(wxMouseEventFunction)&wxCDMApplicationDescriptionPanel::OnCMakeMouseExit,NULL,this); - wxButton* openFolderbt = new wxButton(actionsPanel, ID_BUTTON_OPEN_FOLDER, _T("Open Application Folder")); + wxButton* openFolderbt = new wxButton(actionsPanel, ID_BUTTON_OPEN_FOLDER, _T("A. Open Application Folder")); openFolderbt->SetToolTip(wxT("Open the application folder in the file explorer.")); - actionsPanelSizer->Add(createClassbt, 0, wxALL, 5); - actionsPanelSizer->Add(createFolderbt, 0, wxALL, 5); - actionsPanelSizer->Add(editCMakebt, 0, wxALL, 5); - actionsPanelSizer->Add(openFolderbt, 0, wxALL, 5); + actionsGridSizer->Add(openFolderbt, 1, wxALL | wxEXPAND, 5); + actionsGridSizer->Add(editCMakebt, 1, wxALL | wxEXPAND, 5); + actionsGridSizer->Add(createClassbt, 1, wxALL | wxEXPAND, 5); + actionsGridSizer->Add(createFolderbt, 1, wxALL | wxEXPAND, 5); //SetPanel sizer and box + actionsGridSizer->AddGrowableCol(0,1); + actionsGridSizer->AddGrowableCol(1,1); + + actionsPanelSizer->Add(actionsGridSizer, 1, wxEXPAND, 0); actionsPanel->SetSizer(actionsPanelSizer); actionsPanelSizer->Fit(actionsPanel); - actionsBox->Add(actionsPanel, 0, wxALL, 5); + actionsBox->Add(actionsPanel, 1, wxALL | wxEXPAND, 5); sizer->Add(actionsBox, 0, wxEXPAND | wxALL, 10); //Assign sizer SetSizer(sizer); sizer->SetSizeHints(this); + + if (((wxCDMMainFrame*)this->GetParent())->isHelp()) + { + wxCDMApplicationHelpDialog* helpDialog = new wxCDMApplicationHelpDialog(this->GetParent(), this->application, wxID_ANY); + helpDialog->Show(true); + } } void wxCDMApplicationDescriptionPanel::OnBtnReturn(wxCommandEvent& event) @@ -169,18 +190,95 @@ void wxCDMApplicationDescriptionPanel::OnBtnReturn(wxCommandEvent& event) wxPostEvent(this->GetParent(), *newEvent); } +void wxCDMApplicationDescriptionPanel::OnBtnSetExeName(wxCommandEvent& event) +{ + //get name + wxString versionWx = wxGetTextFromUser( + wxT("Enter the new executable name"), + wxT("Change Application Executable Name - creaDevManager"), + crea::std2wx(this->application->GetExecutableName()) + ); + //check name + std::vector parts; + CDMUtilities::splitter::split(parts, crea::wx2std(versionWx), " .", CDMUtilities::splitter::no_empties); + if(parts.size() > 0) + { + std::string* result; + if(!this->application->SetExecutableName(crea::wx2std(versionWx), result)) + wxMessageBox(crea::std2wx(*result),_T("Change Application Executable Name - Error!"),wxOK | wxICON_ERROR); + } + else + { + wxMessageBox(crea::std2wx("No name specified"),_T("Set Application Executable Name - Error!"),wxOK | wxICON_ERROR); + } + this->executableNametc->SetLabel(crea::std2wx(this->application->GetExecutableName())); +} + void wxCDMApplicationDescriptionPanel::OnBtnCreateClass(wxCommandEvent& event) { - //TODO: implement method - std::cerr << "Event OnBtnCreateClass not implemented" << std::endl; - event.Skip(); + //get class name from user + wxTextEntryDialog* newClassDlg = new wxTextEntryDialog( + this, + wxT("Please enter the new class name."), + wxT("New Class - creaDevManager"), + wxT(""), + wxOK | wxCANCEL + ); + + if (newClassDlg->ShowModal() == wxID_OK) + { + std::string className = crea::wx2std(newClassDlg->GetValue()); + //check class name + if(className.size() > 0) + { + if(!this->application->CreateClass(className)) + wxMessageBox(crea::std2wx("Something has gone wrong with the creation of the class."),_T("New Class - Error!"),wxOK | wxICON_ERROR); + + ((wxCDMMainFrame*)this->GetParent())->RefreshProject(); + + wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_DISPLAY_CHANGED); + newEvent->SetId(0); + newEvent->SetInt(this->application->GetId()); + wxPostEvent(this->GetParent(), *newEvent); + + wxMessageBox(crea::std2wx("The class has been created successfully."),_T("New Class - Success"),wxOK | wxICON_INFORMATION); + } + else + { + wxMessageBox(crea::std2wx("The new class name cannot be empty."),_T("New Class - Error!"),wxOK | wxICON_ERROR); + } + } } void wxCDMApplicationDescriptionPanel::OnBtnCreateFolder(wxCommandEvent& event) { - //TODO: implement method - std::cerr << "Event OnBtnCreateFolder not implemented" << std::endl; - event.Skip(); + //get name + wxString folderName = wxGetTextFromUser( + wxT("Enter the name of the new folder:"), + wxT("Create Folder - creaDevManager") + ); + //check name + std::vector parts; + CDMUtilities::splitter::split(parts, crea::wx2std(folderName), " /\\\"", CDMUtilities::splitter::no_empties); + if(parts.size() > 0) + { + std::string* result; + modelCDMFolder* folderC = this->application->CreateFolder(crea::wx2std(folderName), result); + if(folderC == NULL) + { + wxMessageBox(crea::std2wx(*result),_T("Create Folder - Error!"),wxOK | wxICON_ERROR); + return; + } + ((wxCDMMainFrame*)this->GetParent())->RefreshProject(); + wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_DISPLAY_CHANGED); + newEvent->SetInt(folderC->GetId()); + wxPostEvent(this->GetParent(), *newEvent); + wxMessageBox(crea::std2wx("The folder was successfully created"),_T("Create Folder - Success"),wxOK | wxICON_INFORMATION); + } + else + { + wxMessageBox(crea::std2wx("No name specified"),_T("Create Folder - Error!"),wxOK | wxICON_ERROR); + } } void wxCDMApplicationDescriptionPanel::OnBtnEditCMakeLists(wxCommandEvent& event)