]> Creatis software - bbtkGEditor.git/blobdiff - lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx
Bug #1689
[bbtkGEditor.git] / lib / EditorGraphicBBS / bbsWxGUIEditorGraphic / bbtkwxGUIEditorGraphicBBS.cxx
index 1699a9fa559793590a496b8e5ea5b344fd56e9bc..a26f9ddf12a32ba145b9b6f468d54cae00dd5c61 100644 (file)
 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() );
@@ -69,8 +69,8 @@ wxGUIEditorGraphicBBS::wxGUIEditorGraphicBBS(wxFrame *parent) :
 
        initMenu();
        initToolbar();
-       initTabPanelsManager();
        initPackageBrowser();
+       initTabPanelsManager();
         // JGGR & CM  initHelpHTMLBrowser();
         _helpHtmlBrowser = NULL;
        CreateStatusBar();
@@ -78,6 +78,11 @@ wxGUIEditorGraphicBBS::wxGUIEditorGraphicBBS(wxFrame *parent) :
        _actualPkgBrowserBoxName = "";
        _actualPkgBrowserPkgName = "";
        refreshGUIControls();
+
+       /////////////////////////////////
+       /// IMPORTANT!! FOR SAVE&LOAD PROCESSES THE VERSION IS VERY IMPORTANT.
+       /// RaC 2012 2nd Hackfest
+       _currentBBGversion="1.4";
 }
 
 //=========================================================================
@@ -110,6 +115,7 @@ void wxGUIEditorGraphicBBS::initToolbar() {
        wxBitmap bmp_complexoutputport(complexoutputport_xpm);
        wxBitmap bmp_undo(undo_xpm);
        wxBitmap bmp_redo(redo_xpm);
+       wxBitmap bmp_editProperties(editProperties_xpm);
        wxToolBar *toolbar = new wxToolBar(this, wxID_ANY);
 
        //Adds a tool btn to the toolbar
@@ -138,17 +144,29 @@ void wxGUIEditorGraphicBBS::initToolbar() {
        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"),
+
+       // 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->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->EnableTool(ID_UNDO, false);
        toolbar->EnableTool(ID_REDO, false);
@@ -194,6 +212,8 @@ void wxGUIEditorGraphicBBS::initToolbar() {
        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));
+
 }
 //=========================================================================
 void wxGUIEditorGraphicBBS::initHelpHTMLBrowser() {
@@ -218,6 +238,8 @@ void wxGUIEditorGraphicBBS::initMenu() {
         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,
@@ -234,6 +256,10 @@ void wxGUIEditorGraphicBBS::initMenu() {
                        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));
 
@@ -404,16 +430,22 @@ 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;
+               BlackBoxDescriptor::Pointer descriptor;
+               std::map< std::string, BlackBoxDescriptor::Pointer> mapDesc;
+               k                       = _pkgBrowser->GetFactory()->GetPackage(packageName);
+               mapDesc         = k->GetDescriptorMap();                
+               descriptor      = mapDesc[boxName];
+               
                _pkgBrowser->WxGUIBlackBoxListUserOnSelected(descriptor.get());
        }
 }
@@ -518,6 +550,8 @@ void wxGUIEditorGraphicBBS::OnUndo(wxCommandEvent& event) {
        refreshGUIControls();
 }
 
+//=========================================================================
+
 void wxGUIEditorGraphicBBS::OnRedo(wxCommandEvent& event) {
        unsigned short disable;
        std::string stundo;
@@ -537,6 +571,16 @@ void wxGUIEditorGraphicBBS::OnRedo(wxCommandEvent& event) {
 
 void wxGUIEditorGraphicBBS::OnChangeName(wxCommandEvent& event){
 }
+
+//=========================================================================
+
+void wxGUIEditorGraphicBBS::OnEditDiagramProperties(wxCommandEvent& event)
+{
+       wxDiagramPropertiesEditionDialog* dialog =
+                               new wxDiagramPropertiesEditionDialog(this);
+       dialog->Show();
+}
+
 //=========================================================================
 
 void wxGUIEditorGraphicBBS::OnExecuteActualDiagram(wxCommandEvent& event) {
@@ -580,7 +624,9 @@ void wxGUIEditorGraphicBBS::SaveActualBBS(std::string filename) {
        std::string content = "";
        // writing file header
        content += "# ----------------------------------\n";
-       content += "# - BBTKGEditor v 1.3 BBS BlackBox Script\n";
+       content += "# - BBTKGEditor v ";
+       content += _currentBBGversion; //VERSION
+       content += " BBS BlackBox Script\n";
        content += "# - ";
        content += filename;
        content += "\n";
@@ -640,7 +686,9 @@ void wxGUIEditorGraphicBBS::SaveActualComplexBox(std::string filename) {
 
        // writing file header
        content += "# ----------------------------------\n";
-       content += "# - BBTKGEditor v 1.3 BBS BlackBox Script (Complex Box)\n";
+       content += "# - BBTKGEditor v ";
+       content += _currentBBGversion;//VERSION
+       content += " BBS BlackBox Script (Complex Box)\n";
        content += "# - ";
        content += filename;
        content += "\n";
@@ -675,7 +723,9 @@ void wxGUIEditorGraphicBBS::SaveActualDiagram(std::string filename) {
 
        // writing file header
        content += "# ----------------------------------\n";
-       content += "# - BBTKGEditor v 1.3 BBG BlackBox Diagram file\n";
+       content += "# - BBTKGEditor v ";
+       content += _currentBBGversion; //VERSION
+       content += " BBG BlackBox Diagram file\n";
        content += "# - ";
 
        content += filename;
@@ -769,28 +819,128 @@ void wxGUIEditorGraphicBBS::OnSaveActualDiagram(wxCommandEvent& event) {
 void wxGUIEditorGraphicBBS::OnSaveAsActualDiagram(wxCommandEvent& event) {
        SaveCurrentDiagramAs();
 }
+
+//=========================================================================
+void wxGUIEditorGraphicBBS::OnExportConsoleExecCommand(wxCommandEvent& event)
+{
+       wxFileDialog * saveFileDialog = new wxFileDialog(this,
+                       wxT("Export console command"), wxEmptyString, wxT("ConsoleApp.txt"),
+                       wxT("*.txt;*.bbs;*.bbg;*.sh;*.bat"), wxSAVE | wxOVERWRITE_PROMPT);
+
+       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<std::string> 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+="=\"<value>\" ";
+
+               }
+
+
+               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 <bbs_path> ";
+               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()) {
                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));
@@ -860,7 +1010,9 @@ void wxGUIEditorGraphicBBS::OnClickBtnBox(wxCommandEvent& event) {
 
                if (pnl != NULL) {
                        wxVtkSceneManager *scn = pnl->getSceneManager();
+printf("EED wxGUIEditorGraphicBBS::OnClickBtnBox 1.\n");                       
                        scn->createGBlackBox(50, 50, packageName, typeName);
+printf("EED wxGUIEditorGraphicBBS::OnClickBtnBox 2.\n");                       
                        scn->refresh();
                }
 
@@ -892,11 +1044,10 @@ void wxGUIEditorGraphicBBS::OnClickBtnComplexBox(wxCommandEvent& event) {
        wxToolBar* toolbar = GetToolBar();
        bool temp = toolbar->GetToolState(ID_BTNCOMPLEXBOX);
        if (temp) {
-               _tabsMgr->setActualDiagramComplexBox(true);
+               enableComplexBox();
        } else {
-               _tabsMgr->setActualDiagramComplexBox(false);
+               disableComplexBox();
        }
-       refreshGUIControls();
 }
 
 //=========================================================================
@@ -950,8 +1101,7 @@ void wxGUIEditorGraphicBBS::OnCreateBlackBox(wxCommandEvent& event) {
 }
 //=========================================================================
 void wxGUIEditorGraphicBBS::OnPlugPackage(wxCommandEvent& event) {
-       //printf("EED wxGUIEditorGraphicBBS::OnPlugPackage ... not implemented ..\n");
-       //this is the right code but it's left to include the corresponding commented libraries
+       //DFGO2012 Plug Package functionnalities
        long style = wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST;
        wxDirDialog* FD =
          new wxDirDialog( 0,
@@ -994,8 +1144,9 @@ void wxGUIEditorGraphicBBS::OnPlugPackage(wxCommandEvent& event) {
                                        #endif
                                #endif
 
-
-                               wxMessageBox(_T(err),_T("Plug package"),wxOK | wxICON_ERROR);
+                               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);
@@ -1003,7 +1154,16 @@ void wxGUIEditorGraphicBBS::OnPlugPackage(wxCommandEvent& event) {
 }
 //=========================================================================
 void wxGUIEditorGraphicBBS::OnEditConfig(wxCommandEvent& event) {
-       printf("EED wxGUIEditorGraphicBBS::OnEditConfig ... not implemented ..\n");
+       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() );
     }
     //=========================================================================
 
@@ -1031,10 +1191,81 @@ 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);
+}
+
+//=========================================================================
+
+std::string wxGUIEditorGraphicBBS::getCurrentDiagramDescription()
+{
+       return _tabsMgr->GetDescription();
+}
+
+//=========================================================================
+
+std::string wxGUIEditorGraphicBBS::getCurrentDiagramAuthor()
+{
+       return _tabsMgr->GetAuthor();
+}
+
+//=========================================================================
+
 
+std::string wxGUIEditorGraphicBBS::getCurrentDiagramCategory()
+{
+       return _tabsMgr->GetCategory();
+}
 
+       
 //=========================================================================
 
+bool wxGUIEditorGraphicBBS::isCurrentDiagramComplexBox()
+{
+       return _tabsMgr->isActualDiagramComplexBox();
+}
+
+
 } // EO namespace bbtk
 
 // EOF