/* # --------------------------------------------------------------------- # # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image # pour la Sant�) # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton # Previous Authors : Laurent Guigues, Jean-Pierre Roux # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil # # This software is governed by the CeCILL-B license under French law and # abiding by the rules of distribution of free software. You can use, # modify and/ or redistribute the software under the terms of the CeCILL-B # license as circulated by CEA, CNRS and INRIA at the following URL # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html # or in the file LICENSE.txt. # # As a counterpart to the access to the source code and rights to copy, # modify and redistribute granted by the license, users are provided only # with a limited warranty and the software's author, the holder of the # economic rights, and the successive licensors have only limited # liability. # # The fact that you are presently reading this means that you have had # knowledge of the CeCILL-B license and that you accept its terms. # ------------------------------------------------------------------------ */ #include "wxCDMMainFrame.h" #include #include #include "wx/treectrl.h" #include "wx/treebase.h" #include "wx/tooltip.h" #include "CDMUtilities.h" #include "creaDevManagerIds.h" #include "wxCDMMainDescriptionPanel.h" #include "wxCDMProjectDescriptionPanel.h" #include "wxCDMAppliDescriptionPanel.h" #include "wxCDMApplicationDescriptionPanel.h" #include "wxCDMLibDescriptionPanel.h" #include "wxCDMLibraryDescriptionPanel.h" #include "wxCDMPackageDescriptionPanel.h" #include "wxCDMBlackBoxDescriptionPanel.h" #include "wxCDMCMakeListsDescriptionPanel.h" #include "wxCDMFolderDescriptionPanel.h" #include "wxCDMFileDescriptionPanel.h" #include "wxCDMPackageManagerPanel.h" #include "wxCDMProjectActionsPanel.h" #include "wxCDMNewProjectDialog.h" BEGIN_EVENT_TABLE(wxCDMMainFrame, wxFrame) EVT_MENU(ID_MENU_NEW_PROJECT, wxCDMMainFrame::OnMenuNewProject) EVT_MENU(ID_MENU_OPEN_PROJECT, wxCDMMainFrame::OnMenuOpenProject) EVT_MENU(ID_MENU_OPEN_RECENT, wxCDMMainFrame::OnMenuOpenRecent) EVT_MENU(ID_MENU_CLOSE_PROJECT, wxCDMMainFrame::OnMenuCloseProject) EVT_MENU(ID_MENU_CLOSE_ALL_PROJECTS, wxCDMMainFrame::OnMenuCloseAllProjects) EVT_MENU(ID_MENU_EXPORT_HIERARCHY, wxCDMMainFrame::OnMenuExportHierarchy) EVT_MENU(ID_MENU_EXIT, wxCDMMainFrame::OnMenuExit) EVT_MENU(ID_MENU_REFRESH_PROJECT, wxCDMMainFrame::OnMenuRefreshProject) EVT_MENU(ID_MENU_CUT, wxCDMMainFrame::OnMenuMenuCut) EVT_MENU(ID_MENU_COPY, wxCDMMainFrame::OnMenuMenuCopy) EVT_MENU(ID_MENU_PASTE, wxCDMMainFrame::OnMenuMenuPaste) EVT_MENU(ID_MENU_DELETE, wxCDMMainFrame::OnMenuMenuDelete) EVT_MENU(ID_MENU_SELECT_ALL, wxCDMMainFrame::OnMenuSelectAll) EVT_MENU(ID_MENU_SELECT_NONE, wxCDMMainFrame::OnMenuSelectNone) EVT_MENU(ID_MENU_EVENT_LOG, wxCDMMainFrame::OnMenuEventLog) EVT_MENU(ID_MENU_BBTK_GRAPHICAL_EDITOR, wxCDMMainFrame::OnMenuBBTKGraphicalEditor) EVT_MENU(ID_MENU_MINITOOLS, wxCDMMainFrame::OnMenuMiniTools) EVT_MENU(ID_MENU_CODE_EDITOR, wxCDMMainFrame::OnMenuCodeEditor) EVT_MENU(ID_MENU_COMMAND_LINE, wxCDMMainFrame::OnMenuCommandLine) EVT_MENU(ID_MENU_HELP, wxCDMMainFrame::OnMenuHelp) EVT_MENU(ID_MENU_REPORT_BUG, wxCDMMainFrame::OnMenuReportBug) EVT_MENU(ID_MENU_ABOUT_CREADEVMANAGER, wxCDMMainFrame::OnMenuAboutCreaDevManager) EVT_MENU(ID_MENU_ABOUT_CREATIS, wxCDMMainFrame::OnMenuAboutCreatis) EVT_BUTTON(ID_BUTTON_NEWPROJECT, wxCDMMainFrame::OnMenuNewProject) EVT_BUTTON(ID_BUTTON_OPENPROJECT, wxCDMMainFrame::OnMenuOpenProject) EVT_TREE_SEL_CHANGING(ID_TREE_PROJECTS, wxCDMMainFrame::OnTreeSelectionChanged) EVT_COMMAND(wxID_ANY, wxEVT_DISPLAY_CHANGED, wxCDMMainFrame::OnCreationComplete) EVT_COMMAND(wxID_ANY, wxEVT_COMMAND_LIST_ITEM_SELECTED, wxCDMMainFrame::OnElementSelected) EVT_COMMAND(wxID_ANY, wxEVT_COMMAND_LIST_ITEM_DESELECTED, wxCDMMainFrame::OnElementDeselected) END_EVENT_TABLE() wxCDMMainFrame::wxCDMMainFrame( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) { Create(parent, id, caption, pos, size, style); } wxCDMMainFrame::~wxCDMMainFrame() { auiManager.UnInit(); } bool wxCDMMainFrame::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) { wxFrame::Create(parent, id, caption, pos, size, style); this->model = new modelCDMMain(); CreateMenus(); CreateControls(); return TRUE; } modelCDMMain* wxCDMMainFrame::GetModel() const { return this->model; } void wxCDMMainFrame::RefreshProject() { std::string* result; std::cout << "refreshing project" << std::endl; this->model->RefreshProject(result); std::cout << "rebuilding project tree" << std::endl; this->tree_Projects->BuildTree(this->model->GetModelElements(), this->model->GetProject()); } void wxCDMMainFrame::CreateMenus() { wxMenuBar* menuBar = new wxMenuBar; //FileMenu menu_File = new wxMenu(); menu_File->Append(ID_MENU_NEW_PROJECT, wxT("&New Project...")); menu_File->Append(ID_MENU_OPEN_PROJECT, wxT("&Open Project...")); menu_File->Append(ID_MENU_OPEN_RECENT, wxT("Open &Recent")); menu_File->AppendSeparator(); menu_File->Append(ID_MENU_CLOSE_PROJECT, wxT("&Close Project")); menu_File->Append(ID_MENU_CLOSE_ALL_PROJECTS, wxT("C&lose All Projects")); menu_File->AppendSeparator(); menu_File->Append(ID_MENU_EXPORT_HIERARCHY, wxT("&Export Project Hierarchy...")); menu_File->AppendSeparator(); menu_File->Append(ID_MENU_EXIT, wxT("E&xit")); menuBar->Append(menu_File, wxT("&File")); //EditMenu menu_Edit = new wxMenu(); menu_Edit->Append(ID_MENU_REFRESH_PROJECT, wxT("&Refresh Project")); menu_Edit->AppendSeparator(); menu_Edit->Append(ID_MENU_CUT, wxT("Cu&t")); menu_Edit->Append(ID_MENU_COPY, wxT("&Copy")); menu_Edit->Append(ID_MENU_PASTE, wxT("&Paste")); menu_Edit->AppendSeparator(); menu_Edit->Append(ID_MENU_DELETE, wxT("&Delete")); menu_Edit->Append(ID_MENU_SELECT_ALL, wxT("Select &All")); menu_Edit->Append(ID_MENU_SELECT_NONE, wxT("Ca&ncel Selection")); menuBar->Append(menu_Edit, wxT("&Edit")); //ToolsMenu menu_Tools = new wxMenu(); menu_Tools->Append(ID_MENU_EVENT_LOG, wxT("Event &Log")); menu_Tools->Append(ID_MENU_BBTK_GRAPHICAL_EDITOR, wxT("BBTK &Graphical Editor")); menu_Tools->Append(ID_MENU_MINITOOLS, wxT("&MiniTools")); menu_Tools->Append(ID_MENU_CODE_EDITOR, wxT("&Code Editor")); menu_Tools->Append(ID_MENU_COMMAND_LINE, wxT("&Command Line")); menuBar->Append(menu_Tools, wxT("&Tools")); //HelpMenu menu_Help = new wxMenu(); menu_Help->Append(ID_MENU_HELP, wxT("&Help")); menu_Help->Append(ID_MENU_REPORT_BUG, wxT("Report &Bug")); menu_Help->Append(ID_MENU_ABOUT_CREADEVMANAGER, wxT("&About CreaDevManager")); menu_Help->Append(ID_MENU_ABOUT_CREATIS, wxT("A&bout CREATIS")); menuBar->Append(menu_Help, wxT("&Help")); //Set Bar SetMenuBar(menuBar); wxStatusBar* statusBar = new wxStatusBar(this, ID_STATUS_BAR, wxST_SIZEGRIP); statusBar->SetFieldsCount(1); SetStatusBar(statusBar); } void wxCDMMainFrame::CreateControls() { auiManager.SetManagedWindow(this); tree_Projects = new wxCDMProjectsTreeCtrl( this, ID_TREE_PROJECTS, wxDefaultPosition, wxSize(200,400), wxTR_HAS_BUTTONS | wxTR_AQUA_BUTTONS ); panel_Properties = new wxCDMMainDescriptionPanel( this, ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(400, 600), 0 ); auiManager.AddPane(panel_Properties, wxAuiPaneInfo().BestSize(600,400).CenterPane().Name(wxT("panel_Properties")).Caption(wxT("")).CloseButton(false)); auiManager.AddPane(tree_Projects, wxAuiPaneInfo().Right().MinSize(300,300).BestSize(300,400).CloseButton(false).Name(wxT("tree_Projects")).Caption(wxT("Project Tree")).CloseButton(false)); wxString pers = auiManager.SavePerspective(); auiManager.Update(); auiManager.LoadPerspective(pers,true); wxToolTip::Enable(true); wxToolTip::SetDelay(0); } //Event Handlers //File menu void wxCDMMainFrame::OnMenuNewProject(wxCommandEvent& event) { std::string* result; wxCDMNewProjectDialog* dialog = new wxCDMNewProjectDialog(this); long userResponse; userResponse = dialog->ShowModal(); if(userResponse == wxID_FORWARD) { //create project if(this->model->GetProject() != NULL) { if(!this->model->CloseProject(result)) { std::cout << "error closing project: " << *result << std::endl; wxMessageBox(crea::std2wx(*result),_T("New Project - Error!"),wxOK | wxICON_ERROR); event.Skip(); return; } } if(!this->model->CreateProject( crea::wx2std(dialog->GetProjectName()), crea::wx2std(dialog->GetProjectLocation()), result, crea::wx2std(dialog->GetPackageAuthor()), crea::wx2std(dialog->GetPackageDescription()) )) { std::cout << "error opening project: " << *result << std::endl; wxMessageBox(crea::std2wx(*result),_T("New Project - Error!"),wxOK | wxICON_ERROR); event.Skip(); return; } //populate tree control tree_Projects->BuildTree(this->model->GetModelElements(),this->model->GetProject()); tree_Projects->SelectItem(this->model->GetProject()->GetId()); //change description panel if(this->panel_Properties != NULL) { auiManager.DetachPane(this->panel_Properties); this->panel_Properties->Destroy(); this->panel_Properties = NULL; } this->panel_Properties = new wxCDMProjectDescriptionPanel( this, this->model->GetProject(), ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(600, 400), 0); //show projectactions panel if(this->panel_ProjectActions != NULL) { auiManager.DetachPane(this->panel_Properties); this->panel_ProjectActions->Destroy(); this->panel_ProjectActions = NULL; } panel_ProjectActions = new wxCDMProjectActionsPanel( this, this->model->GetProject(), ID_WINDOW_PROJ_ACTIONS, wxT("Project Actions Panel"), wxDefaultPosition, wxSize(800,200), 0 ); panel_ProjectActions->SetMinSize(wxSize(500, 100)); auiManager.AddPane(panel_Properties, wxAuiPaneInfo().Center().Name(wxT("panel_Properties")).Caption(wxT("")).BestSize(600,400).CloseButton(false)); auiManager.AddPane(panel_ProjectActions, wxAuiPaneInfo().Bottom().MinSize(800,50).Name(wxT("panel_ProjectActions")).Caption(wxT("General Project Actions")).BestSize(800,70).CloseButton(false)); auiManager.Update(); wxMessageBox(_T("New Project created!"),_T("New Project - Success!"), wxOK | wxICON_INFORMATION); } event.Skip(); } void wxCDMMainFrame::OnMenuOpenProject(wxCommandEvent& event) { std::string* result; long style = wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST; wxDirDialog* FD = new wxDirDialog(this, wxT("Select the project directory"), wxT(""), style); long userResponse = FD->ShowModal(); if(userResponse == wxID_OK) { std::string path = crea::wx2std (FD->GetPath()); FD -> Destroy(); FD = NULL; std::cout << "Selection to open: " << path << std::endl; //populate model if(this->model->GetProject() != NULL) { std::cout << "Project not null, closing it" << std::endl; if(!this->model->CloseProject(result)) { std::cout << "error closing project: " << *result << std::endl; wxMessageBox(crea::std2wx(result->c_str()),_T("New Project - Error!"),wxOK | wxICON_ERROR); event.Skip(); return; } } if (!this->model->OpenProject(path, result)) { std::cout << "error opening project: " << *result << std::endl; wxMessageBox( crea::std2wx(result->c_str()), wxT("Open Project - Error"), wxICON_ERROR); event.Skip(); return; }; std::cout << "building ui" << std::endl; //populate tree control tree_Projects->BuildTree(this->model->GetModelElements(), this->model->GetProject()); tree_Projects->SelectItem(this->model->GetProject()->GetId()); //change description panel if(this->panel_Properties != NULL) { auiManager.DetachPane(this->panel_Properties); this->panel_Properties->Destroy(); this->panel_Properties = NULL; } this->panel_Properties = new wxCDMProjectDescriptionPanel( this, this->model->GetProject(), ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(600, 400), 0 ); //change project's actions panel if(this->panel_ProjectActions!= NULL) { auiManager.DetachPane(this->panel_ProjectActions); this->panel_ProjectActions->Destroy(); this->panel_ProjectActions = NULL; } panel_ProjectActions = new wxCDMProjectActionsPanel( this, this->model->GetProject(), ID_WINDOW_PROJ_ACTIONS, wxT("Project Actions Panel"), wxDefaultPosition, wxSize(800,200), 0 ); panel_ProjectActions->SetMinSize(wxSize(500, 100)); auiManager.AddPane(panel_Properties, wxAuiPaneInfo().Center().Name(wxT("panel_Properties")).Caption(wxT("")).BestSize(600,400).CloseButton(false)); auiManager.AddPane(panel_ProjectActions, wxAuiPaneInfo().Bottom().MinSize(800,50).Name(wxT("panel_ProjectActions")).Caption(wxT("General Project Actions")).BestSize(800,70).CloseButton(false)); auiManager.Update(); } event.Skip(); } void wxCDMMainFrame::OnMenuOpenRecent(wxCommandEvent& event) { std::cerr << "Event OnMenuOpenRecent not implemented" << std::endl; event.Skip(); } void wxCDMMainFrame::OnMenuCloseProject(wxCommandEvent& event) { std::cout << "closing project" << std::endl; std::string* result; if(!this->model->CloseProject(result)) { std::cout << "error closing project: " << *result << std::endl; wxMessageBox( crea::std2wx(result->c_str()), wxT("Close Project - Error"), wxICON_ERROR); } tree_Projects->BuildTree(this->model->GetModelElements(), this->model->GetProject()); if(this->panel_Properties != NULL) { auiManager.DetachPane(this->panel_Properties); this->panel_Properties->Destroy(); this->panel_Properties = NULL; } if(this->panel_ProjectActions != NULL) { auiManager.DetachPane(this->panel_ProjectActions); this->panel_ProjectActions->Destroy(); this->panel_ProjectActions = NULL; } this->panel_Properties = new wxCDMMainDescriptionPanel( this, ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(600, 400), 0 ); auiManager.AddPane(panel_Properties, wxAuiPaneInfo().Center().Name(wxT("panel_Properties")).Caption(wxT("")).BestSize(600,400).CloseButton(false)); auiManager.Update(); event.Skip(); } void wxCDMMainFrame::OnMenuCloseAllProjects(wxCommandEvent& event) { std::cerr << "Event OnMenuCloseAllProjects closing only one project" << std::endl; std::string* result; if(!this->model->CloseProject(result)) { std::cout << "error closing project: " << *result << std::endl; wxMessageBox( crea::std2wx(result->c_str()), wxT("Close Project - Error"), wxICON_ERROR); } tree_Projects->BuildTree(this->model->GetModelElements(), this->model->GetProject()); if(this->panel_Properties != NULL) { auiManager.DetachPane(this->panel_Properties); this->panel_Properties->Destroy(); this->panel_Properties = NULL; } if(this->panel_ProjectActions != NULL) { auiManager.DetachPane(this->panel_ProjectActions); this->panel_ProjectActions->Destroy(); this->panel_ProjectActions = NULL; } this->panel_Properties = new wxCDMMainDescriptionPanel( this, ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(600, 400), 0 ); auiManager.AddPane(panel_Properties, wxAuiPaneInfo().Center().Name(wxT("panel_Properties")).Caption(wxT("")).BestSize(600,400)); auiManager.Update(); event.Skip(); } void wxCDMMainFrame::OnMenuExportHierarchy(wxCommandEvent& event) { std::cerr << "Event OnMenuExportHierarchy not implemented" << std::endl; event.Skip(); } void wxCDMMainFrame::OnMenuExit(wxCommandEvent& event) { std::cout << "Closing CreaDevManager..." << std::endl; std::string* result; if(this->model->GetProject() != NULL && !this->model->CloseProject(result)) { std::cout << "error closing project: " << *result << std::endl; wxMessageBox( crea::std2wx(result->c_str()), wxT("Close Project - Error"), wxICON_ERROR); } tree_Projects->BuildTree(this->model->GetModelElements(), this->model->GetProject()); if(this->panel_Properties != NULL) { auiManager.DetachPane(this->panel_Properties); this->panel_Properties->Destroy(); this->panel_Properties = NULL; } if(this->panel_ProjectActions != NULL) { auiManager.DetachPane(this->panel_ProjectActions); this->panel_ProjectActions->Destroy(); this->panel_ProjectActions = NULL; } Close(); event.Skip(); } //Edit Menu void wxCDMMainFrame::OnMenuRefreshProject(wxCommandEvent& event) { std::string* result; if(!model->RefreshProject(result)) { wxMessageBox( crea::std2wx(result->c_str()), wxT("Refresh Project - Error"), wxICON_ERROR); } this->tree_Projects->BuildTree(this->model->GetModelElements(), this->model->GetProject()); this->auiManager.Update(); this->tree_Projects->SelectItem(this->model->GetProject()->GetId(), false); this->tree_Projects->SelectItem(this->model->GetProject()->GetId(), true); //TODO: Show possible problems in CMakeLists files event.Skip(); } void wxCDMMainFrame::OnMenuMenuCut(wxCommandEvent& event) { std::cerr << "Event OnMenuMenuCut not implemented" << std::endl; event.Skip(); } void wxCDMMainFrame::OnMenuMenuCopy(wxCommandEvent& event) { std::cerr << "Event OnMenuMenuCopy not implemented" << std::endl; event.Skip(); } void wxCDMMainFrame::OnMenuMenuPaste(wxCommandEvent& event) { std::cerr << "Event OnMenuMenuPaste not implemented" << std::endl; event.Skip(); } void wxCDMMainFrame::OnMenuMenuDelete(wxCommandEvent& event) { std::cerr << "Event OnMenuMenuDelete not implemented" << std::endl; event.Skip(); } void wxCDMMainFrame::OnMenuSelectAll(wxCommandEvent& event) { std::cerr << "Event OnMenuSelectAll not implemented" << std::endl; event.Skip(); } void wxCDMMainFrame::OnMenuSelectNone(wxCommandEvent& event) { std::cerr << "Event OnMenuSelectNone not implemented" << std::endl; event.Skip(); } //Tools Menu void wxCDMMainFrame::OnMenuEventLog(wxCommandEvent& event) { std::cerr << "Event OnMenuEventLog not implemented" << std::endl; event.Skip(); } void wxCDMMainFrame::OnMenuBBTKGraphicalEditor(wxCommandEvent& event) { std::cerr << "Event OnMenuBBTKGraphicalEditor not implemented" << std::endl; event.Skip(); if(CDMUtilities::openBBEditor()) { wxMessageBox( wxT("Can't open the BB Graphical Editor. Please check your Crea Tools installation."), wxT("Refresh Project - Error"), wxICON_ERROR); } } void wxCDMMainFrame::OnMenuMiniTools(wxCommandEvent& event) { if(CDMUtilities::openCreaToolsTools()) { wxMessageBox( wxT("Can't open the Minitools. Please check your Crea Tools installation."), wxT("Refresh Project - Error"), wxICON_ERROR); } } void wxCDMMainFrame::OnMenuCodeEditor(wxCommandEvent& event) { if(CDMUtilities::openTextEditor()) { wxMessageBox( wxT("Can't open the Text Editor. Please check the default text editor command in the Crea Development Manager settings (Edit -> Settings)."), wxT("Refresh Project - Error"), wxICON_ERROR); } } void wxCDMMainFrame::OnMenuCommandLine(wxCommandEvent& event) { if(CDMUtilities::openTerminal()) { wxMessageBox( wxT("Can't open Terminal. Please check the default terminal command in the Crea Development Manager settings (Edit -> Settings)."), wxT("Refresh Project - Error"), wxICON_ERROR); } } //Help Menu void wxCDMMainFrame::OnMenuHelp(wxCommandEvent& event) { std::cerr << "Event OnMenuHelp not implemented" << std::endl; event.Skip(); } void wxCDMMainFrame::OnMenuReportBug(wxCommandEvent& event) { std::cerr << "Event OnMenuReportBug not implemented" << std::endl; event.Skip(); } void wxCDMMainFrame::OnMenuAboutCreaDevManager(wxCommandEvent& event) { std::cerr << "Event OnMenuAboutCreaDevManager not implemented" << std::endl; event.Skip(); } void wxCDMMainFrame::OnMenuAboutCreatis(wxCommandEvent& event) { std::cerr << "Event OnMenuAboutCreatis not implemented" << std::endl; event.Skip(); } void wxCDMMainFrame::OnTreeSelectionChanged(wxTreeEvent& event) { //get selected element wxTreeItemId elementId = event.GetItem(); //get element from model modelCDMIProjectTreeNode* element = this->model->GetModelElements()[elementId]; std::cout << "Tree Selection: " << element->GetName() << std::endl; //TODO get element type //project modelCDMProject* elementProject = dynamic_cast(element); wxPanel* description; if(elementProject != NULL) { //create element description description = new wxCDMProjectDescriptionPanel( this, elementProject, ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(600, 400), 0 ); } else { //appli modelCDMAppli* elementAppli = dynamic_cast(element); if(elementAppli != NULL) { //create element description description = new wxCDMAppliDescriptionPanel( this, elementAppli, ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(600, 400), 0 ); } else { //application modelCDMApplication* elementApplication = dynamic_cast(element); if(elementApplication != NULL) { //create element description description = new wxCDMApplicationDescriptionPanel( this, elementApplication, ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(600, 400), 0 ); } else { //lib modelCDMLib* elementLib = dynamic_cast(element); if(elementLib != NULL) { //create element description description = new wxCDMLibDescriptionPanel( this, elementLib, ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(600, 400), 0 ); } else { //library modelCDMLibrary* elementLibrary = dynamic_cast(element); if(elementLibrary != NULL) { //create element description description = new wxCDMLibraryDescriptionPanel( this, elementLibrary, ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(600, 400), 0 ); } else { //package modelCDMPackage* elementPackage = dynamic_cast(element); if(elementPackage != NULL) { //create element description description = new wxCDMPackageDescriptionPanel( this, elementPackage, ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(600, 400), 0 ); } else { //black box modelCDMBlackBox* elementBlackBox = dynamic_cast(element); if(elementBlackBox != NULL) { //create element description description = new wxCDMBlackBoxDescriptionPanel( this, elementBlackBox, ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(600, 400), 0 ); } else { //CMakeLists modelCDMCMakeListsFile* elementCMakeLists = dynamic_cast(element); if(elementCMakeLists != NULL) { //create element description description = new wxCDMCMakeListsDescriptionPanel( this, elementCMakeLists, ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(600, 400), 0 ); } else { //folder modelCDMFolder* elementFolder = dynamic_cast(element); if(elementFolder != NULL) { //create element description description = new wxCDMFolderDescriptionPanel( this, elementFolder, ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(600, 400), 0 ); } else { //file modelCDMFile* elementFile = dynamic_cast(element); if(elementFile != NULL) { //create element description description = new wxCDMFileDescriptionPanel( this, elementFile, ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(600, 400), 0 ); } else { //main if not any //create element description description = new wxCDMMainDescriptionPanel( this, ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(600, 400), 0 ); } } } } } } } } } } if(this->panel_Properties!= NULL) this->panel_Properties->Hide(); auiManager.AddPane(description, wxAuiPaneInfo().Center().Name(wxT("panel_Properties")).Caption(wxT("")).BestSize(600,400).CloseButton(false)); auiManager.Update(); //delete old view if(this->panel_Properties!= NULL) { auiManager.DetachPane(this->panel_Properties); this->panel_Properties->Destroy(); this->panel_Properties = NULL; } //set new view this->panel_Properties = description; //auiManager.AddPane(panel_Properties, wxAuiPaneInfo().Center().Name(wxT("panel_Properties")).Caption(wxT("Properties")).BestSize(600,400).CloseButton(false)); auiManager.Update(); event.Skip(); return; } void wxCDMMainFrame::OnCreationComplete(wxCommandEvent& event) { switch(event.GetId() != 0) { case 0: //select out old one to generate selection event this->tree_Projects->SelectItem(event.GetInt(), true); this->tree_Projects->Expand(event.GetInt()); break; case 1: wxPanel* description = NULL; if(event.GetString() == wxT("manage_packages")) { this->tree_Projects->SelectItem(this->model->GetProject()->GetId(), false); this->tree_Projects->Expand(this->model->GetProject()->GetId()); description = new wxCDMPackageManagerPanel( this, this->model->GetProject(), ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(600, 400), 0 ); } else if(event.GetString() == wxT("manage_libraries")) { this->tree_Projects->SelectItem(this->model->GetProject()->GetLib()->GetId(), true); this->tree_Projects->Expand(this->model->GetProject()->GetLib()->GetId()); break; } else if(event.GetString() == wxT("manage_applications")) { this->tree_Projects->SelectItem(this->model->GetProject()->GetAppli()->GetId(), true); this->tree_Projects->Expand(this->model->GetProject()->GetAppli()->GetId()); break; } else if(event.GetString() == wxT("blackbox")) { this->tree_Projects->SelectItem(this->model->GetProject()->GetId(), false); modelCDMBlackBox* bb = (modelCDMBlackBox*)event.GetClientData(); description = new wxCDMBlackBoxDescriptionPanel( this, bb, ID_WINDOW_PROPERTIES, wxT("Description Panel"), wxDefaultPosition, wxSize(600, 400), 0 ); } if(this->panel_Properties!= NULL) this->panel_Properties->Hide(); auiManager.AddPane(description, wxAuiPaneInfo().Center().Name(wxT("panel_Properties")).Caption(wxT("")).BestSize(600,400).CloseButton(false)); auiManager.Update(); //delete old view if(this->panel_Properties!= NULL) { auiManager.DetachPane(this->panel_Properties); this->panel_Properties->Destroy(); this->panel_Properties = NULL; } //set new view this->panel_Properties = description; auiManager.Update(); break; } event.Skip(); } void wxCDMMainFrame::OnElementSelected(wxCommandEvent& event) { //std::cout << "element " << event.GetInt() << std::endl; this->tree_Projects->EnsureVisible(event.GetInt()); this->tree_Projects->SetItemBold(event.GetInt(), true); this->tree_Projects->SetItemTextColour(event.GetInt(), wxColour(0,0,255)); this->tree_Projects->UpdateWindowUI(wxUPDATE_UI_RECURSE); auiManager.Update(); } void wxCDMMainFrame::OnElementDeselected(wxCommandEvent& event) { this->tree_Projects->SetItemBold(event.GetInt(), false); this->tree_Projects->SetItemTextColour(event.GetInt(), wxColour(0,0,0)); this->tree_Projects->UpdateWindowUI(wxUPDATE_UI_RECURSE); auiManager.Update(); }