X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FEditorGraphicBBS%2FbbsWxGUIEditorGraphic%2FbbtkwxGUIEditorGraphicBBS.cxx;h=2cec64923f836782efeb7a91f01a5cf07acb1266;hb=a45d2dc35562aad94f11ce0c82dfe5f53155462e;hp=94d6e548caf7a07d41f3e9a869ce39bc26694b02;hpb=113e09db81654632fb794ed1945c019e89b729c6;p=bbtkGEditor.git diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx index 94d6e54..2cec649 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx @@ -1,3 +1,28 @@ +/* +# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Santé) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# +# 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. +# ------------------------------------------------------------------------ +*/ + /*========================================================================= Program: bbtk Module: $RCSfile$ @@ -36,6 +61,8 @@ #include "bbtkwxGUIEditorGraphicBBS.h" #include "creaWx.h" #include "creaSystem.h" +//must go #include "bbtkUtilities.h" +//must go #include "bbtkConfigurationFile.h" #include #include @@ -43,10 +70,10 @@ namespace bbtk { //========================================================================= -wxGUIEditorGraphicBBS::wxGUIEditorGraphicBBS(wxFrame *parent) : - wxFrame(parent, -1, _T("bbtkGEditor"), wxDefaultPosition, wxSize( - 1200, 800)) { - +wxGUIEditorGraphicBBS::wxGUIEditorGraphicBBS(wxFrame *parent) + : wxFrame( parent, -1, _T("bbtkGEditor"), wxDefaultPosition, wxSize(1200,800) ) +{ + _pkgBrowser = NULL; _frameAUIMgr = new wxAuiManager(this); /*std::string datadir( crea::System::GetExecutablePath() ); @@ -67,34 +94,36 @@ wxGUIEditorGraphicBBS::wxGUIEditorGraphicBBS(wxFrame *parent) : initMenu(); initToolbar(); - initTabPanelsManager(); initPackageBrowser(); - initHelpHTMLBrowser(); - + initTabPanelsManager(); + // JGGR & CM initHelpHTMLBrowser(); + _helpHtmlBrowser = NULL; CreateStatusBar(); _frameAUIMgr->Update(); _actualPkgBrowserBoxName = ""; _actualPkgBrowserPkgName = ""; refreshGUIControls(); + + ///////////////////////////////// + /// IMPORTANT!! FOR SAVE&LOAD PROCESSES THE VERSION IS VERY IMPORTANT. + /// RaC 2012 2nd Hackfest + _currentBBGversion="1.4"; } //========================================================================= -wxGUIEditorGraphicBBS::~wxGUIEditorGraphicBBS() { - - printf("EED %p ~wxGUIEditorGraphicBBS()\n", this); - +wxGUIEditorGraphicBBS::~wxGUIEditorGraphicBBS() +{ //EED02JUIN2010 delete _tabsMgr; - _frameAUIMgr->UnInit(); // FCY memory leaks delete _frameAUIMgr; delete _notebook; delete _tabsMgr; - } //========================================================================= -void wxGUIEditorGraphicBBS::initToolbar() { +void wxGUIEditorGraphicBBS::initToolbar() +{ wxBitmap bmp_new(new_xpm); wxBitmap bmp_open(open_xpm); wxBitmap bmp_save(save_xpm); @@ -108,13 +137,19 @@ void wxGUIEditorGraphicBBS::initToolbar() { wxBitmap bmp_complexoutputport(complexoutputport_xpm); wxBitmap bmp_undo(undo_xpm); wxBitmap bmp_redo(redo_xpm); - wxToolBar *toolbar = new wxToolBar(this, wxID_ANY); + wxBitmap bmp_editProperties(editProperties_xpm); + wxBitmap bmp_showTree(showTree_xpm); + +// wxToolBar *toolbar = new wxToolBar(this, wxID_ANY); + wxToolBar *toolbar = CreateToolBar(); //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_DIAGRAM, _T("Save Diagram"), bmp_save, wxNullBitmap, wxITEM_NORMAL, _T("Saves the current diagram"), _T("Saves the current diagram")); //DFCH @@ -135,26 +170,51 @@ void wxGUIEditorGraphicBBS::initToolbar() { toolbar->AddSeparator(); toolbar->AddTool(ID_BTNCOMPLEXBOX, _T("Complex box"), complexbox_xpm, wxNullBitmap, wxITEM_NORMAL, _T("Complex box"), _T("Complex box")); + +//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 +#if wxMAJOR_VERSION <= 2 toolbar->SetToggle(ID_BTNCOMPLEXBOX, true); - toolbar->AddTool(ID_ADDCOMPLEXBOXINPUT, _T("Add input to Complex box"), +#else + printf ("EED Warnning. wxGUIEditorGraphicBBS::initToolbar >>> toolbar->SetToggle \n "); + // .. +#endif + + // RaC 2012 2nd HackFest - Now Complex inputs are any external input + // toolbar->AddTool(ID_ADDCOMPLEXBOXINPUT, _T("Add input to Complex box"), + // bmp_complexinputport, wxNullBitmap, wxITEM_NORMAL, + // _T("Add input to Complex box"), _T("Add input to Complex box")); + toolbar->AddTool(ID_ADDCOMPLEXBOXINPUT, _T("Add external input (Complex box or console app)"), bmp_complexinputport, wxNullBitmap, wxITEM_NORMAL, - _T("Add input to Complex box"), _T("Add input to Complex box")); + _T("Add external input (Complex box or console app)"), _T("Add external input (Complex box or console app)")); + toolbar->AddTool(ID_ADDCOMPLEXBOXOUTPUT, _T("Add output to Complex box"), bmp_complexoutputport, wxNullBitmap, wxITEM_NORMAL, _T("Add output Complex box"), _T("Add output Complex box")); - toolbar->EnableTool(ID_ADDCOMPLEXBOXINPUT, false); + + // toolbar->EnableTool(ID_ADDCOMPLEXBOXINPUT, false); RaC2012 2nd HackFest + toolbar->EnableTool(ID_ADDCOMPLEXBOXINPUT, true); + toolbar->EnableTool(ID_ADDCOMPLEXBOXOUTPUT, false); toolbar->AddSeparator(); toolbar->AddTool(ID_UNDO, _T("Undo"),bmp_undo, wxNullBitmap, wxITEM_NORMAL, _T("Undo"), _T("Undo")); toolbar->AddTool(ID_REDO, _T("Redo"),bmp_redo, wxNullBitmap, wxITEM_NORMAL, _T("Redo"), _T("Redo")); - //toolbar->EnableTool(ID_UNDO, false); - //toolbar->EnableTool(ID_REDO, false); + toolbar->AddSeparator(); + toolbar->AddTool(ID_EDITPROPERTIES, _T("Edit diagram properties"),bmp_editProperties, wxNullBitmap, wxITEM_NORMAL, _T("Edit diagram properties"), _T("Edit diagram properties")); + toolbar->EnableTool(ID_EDITPROPERTIES, false); + + toolbar->AddTool(ID_SHOWTREE, _T("Show tree"),bmp_showTree, wxNullBitmap, wxITEM_NORMAL, _T("Show tree"), _T("Show tree")); + + + toolbar->EnableTool(ID_UNDO, false); + toolbar->EnableTool(ID_REDO, false); toolbar->SetMargins(2, 2); toolbar->Realize(); SetToolBar(toolbar); + // connect command event handlers + Connect(ID_NEW, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(wxGUIEditorGraphicBBS::OnCreateNewTab)); Connect(ID_OPEN, wxEVT_COMMAND_TOOL_CLICKED, @@ -189,15 +249,19 @@ void wxGUIEditorGraphicBBS::initToolbar() { wxCommandEventHandler(wxGUIEditorGraphicBBS::OnAddComplexBoxOutput)); Connect(ID_UNDO,wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(wxGUIEditorGraphicBBS::OnUndo)); Connect(ID_REDO,wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(wxGUIEditorGraphicBBS::OnRedo)); + Connect(ID_CHANGENAME, wxEVT_COMMAND_RIGHT_CLICK, wxCommandEventHandler(wxGUIEditorGraphicBBS::OnChangeName)); + Connect(ID_EDITPROPERTIES,wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(wxGUIEditorGraphicBBS::OnEditDiagramProperties)); + Connect(ID_SHOWTREE,wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(wxGUIEditorGraphicBBS::OnShowTree)); + } //========================================================================= void wxGUIEditorGraphicBBS::initHelpHTMLBrowser() { - //TO FIX THE PATH OF BBTK BIN IN ORDER TO USE REGENERATE EXECUTABLES - //RegenerateAll(); + // JGRR & CM _helpHtmlBrowser = new WxGUIHtmlBrowser(this, wxSize(200, 0)); - _frameAUIMgr->AddPane(_helpHtmlBrowser, wxAuiPaneInfo().Right().MinSize( - 200, 200)); + + // EO JGRR & CM + } //========================================================================= @@ -209,9 +273,13 @@ void wxGUIEditorGraphicBBS::initMenu() { fileMenu->Append(ID_SAVE_AS_DIAGRAM, _T("Save Diagram As"), _T("Save Diagram As")); //DFCH fileMenu->Append(ID_OPEN_BBS, _T("Open BBS"), _T("Open BBS")); - fileMenu->Append(ID_SAVE_AS_BBS, _T("Save BBS"), _T("Save BBS")); + // CM + fileMenu->Append(ID_OPEN, _T("Open a diagram"), _T("Open a 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(ID_EXPORT_CONSOLEAPP, _T("Export console commands"), + _T("Export console execution commands")); fileMenu->Append(wxID_EXIT, _T("E&xit"), _T("Exit")); Connect(ID_NEW, wxEVT_COMMAND_MENU_SELECTED, @@ -224,23 +292,21 @@ void wxGUIEditorGraphicBBS::initMenu() { wxCommandEventHandler(wxGUIEditorGraphicBBS::OnOpenBBS)); Connect(ID_SAVE_AS_BBS, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(wxGUIEditorGraphicBBS::OnSaveActualBBS)); - Connect( - ID_SAVE_AS_COMPLEXBOX, - wxEVT_COMMAND_MENU_SELECTED, + Connect( ID_SAVE_AS_COMPLEXBOX, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(wxGUIEditorGraphicBBS::OnSaveActualComplexBox)); + Connect( ID_EXPORT_CONSOLEAPP, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnExportConsoleExecCommand)); Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(wxGUIEditorGraphicBBS::OnExit)); - // Create Help menu and its items + // Create Edit menu and its items wxMenu *editMenu = new wxMenu; - editMenu->Append(ID_COPY_TO_COMPLEXDIAGRAM, - _T("Copy selected to complex box"), - _T("Creates a new complex box diagram with selected boxes")); - - Connect( - ID_COPY_TO_COMPLEXDIAGRAM, - wxEVT_COMMAND_MENU_SELECTED, - wxCommandEventHandler(wxGUIEditorGraphicBBS::OnCopySelectedToComplexDiagram)); + editMenu->Append(ID_COPY_TO_COMPLEXDIAGRAM, _T("Copy selected to complex box"), _T("Creates a new complex box diagram with selected boxes")); + editMenu->Append(ID_EDIT_COMPLEXBOX_SCRIPT, _T("Edit Complex Box"), _T("Edit Complex Box")); + Connect( ID_COPY_TO_COMPLEXDIAGRAM, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnCopySelectedToComplexDiagram)); + Connect( ID_EDIT_COMPLEXBOX_SCRIPT, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnEditComplexBoxScript)); // Create Help menu and its items wxMenu *helpMenu = new wxMenu; @@ -286,27 +352,28 @@ void wxGUIEditorGraphicBBS::initMenu() { } //========================================================================= -void wxGUIEditorGraphicBBS::initTabPanelsManager() { +void wxGUIEditorGraphicBBS::initTabPanelsManager() +{ _notebook = new wxAuiNotebook(this, wxID_NOTEBOOK, wxDefaultPosition, wxDefaultSize, wxAUI_NB_TOP | wxAUI_NB_TAB_MOVE | wxAUI_NB_CLOSE_ON_ACTIVE_TAB | wxAUI_NB_TAB_FIXED_WIDTH | wxAUI_NB_WINDOWLIST_BUTTON); _tabsMgr = new wxTabPanelsManager(this); _frameAUIMgr->AddPane(_notebook, wxAuiPaneInfo().CenterPane()); - } //========================================================================= -void wxGUIEditorGraphicBBS::initPackageBrowser() { +void wxGUIEditorGraphicBBS::initPackageBrowser() +{ _pkgBrowser = new WxGUIPackageBrowser2(this); _pkgBrowser->IncludeAll(); - _frameAUIMgr->AddPane(_pkgBrowser, - wxAuiPaneInfo().Left().MinSize(200, 200).CloseButton(false)); + _frameAUIMgr->AddPane(_pkgBrowser, wxAuiPaneInfo().Left().MinSize(30, 500).BestSize(750,500).CloseButton(false)); } //================================================================ -void wxGUIEditorGraphicBBS::DoRegeneratePackageDoc(const std::string& pack) { +void wxGUIEditorGraphicBBS::DoRegeneratePackageDoc(const std::string& pack) +{ std::string mess("Regenerating doc for package '"); if (pack != "-a") { mess += pack + "'"; @@ -397,16 +464,54 @@ wxAuiNotebook* wxGUIEditorGraphicBBS::getAuiNotebook() { //================================================================ -void wxGUIEditorGraphicBBS::displayBlackBoxInfo(std::string packageName, - std::string boxName) { - if (_actualPkgBrowserPkgName != packageName || _actualPkgBrowserBoxName - != boxName) { +void wxGUIEditorGraphicBBS::displayBlackBoxInfo(std::string packageName, std::string boxName) +{ + if (_actualPkgBrowserPkgName != packageName || _actualPkgBrowserBoxName != boxName) + { + _actualPkgBrowserPkgName = packageName; _actualPkgBrowserBoxName = boxName; - BlackBoxDescriptor::Pointer descriptor = - GObjectsMVCFactory::getInstance()->getBlackBoxDescriptor( - packageName, boxName); +//EED 15 oct 2012 BlackBoxDescriptor::Pointer descriptor = GObjectsMVCFactory::getInstance()->getBlackBoxDescriptor(packageName, boxName); + + Package::Pointer k; +//EED ComplexBlackBoxDescriptor::Pointer descriptor; + BlackBoxDescriptor::Pointer descriptor; + + std::map< std::string, BlackBoxDescriptor::Pointer> mapDesc; + k = _pkgBrowser->GetFactory()->GetPackage(_actualPkgBrowserPkgName); + mapDesc = k->GetDescriptorMap(); + descriptor = mapDesc[_actualPkgBrowserBoxName]; +/* + tree.treeTour(0); + + tree.deleteTree(); + + descriptor->GetBoxesInside(tree, 0); + + //tree.treeTour(0); + //std::vector boxesDiagram = _sceneM->boxesDiagram; + //for(int i=0;i mapDesc; + k = _pkgBrowser->GetFactory()->GetPackage(packageName); + std::vector temp; + _pkgBrowser->GetFactory()->GetPackagesList(temp); + for(int ii = 0 ; ii < temp.size() ; ii++) + { + std::cout << " packs "<< temp[ii]<< std::endl; + } + mapDesc = k->GetDescriptorMap(); + descriptor = mapDesc[boxName]; + */ _pkgBrowser->WxGUIBlackBoxListUserOnSelected(descriptor.get()); } } @@ -421,6 +526,13 @@ void wxGUIEditorGraphicBBS::editBlackBox(GBlackBoxModel *bbmodel) { //========================================================================= +bool wxGUIEditorGraphicBBS::boxNameExists(std::string boxname) { + + return this->_tabsMgr->getActualTabPanel()->getSceneManager()->boxExist(boxname); +} + +//========================================================================= + void wxGUIEditorGraphicBBS::updateStatusBar(std::string textStatus) { SetStatusText(crea::std2wx(textStatus)); } @@ -456,6 +568,11 @@ void wxGUIEditorGraphicBBS::executeScript(std::string script) { command += " & "; #endif +#ifndef APPLE + command = "source ~/.profile; "+command; +#endif + + printf("RaC wxGUIEditorGraphicBBS::executeScript %s \n", command.c_str()); system(command.c_str()); } @@ -482,19 +599,88 @@ void wxGUIEditorGraphicBBS::OnCreateNewTab(wxCommandEvent& event) { void wxGUIEditorGraphicBBS::OnUndo(wxCommandEvent& event) { unsigned short disable; - GetToolBar()->EnableTool(ID_UNDO,_tabsMgr->loadTempDiagram(0)); - if (GetToolBar()->GetToolEnabled(ID_REDO) == false) - GetToolBar()->EnableTool(ID_REDO,true); + std::string stundo; + std::string stredo; + + _tabsMgr->loadTempDiagram(0); + disable = _tabsMgr->getUndoState(stundo); + if(disable == 0) + { + std::string name = _tabsMgr->GetNameTabPanel(); + if(name[name.length() - 1] == '*') + { + name =name.substr(0,name.length()-1); + } + _tabsMgr->SetNameTabPanel(wxString (name.c_str(), wxConvUTF8)); + } + + GetToolBar()->EnableTool(ID_UNDO,disable); + GetToolBar()->SetToolShortHelp(ID_UNDO,crea::std2wx(stundo)); + GetToolBar()->EnableTool(ID_REDO,_tabsMgr->getRedoState(stredo)); + GetToolBar()->SetToolShortHelp(ID_REDO,crea::std2wx(stredo)); refreshGUIControls(); } +//========================================================================= + void wxGUIEditorGraphicBBS::OnRedo(wxCommandEvent& event) { unsigned short disable; - GetToolBar()->EnableTool(ID_REDO, _tabsMgr->loadTempDiagram(1)); - if (GetToolBar()->GetToolEnabled(ID_UNDO) == false) - GetToolBar()->EnableTool(ID_UNDO,true); + std::string stundo; + std::string stredo; + + _tabsMgr->loadTempDiagram(1); + std::string name = _tabsMgr->GetNameTabPanel(); + if(name[name.length() - 1] != '*') + name +="*"; + _tabsMgr->SetNameTabPanel(wxString (name.c_str(), wxConvUTF8)); + GetToolBar()->EnableTool(ID_UNDO,_tabsMgr->getUndoState(stundo)); + GetToolBar()->SetToolShortHelp(ID_UNDO,crea::std2wx(stundo)); + GetToolBar()->EnableTool(ID_REDO,_tabsMgr->getRedoState(stredo)); + GetToolBar()->SetToolShortHelp(ID_REDO,crea::std2wx(stredo)); refreshGUIControls(); } + +void wxGUIEditorGraphicBBS::OnChangeName(wxCommandEvent& event){ +} +//========================================================================= + +void wxGUIEditorGraphicBBS::OnShowTree(wxCommandEvent& event){ + std::cout << "wxGUIEditorGraphicBBS::OnShowTree"< mapDesc; + k = _pkgBrowser->GetFactory()->GetPackage(_actualPkgBrowserPkgName); + mapDesc = k->GetDescriptorMap(); + descriptor = mapDesc[_actualPkgBrowserBoxName]; + + tree.treeTour(0); + + tree.deleteTree(); + + descriptor->GetBoxesInside(tree, 0); + + _actualPkgBrowserPkgName = ""; + _actualPkgBrowserBoxName = ""; + } +else + { + std::cout<<"Select a Box"<Show(); +} + //========================================================================= void wxGUIEditorGraphicBBS::OnExecuteActualDiagram(wxCommandEvent& event) { @@ -507,29 +693,52 @@ void wxGUIEditorGraphicBBS::OnExecuteActualDiagram(wxCommandEvent& event) { executeScript(script2); } + +//========================================================================= +void wxGUIEditorGraphicBBS::OpenBBS(std::string filePathName, std::string fileName) +{ + _tabsMgr->addNewTab( crea::std2wx(fileName) ); + bbtk::InterpreterBBS::Pointer I = bbtk::InterpreterBBS::New( this->_tabsMgr->getActualTabPanel()->getSceneManager(), _pkgBrowser->GetFactory()); + // We tell the interpreter to throw exceptions on error + I->SetThrow(true); + // Interpret the file supposed to define a box called 'Processing' + I->InterpretFile( filePathName ); + refreshGUIControls(); +} + //========================================================================= // HANDLERS //========================================================================= -void wxGUIEditorGraphicBBS::OnOpenBBS(wxCommandEvent& event) { - wxFileDialog * openFileDialog = new wxFileDialog(this, wxT("Open BBS"), - wxEmptyString, wxT("NewBBS"), wxT("*.bbs"), wxOPEN); - if (openFileDialog->ShowModal() == wxID_OK) { - wxString fileName = openFileDialog->GetPath(); +void wxGUIEditorGraphicBBS::OnOpenBBS(wxCommandEvent& event) +{ +//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 +#if wxMAJOR_VERSION <= 2 + wxFileDialog * openFileDialog = new wxFileDialog(this, wxT("Open BBS"), wxEmptyString, wxT("NewBBS"), wxT("*.bbs"), wxOPEN); +#else + wxFileDialog * openFileDialog = new wxFileDialog(this, wxT("Open BBS"), wxEmptyString, wxT("NewBBS"), wxT("*.bbs"), wxFD_OPEN); +#endif + if (openFileDialog->ShowModal() == wxID_OK) + { + OpenBBS( crea::wx2std(openFileDialog->GetPath()) , crea::wx2std(openFileDialog->GetFilename()) ); + } + +/*EED Borrame + if (openFileDialog->ShowModal() == wxID_OK) + { + wxString fileName = openFileDialog->GetPath(); _tabsMgr->addNewTab(openFileDialog->GetFilename()); - - bbtk::InterpreterBBS::Pointer I = bbtk::InterpreterBBS::New( - this->_tabsMgr->getActualTabPanel()->getSceneManager(), - _pkgBrowser->GetFactory()); - + bbtk::InterpreterBBS::Pointer I = bbtk::InterpreterBBS::New( this->_tabsMgr->getActualTabPanel()->getSceneManager(), _pkgBrowser->GetFactory()); // We tell the interpreter to throw exceptions on error I->SetThrow(true); // Interpret the file supposed to define a box called 'Processing' I->InterpretFile((const char*) (fileName.mb_str())); } refreshGUIControls(); +*/ } +//========================================================================= void wxGUIEditorGraphicBBS::SaveActualBBS(std::string filename) { ofstream file; @@ -538,7 +747,9 @@ void wxGUIEditorGraphicBBS::SaveActualBBS(std::string filename) { std::string content = ""; // writing file header content += "# ----------------------------------\n"; - content += "# - BBTKGEditor v 1.2 BBS BlackBox Script\n"; + content += "# - BBTKGEditor v "; + content += _currentBBGversion; //VERSION + content += " BBS BlackBox Script\n"; content += "# - "; content += filename; content += "\n"; @@ -550,9 +761,18 @@ void wxGUIEditorGraphicBBS::SaveActualBBS(std::string filename) { } void wxGUIEditorGraphicBBS::OnSaveActualBBS(wxCommandEvent& event) { + +//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 +#if wxMAJOR_VERSION <= 2 wxFileDialog * saveFileDialog = new wxFileDialog(this, wxT("Save actual BBS"), wxEmptyString, wxT("NewBBS"), wxT("*.bbs"), wxSAVE | wxOVERWRITE_PROMPT); +#else + wxFileDialog * saveFileDialog = new wxFileDialog(this, + wxT("Save actual BBS"), wxEmptyString, wxT("NewBBS"), + wxT("*.bbs"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT); +#endif + if (saveFileDialog->ShowModal() == wxID_OK) { wxString fileName = saveFileDialog->GetPath(); std::string filename = (const char*) (fileName.mb_str()); @@ -598,7 +818,9 @@ void wxGUIEditorGraphicBBS::SaveActualComplexBox(std::string filename) { // writing file header content += "# ----------------------------------\n"; - content += "# - BBTKGEditor v 1.2 BBS BlackBox Script (Complex Box)\n"; + content += "# - BBTKGEditor v "; + content += _currentBBGversion;//VERSION + content += " BBS BlackBox Script (Complex Box)\n"; content += "# - "; content += filename; content += "\n"; @@ -611,11 +833,21 @@ void wxGUIEditorGraphicBBS::SaveActualComplexBox(std::string filename) { //========================================================================= -void wxGUIEditorGraphicBBS::OnSaveActualComplexBox(wxCommandEvent& event) { +void wxGUIEditorGraphicBBS::OnSaveActualComplexBox(wxCommandEvent& event) +{ +//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 +#if wxMAJOR_VERSION <= 2 wxFileDialog * saveFileDialog = new wxFileDialog(this, wxT("Save Complex Box BBS"), wxEmptyString, _T("ComplexBoxName"), wxT("*.bbs"), wxSAVE | wxOVERWRITE_PROMPT); +#else + wxFileDialog * saveFileDialog = new wxFileDialog(this, + wxT("Save Complex Box BBS"), wxEmptyString, + _T("ComplexBoxName"), wxT("*.bbs"), wxFD_SAVE + | wxFD_OVERWRITE_PROMPT); +#endif + if (saveFileDialog->ShowModal() == wxID_OK) { wxString fileName = saveFileDialog->GetPath(); std::string filename = (const char*) (fileName.mb_str()); @@ -633,7 +865,9 @@ void wxGUIEditorGraphicBBS::SaveActualDiagram(std::string filename) { // writing file header content += "# ----------------------------------\n"; - content += "# - BBTKGEditor v 1.2 BBG BlackBox Diagram file\n"; + content += "# - BBTKGEditor v "; + content += _currentBBGversion; //VERSION + content += " BBG BlackBox Diagram file\n"; content += "# - "; content += filename; @@ -649,19 +883,39 @@ void wxGUIEditorGraphicBBS::SaveActualDiagram(std::string filename) { } //========================================================================= -void wxGUIEditorGraphicBBS::SaveTempActualDiagram() +void wxGUIEditorGraphicBBS::SaveTempActualDiagram(const std::string &action) { - _tabsMgr->saveTempActualDiagram(); + std::string stundo; + std::string stredo; + std::string name = _tabsMgr->GetNameTabPanel(); + if(name[name.length() - 1] != '*') + name +="*"; + _tabsMgr->SetNameTabPanel(wxString (name.c_str(), wxConvUTF8)); + _tabsMgr->saveTempActualDiagram(action); + GetToolBar()->EnableTool(ID_UNDO,_tabsMgr->getUndoState(stundo)); + GetToolBar()->SetToolShortHelp(ID_UNDO,crea::std2wx(stundo)); + GetToolBar()->EnableTool(ID_REDO,_tabsMgr->getRedoState(stredo)); + GetToolBar()->SetToolShortHelp(ID_REDO,crea::std2wx(stredo)); } //========================================================================= //The following method allows to save the current diagram asking the filename //DFCH -void wxGUIEditorGraphicBBS::SaveCurrentDiagramAs() { +void wxGUIEditorGraphicBBS::SaveCurrentDiagramAs() +{ + +//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 +#if wxMAJOR_VERSION <= 2 wxFileDialog * saveFileDialog = new wxFileDialog(this, wxT("Save current diagram"), wxEmptyString, wxT("NewDiagram"), wxT("*.bbg"), wxSAVE | wxOVERWRITE_PROMPT); +#else + wxFileDialog * saveFileDialog = new wxFileDialog(this, + wxT("Save current diagram"), wxEmptyString, wxT("NewDiagram"), + wxT("*.bbg"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT); +#endif + if (saveFileDialog->ShowModal() == wxID_OK) { //_tabsMgr->SetNameTabPanel(saveFileDialog->GetFilename()); wxString pathfileName = saveFileDialog->GetPath(); @@ -695,8 +949,14 @@ void wxGUIEditorGraphicBBS::OnSaveActualDiagram(wxCommandEvent& event) { } else { std::string pathfilenamebbs = pathfilename; pathfilenamebbs[pathfilenamebbs.length() - 1] = 's'; - + if (_tabsMgr->isActualDiagramComplexBox() == false) { + std::string name = _tabsMgr->GetNameTabPanel(); + if(name[name.length() - 1] == '*') + { + name =name.substr(0,name.length()-1); + } + _tabsMgr->SetNameTabPanel(wxString (name.c_str(), wxConvUTF8)); SaveActualDiagram(pathfilename); SaveActualBBS(pathfilenamebbs); } else { @@ -711,26 +971,143 @@ void wxGUIEditorGraphicBBS::OnSaveActualDiagram(wxCommandEvent& event) { void wxGUIEditorGraphicBBS::OnSaveAsActualDiagram(wxCommandEvent& event) { SaveCurrentDiagramAs(); } + //========================================================================= +void wxGUIEditorGraphicBBS::OnExportConsoleExecCommand(wxCommandEvent& event) +{ +//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 +#if wxMAJOR_VERSION <= 2 + wxFileDialog * saveFileDialog = new wxFileDialog(this, + wxT("Export console command"), wxEmptyString, wxT("ConsoleApp.txt"), + wxT("*.txt;*.bbs;*.bbg;*.sh;*.bat"), wxSAVE | wxOVERWRITE_PROMPT); +#else + wxFileDialog * saveFileDialog = new wxFileDialog(this, + wxT("Export console command"), wxEmptyString, wxT("ConsoleApp.txt"), + wxT("*.txt;*.bbs;*.bbg;*.sh;*.bat"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT); +#endif + -void wxGUIEditorGraphicBBS::refreshGUIControls() { + if (saveFileDialog->ShowModal() == wxID_OK) + { + wxString fileName = saveFileDialog->GetPath(); + std::string filename = (const char*) (fileName.mb_str()); + filename=CheckExtension (filename, ".txt"); + + ofstream file; + file.open(filename.c_str()); + + std::vector extInputs = _tabsMgr->getActualTabPanel()->getSceneManager()->GetExternalInputsNames(); + + //TODO PUT IN A METHOD OF A FILES AND TEXT MANAGER CLASS !!! + //std::string inputsInCommentsWin=""; + //std::string inputsInCommentsUnix=""; + //std::string inputsInOneLineWin=""; + std::string inputsInOneLineUnix=""; + for (unsigned int i = 0; i < extInputs.size(); ++i) + { + /* No gusto la idea al jefe pero por si acaso ... + * RaC 2012 2nd HackFest + * + inputsInCommentsWin+="REM "; + inputsInCommentsWin+=extInputs[i]; + inputsInCommentsWin+="=\"value\"\n"; + inputsInCommentsUnix+="# "; + inputsInCommentsUnix+=extInputs[i]; + inputsInCommentsUnix+="=\"value\"\n"; + + char buffer [50]; + sprintf (buffer, "%d", (i+1)); + inputsInOneLineWin+=extInputs[i]; + inputsInOneLineWin+="=\"%"; + inputsInOneLineWin+=buffer; + inputsInOneLineWin+="\" "; + */ + inputsInOneLineUnix+=extInputs[i]; + inputsInOneLineUnix+="=\"\" "; + + } + + + std::string content = ""; + // writing file header + content += "# ----------------------------------\n"; + content += "# - BBTKGEditor v "; + content += _currentBBGversion; //VERSION + content += " Console Commands to execute BBS application\n"; + content += "# - "; + content += filename; + content += "\n"; + content += "# ----------------------------------\n"; + content += "\n"; + content += "\n"; + content += "# Command to execute bbi\n"; + content += "bbi "; + content += inputsInOneLineUnix; + + /* No gusto la idea al jefe pero por si acaso ... + * RaC 2012 2nd HackFest + content += "# For Windows (copy the following lines to a .bat file)\n"; + content += "REM BBS application\n"; + content += "REM Inputs:\n"; + content += inputsInCommentsWin; + content += "REM To use previous inputs, put %$inputName% in the corresponding input of the execution bbi line\n"; + content += "bbi applicationBBS.bbs "; + content += inputsInOneLineWin; + content += "\n"; + content += "\n"; + content += "# For Linux or Mac (copy the following lines to a .sh file)\n"; + content += "#!/bin/bash\n"; + content += "# BBS application\n"; + content += "# Inputs:\n"; + content += inputsInCommentsUnix; + content += "# To use previous inputs, put $inputName in the corresponding input of the execution bbi line\n"; + content += "bbi applicationBBS.bbs "; + content += inputsInOneLineUnix; + content += "\n"; + */ + + file << content; + file.close(); + } + + +} + +//========================================================================= + +void wxGUIEditorGraphicBBS::refreshGUIControls() +{ + std::string stundo; + std::string stredo; + //RaC2012 2ndHackFest Next line seems weird ... To keep in mind for other devels wxToolBar* toolbar = GetToolBar(); - if (_tabsMgr->isActualDiagramComplexBox()) { + if (_tabsMgr->isActualDiagramComplexBox()) + { toolbar->ToggleTool(ID_BTNCOMPLEXBOX, true); - toolbar->EnableTool(ID_ADDCOMPLEXBOXINPUT, true); + //toolbar->EnableTool(ID_ADDCOMPLEXBOXINPUT, true); RaC2012 2nd HackFest toolbar->EnableTool(ID_ADDCOMPLEXBOXOUTPUT, true); GetMenuBar()->GetMenu(0)->Enable(ID_SAVE_AS_COMPLEXBOX, true); GetMenuBar()->GetMenu(0)->Enable(ID_SAVE_AS_BBS, false); + GetMenuBar()->GetMenu(0)->Enable(ID_EXPORT_CONSOLEAPP, false); } else { toolbar->ToggleTool(ID_BTNCOMPLEXBOX, false); - toolbar->EnableTool(ID_ADDCOMPLEXBOXINPUT, false); + //toolbar->EnableTool(ID_ADDCOMPLEXBOXINPUT, false); RaC2012 2nd HackFest toolbar->EnableTool(ID_ADDCOMPLEXBOXOUTPUT, false); GetMenuBar()->GetMenu(0)->Enable(ID_SAVE_AS_COMPLEXBOX, false); GetMenuBar()->GetMenu(0)->Enable(ID_SAVE_AS_BBS, true); + GetMenuBar()->GetMenu(0)->Enable(ID_EXPORT_CONSOLEAPP, true); } + //RaC2012 2ndHackFest + GetToolBar()->EnableTool(ID_EDITPROPERTIES,true); + + GetToolBar()->EnableTool(ID_UNDO,_tabsMgr->getUndoState(stundo)); + GetToolBar()->SetToolShortHelp(ID_UNDO,crea::std2wx(stundo)); + GetToolBar()->EnableTool(ID_REDO,_tabsMgr->getRedoState(stredo)); + GetToolBar()->SetToolShortHelp(ID_REDO,crea::std2wx(stredo)); + if (_tabsMgr->getNumActualSelectedObjects() > 0) { GetMenuBar()->GetMenu(1)->Enable(ID_COPY_TO_COMPLEXDIAGRAM, true); } else { @@ -742,73 +1119,88 @@ void wxGUIEditorGraphicBBS::refreshGUIControls() { //========================================================================= -void wxGUIEditorGraphicBBS::OnDeleteAllBoxesActualDiagram(wxCommandEvent& event) { - wxMessageDialog *dial = new wxMessageDialog(NULL, - wxT("Are you sure to delete all boxes of the diagram?"), - wxT("Delete all boxes"), wxYES_NO | wxNO_DEFAULT - | wxICON_QUESTION); - if (dial->ShowModal() == wxID_YES) { +void wxGUIEditorGraphicBBS::OnDeleteAllBoxesActualDiagram(wxCommandEvent& event) +{ + wxMessageDialog *dial = new wxMessageDialog(NULL,wxT("Are you sure to delete all boxes of the diagram?"),wxT("Delete all boxes"), wxYES_NO | wxNO_DEFAULT| wxICON_QUESTION); + if (dial->ShowModal() == wxID_YES) + { _tabsMgr->deleteAllBoxesActualDiagram(); } } //========================================================================= -void wxGUIEditorGraphicBBS::OnCenterViewActualDiagram(wxCommandEvent& event) { +void wxGUIEditorGraphicBBS::OnCenterViewActualDiagram(wxCommandEvent& event) +{ _tabsMgr->centerViewActualDiagram(); } //========================================================================= - -void wxGUIEditorGraphicBBS::OnOpenDiagram(wxCommandEvent& event) { - wxFileDialog * openFileDialog = new wxFileDialog(this, wxT("Open diagram"), - wxEmptyString, wxT(""), wxT("*.bbg"), wxOPEN | wxFILE_MUST_EXIST); - if (openFileDialog->ShowModal() == wxID_OK) { - wxString fileName = openFileDialog->GetPath(); - ifstream inputStream; - std::string fName = (const char*) (fileName.mb_str()); - inputStream.open(fName.c_str()); - _tabsMgr->addNewTab(openFileDialog->GetFilename()); - - _tabsMgr->loadDiagram(inputStream, fName); - +void wxGUIEditorGraphicBBS::OpenDiagram(std::string filePathName, std::string fileName) +{ + ifstream inputStream; + inputStream.open(filePathName.c_str()); + assert(inputStream.good()); // fails + + if(_tabsMgr->FindTab(filePathName)!=-1) //RaC2012 avoid opening same diagram twice + { inputStream.close(); + printf("RaC: Diagram already opened\n"); + return; } + _tabsMgr->addNewTab( crea::std2wx(fileName) ); + _tabsMgr->loadDiagram(inputStream, filePathName); + + _tabsMgr->saveTempActualDiagram("load diagram"); + GetToolBar()->EnableTool(ID_UNDO, false); + GetToolBar()->EnableTool(ID_UNDO, false); + inputStream.close(); refreshGUIControls(); } - + //========================================================================= +void wxGUIEditorGraphicBBS::OnOpenDiagram(wxCommandEvent& event) +{ + +//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 +#if wxMAJOR_VERSION <= 2 + wxFileDialog * openFileDialog = new wxFileDialog(this, wxT("Open diagram"), wxEmptyString, wxT(""), wxT("*.bbg"), wxOPEN | wxFILE_MUST_EXIST); +#else + wxFileDialog * openFileDialog = new wxFileDialog(this, wxT("Open diagram"), wxEmptyString, wxT(""), wxT("*.bbg"), wxFD_OPEN | wxFD_FILE_MUST_EXIST); +#endif -void wxGUIEditorGraphicBBS::OnClickBtnBox(wxCommandEvent& event) { + if (openFileDialog->ShowModal() == wxID_OK) + { + wxString filePath = openFileDialog->GetPath(); + wxString fileName = openFileDialog->GetFilename(); + OpenDiagram( crea::wx2std(filePath) , crea::wx2std(fileName) ); + } +} + +//========================================================================= +void wxGUIEditorGraphicBBS::OnClickBtnBox(wxCommandEvent& event) +{ + std::cout<<"wxGUIEditorGraphicBBS::OnClickBtnBox"<GetActualSelected(); if (bbDes != NULL) { std::string typeName = bbDes->GetTypeName(); std::string packageName = bbDes->GetPackage()->GetName(); - wxGEditorTabPanel *pnl = this->_tabsMgr->getActualTabPanel(); - - // save empty state!! - /* if (_tabsMgr->getNumActualSelectedObjects() == 0) - { - SaveTempActualDiagram(); - } - */ if (pnl != NULL) { wxVtkSceneManager *scn = pnl->getSceneManager(); scn->createGBlackBox(50, 50, packageName, typeName); scn->refresh(); } - if (GetToolBar()->GetToolEnabled(ID_UNDO) == false) - GetToolBar()->EnableTool(ID_UNDO,true); - SaveTempActualDiagram(); + SaveTempActualDiagram("New Box"); // if pnl }// if bbDes } //========================================================================= -void wxGUIEditorGraphicBBS::OnClickBtnExecutableBox(wxCommandEvent& event) { +void wxGUIEditorGraphicBBS::OnClickBtnExecutableBox(wxCommandEvent& event) +{ //DFCH wxGEditorTabPanel *pnl = this->_tabsMgr->getActualTabPanel(); @@ -824,92 +1216,386 @@ void wxGUIEditorGraphicBBS::OnClickBtnExecutableBox(wxCommandEvent& event) { } //========================================================================= - -void wxGUIEditorGraphicBBS::OnClickBtnComplexBox(wxCommandEvent& event) { +void wxGUIEditorGraphicBBS::OnClickBtnComplexBox(wxCommandEvent& event) +{ + std::cout<<"wxGUIEditorGraphicBBS::OnClickBtnComplexBox"<GetToolState(ID_BTNCOMPLEXBOX); if (temp) { - _tabsMgr->setActualDiagramComplexBox(true); + enableComplexBox(); } else { - _tabsMgr->setActualDiagramComplexBox(false); + disableComplexBox(); } - refreshGUIControls(); } //========================================================================= - -void wxGUIEditorGraphicBBS::OnAddComplexBoxInput(wxCommandEvent& event) { +//EED01 +void wxGUIEditorGraphicBBS::OnAddComplexBoxInput(wxCommandEvent& event) +{ wxTextEntryDialog *nameDialog = new wxTextEntryDialog(this, wxT("Name of input port")); - if (nameDialog->ShowModal() == wxID_OK) { + if (nameDialog->ShowModal() == wxID_OK) + { wxString fileName = nameDialog->GetValue(); - if (!fileName.IsEmpty()) { + if (!fileName.IsEmpty()) + { std::string portName = (const char*) (fileName.mb_str()); - _tabsMgr->addActualDiagramComplexInputPort(portName); - } - } + if ( !boxNameExists(portName) ) + { + _tabsMgr->addActualDiagramComplexInputPort(portName); + } else { + wxMessageDialog *dial = new wxMessageDialog(NULL, + wxT("Impossible to create Box. The name already exists. Please provide another name"), + wxT("Change name: name already exists"), wxOK | wxICON_EXCLAMATION | wxSTAY_ON_TOP); + dial->ShowModal(); + } + } // if !fileName + } // if namaDialog } //========================================================================= - -void wxGUIEditorGraphicBBS::OnAddComplexBoxOutput(wxCommandEvent& event) { +void wxGUIEditorGraphicBBS::OnAddComplexBoxOutput(wxCommandEvent& event) +{ wxTextEntryDialog *nameDialog = new wxTextEntryDialog(this, wxT("Name of output port")); - if (nameDialog->ShowModal() == wxID_OK) { + if (nameDialog->ShowModal() == wxID_OK) + { wxString fileName = nameDialog->GetValue(); - if (!fileName.IsEmpty()) { + if (!fileName.IsEmpty()) + { std::string portName = (const char*) (fileName.mb_str()); + if ( !boxNameExists(portName) ) + { _tabsMgr->addActualDiagramComplexOutputPort(portName); - } - } + } else { + wxMessageDialog *dial = new wxMessageDialog(NULL, + wxT("Impossible to create Box. The name already exists. Please provide another name"), + wxT("Change name: name already exists"), wxOK | wxICON_EXCLAMATION | wxSTAY_ON_TOP); + dial->ShowModal(); + } + + } // if !filename + } // namaDialog } //========================================================================= - void wxGUIEditorGraphicBBS::OnCopySelectedToComplexDiagram( - wxCommandEvent& event) { + wxCommandEvent& event) +{ _tabsMgr->copySelectedBBoxesToComplexDiagram(); } -void wxGUIEditorGraphicBBS::OnHelpBBeditor(wxCommandEvent& event) { +//========================================================================= +void wxGUIEditorGraphicBBS::OnHelpBBeditor(wxCommandEvent& event) +{ printf("wxGUIEditorGraphicBBS::OnHelpBBeditor ....not implemented..\n"); } //========================================================================= -void wxGUIEditorGraphicBBS::OnCreatePackage(wxCommandEvent& event) { - +void wxGUIEditorGraphicBBS::OnCreatePackage(wxCommandEvent& event) +{ bbtkSystemTools::CreatePackage(); } //========================================================================= -void wxGUIEditorGraphicBBS::OnCreateBlackBox(wxCommandEvent& event) { +void wxGUIEditorGraphicBBS::OnCreateBlackBox(wxCommandEvent& event) +{ bbtkSystemTools::CreateBlackBox(); } + //========================================================================= -void wxGUIEditorGraphicBBS::OnPlugPackage(wxCommandEvent& event) { - printf("EED wxGUIEditorGraphicBBS::OnPlugPackage ... not implemented ..\n"); +void wxGUIEditorGraphicBBS::OnPlugPackage(wxCommandEvent& event) +{ + //DFGO2012 Plug Package functionnalities + long style = wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST; + wxDirDialog* FD = + new wxDirDialog( 0, + _T("Select package directory"), + _T(""), + style); + long userResponse; + do + { + userResponse = FD->ShowModal(); + if(userResponse==wxID_OK) + { + std::string path = wx2std (FD->GetPath()) ; + #ifdef WIN32 + std::string fname = path + "\\bbtkPackage"; + #else + std::string fname = path + "/bbtkPackage"; + #endif + + std::cout << "Path chosen = \"" << FD->GetPath() << "\"" << std::endl; + if ( Utilities::FileExists( fname ) ) + { + std::ifstream f; + f.open(fname.c_str()); + std::string pname; + f >> pname; + while(pname[0] == '#') + { + getline(f, pname, '\n'); + f >> pname; + } + f.close(); + + bbtk::ConfigurationFile::GetInstance().AddPackagePathsAndWrite( path ); + + DoRegeneratePackageDoc(pname); + DoRegenerateBoxesLists(); + + _pkgBrowser->RebuildList(); + + wxMessageBox(_T("Package successfully plugged. Please restart bbEditor to see the new package in the package browser."),_T("Plug package"),wxOK | wxICON_INFORMATION); + userResponse = wxID_CANCEL; + } + else + { + std::string err = "The directory \"" + path + "\" does not contain a 'bbtkPackage' file."; + #ifndef WIN32 + #ifndef MACOSX + err += "\nNote: If you are on Linux please select the folder and click \"Open\", don't enter in it."; + #endif + #endif + + wxMessageBox(crea::std2wx(err), _T("Plug package"),wxOK | wxICON_ERROR); + // THE FOLLOWING LINE GIVES ERRORS BECAUSE IT IS NECESSARY TO USE std2wx + //wxMessageBox( _T( err) , _T("Plug package"),wxOK | wxICON_ERROR); + } + } + }while(userResponse != wxID_CANCEL); + } + //========================================================================= -void wxGUIEditorGraphicBBS::OnEditConfig(wxCommandEvent& event) { - printf("EED wxGUIEditorGraphicBBS::OnEditConfig ... not implemented ..\n"); +void wxGUIEditorGraphicBBS::OnEditConfig(wxCommandEvent& event) +{ + std::string commandStr; + std::string configFile = ConfigurationFile::GetInstance().Get_config_xml_full_path(); + #ifdef WIN32 + commandStr = "notepad.exe "; + #else + commandStr = "gedit "; + #endif + commandStr = commandStr + configFile; + std::cout << "system: " << commandStr << std::endl; + system ( commandStr.c_str() ); } + //========================================================================= -void wxGUIEditorGraphicBBS::OnShowHTMLDoc(wxCommandEvent& event) { - printf("EED wxGUIEditorGraphicBBS::OnShowHTMLDoc ... not implemented ..\n"); +void wxGUIEditorGraphicBBS::OnShowHTMLDoc(wxCommandEvent& event) +{ + // JGRR & CM WH + if (_helpHtmlBrowser != NULL){ + _frameAUIMgr->DetachPane(_helpHtmlBrowser); + _helpHtmlBrowser->Destroy(); + } + initHelpHTMLBrowser(); + _frameAUIMgr->AddPane(_helpHtmlBrowser, wxAuiPaneInfo().Right().MinSize(200, 200)); + _frameAUIMgr->Update(); + refreshGUIControls(); + + // EO JGRR & CM WH } + //========================================================================= -void wxGUIEditorGraphicBBS::OnCreateIndex(wxCommandEvent& event) { +void wxGUIEditorGraphicBBS::OnCreateIndex(wxCommandEvent& event) +{ printf("EED wxGUIEditorGraphicBBS::OnCreateIndex ... not implemented ..\n"); } + //========================================================================= +void wxGUIEditorGraphicBBS::OnEditComplexBoxScript(wxCommandEvent& event) +{ + BlackBoxDescriptor *bbDes = _pkgBrowser->GetActualSelected(); + if (bbDes != NULL) + { + std::string packageName = bbDes->GetPackage()->GetName(); + std::string typeName = bbDes->GetTypeName(); + if (!TryToOpenScriptComplexBox(packageName ,typeName)) + { + wxMessageDialog windowMessage1(NULL,_T("This is not a ComplexBox script."), _T("Alert !"), wxOK); + windowMessage1.ShowModal(); + } + }// if bbDes +} -void wxGUIEditorGraphicBBS::OnExit(wxCommandEvent& event) { +//========================================================================= +void wxGUIEditorGraphicBBS::OnExit(wxCommandEvent& event) +{ Close(true); } +Factory::Pointer wxGUIEditorGraphicBBS::GetBBTKFactory() +{ + if (_pkgBrowser==NULL) + { + printf ("EED ERROR! wxGUIEditorGraphicBBS::GetBBTKFactory _pkgBrowser = NULL\n"); + } + return _pkgBrowser->GetFactory(); +} + //========================================================================= +void wxGUIEditorGraphicBBS::enableComplexBox() +{ + _tabsMgr->setActualDiagramComplexBox(true); + refreshGUIControls(); +} + +//========================================================================= + +void wxGUIEditorGraphicBBS::disableComplexBox() +{ + _tabsMgr->setActualDiagramComplexBox(false); + refreshGUIControls(); +} + +//========================================================================= +void wxGUIEditorGraphicBBS::setCurrentDiagramDescription(std::string description) +{ + _tabsMgr->SetDescription(description); +} + +//========================================================================= +void wxGUIEditorGraphicBBS::setCurrentDiagramAuthor(std::string author) +{ + _tabsMgr->SetAuthor(author); +} + +//========================================================================= +void wxGUIEditorGraphicBBS::setCurrentDiagramCategory(std::string category) +{ + _tabsMgr->SetCategory(category); +} + +//========================================================================= +void wxGUIEditorGraphicBBS::setCurrentDiagramMessageKind(std::string kind){ + _tabsMgr->SetMessageKind(kind); +} + +//========================================================================= +void wxGUIEditorGraphicBBS::setCurrentDiagramMessageLevel(std::string level){ + _tabsMgr->SetMessageLevel(level); +} + +//========================================================================= +std::string wxGUIEditorGraphicBBS::getCurrentDiagramDescription() +{ + return _tabsMgr->GetDescription(); +} + +//========================================================================= +std::string wxGUIEditorGraphicBBS::getCurrentDiagramAuthor() +{ + return _tabsMgr->GetAuthor(); +} +//========================================================================= +std::string wxGUIEditorGraphicBBS::getCurrentDiagramCategory() +{ + return _tabsMgr->GetCategory(); +} + +//========================================================================= +std::string wxGUIEditorGraphicBBS::getCurrentDiagramMessageKind(){ + return _tabsMgr->GetMessageKind(); +} + +//========================================================================= +std::string wxGUIEditorGraphicBBS::getCurrentDiagramMessageLevel(){ + return _tabsMgr->GetMessageLevel(); +} + +//========================================================================= +bool wxGUIEditorGraphicBBS::isCurrentDiagramComplexBox() +{ + return _tabsMgr->isActualDiagramComplexBox(); +} + + +//========================================================================= +void wxGUIEditorGraphicBBS::OpenScript(std::string filePathNameBBS ,std::string boxType) +{ + std::string fileName = boxType+".bbg"; + std::string filePathNameBBG = filePathNameBBS; + filePathNameBBG[ filePathNameBBG.length()-1 ] = 'g'; + + wxMessageDialog windowMessage1(NULL,_T("The system is going to open a bbg or bbs for you. Be careful if you save this file."), _T("Alert !"), wxOK); + windowMessage1.ShowModal(); + + if ( Utilities::FileExists( filePathNameBBG ) ) + { + OpenDiagram( filePathNameBBG , fileName ); + } else { + if ( Utilities::FileExists( filePathNameBBS ) ) + { + OpenBBS( filePathNameBBS , fileName ); + } else { + wxMessageDialog windowMessage1(NULL,_T("..ERROR.. loading script bbg/bbs."), _T("Alert !"), wxOK); + windowMessage1.ShowModal(); + } // FileExists BBS + } // FieExists BBG +} //OpenScript + + + +//========================================================================= +bool wxGUIEditorGraphicBBS::TryToOpenScriptApplication(std::string packageName ,std::string boxType) +{ + return TryToOpenScript(packageName ,boxType, true, false); +} + +//========================================================================= +bool wxGUIEditorGraphicBBS::TryToOpenScriptComplexBox(std::string packageName ,std::string boxType) +{ + return TryToOpenScript(packageName ,boxType, false, true); +} + + +//========================================================================= +bool wxGUIEditorGraphicBBS::TryToOpenScript(std::string packageName ,std::string boxType,bool scriptApplication, bool scriptComplexBox) +{ + printf("EED wxGUIEditorGraphicBBS::TryToOpenScript Start\n "); + Package::Pointer k; + std::map< std::string, BlackBoxDescriptor::Pointer> mapDesc; + BlackBoxDescriptor::Pointer descriptor; + printf("EED wxGUIEditorGraphicBBS::TryToOpenScript 1\n "); + k = GetBBTKFactory()->GetPackage(packageName); + printf("EED wxGUIEditorGraphicBBS::TryToOpenScript 2\n "); + mapDesc = k->GetDescriptorMap(); + printf("EED wxGUIEditorGraphicBBS::TryToOpenScript 3\n "); + descriptor = mapDesc[boxType]; + printf("EED wxGUIEditorGraphicBBS::TryToOpenScript 3.1 packageName:%s boxType:%s \n",packageName.c_str(), boxType.c_str() ); + + if (descriptor==NULL) printf("EED wxGUIEditorGraphicBBS::TryToOpenScript 3.2\n AUUCHH "); + printf("EED wxGUIEditorGraphicBBS::TryToOpenScript 3.2\n "); + + bool result=false; +descriptor->IsTypeOfScript_Application(); + if (descriptor!=NULL) + { + if ( + ((descriptor->IsTypeOfScript_Application()==true) && (scriptApplication==true)) + || + ((descriptor->IsTypeOfScript_ComplexBox()==true) && (scriptComplexBox==true)) + ) + { + result=true; + printf("EED wxGUIEditorGraphicBBS::TryToOpenScript 4\n "); + OpenScript(descriptor->GetScriptFileName(),boxType); + printf("EED wxGUIEditorGraphicBBS::TryToOpenScript 5\n "); + } // if descriptor Type + } else { + printf("EED ERROR wxGUIEditorGraphicBBS::TryToOpenScript >> The descriptor of this box not exists (packageName:%s boxType:%s) this is not normal\n",packageName.c_str(), boxType.c_str() ); + } // if descriptor NULL + + printf("EED wxGUIEditorGraphicBBS::TryToOpenScript END\n "); + + return result; +} + } // EO namespace bbtk // EOF