From: corredor <> Date: Tue, 18 May 2010 09:41:36 +0000 (+0000) Subject: Actual Version : It is possible to define, to create and to save a complex box .... X-Git-Tag: v1_0_0~68 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=b07121ce96dd600b41cb6b9588d117ec72969317;p=bbtkGEditor.git Actual Version : It is possible to define, to create and to save a complex box ... The BBS is also saved if needed. It misses to fix some interaction functions to be more natural to the user --- diff --git a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GlobalConstants.h b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GlobalConstants.h index 9db8bf0..8aa7195 100644 --- a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GlobalConstants.h +++ b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GlobalConstants.h @@ -153,7 +153,7 @@ namespace bbtk // Id's const int ID_NEW = 1000; - const int ID_SAVE = 1001; + const int ID_SAVE_AS_DIAGRAM = 1001; const int ID_OPEN = 1002; const int ID_RUN = 1003; const int ID_DELETEALL = 1004; @@ -161,8 +161,10 @@ namespace bbtk const int ID_BTNCOMPLEXBOX = 1006; const int ID_ADDCOMPLEXBOXINPUT = 1007; const int ID_ADDCOMPLEXBOXOUTPUT = 1008; + const int ID_SAVE_AS_BBS = 1009; + const int ID_SAVE_AS_COMPLEXBOX = 1010; - const int wxID_NOTEBOOK = 1010; + const int wxID_NOTEBOOK = 1012; } // namespace bbtk #endif diff --git a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.cxx b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.cxx index 9b2dc95..784c3f6 100644 --- a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.cxx +++ b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.cxx @@ -916,7 +916,7 @@ namespace bbtk //========================================================================= - std::string wxVtkSceneManager::getDiagramScript() + std::string wxVtkSceneManager::getDiagramBBS() { bool existsExec=false; @@ -1051,6 +1051,201 @@ namespace bbtk //========================================================================= + std::string wxVtkSceneManager::saveComplexBoxBBS(std::string cbName,std::string cbAuthor,std::string cbCategory,std::string cbDescription) + { + + std::vector packages; + std::vector boxes; + std::vector connections; + std::vector execBoxes; + + std::map::iterator it; + + for(it = _controllers.begin(); it != _controllers.end(); ++it) + { + GObjectController *desc = it->second; + int type = desc->getGObjectType(); + + if(type==GBLACKBOX) + { + GBlackBoxModel *mod = (GBlackBoxModel*)desc->getModel(); + + std::string pkg = mod->getBBTKPackage(); + bool existsPkg = false; + for(int t = 0;tfirst); + if(mod->isExecutable()) + { + execBoxes.push_back(it->first); + } + } + else if(type==GCONNECTOR) + { + connections.push_back(it->first); + } + } + + std::string script = ""; + int i; + for(i = 0; igetModel(); + + script+=model->getBBTKType(); + script+=" "; + script+=model->getBBTKName(); + script+="\n"; + + std::vector inputs = model->getInputPorts(); + for(int j = 0; jisValueSet()) + { + script+="set "; + script+=model->getBBTKName(); + script+="."; + script+=inputPort->getBBTKName(); + script+=" "; + script+=inputPort->getValue(); + script+="\n"; + } + } + + } + + // Create connections in the script. If the connection is made with a complex port, it is created the input or output + + std::string complexInputs=""; + std::string complexOutputs=""; + + for(i = 0; igetModel(); + + //Connection info + GPortModel *start = model->getStartPort(); + GBoxModel *startBox =start->getParentBox(); + + GPortModel *end = model->getEndPort(); + GBoxModel *endBox =end->getParentBox(); + + if(startBox->getGObjectType()==GCOMPLEXINPUTPORT) + { + complexInputs+="input "; + complexInputs+=startBox->getBBTKName(); + + complexInputs+=" "; + complexInputs+=endBox->getBBTKName(); + complexInputs+="."; + complexInputs+=end->getBBTKName(); + + complexInputs+=" "; + complexInputs+="\" \""; + + complexInputs+="\n"; + } + else if(endBox->getGObjectType()==GCOMPLEXOUTPUTPORT) + { + complexOutputs+="output "; + complexOutputs+=endBox->getBBTKName(); + + complexOutputs+=" "; + complexOutputs+=startBox->getBBTKName(); + complexOutputs+="."; + complexOutputs+=start->getBBTKName(); + + complexOutputs+=" "; + complexOutputs+="\" \""; + + complexOutputs+="\n"; + } + else + { + script+="connect "; + script+=startBox->getBBTKName(); + script+="."; + script+=start->getBBTKName(); + + script+=" "; + + //End Connection info + script+=endBox->getBBTKName(); + script+="."; + script+=end->getBBTKName(); + + script+="\n"; + } + } + + for(i = 0; igetModel(); + + script+=model->getBBTKName(); + script+="\n"; + } + + script+="\n"; + script+="# Complex input ports\n"; + script+=complexInputs; + + script+="\n"; + script+="# Complex output ports\n"; + script+=complexOutputs; + + script+="\n"; + script+="endefine"; + script+="\n"; + + return script; + } + + //========================================================================= + void wxVtkSceneManager::deleteAllBoxes() { std::map::iterator it; diff --git a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.h b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.h index 118d136..5aee359 100644 --- a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.h +++ b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.h @@ -118,7 +118,8 @@ namespace bbtk void displayBlackBoxInfo(std::string packageName, std::string boxName); void updateStatusBar(std::string textStatus); - std::string getDiagramScript(); + std::string getDiagramBBS(); + std::string saveComplexBoxBBS(std::string cbName,std::string cbAuthor="",std::string cbCategory="",std::string cbDescription=""); void deleteObject(int id); void deleteAllBoxes(); void saveDiagram(std::string &content); diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx index 2d4ea9e..f75b97e 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx @@ -73,6 +73,7 @@ namespace bbtk _frameAUIMgr->Update(); _actualPkgBrowserBoxName=""; _actualPkgBrowserPkgName=""; + refreshGUIControls(); } @@ -100,7 +101,7 @@ namespace bbtk //Adds a tool btn to the toolbar toolbar->AddTool(ID_NEW,_T("New"),bmp_new, wxNullBitmap, wxITEM_NORMAL,_T("New tab"), _T("Create a new panel tab")); toolbar->AddTool(ID_OPEN,_T("Open diagram"),bmp_open, wxNullBitmap, wxITEM_NORMAL,_T("Open a diagram"), _T("Open a diagram")); - toolbar->AddTool(ID_SAVE,_T("Save diagram"),bmp_save, wxNullBitmap, wxITEM_NORMAL,_T("Saves actual diagram"), _T("Saves actual diagram")); + toolbar->AddTool(ID_SAVE_AS_DIAGRAM,_T("Save diagram"),bmp_save, wxNullBitmap, wxITEM_NORMAL,_T("Saves actual diagram"), _T("Saves actual diagram")); toolbar->AddTool(ID_RUN,_T("Run"),bmp_run, wxNullBitmap, wxITEM_NORMAL,_T("Execute actual diagram"), _T("Execute actual diagram")); toolbar->AddTool(ID_DELETEALL,_T("Delete all"),bmp_delete, wxNullBitmap, wxITEM_NORMAL,_T("Delete all boxes"), _T("Delete all boxes")); toolbar->AddTool(ID_CENTERVIEW,_T("Center view"),bmp_centerview, wxNullBitmap, wxITEM_NORMAL,_T("Center view"), _T("Center view")); @@ -119,7 +120,7 @@ namespace bbtk // connect command event handlers Connect(ID_NEW,wxEVT_COMMAND_TOOL_CLICKED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnCreateNewTab)); Connect(ID_OPEN,wxEVT_COMMAND_TOOL_CLICKED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnOpenDiagram)); - Connect(ID_SAVE,wxEVT_COMMAND_TOOL_CLICKED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnSaveActualDiagram)); + Connect(ID_SAVE_AS_DIAGRAM,wxEVT_COMMAND_TOOL_CLICKED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnSaveActualDiagram)); Connect(ID_RUN,wxEVT_COMMAND_TOOL_CLICKED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnExecuteActualDiagram)); Connect(ID_DELETEALL,wxEVT_COMMAND_TOOL_CLICKED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnDeleteAllBoxesActualDiagram)); Connect(ID_CENTERVIEW,wxEVT_COMMAND_TOOL_CLICKED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnCenterViewActualDiagram)); @@ -141,22 +142,30 @@ namespace bbtk void wxGUIEditorGraphicBBS::initMenu() { // create a menu bar - wxMenu *fileMenu = new wxMenu; - - // the "About" item should be in the help menu - wxMenu *helpMenu = new wxMenu; - helpMenu->Append(wxID_ABOUT, _T("&About..."), _T("About")); + wxMenu *fileMenu = new wxMenu(); + fileMenu->Append(ID_NEW, _T("New diagram"), _T("New")); + fileMenu->Append(ID_SAVE_AS_DIAGRAM, _T("Save diagram"), _T("Save diagram")); + fileMenu->Append(ID_SAVE_AS_BBS, _T("Save BBS"), _T("Save BBS")); + fileMenu->Append(ID_SAVE_AS_COMPLEXBOX, _T("Save complex box"), _T("Save complex box")); fileMenu->Append(wxID_EXIT, _T("E&xit"), _T("Exit")); + Connect(ID_NEW,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnCreateNewTab)); + Connect(ID_SAVE_AS_DIAGRAM,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnSaveActualDiagram)); + Connect(ID_SAVE_AS_BBS,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnSaveActualBBS)); + Connect(ID_SAVE_AS_COMPLEXBOX,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnSaveActualComplexBox)); Connect(wxID_EXIT,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnExit)); + // the "About" item should be in the help menu + wxMenu *helpMenu = new wxMenu; + helpMenu->Append(wxID_ABOUT, _T("&About..."), _T("About")); + // now append the freshly created menu to the menu bar... wxMenuBar *menuBar = new wxMenuBar(); menuBar->Append(fileMenu, _T("&File")); menuBar->Append(helpMenu, _T("&Help")); // attach this menu bar to the frame - SetMenuBar(menuBar); + SetMenuBar(menuBar); } //========================================================================= @@ -362,25 +371,87 @@ namespace bbtk void wxGUIEditorGraphicBBS::OnCreateNewTab(wxCommandEvent& event) { _tabsMgr->addNewTab(); - refreshToolbar(); + refreshGUIControls(); } //========================================================================= void wxGUIEditorGraphicBBS::OnExecuteActualDiagram(wxCommandEvent& event) { - std::string script = _tabsMgr->getActualDiagramScript(); + std::string script = _tabsMgr->getActualDiagramBBS(); cout<<"RaC wxGUIEditorGraphicBBS::executeActualDiagram SCRIPT"<ShowModal() == wxID_OK) + { + wxString fileName = saveFileDialog->GetPath(); + + ofstream file; + file.open(fileName.c_str()); + + std::string content=""; + + // writing file header + content += "# ----------------------------------\n"; + content += "# - BBTKGEditor v 1.0 BBS BlackBox Script\n"; + content += "# ----------------------------------\n"; + content += "\n"; + content += _tabsMgr->getActualDiagramBBS(); + file << content; + file.close(); + } + + } + + //========================================================================= + + void wxGUIEditorGraphicBBS::OnSaveActualComplexBox(wxCommandEvent& event) + { + wxTextEntryDialog *nameDialog = new wxTextEntryDialog(this,wxT("Name of complex box")); + std::string cbName=""; + if (nameDialog->ShowModal() == wxID_OK) + { + wxString fileName = nameDialog->GetValue(); + cbName=fileName; + } + + if(!cbName.empty()) + { + wxFileDialog * saveFileDialog = new wxFileDialog(this,wxT("Save Complex Box BBS"),wxEmptyString,cbName,"*.bbs",wxSAVE|wxOVERWRITE_PROMPT); + if (saveFileDialog->ShowModal() == wxID_OK) + { + wxString fileName = saveFileDialog->GetPath(); + + ofstream file; + file.open(fileName.c_str()); + + std::string content=""; + + // writing file header + content += "# ----------------------------------\n"; + content += "# - BBTKGEditor v 1.1 BBS BlackBox Script (Complex Box)\n"; + content += "# ----------------------------------\n"; + content += "\n"; + content += _tabsMgr->getActualComplexBoxBBS(cbName); + file << content; + file.close(); + } + } + + } + //========================================================================= - /*****************************************************/ - /* HANDLERS - /*****************************************************/ void wxGUIEditorGraphicBBS::OnSaveActualDiagram(wxCommandEvent& event) { wxFileDialog * saveFileDialog = new wxFileDialog(this,wxT("Save actual diagram"),wxEmptyString,"NewDiagram","*.bbd",wxSAVE|wxOVERWRITE_PROMPT); @@ -412,29 +483,28 @@ namespace bbtk //========================================================================= - void wxGUIEditorGraphicBBS::refreshToolbar() + void wxGUIEditorGraphicBBS::refreshGUIControls() { wxToolBar* toolbar = GetToolBar(); if(_tabsMgr->isActualDiagramComplexBox()) { toolbar->ToggleTool(ID_BTNCOMPLEXBOX,true); - } - else - { - toolbar->ToggleTool(ID_BTNCOMPLEXBOX,false); - } - - bool temp = toolbar->GetToolState(ID_BTNCOMPLEXBOX); - if(temp) - { toolbar->EnableTool(ID_ADDCOMPLEXBOXINPUT,true); toolbar->EnableTool(ID_ADDCOMPLEXBOXOUTPUT,true); + + GetMenuBar()->GetMenu(0)->Enable(ID_SAVE_AS_COMPLEXBOX,true); + GetMenuBar()->GetMenu(0)->Enable(ID_SAVE_AS_BBS,false); } else { + toolbar->ToggleTool(ID_BTNCOMPLEXBOX,false); toolbar->EnableTool(ID_ADDCOMPLEXBOXINPUT,false); toolbar->EnableTool(ID_ADDCOMPLEXBOXOUTPUT,false); + + GetMenuBar()->GetMenu(0)->Enable(ID_SAVE_AS_COMPLEXBOX,false); + GetMenuBar()->GetMenu(0)->Enable(ID_SAVE_AS_BBS,true); } + } //========================================================================= @@ -472,9 +542,8 @@ namespace bbtk _tabsMgr->loadDiagram(inputStream); inputStream.close(); - - } + refreshGUIControls(); } //========================================================================= @@ -485,17 +554,13 @@ namespace bbtk bool temp = toolbar->GetToolState(ID_BTNCOMPLEXBOX); if(temp) { - toolbar->EnableTool(ID_ADDCOMPLEXBOXINPUT,true); - toolbar->EnableTool(ID_ADDCOMPLEXBOXOUTPUT,true); _tabsMgr->setActualDiagramComplexBox(true); } else { - toolbar->EnableTool(ID_ADDCOMPLEXBOXINPUT,false); - toolbar->EnableTool(ID_ADDCOMPLEXBOXOUTPUT,false); _tabsMgr->setActualDiagramComplexBox(false); } - + refreshGUIControls(); } //========================================================================= diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.h b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.h index c6f65b9..8367ab0 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.h +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.h @@ -115,11 +115,13 @@ namespace bbtk void DoRegeneratePackageDoc(const std::string& pack); void DoRegenerateBoxesLists(); - void refreshToolbar(); + void refreshGUIControls(); void OnCreateNewTab(wxCommandEvent& event); void OnOpenDiagram(wxCommandEvent& event); void OnSaveActualDiagram(wxCommandEvent& event); + void OnSaveActualBBS(wxCommandEvent& event); + void OnSaveActualComplexBox(wxCommandEvent& event); void OnExecuteActualDiagram(wxCommandEvent& event); void OnDeleteAllBoxesActualDiagram(wxCommandEvent& event); void OnCenterViewActualDiagram(wxCommandEvent& event); diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.cxx b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.cxx index 4e5312e..682d3d4 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.cxx +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.cxx @@ -119,9 +119,16 @@ namespace bbtk //========================================================================= - std::string wxGEditorTabPanel::getDiagramScript() + std::string wxGEditorTabPanel::getDiagramBBS() { - return _sceneManager->getDiagramScript(); + return _sceneManager->getDiagramBBS(); + } + + //========================================================================= + + std::string wxGEditorTabPanel::saveComplexBoxBBS(std::string cbName,std::string cbAuthor,std::string cbCategory,std::string cbDescription) + { + return _sceneManager->saveComplexBoxBBS(cbName,cbAuthor,cbCategory,cbDescription); } //========================================================================= diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.h b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.h index 4322f6a..05eab99 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.h +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.h @@ -81,7 +81,8 @@ namespace bbtk void displayBlackBoxInfo(std::string packageName, std::string boxName); void updateStatusBar(std::string textStatus); - std::string getDiagramScript(); + std::string getDiagramBBS(); + std::string saveComplexBoxBBS(std::string cbName,std::string cbAuthor="",std::string cbCategory="",std::string cbDescription=""); void editBlackBox(GBlackBoxModel *bbmodel); void editDiagramParameters(wxVtkSceneManager* scene); void deleteAllBoxes(); diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxTabPanelsManager.cxx b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxTabPanelsManager.cxx index 2c5721d..3ac9274 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxTabPanelsManager.cxx +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxTabPanelsManager.cxx @@ -95,9 +95,16 @@ namespace bbtk //========================================================================= - std::string wxTabPanelsManager::getActualDiagramScript() + std::string wxTabPanelsManager::getActualDiagramBBS() { - return _actual->getDiagramScript(); + return _actual->getDiagramBBS(); + } + + //========================================================================= + + std::string wxTabPanelsManager::getActualComplexBoxBBS(std::string cbName,std::string cbAuthor,std::string cbCategory,std::string cbDescription) + { + return _actual->saveComplexBoxBBS(cbName,cbAuthor,cbCategory,cbDescription); } //========================================================================= @@ -178,7 +185,7 @@ namespace bbtk wxGEditorTabPanel* tab =(wxGEditorTabPanel*)_notebook->GetPage(index); int id = tab->getPanelId(); _actual = _panels[id]; - _parent->refreshToolbar(); + _parent->refreshGUIControls(); } //========================================================================= diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxTabPanelsManager.h b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxTabPanelsManager.h index f3dbfad..7f1d60e 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxTabPanelsManager.h +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxTabPanelsManager.h @@ -74,7 +74,8 @@ namespace bbtk void displayBlackBoxInfo(std::string packageName, std::string boxName); void updateStatusBar(std::string textStatus); - std::string getActualDiagramScript(); + std::string getActualDiagramBBS(); + std::string getActualComplexBoxBBS(std::string cbName,std::string cbAuthor="",std::string cbCategory="",std::string cbDescription=""); void editBlackBox(GBlackBoxModel *bbmodel); void editDiagramParameters(wxVtkSceneManager* scene); void deleteAllBoxesActualDiagram();