X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FEditorGraphicBBS%2FbbsWxGUIEditorGraphic%2FbbtkwxGUIEditorGraphicBBS.cxx;h=0ba3bbbf1c5d410109d359d5d770cf8ebc96fe7d;hb=8fc50de315bff81bdbcc672c38e56926a9e1bd5c;hp=376db524ed548aef9142b2164c4d26e68206d7b3;hpb=03c876d54db1d0e92c9ffeec760ff716b77c58e1;p=bbtkGEditor.git diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx index 376db52..0ba3bbb 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx @@ -1,622 +1,1590 @@ -/*========================================================================= -Program: bbtk -Module: $RCSfile$ -Language: C++ -Date: $Date$ -Version: $Revision$ -=========================================================================*/ +/* +# --------------------------------------------------------------------- +# +# 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$ + Language: C++ + Date: $Date$ + Version: $Revision$ + =========================================================================*/ /* --------------------------------------------------------------------- -* Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale) -* Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux -* -* 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. -* ------------------------------------------------------------------------ */ + * Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale) + * Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux + * + * 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. + * ------------------------------------------------------------------------ */ /** -* \file -* \brief Class bbtk::WxInterfaceEditorGraphicBBS . -*/ + * \file + * \brief Class bbtk::WxInterfaceEditorGraphicBBS . + */ #include "bbtkwxGUIEditorGraphicBBS.h" #include "creaWx.h" +#include "creaSystem.h" +//must go #include "bbtkUtilities.h" +//must go #include "bbtkConfigurationFile.h" +#include -namespace bbtk -{ +#include +namespace bbtk { - //========================================================================= - wxGUIEditorGraphicBBS::wxGUIEditorGraphicBBS(wxFrame *parent) - : wxFrame(parent, -1, _T("bbtkGEditor"),wxDefaultPosition, wxSize(1200,800)) - { - _frameAUIMgr = new wxAuiManager(this); - +//========================================================================= +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() ); + std::string datadir ("."); + cout<<"RaC //------------------"<Update(); + _actualPkgBrowserBoxName = ""; + _actualPkgBrowserPkgName = ""; + refreshGUIControls(); + + ///////////////////////////////// + /// IMPORTANT!! FOR SAVE&LOAD PROCESSES THE VERSION IS VERY IMPORTANT. + /// RaC 2012 2nd Hackfest + _currentBBGversion="1.4"; +} + +//========================================================================= +wxGUIEditorGraphicBBS::~wxGUIEditorGraphicBBS() +{ + //EED02JUIN2010 delete _tabsMgr; + _frameAUIMgr->UnInit(); + // FCY memory leaks + delete _frameAUIMgr; + delete _notebook; + delete _tabsMgr; +} + +//========================================================================= +void wxGUIEditorGraphicBBS::initToolbar() +{ + wxBitmap bmp_new(new_xpm); + wxBitmap bmp_open(open_xpm); + wxBitmap bmp_save(save_xpm); + wxBitmap bmp_run(run_xpm); + wxBitmap bmp_delete(delete_xpm); + wxBitmap bmp_centerview(centerview_xpm); + wxBitmap bmp_box(box_xpm); + wxBitmap bmp_executablebox(executablebox_xpm); + wxBitmap bmp_complexbox(complexbox_xpm); + wxBitmap bmp_complexinputport(complexinputport_xpm); + wxBitmap bmp_complexoutputport(complexoutputport_xpm); + wxBitmap bmp_undo(undo_xpm); + wxBitmap bmp_redo(redo_xpm); + 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 + //toolbar->AddTool(ID_SAVE_AS_DIAGRAM,_T("Save Diagram As"),bmp_save, wxNullBitmap, wxITEM_NORMAL,_T("Saves the current diagram"), _T("Saves the current diagram")); //DFCH + 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")); + toolbar->AddSeparator(); + toolbar->AddTool(ID_BTNBOX, _T("New Box"), bmp_box, wxNullBitmap, + wxITEM_NORMAL, _T("New Box"), _T("Nex Box")); + toolbar->AddSeparator(); + toolbar->AddTool(ID_BTEXECUTABLEBOX, _T("Select as executable Box"), + bmp_executablebox, wxNullBitmap, wxITEM_NORMAL, + _T("Select as executable Box"), _T("Select as executable Box")); + 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); +#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 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); 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->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); - /*std::string datadir( crea::System::GetExecutablePath() ); - std::string datadir ("."); - cout<<"RaC //------------------"<Update(); - _actualPkgBrowserBoxName=""; - _actualPkgBrowserPkgName=""; - refreshGUIControls(); - } + // 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_DIAGRAM, wxEVT_COMMAND_TOOL_CLICKED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnSaveActualDiagram)); //DFCH + Connect(ID_SAVE_AS_DIAGRAM, wxEVT_COMMAND_TOOL_CLICKED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnSaveAsActualDiagram)); //DFCH + 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)); + Connect(ID_BTNBOX, wxEVT_COMMAND_TOOL_CLICKED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnClickBtnBox)); + Connect( + ID_BTEXECUTABLEBOX, + wxEVT_COMMAND_TOOL_CLICKED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnClickBtnExecutableBox)); + Connect(ID_BTNCOMPLEXBOX, wxEVT_COMMAND_TOOL_CLICKED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnClickBtnComplexBox)); + Connect(ID_ADDCOMPLEXBOXINPUT, wxEVT_COMMAND_TOOL_CLICKED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnAddComplexBoxInput)); + Connect(ID_ADDCOMPLEXBOXOUTPUT, wxEVT_COMMAND_TOOL_CLICKED, + 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() { + // JGRR & CM + _helpHtmlBrowser = new WxGUIHtmlBrowser(this, wxSize(200, 0)); + + // EO JGRR & CM + +} + +//========================================================================= +void wxGUIEditorGraphicBBS::initMenu() { + // Create File menu and its items + wxMenu *fileMenu = new wxMenu(); + fileMenu->Append(ID_NEW, _T("New diagram"), _T("New")); + fileMenu->Append(ID_SAVE_DIAGRAM, _T("Save Diagram"), _T("Save Diagram")); //DFCH + 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")); + // 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, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnCreateNewTab)); + Connect(ID_SAVE_DIAGRAM, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnSaveActualDiagram)); //DFCH + Connect(ID_SAVE_AS_DIAGRAM, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnSaveAsActualDiagram)); + Connect(ID_OPEN_BBS, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnOpenBBS)); + 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( ID_EXPORT_CONSOLEAPP, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnExportConsoleExecCommand)); + Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnExit)); + + // 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")); + 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; + helpMenu->Append(wxID_ABOUT, _T("&About..."), _T("About")); + helpMenu->Append(ID_HELP_BBEDITOR, _T("&Help..."), _T("Help")); + Connect(ID_HELP_BBEDITOR, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnHelpBBeditor)); + + // Create Tool menu + wxMenu *menuTools = new wxMenu; + menuTools->Append(ID_bbEditor_Tool_Menu_CreatePackage, + _T("Create &package") ); + menuTools->Append(ID_bbEditor_Tool_Menu_CreateBlackBox, + _T("Create &blackbox") ); + menuTools->Append(ID_bbEditor_Tool_Menu_PlugPackage, _T("Plug package") ); + menuTools->Append(ID_bbEditor_Tool_Menu_EditConfig, _T("&Edit bbtk config") ); + menuTools->Append(ID_bbEditor_Tool_Menu_ShowHTMLDoc, + _T("Show &HTML documentation") ); + menuTools->Append(ID_bbEditor_Tool_Menu_CreateIndex, _T("&Generate index") ); + + Connect(ID_bbEditor_Tool_Menu_CreatePackage, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnCreatePackage)); + Connect(ID_bbEditor_Tool_Menu_CreateBlackBox, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnCreateBlackBox)); + Connect(ID_bbEditor_Tool_Menu_PlugPackage, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnPlugPackage)); + Connect(ID_bbEditor_Tool_Menu_EditConfig, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnEditConfig)); + Connect(ID_bbEditor_Tool_Menu_ShowHTMLDoc, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnShowHTMLDoc)); + Connect(ID_bbEditor_Tool_Menu_CreateIndex, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnCreateIndex)); + + // Append the created menu to the menu bar + wxMenuBar *menuBar = new wxMenuBar(); + menuBar->Append(fileMenu, _T("&File") ); + menuBar->Append(editMenu, _T("&Edit") ); + menuBar->Append(menuTools, _T("&Tool") ); + menuBar->Append(helpMenu, _T("&Help") ); + + // Attach this menu bar to the frame + SetMenuBar(menuBar); +} + +//========================================================================= +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() +{ + _pkgBrowser = new WxGUIPackageBrowser2(this); + _pkgBrowser->IncludeAll(); + _frameAUIMgr->AddPane(_pkgBrowser, wxAuiPaneInfo().Left().MinSize(30, 500).BestSize(750,500).CloseButton(false)); +} +//================================================================ - //========================================================================= - wxGUIEditorGraphicBBS::~wxGUIEditorGraphicBBS() - { - _frameAUIMgr->UnInit(); +void wxGUIEditorGraphicBBS::DoRegeneratePackageDoc(const std::string& pack) +{ + std::string mess("Regenerating doc for package '"); + if (pack != "-a") { + mess += pack + "'"; + } else { + mess = "Regenerating doc for all packages"; } - //========================================================================= - void wxGUIEditorGraphicBBS::initToolbar() - { - wxBitmap bmp_new(new_xpm); - wxBitmap bmp_open(open_xpm); - wxBitmap bmp_save(save_xpm); - wxBitmap bmp_run(run_xpm); - wxBitmap bmp_delete(delete_xpm); - wxBitmap bmp_centerview(centerview_xpm); - wxBitmap bmp_complexbox(complexbox_xpm); - wxBitmap bmp_complexinputport(complexinputport_xpm); - wxBitmap bmp_complexoutputport(complexoutputport_xpm); - - wxToolBar *toolbar = new wxToolBar(this, wxID_ANY); - - //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_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")); - toolbar->AddSeparator(); - toolbar->AddTool(ID_BTNCOMPLEXBOX,_T("Complex box"),complexbox_xpm, wxNullBitmap, wxITEM_NORMAL,_T("Complex box"), _T("Complex box")); - toolbar->SetToggle(ID_BTNCOMPLEXBOX,true); - 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_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_ADDCOMPLEXBOXOUTPUT,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,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnOpenDiagram)); - 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)); - Connect(ID_BTNCOMPLEXBOX,wxEVT_COMMAND_TOOL_CLICKED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnClickBtnComplexBox)); - Connect(ID_ADDCOMPLEXBOXINPUT,wxEVT_COMMAND_TOOL_CLICKED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnAddComplexBoxInput)); - Connect(ID_ADDCOMPLEXBOXOUTPUT,wxEVT_COMMAND_TOOL_CLICKED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnAddComplexBoxOutput)); - + mess += " ... please wait"; + + SetStatusText(std2wx(mess)); + + //BBTK_BUSY_CURSOR; + + std::string command; +#if defined(WIN32) + command = "\""; +#endif + command += ConfigurationFile::GetInstance().Get_bin_path(); + command += ConfigurationFile::GetInstance().Get_file_separator(); + command += "bbRegeneratePackageDoc"; +#if defined(WIN32) + command += "\""; +#endif + + command += " " + pack + " -q"; + bbtkMessage("debug",1,"Executing system command '"<AddPane(_helpHtmlBrowser,wxAuiPaneInfo().Right().MinSize(200,200)); +} + +//================================================================ +void wxGUIEditorGraphicBBS::DoRegenerateBoxesLists() { + SetStatusText(_T("Regenerating boxes lists ... please wait")); + //BBTK_BUSY_CURSOR ; + + std::string command; +#if defined(WIN32) + command = "\""; +#endif + command += ConfigurationFile::GetInstance().Get_bin_path(); + command += ConfigurationFile::GetInstance().Get_file_separator(); + command += "bbRegenerateBoxesLists"; + +#if defined(WIN32) + command += "\""; +#endif + command += " -q"; + + bbtkMessage("debug",1,"Executing system command '"<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); - } +//================================================================ +void wxGUIEditorGraphicBBS::RegenerateAll() { + DoRegeneratePackageDoc("-a"); + DoRegenerateBoxesLists(); +} - //========================================================================= - 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() - { - _pkgBrowser = new WxGUIPackageBrowser2(this); - _pkgBrowser->IncludeAll(); - _frameAUIMgr->AddPane(_pkgBrowser,wxAuiPaneInfo().Left().MinSize(200,200).CloseButton(false)); - } +wxAuiNotebook* wxGUIEditorGraphicBBS::getAuiNotebook() { + return _notebook; +} - //================================================================ +//================================================================ - void wxGUIEditorGraphicBBS::DoRegeneratePackageDoc( const std::string& pack ) +void wxGUIEditorGraphicBBS::displayBlackBoxInfo(std::string packageName, std::string boxName) +{ + if (_actualPkgBrowserPkgName != packageName || _actualPkgBrowserBoxName != boxName) { - std::string mess("Regenerating doc for package '"); - if (pack!="-a"){ - mess += pack + "'"; + + _actualPkgBrowserPkgName = packageName; + _actualPkgBrowserBoxName = 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; } - else + mapDesc = k->GetDescriptorMap(); + descriptor = mapDesc[boxName]; + */ + _pkgBrowser->WxGUIBlackBoxListUserOnSelected(descriptor.get()); + } +} + +//========================================================================= + +void wxGUIEditorGraphicBBS::editBlackBox(GBlackBoxModel *bbmodel) { + wxBlackBoxEditionDialog* dialog = + new wxBlackBoxEditionDialog(this, bbmodel); + dialog->Show(); +} + +//========================================================================= + +bool wxGUIEditorGraphicBBS::boxNameExists(std::string boxname) { + + return this->_tabsMgr->getActualTabPanel()->getSceneManager()->boxExist(boxname); +} + +//========================================================================= + +void wxGUIEditorGraphicBBS::updateStatusBar(std::string textStatus) { + SetStatusText(crea::std2wx(textStatus)); +} + +//========================================================================= + +void wxGUIEditorGraphicBBS::executeScript(std::string script) { + std::string separator = + ConfigurationFile::GetInstance().Get_file_separator(); + std::string dir = ConfigurationFile::GetInstance().Get_default_temp_dir(); + std::string filename = dir + separator + "tmp_bbtk.bbs"; + + ofstream tempFile; + tempFile.open(filename.c_str()); + tempFile << script; + tempFile.close(); + + std::string command = ""; + +#ifdef WIN32 + command += "start /b "; +#endif + + // command += "\""+ crea::System::GetExecutablePath(); + //#ifdef MACOSX + // command += separator + "../../../bbi.app/Contents/MacOS"; + //#endif + + command += "bbi "; + command += "\"" + filename + "\""; + +#ifndef WIN32 + command += " & "; +#endif + +#ifdef __APPLE__ + command = "source ~/.bbtk/profile_creatools; "+command; +#endif + + + printf("RaC wxGUIEditorGraphicBBS::executeScript %s \n", command.c_str()); + system(command.c_str()); +} + +//========================================================================= +std::string wxGUIEditorGraphicBBS::CheckExtension(std::string filename, std::string extension) { + if(filename.size() > extension.size() ){ + if( (filename.compare(filename.size()-extension.size(), extension.size(),extension)) !=0 ){ + filename.append(extension); + } + }else{ + filename.append(extension); + } + return filename; +} +//========================================================================= +// EVENT HANDLERS +//========================================================================= + +void wxGUIEditorGraphicBBS::OnCreateNewTab(wxCommandEvent& event) { + _tabsMgr->addNewTab(); + refreshGUIControls(); +} + +void wxGUIEditorGraphicBBS::OnUndo(wxCommandEvent& event) { + unsigned short disable; + 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] == '*') { - mess = "Regenerating doc for all packages"; + name =name.substr(0,name.length()-1); } - - mess += " ... please wait"; + _tabsMgr->SetNameTabPanel(wxString (name.c_str(), wxConvUTF8)); + } - SetStatusText( std2wx(mess) ); + 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; + 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]; - std::string command; - #if defined(WIN32) - command = "\""; - #endif - command += ConfigurationFile::GetInstance().Get_bin_path(); - command += ConfigurationFile::GetInstance().Get_file_separator(); - command += "bbRegeneratePackageDoc"; - #if defined(WIN32) - command += "\""; - #endif + tree.treeTour(0); - command += " " + pack + " -q"; - bbtkMessage("debug",1,"Executing system command '"<GetBoxesInside(tree, 0); + + _actualPkgBrowserPkgName = ""; + _actualPkgBrowserBoxName = ""; } - - //================================================================ - void wxGUIEditorGraphicBBS::DoRegenerateBoxesLists() +else { - SetStatusText( _T("Regenerating boxes lists ... please wait") ); - //BBTK_BUSY_CURSOR ; + std::cout<<"Select a Box"<Show(); +} - bbtkMessage("debug",1,"Executing system command '"<getActualDiagramBBS(true); + cout << endl << "RaC wxGUIEditorGraphicBBS::executeActualDiagram SCRIPT" + << endl << endl; + cout << script1 << endl; + + std::string script2 = _tabsMgr->getActualDiagramBBS(false); + 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) +{ +//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()) ); } - //================================================================ - void wxGUIEditorGraphicBBS::RegenerateAll() +/*EED Borrame + if (openFileDialog->ShowModal() == wxID_OK) { - DoRegeneratePackageDoc("-a"); - DoRegenerateBoxesLists(); + wxString fileName = openFileDialog->GetPath(); + _tabsMgr->addNewTab(openFileDialog->GetFilename()); + 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; + + //EED file.open(fileName.c_str()); + file.open(filename.c_str()); + std::string content = ""; + // writing file header + content += "# ----------------------------------\n"; + content += "# - BBTKGEditor v "; + content += _currentBBGversion; //VERSION + content += " BBS BlackBox Script\n"; + content += "# - "; + content += filename; + content += "\n"; + content += "# ----------------------------------\n"; + content += "\n"; + content += _tabsMgr->getActualDiagramBBS(); + file << content; + file.close(); +} + +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()); + filename=CheckExtension (filename, ".bbs"); + SaveActualBBS(filename); } - //================================================================ +} - wxAuiNotebook* wxGUIEditorGraphicBBS::getAuiNotebook() - { - return _notebook; +void wxGUIEditorGraphicBBS::AskComplexBoxConfiguration() { + std::string cbName = _tabsMgr->GetCbName(); + std::string paName = _tabsMgr->GetCbPackageName(); + + wxTextEntryDialog *cbNameDialog = new wxTextEntryDialog(this, + wxT("Complex Box name")); + wxTextEntryDialog *paNameDialog = new wxTextEntryDialog(this, + wxT("Package name")); + + cbNameDialog->SetValue(wxString(cbName.c_str(), wxConvUTF8)); + paNameDialog->SetValue(wxString(paName.c_str(), wxConvUTF8)); + + if (cbNameDialog->ShowModal() == wxID_OK) { + wxString complexboxname = cbNameDialog->GetValue(); + cbName = (const char*) (complexboxname.mb_str()); + } + + if (paNameDialog->ShowModal() == wxID_OK) { + wxString packagename = paNameDialog->GetValue(); + paName = (const char*) (packagename.mb_str()); } - //================================================================ + _tabsMgr->SetCbName(cbName); + _tabsMgr->SetCbPackageName(paName); +} + +//========================================================================= + +void wxGUIEditorGraphicBBS::SaveActualComplexBox(std::string filename) { + ofstream file; + file.open(filename.c_str()); + + std::string content = ""; + + // writing file header + content += "# ----------------------------------\n"; + content += "# - BBTKGEditor v "; + content += _currentBBGversion;//VERSION + content += " BBS BlackBox Script (Complex Box)\n"; + content += "# - "; + content += filename; + content += "\n"; + content += "# ----------------------------------\n"; + content += "\n"; + content += _tabsMgr->getActualComplexBoxBBS(); + file << content; + file.close(); +} + +//========================================================================= + +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()); + filename=CheckExtension (filename, ".bbs"); + SaveActualComplexBox(filename); + } +} + +//========================================================================= +void wxGUIEditorGraphicBBS::SaveActualDiagram(std::string filename) { + ofstream file; + file.open(filename.c_str()); + + std::string content = ""; + + // writing file header + content += "# ----------------------------------\n"; + content += "# - BBTKGEditor v "; + content += _currentBBGversion; //VERSION + content += " BBG BlackBox Diagram file\n"; + content += "# - "; + + content += filename; + + content += "\n"; + content += "# ----------------------------------\n"; + content += "\n"; + content += "APP_START\n"; + _tabsMgr->saveActualDiagram(content, filename); //DFCH + content += "APP_END\n"; + file << content; + file.close(); +} + +//========================================================================= +void wxGUIEditorGraphicBBS::SaveTempActualDiagram(const std::string &action) +{ + 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::displayBlackBoxInfo(std::string packageName, std::string boxName) +//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(); + std::string pathfilename = (const char*) (pathfileName.mb_str()); + pathfilename=CheckExtension (pathfilename, ".bbg"); + + //modify the tab name accordingly + wxString fileName = saveFileDialog->GetFilename(); + std::string filename = (const char*) (fileName.mb_str()); + filename=CheckExtension (filename, ".bbg"); + _tabsMgr->SetNameTabPanel( wxString (filename.c_str(), wxConvUTF8) ); + + std::string pathfilenamebbs = pathfilename; + pathfilenamebbs[pathfilenamebbs.length() - 1] = 's'; + if (_tabsMgr->isActualDiagramComplexBox() == false) { + SaveActualDiagram(pathfilename); + SaveActualBBS(pathfilenamebbs); + } else { + AskComplexBoxConfiguration(); + SaveActualDiagram(pathfilename); + SaveActualComplexBox(pathfilenamebbs); + } //if isActualDiagramComplexBox + } // if saveFileDialog +} +//========================================================================= +//DFCH +void wxGUIEditorGraphicBBS::OnSaveActualDiagram(wxCommandEvent& event) { + std::string pathfilename = _tabsMgr->GetCurrentTabPanelPath(); + if (pathfilename.empty()) { + SaveCurrentDiagramAs(); + } 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 { + AskComplexBoxConfiguration(); + SaveActualDiagram(pathfilename); + SaveActualComplexBox(pathfilenamebbs); + } //if isActualDiagramComplexBox + } +} +//========================================================================= +//DFCH +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 + + + if (saveFileDialog->ShowModal() == wxID_OK) { - if(_actualPkgBrowserPkgName != packageName || _actualPkgBrowserBoxName != boxName ) + 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) { - _actualPkgBrowserPkgName = packageName; - _actualPkgBrowserBoxName = boxName; + /* 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+="=\"\" "; - BlackBoxDescriptor::Pointer descriptor = GObjectsMVCFactory::getInstance()->getBlackBoxDescriptor(packageName, boxName); - _pkgBrowser->WxGUIBlackBoxListUserOnSelected(descriptor.get()); } - } - //========================================================================= - void wxGUIEditorGraphicBBS::editBlackBox(GBlackBoxModel *bbmodel) - { - wxBlackBoxEditionDialog* dialog = new wxBlackBoxEditionDialog(this,bbmodel); - dialog->Show(); + 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::editDiagramParameters(wxVtkSceneManager* scene) - { - wxBlackBoxEditionDialog* dialog = new wxBlackBoxEditionDialog(this,scene); - dialog->Show(); - } +} - //========================================================================= +//========================================================================= - void wxGUIEditorGraphicBBS::updateStatusBar(std::string textStatus) +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()) { - SetStatusText(crea::std2wx(textStatus)); + toolbar->ToggleTool(ID_BTNCOMPLEXBOX, 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); 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); - void wxGUIEditorGraphicBBS::executeScript(std::string script) - { - std::string separator = ConfigurationFile::GetInstance().Get_file_separator (); - std::string dir = ConfigurationFile::GetInstance().Get_default_temp_dir(); - std::string filename = dir + separator + "tmp_bbtk.bbs"; - - ofstream tempFile; - tempFile.open(filename.c_str()); - tempFile << script; - tempFile.close(); - - std::string command = "\""; - - #ifdef WIN32 - command += "\""; - #endif - - //command += ConfigurationFile::GetInstance().Get_bin_path(); - command +="C:/temp/bbtkBIN/RelWithDebInfo//"; - - #ifdef MACOSX - command += separator + "bbi.app/Contents/MacOS/bbi\" "; - #else - command += separator + "bbi\" "; - #endif - command += "\""+filename + "\""; - - #ifdef WIN32 - command += "\""; - #endif - - command += " & "; - - printf ("RaC wxGUIEditorGraphicBBS::executeScript %s \n" , command.c_str() ); - system( command.c_str() ); + 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 { + ///TODO Fix the possibility to say from the SceneManager to the GUI to refresh the options + GetMenuBar()->GetMenu(1)->Enable(ID_COPY_TO_COMPLEXDIAGRAM, true); } - //========================================================================= - // EVENT HANDLERS - //========================================================================= +} + +//========================================================================= - void wxGUIEditorGraphicBBS::OnCreateNewTab(wxCommandEvent& event) +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->addNewTab(); - refreshGUIControls(); + _tabsMgr->deleteAllBoxesActualDiagram(); } +} - //========================================================================= +//========================================================================= - void wxGUIEditorGraphicBBS::OnExecuteActualDiagram(wxCommandEvent& event) - { - std::string script = _tabsMgr->getActualDiagramBBS(); - cout<<"RaC wxGUIEditorGraphicBBS::executeActualDiagram SCRIPT"<centerViewActualDiagram(); +} - executeScript(script); +//========================================================================= +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(); +} + +//========================================================================= - //========================================================================= - // HANDLERS - //========================================================================= +void wxGUIEditorGraphicBBS::OnOpenDiagram(wxCommandEvent& event) +{ - void wxGUIEditorGraphicBBS::OnSaveActualBBS(wxCommandEvent& event) - { - wxFileDialog * saveFileDialog = new wxFileDialog(this,wxT("Save actual BBS"),wxEmptyString,wxT("NewBBS"),wxT("*.bbs"),wxSAVE|wxOVERWRITE_PROMPT); - if (saveFileDialog->ShowModal() == wxID_OK) - { - wxString fileName = saveFileDialog->GetPath(); - - ofstream file; +//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 -//EED file.open(fileName.c_str()); - file.open( (const char*) (fileName.mb_str()) ); + if (openFileDialog->ShowModal() == wxID_OK) + { + wxString filePath = openFileDialog->GetPath(); + wxString fileName = openFileDialog->GetFilename(); + OpenDiagram( crea::wx2std(filePath) , crea::wx2std(fileName) ); + } +} - 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::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(); + if (pnl != NULL) { + wxVtkSceneManager *scn = pnl->getSceneManager(); + scn->createGBlackBox(50, 50, packageName, typeName); + scn->refresh(); } + SaveTempActualDiagram("New Box"); + // if pnl + }// if bbDes +} + +//========================================================================= + +void wxGUIEditorGraphicBBS::OnClickBtnExecutableBox(wxCommandEvent& event) +{ + //DFCH + wxGEditorTabPanel *pnl = this->_tabsMgr->getActualTabPanel(); + if (pnl != NULL) { + wxVtkSceneManager *scn = pnl->getSceneManager(); + if( scn->MakeBoxExecutable() ) + std::cout<<"DFCH: wxGUIEditorGraphicBBS::OnClickBtnExecutableBox...successful"<ShowModal() == wxID_OK) - { - wxString fileName = nameDialog->GetValue(); -//EED cbName=fileName; - cbName=(const char*) (fileName.mb_str()); - } - - if(!cbName.empty()) - { - wxFileDialog * saveFileDialog = new wxFileDialog( this , _T("Save Complex Box BBS") ,_T(""), wxString( cbName.c_str(), wxConvUTF8),_T(""), wxSAVE | wxOVERWRITE_PROMPT); - if (saveFileDialog->ShowModal() == wxID_OK) +//========================================================================= +void wxGUIEditorGraphicBBS::OnClickBtnComplexBox(wxCommandEvent& event) +{ + std::cout<<"wxGUIEditorGraphicBBS::OnClickBtnComplexBox"<GetToolState(ID_BTNCOMPLEXBOX); + if (temp) { + enableComplexBox(); + } else { + disableComplexBox(); + } +} + +//========================================================================= +//EED01 +void wxGUIEditorGraphicBBS::OnAddComplexBoxInput(wxCommandEvent& event) +{ + wxTextEntryDialog *nameDialog = new wxTextEntryDialog(this, + wxT("Name of input port")); + if (nameDialog->ShowModal() == wxID_OK) + { + wxString fileName = nameDialog->GetValue(); + if (!fileName.IsEmpty()) + { + std::string portName = (const char*) (fileName.mb_str()); + if ( !boxNameExists(portName) ) { - wxString fileName = saveFileDialog->GetPath(); - - ofstream file; -//EED file.open(fileName.c_str()); - file.open( (const char*) (fileName.mb_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(); + _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) +{ + wxTextEntryDialog *nameDialog = new wxTextEntryDialog(this, + wxT("Name of output port")); + if (nameDialog->ShowModal() == wxID_OK) + { + wxString fileName = nameDialog->GetValue(); + 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(); + } - void wxGUIEditorGraphicBBS::OnSaveActualDiagram(wxCommandEvent& event) - { - wxFileDialog * saveFileDialog = new wxFileDialog(this,wxT("Save actual diagram"),wxEmptyString,wxT("NewDiagram"),wxT("*.bbd"),wxSAVE|wxOVERWRITE_PROMPT); - if (saveFileDialog->ShowModal() == wxID_OK) - { - wxString fileName = saveFileDialog->GetPath(); - - ofstream file; -//EED file.open(fileName.c_str()); - file.open( (const char*) (fileName.mb_str()) ); + } // if !filename + } // namaDialog +} - std::string content=""; - - // writing file header - content += "# ----------------------------------\n"; - content += "# - BBTKGEditor v 1.0 BBD BlackBox Diagram file\n"; - content += "# - "; - -//EED content += fileName; - content += (const char*) (fileName.mb_str()); - - content += "\n"; - content += "# ----------------------------------\n"; - content += "\n"; - content += "APP_START\n"; - _tabsMgr->saveActualDiagram(content); - content += "APP_END\n"; - file << content; - file.close(); - } +//========================================================================= +void wxGUIEditorGraphicBBS::OnCopySelectedToComplexDiagram( + wxCommandEvent& event) +{ + _tabsMgr->copySelectedBBoxesToComplexDiagram(); +} - } +//========================================================================= +void wxGUIEditorGraphicBBS::OnHelpBBeditor(wxCommandEvent& event) +{ + printf("wxGUIEditorGraphicBBS::OnHelpBBeditor ....not implemented..\n"); +} - //========================================================================= +//========================================================================= +void wxGUIEditorGraphicBBS::OnCreatePackage(wxCommandEvent& event) +{ + bbtkSystemTools::CreatePackage(); +} - void wxGUIEditorGraphicBBS::refreshGUIControls() +//========================================================================= +void wxGUIEditorGraphicBBS::OnCreateBlackBox(wxCommandEvent& event) +{ + bbtkSystemTools::CreateBlackBox(); +} + +//========================================================================= +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 { - wxToolBar* toolbar = GetToolBar(); - if(_tabsMgr->isActualDiagramComplexBox()) + userResponse = FD->ShowModal(); + if(userResponse==wxID_OK) { - toolbar->ToggleTool(ID_BTNCOMPLEXBOX,true); - toolbar->EnableTool(ID_ADDCOMPLEXBOXINPUT,true); - toolbar->EnableTool(ID_ADDCOMPLEXBOXOUTPUT,true); + std::string path = wx2std (FD->GetPath()) ; + #ifdef WIN32 + std::string fname = path + "\\bbtkPackage"; + #else + std::string fname = path + "/bbtkPackage"; + #endif - 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); + 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) +{ + 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) +{ + // 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) +{ + printf("EED wxGUIEditorGraphicBBS::OnCreateIndex ... not implemented ..\n"); +} - void wxGUIEditorGraphicBBS::OnDeleteAllBoxesActualDiagram(wxCommandEvent& event) + +//========================================================================= +void wxGUIEditorGraphicBBS::OnEditComplexBoxScript(wxCommandEvent& event) +{ + BlackBoxDescriptor *bbDes = _pkgBrowser->GetActualSelected(); + if (bbDes != NULL) { - 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) + std::string packageName = bbDes->GetPackage()->GetName(); + std::string typeName = bbDes->GetTypeName(); + if (!TryToOpenScriptComplexBox(packageName ,typeName)) { - _tabsMgr->deleteAllBoxesActualDiagram(); + wxMessageDialog windowMessage1(NULL,_T("This is not a ComplexBox script."), _T("Alert !"), wxOK); + windowMessage1.ShowModal(); } - } + }// if bbDes +} - //========================================================================= +//========================================================================= +void wxGUIEditorGraphicBBS::OnExit(wxCommandEvent& event) +{ + Close(true); +} - void wxGUIEditorGraphicBBS::OnCenterViewActualDiagram(wxCommandEvent& event) +Factory::Pointer wxGUIEditorGraphicBBS::GetBBTKFactory() +{ + if (_pkgBrowser==NULL) { - _tabsMgr->centerViewActualDiagram(); + printf ("EED ERROR! wxGUIEditorGraphicBBS::GetBBTKFactory _pkgBrowser = NULL\n"); } + return _pkgBrowser->GetFactory(); +} - //========================================================================= +//========================================================================= +void wxGUIEditorGraphicBBS::enableComplexBox() +{ + _tabsMgr->setActualDiagramComplexBox(true); + refreshGUIControls(); +} - - void wxGUIEditorGraphicBBS::OnOpenDiagram(wxCommandEvent& event) - { - wxFileDialog * openFileDialog = new wxFileDialog(this,wxT("Open diagram"),wxEmptyString,wxT(""),wxT("*.bbd"),wxOPEN|wxFILE_MUST_EXIST); - if (openFileDialog->ShowModal() == wxID_OK) - { - wxString fileName = openFileDialog->GetPath(); - - ifstream inputStream; +//========================================================================= -//EED inputStream.open(fileName.c_str()); - inputStream.open( (const char*) (fileName.mb_str()) ); +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); +} - _tabsMgr->addNewTab(); - _tabsMgr->loadDiagram(inputStream); - - inputStream.close(); - } - refreshGUIControls(); - } +//========================================================================= +void wxGUIEditorGraphicBBS::setCurrentDiagramCategory(std::string category) +{ + _tabsMgr->SetCategory(category); +} - //========================================================================= +//========================================================================= +void wxGUIEditorGraphicBBS::setCurrentDiagramMessageKind(std::string kind){ + _tabsMgr->SetMessageKind(kind); +} - void wxGUIEditorGraphicBBS::OnClickBtnComplexBox(wxCommandEvent& event) - { - wxToolBar* toolbar = GetToolBar(); - bool temp = toolbar->GetToolState(ID_BTNCOMPLEXBOX); - if(temp) - { - _tabsMgr->setActualDiagramComplexBox(true); - } - else - { - _tabsMgr->setActualDiagramComplexBox(false); - } - refreshGUIControls(); - } +//========================================================================= +void wxGUIEditorGraphicBBS::setCurrentDiagramMessageLevel(std::string level){ + _tabsMgr->SetMessageLevel(level); +} - //========================================================================= +//========================================================================= +std::string wxGUIEditorGraphicBBS::getCurrentDiagramDescription() +{ + return _tabsMgr->GetDescription(); +} - void wxGUIEditorGraphicBBS::OnAddComplexBoxInput(wxCommandEvent& event) - { - wxTextEntryDialog *nameDialog = new wxTextEntryDialog(this,wxT("Name of input port")); - if (nameDialog->ShowModal() == wxID_OK) - { - wxString fileName = nameDialog->GetValue(); - if(!fileName.IsEmpty()) - { - std::string portName=(const char*) (fileName.mb_str()); - _tabsMgr->addActualDiagramComplexInputPort(portName); - } - } - } +//========================================================================= +std::string wxGUIEditorGraphicBBS::getCurrentDiagramAuthor() +{ + return _tabsMgr->GetAuthor(); +} - //========================================================================= +//========================================================================= +std::string wxGUIEditorGraphicBBS::getCurrentDiagramCategory() +{ + return _tabsMgr->GetCategory(); +} - void wxGUIEditorGraphicBBS::OnAddComplexBoxOutput(wxCommandEvent& event) - { - wxTextEntryDialog *nameDialog = new wxTextEntryDialog(this,wxT("Name of output port")); - if (nameDialog->ShowModal() == wxID_OK) - { - wxString fileName = nameDialog->GetValue(); - if(!fileName.IsEmpty()) - { - std::string portName=(const char*) (fileName.mb_str()); - _tabsMgr->addActualDiagramComplexOutputPort(portName); - } - } - } +//========================================================================= +std::string wxGUIEditorGraphicBBS::getCurrentDiagramMessageKind(){ + return _tabsMgr->GetMessageKind(); +} - //========================================================================= +//========================================================================= +std::string wxGUIEditorGraphicBBS::getCurrentDiagramMessageLevel(){ + return _tabsMgr->GetMessageLevel(); +} - void wxGUIEditorGraphicBBS::OnExit(wxCommandEvent& event) - { - Close(true); - } +//========================================================================= +bool wxGUIEditorGraphicBBS::isCurrentDiagramComplexBox() +{ + return _tabsMgr->isActualDiagramComplexBox(); +} - //========================================================================= -} // EO namespace bbtk +//========================================================================= +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) +{ + Package::Pointer k; + std::map< std::string, BlackBoxDescriptor::Pointer> mapDesc; + BlackBoxDescriptor::Pointer descriptor; + k = GetBBTKFactory()->GetPackage(packageName); + mapDesc = k->GetDescriptorMap(); + descriptor = mapDesc[boxType]; + + bool result=false; + descriptor->IsTypeOfScript_Application(); + if (descriptor!=NULL) + { + if ( + ((descriptor->IsTypeOfScript_Application()==true) && (scriptApplication==true)) + || + ((descriptor->IsTypeOfScript_ComplexBox()==true) && (scriptComplexBox==true)) + ) + { + result=true; + OpenScript(descriptor->GetScriptFileName(),boxType); + } // 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 + + return result; +} + +} // EO namespace bbtk // EOF