]> Creatis software - bbtkGEditor.git/blobdiff - lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx
Feature #1758
[bbtkGEditor.git] / lib / EditorGraphicBBS / bbsWxGUIEditorGraphic / bbtkwxGUIEditorGraphicBBS.cxx
index e7a93620d5d2595955f55a1ad5f0c3eff37b481b..377f625fd6f7f914041541df17b8bc339830354d 100644 (file)
@@ -252,27 +252,21 @@ void wxGUIEditorGraphicBBS::initMenu() {
                        wxCommandEventHandler(wxGUIEditorGraphicBBS::OnOpenBBS));
        Connect(ID_SAVE_AS_BBS, wxEVT_COMMAND_MENU_SELECTED,
                        wxCommandEventHandler(wxGUIEditorGraphicBBS::OnSaveActualBBS));
-       Connect(
-                       ID_SAVE_AS_COMPLEXBOX,
-                       wxEVT_COMMAND_MENU_SELECTED,
+       Connect( ID_SAVE_AS_COMPLEXBOX, wxEVT_COMMAND_MENU_SELECTED,
                        wxCommandEventHandler(wxGUIEditorGraphicBBS::OnSaveActualComplexBox));
-       Connect(
-                       ID_EXPORT_CONSOLEAPP,
-                               wxEVT_COMMAND_MENU_SELECTED,
+       Connect( ID_EXPORT_CONSOLEAPP, wxEVT_COMMAND_MENU_SELECTED,
                                wxCommandEventHandler(wxGUIEditorGraphicBBS::OnExportConsoleExecCommand));
        Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED,
                        wxCommandEventHandler(wxGUIEditorGraphicBBS::OnExit));
 
-       // Create Help menu and its items
+       // Create Edit menu and its items
        wxMenu *editMenu = new wxMenu;
-       editMenu->Append(ID_COPY_TO_COMPLEXDIAGRAM,
-                       _T("Copy selected to complex box"),
-                       _T("Creates a new complex box diagram with selected boxes"));
-
-       Connect(
-                       ID_COPY_TO_COMPLEXDIAGRAM,
-                       wxEVT_COMMAND_MENU_SELECTED,
-                       wxCommandEventHandler(wxGUIEditorGraphicBBS::OnCopySelectedToComplexDiagram));
+       editMenu->Append(ID_COPY_TO_COMPLEXDIAGRAM, _T("Copy selected to complex box"), _T("Creates a new complex box diagram with selected boxes"));
+       editMenu->Append(ID_EDIT_COMPLEXBOX_SCRIPT, _T("Edit Complex Box"), _T("Edit Complex Box"));
+       Connect( ID_COPY_TO_COMPLEXDIAGRAM, wxEVT_COMMAND_MENU_SELECTED,
+                        wxCommandEventHandler(wxGUIEditorGraphicBBS::OnCopySelectedToComplexDiagram));
+       Connect( ID_EDIT_COMPLEXBOX_SCRIPT, wxEVT_COMMAND_MENU_SELECTED,
+                       wxCommandEventHandler(wxGUIEditorGraphicBBS::OnEditComplexBoxScript));
 
        // Create Help menu and its items
        wxMenu *helpMenu = new wxMenu;
@@ -593,29 +587,47 @@ void wxGUIEditorGraphicBBS::OnExecuteActualDiagram(wxCommandEvent& event) {
        executeScript(script2);
 }
 
+       
+//=========================================================================
+void wxGUIEditorGraphicBBS::OpenBBS(std::string filePathName, std::string fileName) 
+{
+       _tabsMgr->addNewTab( crea::std2wx(fileName) );
+       bbtk::InterpreterBBS::Pointer I = bbtk::InterpreterBBS::New( this->_tabsMgr->getActualTabPanel()->getSceneManager(), _pkgBrowser->GetFactory());
+       // We tell the interpreter to throw exceptions on error
+       I->SetThrow(true);
+       // Interpret the file supposed to define a box called 'Processing'
+       I->InterpretFile( filePathName );
+       refreshGUIControls();
+}
+       
 //=========================================================================
 // HANDLERS
 //=========================================================================
-void wxGUIEditorGraphicBBS::OnOpenBBS(wxCommandEvent& event) {
-       wxFileDialog * openFileDialog = new wxFileDialog(this, wxT("Open BBS"),
-                       wxEmptyString, wxT("NewBBS"), wxT("*.bbs"), wxOPEN);
-       if (openFileDialog->ShowModal() == wxID_OK) {
-               wxString fileName = openFileDialog->GetPath();
+void wxGUIEditorGraphicBBS::OnOpenBBS(wxCommandEvent& event) 
+{
+       wxFileDialog * openFileDialog = new wxFileDialog(this, wxT("Open BBS"), wxEmptyString, wxT("NewBBS"), wxT("*.bbs"), wxOPEN);
 
+       if (openFileDialog->ShowModal() == wxID_OK) 
+       {
+               OpenBBS( crea::wx2std(openFileDialog->GetPath()) , crea::wx2std(openFileDialog->GetFilename())  );
+       }
+       
+/*EED Borrame  
+       if (openFileDialog->ShowModal() == wxID_OK) 
+       {
+               wxString fileName = openFileDialog->GetPath();
                _tabsMgr->addNewTab(openFileDialog->GetFilename());
-
-               bbtk::InterpreterBBS::Pointer I = bbtk::InterpreterBBS::New(
-                               this->_tabsMgr->getActualTabPanel()->getSceneManager(),
-                               _pkgBrowser->GetFactory());
-
+               bbtk::InterpreterBBS::Pointer I = bbtk::InterpreterBBS::New( this->_tabsMgr->getActualTabPanel()->getSceneManager(), _pkgBrowser->GetFactory());
                // We tell the interpreter to throw exceptions on error
                I->SetThrow(true);
                // Interpret the file supposed to define a box called 'Processing'
                I->InterpretFile((const char*) (fileName.mb_str()));
        }
        refreshGUIControls();
+*/ 
 }
 
+//=========================================================================
 void wxGUIEditorGraphicBBS::SaveActualBBS(std::string filename) {
        ofstream file;
 
@@ -957,73 +969,70 @@ void wxGUIEditorGraphicBBS::refreshGUIControls() {
 
 //=========================================================================
 
-void wxGUIEditorGraphicBBS::OnDeleteAllBoxesActualDiagram(wxCommandEvent& event) {
-       wxMessageDialog *dial = new wxMessageDialog(NULL,
-                       wxT("Are you sure to delete all boxes of the diagram?"),
-                       wxT("Delete all boxes"), wxYES_NO | wxNO_DEFAULT
-                                       | wxICON_QUESTION);
-       if (dial->ShowModal() == wxID_YES) {
+void wxGUIEditorGraphicBBS::OnDeleteAllBoxesActualDiagram(wxCommandEvent& event) 
+{
+       wxMessageDialog *dial = new wxMessageDialog(NULL,wxT("Are you sure to delete all boxes of the diagram?"),wxT("Delete all boxes"), wxYES_NO | wxNO_DEFAULT| wxICON_QUESTION);
+       if (dial->ShowModal() == wxID_YES)
+       {
                _tabsMgr->deleteAllBoxesActualDiagram();
        }
 }
 
 //=========================================================================
 
-void wxGUIEditorGraphicBBS::OnCenterViewActualDiagram(wxCommandEvent& event) {
+void wxGUIEditorGraphicBBS::OnCenterViewActualDiagram(wxCommandEvent& event) 
+{
        _tabsMgr->centerViewActualDiagram();
 }
 
 //=========================================================================
-
-void wxGUIEditorGraphicBBS::OnOpenDiagram(wxCommandEvent& event) {
-       wxFileDialog * openFileDialog = new wxFileDialog(this, wxT("Open diagram"),
-                       wxEmptyString, wxT(""), wxT("*.bbg"), wxOPEN | wxFILE_MUST_EXIST);
-       printf("SCP: wxGUIEditorGraphicBBS::OnOpenDiagram  \n");
-       if (openFileDialog->ShowModal() == wxID_OK) {
-               wxString filePath = openFileDialog->GetPath();
-               ifstream inputStream;
-               std::string fName = (const char*) (filePath.mb_str());
-
-               inputStream.open(fName.c_str());
-               assert(inputStream.good()); // fails
-
-               if(_tabsMgr->FindTab(crea::wx2std(filePath))!=-1) //RaC2012 avoid opening same diagram twice
-               {
-                       inputStream.close();
-                       printf("RaC: Diagram already opened\n");
-                       return;
-               }
-               wxString fileName = openFileDialog->GetFilename();
-               _tabsMgr->addNewTab(fileName);
-               _tabsMgr->loadDiagram(inputStream, fName);
-               _tabsMgr->saveTempActualDiagram("load diagram");
-               GetToolBar()->EnableTool(ID_UNDO, false);
-               GetToolBar()->EnableTool(ID_UNDO, false);
+void wxGUIEditorGraphicBBS::OpenDiagram(std::string filePathName, std::string fileName) 
+{
+       ifstream inputStream;   
+       inputStream.open(filePathName.c_str());
+       assert(inputStream.good()); // fails
+       
+       if(_tabsMgr->FindTab(filePathName)!=-1) //RaC2012 avoid opening same diagram twice
+       {
                inputStream.close();
+               printf("RaC: Diagram already opened\n");
+               return;
        }
+       _tabsMgr->addNewTab( crea::std2wx(fileName) );
+       _tabsMgr->loadDiagram(inputStream, filePathName);
+       _tabsMgr->saveTempActualDiagram("load diagram");
+       GetToolBar()->EnableTool(ID_UNDO, false);
+       GetToolBar()->EnableTool(ID_UNDO, false);
+       inputStream.close();
        refreshGUIControls();
 }
-
+       
 //=========================================================================
 
+void wxGUIEditorGraphicBBS::OnOpenDiagram(wxCommandEvent& event) 
+{
+       wxFileDialog * openFileDialog = new wxFileDialog(this, wxT("Open diagram"), wxEmptyString, wxT(""), wxT("*.bbg"), wxOPEN | wxFILE_MUST_EXIST);
+       if (openFileDialog->ShowModal() == wxID_OK) 
+       {
+               wxString filePath = openFileDialog->GetPath();
+               wxString fileName = openFileDialog->GetFilename();
+               OpenDiagram( crea::wx2std(filePath) , crea::wx2std(fileName) );                                 
+       }
+}
 
-void wxGUIEditorGraphicBBS::OnClickBtnBox(wxCommandEvent& event) {
+//=========================================================================
+void wxGUIEditorGraphicBBS::OnClickBtnBox(wxCommandEvent& event) 
+{
        BlackBoxDescriptor *bbDes = _pkgBrowser->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();
-printf("EED wxGUIEditorGraphicBBS::OnClickBtnBox 1.\n");                       
                        scn->createGBlackBox(50, 50, packageName, typeName);
-printf("EED wxGUIEditorGraphicBBS::OnClickBtnBox 2.\n");                       
                        scn->refresh();
                }
-
                SaveTempActualDiagram("New Box");
                // if pnl
        }// if bbDes
@@ -1031,7 +1040,8 @@ printf("EED wxGUIEditorGraphicBBS::OnClickBtnBox 2.\n");
 
 //=========================================================================
 
-void wxGUIEditorGraphicBBS::OnClickBtnExecutableBox(wxCommandEvent& event) {
+void wxGUIEditorGraphicBBS::OnClickBtnExecutableBox(wxCommandEvent& event) 
+{
        //DFCH
        wxGEditorTabPanel *pnl = this->_tabsMgr->getActualTabPanel();
 
@@ -1047,8 +1057,8 @@ void wxGUIEditorGraphicBBS::OnClickBtnExecutableBox(wxCommandEvent& event) {
 }
 
 //=========================================================================
-
-void wxGUIEditorGraphicBBS::OnClickBtnComplexBox(wxCommandEvent& event) {
+void wxGUIEditorGraphicBBS::OnClickBtnComplexBox(wxCommandEvent& event) 
+{
        wxToolBar* toolbar = GetToolBar();
        bool temp = toolbar->GetToolState(ID_BTNCOMPLEXBOX);
        if (temp) {
@@ -1060,7 +1070,8 @@ void wxGUIEditorGraphicBBS::OnClickBtnComplexBox(wxCommandEvent& event) {
 
 //=========================================================================
 
-void wxGUIEditorGraphicBBS::OnAddComplexBoxInput(wxCommandEvent& event) {
+void wxGUIEditorGraphicBBS::OnAddComplexBoxInput(wxCommandEvent& event) 
+{
        wxTextEntryDialog *nameDialog = new wxTextEntryDialog(this,
                        wxT("Name of input port"));
        if (nameDialog->ShowModal() == wxID_OK) {
@@ -1073,8 +1084,8 @@ void wxGUIEditorGraphicBBS::OnAddComplexBoxInput(wxCommandEvent& event) {
 }
 
 //=========================================================================
-
-void wxGUIEditorGraphicBBS::OnAddComplexBoxOutput(wxCommandEvent& event) {
+void wxGUIEditorGraphicBBS::OnAddComplexBoxOutput(wxCommandEvent& event) 
+{
        wxTextEntryDialog *nameDialog = new wxTextEntryDialog(this,
                        wxT("Name of output port"));
        if (nameDialog->ShowModal() == wxID_OK) {
@@ -1087,28 +1098,33 @@ void wxGUIEditorGraphicBBS::OnAddComplexBoxOutput(wxCommandEvent& event) {
 }
 
 //=========================================================================
-
 void wxGUIEditorGraphicBBS::OnCopySelectedToComplexDiagram(
-               wxCommandEvent& event) {
+               wxCommandEvent& event) 
+{
        _tabsMgr->copySelectedBBoxesToComplexDiagram();
 }
 
-void wxGUIEditorGraphicBBS::OnHelpBBeditor(wxCommandEvent& event) {
+//=========================================================================
+void wxGUIEditorGraphicBBS::OnHelpBBeditor(wxCommandEvent& event) 
+{
        printf("wxGUIEditorGraphicBBS::OnHelpBBeditor ....not implemented..\n");
 }
 
 //=========================================================================
-void wxGUIEditorGraphicBBS::OnCreatePackage(wxCommandEvent& event) {
-
+void wxGUIEditorGraphicBBS::OnCreatePackage(wxCommandEvent& event) 
+{
        bbtkSystemTools::CreatePackage();
 }
 
 //=========================================================================
-void wxGUIEditorGraphicBBS::OnCreateBlackBox(wxCommandEvent& event) {
+void wxGUIEditorGraphicBBS::OnCreateBlackBox(wxCommandEvent& event) 
+{
        bbtkSystemTools::CreateBlackBox();
 }
+       
 //=========================================================================
-void wxGUIEditorGraphicBBS::OnPlugPackage(wxCommandEvent& event) {
+void wxGUIEditorGraphicBBS::OnPlugPackage(wxCommandEvent& event) 
+{
        //DFGO2012 Plug Package functionnalities
        long style = wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST;
        wxDirDialog* FD =
@@ -1160,8 +1176,10 @@ void wxGUIEditorGraphicBBS::OnPlugPackage(wxCommandEvent& event) {
        }while(userResponse != wxID_CANCEL);
 
 }
+       
 //=========================================================================
-void wxGUIEditorGraphicBBS::OnEditConfig(wxCommandEvent& event) {
+void wxGUIEditorGraphicBBS::OnEditConfig(wxCommandEvent& event) 
+{
        std::string commandStr;
            std::string configFile = ConfigurationFile::GetInstance().Get_config_xml_full_path();
        #ifdef WIN32
@@ -1172,10 +1190,11 @@ void wxGUIEditorGraphicBBS::OnEditConfig(wxCommandEvent& event) {
                commandStr = commandStr + configFile;
                std::cout << "system: " << commandStr << std::endl;
                system ( commandStr.c_str() );
-    }
-    //=========================================================================
-
-    void wxGUIEditorGraphicBBS::OnShowHTMLDoc(wxCommandEvent& event) {
+}
+       
+//=========================================================================
+void wxGUIEditorGraphicBBS::OnShowHTMLDoc(wxCommandEvent& event) 
+{
         // JGRR & CM WH
         if (_helpHtmlBrowser != NULL){
              _frameAUIMgr->DetachPane(_helpHtmlBrowser);
@@ -1188,14 +1207,33 @@ void wxGUIEditorGraphicBBS::OnEditConfig(wxCommandEvent& event) {
         
         // EO JGRR    & CM WH       
 }
+       
 //=========================================================================
-void wxGUIEditorGraphicBBS::OnCreateIndex(wxCommandEvent& event) {
+void wxGUIEditorGraphicBBS::OnCreateIndex(wxCommandEvent& event) 
+{
        printf("EED wxGUIEditorGraphicBBS::OnCreateIndex ... not implemented ..\n");
 }
 
+       
 //=========================================================================
+void wxGUIEditorGraphicBBS::OnEditComplexBoxScript(wxCommandEvent& event)
+{
+       BlackBoxDescriptor *bbDes = _pkgBrowser->GetActualSelected();
+       if (bbDes != NULL) 
+       {
+               std::string packageName = bbDes->GetPackage()->GetName();
+               std::string typeName = bbDes->GetTypeName();
+               if (!TryToOpenScriptComplexBox(packageName ,typeName))
+               {
+                       wxMessageDialog windowMessage1(NULL,_T("This is not a ComplexBox script."), _T("Alert !"), wxOK);
+                       windowMessage1.ShowModal();
+               }
+       }// if bbDes
+}
 
-void wxGUIEditorGraphicBBS::OnExit(wxCommandEvent& event) {
+//=========================================================================
+void wxGUIEditorGraphicBBS::OnExit(wxCommandEvent& event) 
+{
        Close(true);
 }
 
@@ -1208,58 +1246,52 @@ Factory::Pointer wxGUIEditorGraphicBBS::GetBBTKFactory()
        return _pkgBrowser->GetFactory();
 }
 
-       //=========================================================================
-
-void wxGUIEditorGraphicBBS::enableComplexBox() {
+//=========================================================================
+void wxGUIEditorGraphicBBS::enableComplexBox() 
+{
        _tabsMgr->setActualDiagramComplexBox(true);
        refreshGUIControls();
 }
 
 //=========================================================================
 
-void wxGUIEditorGraphicBBS::disableComplexBox() {
+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();
@@ -1267,13 +1299,76 @@ std::string wxGUIEditorGraphicBBS::getCurrentDiagramCategory()
 
        
 //=========================================================================
-
 bool wxGUIEditorGraphicBBS::isCurrentDiagramComplexBox()
 {
        return _tabsMgr->isActualDiagramComplexBox();
 }
 
 
+//=========================================================================
+void wxGUIEditorGraphicBBS::OpenScript(std::string filePathNameBBS ,std::string boxType)
+{      
+       std::string fileName                                                    = boxType+".bbg";
+       std::string filePathNameBBG                                             = filePathNameBBS;
+       filePathNameBBG[ filePathNameBBG.length()-1 ]   = 'g';
+       
+       wxMessageDialog windowMessage1(NULL,_T("The system is going to open a bbg or bbs for you. Be careful if you save this file."), _T("Alert !"), wxOK);
+       windowMessage1.ShowModal();
+       
+       if ( Utilities::FileExists( filePathNameBBG ) )
+       {
+               OpenDiagram( filePathNameBBG , fileName );     
+       } else {
+               if ( Utilities::FileExists( filePathNameBBS ) )
+               {
+                       OpenBBS( filePathNameBBS , fileName );     
+               } else {
+                       wxMessageDialog windowMessage1(NULL,_T("..ERROR.. loading script bbg/bbs."), _T("Alert !"), wxOK);
+                       windowMessage1.ShowModal();
+               } // FileExists BBS
+       } // FieExists BBG
+} //OpenScript
+       
+       
+       
+//=========================================================================
+bool wxGUIEditorGraphicBBS::TryToOpenScriptApplication(std::string packageName ,std::string boxType)
+{      
+       return TryToOpenScript(packageName ,boxType, true, false);
+}              
+
+//=========================================================================
+bool wxGUIEditorGraphicBBS::TryToOpenScriptComplexBox(std::string packageName ,std::string boxType)
+{      
+       return TryToOpenScript(packageName ,boxType, false, true);
+}              
+       
+       
+//=========================================================================
+bool wxGUIEditorGraphicBBS::TryToOpenScript(std::string packageName ,std::string boxType,bool scriptApplication, bool scriptComplexBox)
+{      
+       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;
+       
+       if (
+               ((descriptor->IsTypeOfScript_Application()==true) && (scriptApplication==true))
+               ||
+               ((descriptor->IsTypeOfScript_ComplexBox()==true) && (scriptComplexBox==true))           
+               )
+       {
+               result=true;
+               OpenScript(descriptor->GetScriptFileName(),boxType);
+       }
+       
+       return result;
+}      
+       
 } // EO namespace bbtk
 
 // EOF