From 09991540eea974c719f4d2a4accbe28734441c89 Mon Sep 17 00:00:00 2001 From: caceres <> Date: Sun, 25 Mar 2012 23:54:10 +0000 Subject: [PATCH] DFCH: Button select as executable box - implemented and tested =) Changed Classes wxVtkSceneManager.h ---- Added function: MakeBoxExecutable() wxVtkSceneManager.cxx --- Implemented function: MakeBoxExecutable(); bbtkwxGUIEditorGraphicBBS.cxx --- Implemented function: OnClickBtnExecutableBox(wxCommandEvent& event) --- .../bbtkwxGUIEditorGraphicBBS.cxx | 1537 +++--- .../wxVtkSceneManager.cxx | 4309 ++++++++--------- .../bbsWxGUIEditorGraphic/wxVtkSceneManager.h | 3 + 3 files changed, 2848 insertions(+), 3001 deletions(-) diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx index 2b1cf5f..ffccd10 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx @@ -1,37 +1,37 @@ /*========================================================================= -Program: bbtk -Module: $RCSfile$ -Language: C++ -Date: $Date$ -Version: $Revision$ -=========================================================================*/ + 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" @@ -39,813 +39,814 @@ Version: $Revision$ #include -namespace bbtk -{ - - - //========================================================================= - wxGUIEditorGraphicBBS::wxGUIEditorGraphicBBS(wxFrame *parent) - : wxFrame(parent, -1, _T("bbtkGEditor"),wxDefaultPosition, wxSize(1200,800)) - { - - _frameAUIMgr = new wxAuiManager(this); - - - /*std::string datadir( crea::System::GetExecutablePath() ); - std::string datadir ("."); - cout<<"RaC //------------------"<Update(); + _actualPkgBrowserBoxName = ""; + _actualPkgBrowserPkgName = ""; + refreshGUIControls(); +} + +//========================================================================= +wxGUIEditorGraphicBBS::~wxGUIEditorGraphicBBS() { + printf("EED %p ~wxGUIEditorGraphicBBS()\n", this); + + //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); + + 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_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")); + 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_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)); + +} +//========================================================================= +void wxGUIEditorGraphicBBS::initHelpHTMLBrowser() { + //TO FIX THE PATH OF BBTK BIN IN ORDER TO USE REGENERATE EXECUTABLES + //RegenerateAll(); + _helpHtmlBrowser = new WxGUIHtmlBrowser(this, wxSize(200, 0)); + _frameAUIMgr->AddPane(_helpHtmlBrowser, wxAuiPaneInfo().Right().MinSize( + 200, 200)); +} + +//========================================================================= +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")); + 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_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(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(wxGUIEditorGraphicBBS::OnExit)); + + // Create Help 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)); + + // 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(200, 200).CloseButton(false)); +} + +//================================================================ + +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"; + } + + 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 - #ifdef MACOSX // assume this is OSX - datadir=datadir+"/../../../../share/creaContours"; - #endif // MACOSX + command += " " + pack + " -q"; + bbtkMessage("debug",1,"Executing system command '"<Update(); - _actualPkgBrowserBoxName=""; - _actualPkgBrowserPkgName=""; - refreshGUIControls(); + if (!system(command.c_str())) { + SetStatusText(_T("Done !")); + /* + wxMessageBox(_T("Done !"),_T("Regenerate boxes lists"), + wxOK | wxICON_INFORMATION); + */ + } else { + SetStatusText(_T("Done !")); + wxString err(_T("An error occured while running '")); + err += bbtk::std2wx(command) + _T("'"); + wxMessageBox(err, _T("Regenerate boxes lists"), wxOK | wxICON_ERROR); } +} +//================================================================ +void wxGUIEditorGraphicBBS::RegenerateAll() { + DoRegeneratePackageDoc("-a"); + DoRegenerateBoxesLists(); +} - //========================================================================= - wxGUIEditorGraphicBBS::~wxGUIEditorGraphicBBS() - { - printf ("EED %p ~wxGUIEditorGraphicBBS()\n" , this ); +//================================================================ -//EED02JUIN2010 delete _tabsMgr; +wxAuiNotebook* wxGUIEditorGraphicBBS::getAuiNotebook() { + return _notebook; +} - _frameAUIMgr->UnInit(); - // FCY memory leaks - delete _frameAUIMgr; - delete _notebook; - delete _tabsMgr; +//================================================================ +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); + _pkgBrowser->WxGUIBlackBoxListUserOnSelected(descriptor.get()); } +} - //========================================================================= - 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); - - 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_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")); - 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_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)); +//========================================================================= - } - //========================================================================= - void wxGUIEditorGraphicBBS::initHelpHTMLBrowser() - { - //TO FIX THE PATH OF BBTK BIN IN ORDER TO USE REGENERATE EXECUTABLES - //RegenerateAll(); - _helpHtmlBrowser = new WxGUIHtmlBrowser(this,wxSize(200,0)); - _frameAUIMgr->AddPane(_helpHtmlBrowser,wxAuiPaneInfo().Right().MinSize(200,200)); - } +void wxGUIEditorGraphicBBS::editBlackBox(GBlackBoxModel *bbmodel) { + wxBlackBoxEditionDialog* dialog = + new wxBlackBoxEditionDialog(this, bbmodel); + dialog->Show(); +} - //========================================================================= - 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")); - 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_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(wxID_EXIT,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnExit)); - - // Create Help 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)); - - // 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::updateStatusBar(std::string textStatus) { + SetStatusText(crea::std2wx(textStatus)); +} - } +//========================================================================= - //========================================================================= - void wxGUIEditorGraphicBBS::initPackageBrowser() - { - _pkgBrowser = new WxGUIPackageBrowser2(this); - _pkgBrowser->IncludeAll(); - _frameAUIMgr->AddPane(_pkgBrowser,wxAuiPaneInfo().Left().MinSize(200,200).CloseButton(false)); - } +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(); - 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"; - } - - 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 '"<getBlackBoxDescriptor(packageName, boxName); - _pkgBrowser->WxGUIBlackBoxListUserOnSelected(descriptor.get()); - } - } - - //========================================================================= - - void wxGUIEditorGraphicBBS::editBlackBox(GBlackBoxModel *bbmodel) - { - wxBlackBoxEditionDialog* dialog = new wxBlackBoxEditionDialog(this,bbmodel); - dialog->Show(); - } - - //========================================================================= - - 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 "; + 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 - - printf ("RaC wxGUIEditorGraphicBBS::executeScript %s \n" , command.c_str() ); - system( command.c_str() ); - } - //========================================================================= - // EVENT HANDLERS - //========================================================================= + // command += "\""+ crea::System::GetExecutablePath(); + //#ifdef MACOSX + // command += separator + "../../../bbi.app/Contents/MacOS"; + //#endif - void wxGUIEditorGraphicBBS::OnCreateNewTab(wxCommandEvent& event) - { - _tabsMgr->addNewTab(); - refreshGUIControls(); - } + command += "bbi "; + command += "\"" + filename + "\""; - //========================================================================= +#ifndef WIN32 + command += " & "; +#endif - void wxGUIEditorGraphicBBS::OnExecuteActualDiagram(wxCommandEvent& event) - { - std::string script1 = _tabsMgr->getActualDiagramBBS(true); - cout<addNewTab(); + refreshGUIControls(); +} - std::string script2 = _tabsMgr->getActualDiagramBBS(false); - executeScript(script2); +//========================================================================= + +void wxGUIEditorGraphicBBS::OnExecuteActualDiagram(wxCommandEvent& event) { + std::string script1 = _tabsMgr->getActualDiagramBBS(true); + cout << endl << "RaC wxGUIEditorGraphicBBS::executeActualDiagram SCRIPT" + << endl << endl; + cout << script1 << endl; + + std::string script2 = _tabsMgr->getActualDiagramBBS(false); + executeScript(script2); +} + +//========================================================================= +// 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(); + + _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 1.2 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) { + 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(); + SaveActualBBS((const char*) (fileName.mb_str())); + } + +} + +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 1.2 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) { + wxFileDialog * saveFileDialog = new wxFileDialog(this, + wxT("Save Complex Box BBS"), wxEmptyString, + _T("ComplexBoxName"), wxT("*.bbs"), wxSAVE + | wxOVERWRITE_PROMPT); + if (saveFileDialog->ShowModal() == wxID_OK) { + wxString fileName = saveFileDialog->GetPath(); + SaveActualComplexBox((const char*) (fileName.mb_str())); + } +} + +//========================================================================= +void wxGUIEditorGraphicBBS::SaveActualDiagram(std::string filename) { + ofstream file; + file.open(filename.c_str()); + + std::string content = ""; + + // writing file header + content += "# ----------------------------------\n"; + content += "# - BBTKGEditor v 1.2 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(); +} + +//========================================================================= + +//The following method allows to save the current diagram asking the filename +//DFCH +void wxGUIEditorGraphicBBS::SaveCurrentDiagramAs() { + wxFileDialog * saveFileDialog = new wxFileDialog(this, + wxT("Save current diagram"), wxEmptyString, wxT("NewDiagram"), + wxT("*.bbg"), wxSAVE | wxOVERWRITE_PROMPT); + if (saveFileDialog->ShowModal() == wxID_OK) { + _tabsMgr->SetNameTabPanel(saveFileDialog->GetFilename()); + wxString pathfileName = saveFileDialog->GetPath(); + std::string pathfilename = (const char*) (pathfileName.mb_str()); + 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) { + SaveActualDiagram(pathfilename); + SaveActualBBS(pathfilenamebbs); + } else { + AskComplexBoxConfiguration(); + SaveActualDiagram(pathfilename); + SaveActualComplexBox(pathfilenamebbs); + } //if isActualDiagramComplexBox } +} +//========================================================================= +//DFCH +void wxGUIEditorGraphicBBS::OnSaveAsActualDiagram(wxCommandEvent& event) { + SaveCurrentDiagramAs(); +} +//========================================================================= +void wxGUIEditorGraphicBBS::refreshGUIControls() { + wxToolBar* toolbar = GetToolBar(); + if (_tabsMgr->isActualDiagramComplexBox()) { + toolbar->ToggleTool(ID_BTNCOMPLEXBOX, true); + toolbar->EnableTool(ID_ADDCOMPLEXBOXINPUT, true); + toolbar->EnableTool(ID_ADDCOMPLEXBOXOUTPUT, true); - //========================================================================= - // 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( ); + 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); - - _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(); + GetMenuBar()->GetMenu(0)->Enable(ID_SAVE_AS_COMPLEXBOX, false); + GetMenuBar()->GetMenu(0)->Enable(ID_SAVE_AS_BBS, true); } - - - 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 1.2 BBS BlackBox Script\n"; - content += "# - "; - content += filename; - content += "\n"; - content += "# ----------------------------------\n"; - content += "\n"; - content += _tabsMgr->getActualDiagramBBS(); - file << content; - file.close(); + 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); } +} - 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( ); - SaveActualBBS( (const char*) (fileName.mb_str()) ); - } +//========================================================================= +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::AskComplexBoxConfiguration() - { - std::string cbName = _tabsMgr->GetCbName(); - std::string paName = _tabsMgr->GetCbPackageName(); +void wxGUIEditorGraphicBBS::OnCenterViewActualDiagram(wxCommandEvent& event) { + _tabsMgr->centerViewActualDiagram(); +} - 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) ); +void wxGUIEditorGraphicBBS::OnOpenDiagram(wxCommandEvent& event) { + wxFileDialog * openFileDialog = new wxFileDialog(this, wxT("Open diagram"), + wxEmptyString, wxT(""), wxT("*.bbg"), wxOPEN | wxFILE_MUST_EXIST); + if (openFileDialog->ShowModal() == wxID_OK) { + wxString fileName = openFileDialog->GetPath(); + ifstream inputStream; + std::string fName = (const char*) (fileName.mb_str()); + inputStream.open(fName.c_str()); + _tabsMgr->addNewTab(openFileDialog->GetFilename()); - 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->loadDiagram(inputStream, fName); - _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 1.2 BBS BlackBox Script (Complex Box)\n"; - content += "# - "; - content += filename; - content += "\n"; - content += "# ----------------------------------\n"; - content += "\n"; - content += _tabsMgr->getActualComplexBoxBBS(); - file << content; - file.close(); + inputStream.close(); } + refreshGUIControls(); +} - //========================================================================= +//========================================================================= - void wxGUIEditorGraphicBBS::OnSaveActualComplexBox(wxCommandEvent& event) - { - wxFileDialog * saveFileDialog = new wxFileDialog(this ,wxT("Save Complex Box BBS") ,wxEmptyString, _T("ComplexBoxName") ,wxT("*.bbs"), wxSAVE | wxOVERWRITE_PROMPT); - if (saveFileDialog->ShowModal() == wxID_OK) - { - wxString fileName = saveFileDialog->GetPath(); - SaveActualComplexBox( (const char*) (fileName.mb_str()) ); - } - } - - //========================================================================= - void wxGUIEditorGraphicBBS::SaveActualDiagram(std::string filename) - { - ofstream file; - file.open( filename.c_str() ); - - std::string content=""; - - // writing file header - content += "# ----------------------------------\n"; - content += "# - BBTKGEditor v 1.2 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(); - } - - //========================================================================= - - //The following method allows to save the current diagram asking the filename - //DFCH - void wxGUIEditorGraphicBBS::SaveCurrentDiagramAs( ) - { - wxFileDialog * saveFileDialog = new wxFileDialog(this,wxT("Save current diagram"),wxEmptyString,wxT("NewDiagram"),wxT("*.bbg"),wxSAVE|wxOVERWRITE_PROMPT); - if (saveFileDialog->ShowModal() == wxID_OK) - { - _tabsMgr->SetNameTabPanel( saveFileDialog->GetFilename() ); - wxString pathfileName = saveFileDialog->GetPath(); - std::string pathfilename = (const char*) (pathfileName.mb_str()); - 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) - { - SaveActualDiagram( pathfilename ); - SaveActualBBS(pathfilenamebbs); - } else { - AskComplexBoxConfiguration(); - SaveActualDiagram( pathfilename ); - SaveActualComplexBox(pathfilenamebbs); - } //if isActualDiagramComplexBox - } - } - //========================================================================= - //DFCH - void wxGUIEditorGraphicBBS::OnSaveAsActualDiagram(wxCommandEvent& event) - { - SaveCurrentDiagramAs(); - } - //========================================================================= - - void wxGUIEditorGraphicBBS::refreshGUIControls() - { - wxToolBar* toolbar = GetToolBar(); - if(_tabsMgr->isActualDiagramComplexBox()) - { - toolbar->ToggleTool(ID_BTNCOMPLEXBOX,true); - toolbar->EnableTool(ID_ADDCOMPLEXBOXINPUT,true); - toolbar->EnableTool(ID_ADDCOMPLEXBOXOUTPUT,true); - - GetMenuBar()->GetMenu(0)->Enable(ID_SAVE_AS_COMPLEXBOX,true); - GetMenuBar()->GetMenu(0)->Enable(ID_SAVE_AS_BBS,false); - } - else - { - toolbar->ToggleTool(ID_BTNCOMPLEXBOX,false); - toolbar->EnableTool(ID_ADDCOMPLEXBOXINPUT,false); - toolbar->EnableTool(ID_ADDCOMPLEXBOXOUTPUT,false); - - GetMenuBar()->GetMenu(0)->Enable(ID_SAVE_AS_COMPLEXBOX,false); - GetMenuBar()->GetMenu(0)->Enable(ID_SAVE_AS_BBS,true); - } - 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); - } - - } +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(); - 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(); - } - } + if (pnl != NULL) { + wxVtkSceneManager *scn = pnl->getSceneManager(); + scn->createGBlackBox(50, 50, packageName, typeName); + scn->refresh(); + } // if pnl + }// if bbDes +} - //========================================================================= +//========================================================================= - void wxGUIEditorGraphicBBS::OnCenterViewActualDiagram(wxCommandEvent& event) - { - _tabsMgr->centerViewActualDiagram(); - } - - //========================================================================= - - void wxGUIEditorGraphicBBS::OnOpenDiagram(wxCommandEvent& event) - { - wxFileDialog * openFileDialog = new wxFileDialog(this,wxT("Open diagram"),wxEmptyString,wxT(""),wxT("*.bbg"),wxOPEN|wxFILE_MUST_EXIST); - if (openFileDialog->ShowModal() == wxID_OK) - { - wxString fileName = openFileDialog->GetPath(); - ifstream inputStream; - std::string fName=(const char*) (fileName.mb_str()); - inputStream.open( fName.c_str() ); - _tabsMgr->addNewTab( openFileDialog->GetFilename() ); - - _tabsMgr->loadDiagram(inputStream, fName); +void wxGUIEditorGraphicBBS::OnClickBtnExecutableBox(wxCommandEvent& event) { + //DFCH + wxGEditorTabPanel *pnl = this->_tabsMgr->getActualTabPanel(); - inputStream.close(); - } - refreshGUIControls(); + if (pnl != NULL) { + wxVtkSceneManager *scn = pnl->getSceneManager(); + if( scn->MakeBoxExecutable() ) + std::cout<<"DFCH: wxGUIEditorGraphicBBS::OnClickBtnExecutableBox...successful"<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(); - } // if pnl - }// if bbDes +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::OnClickBtnExecutableBox(wxCommandEvent& event) - { - printf("EED wxGUIEditorGraphicBBS::OnClickBtnExecutableBox .... not implemented ...\n"); - } - - //========================================================================= - - void wxGUIEditorGraphicBBS::OnClickBtnComplexBox(wxCommandEvent& event) - { - wxToolBar* toolbar = GetToolBar(); - bool temp = toolbar->GetToolState(ID_BTNCOMPLEXBOX); - if(temp) - { - _tabsMgr->setActualDiagramComplexBox(true); +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); } - else - { - _tabsMgr->setActualDiagramComplexBox(false); - } - refreshGUIControls(); } +} - //========================================================================= - - 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); - } - } - } +//========================================================================= - //========================================================================= - - 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); - } +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); } } - - //========================================================================= - - void wxGUIEditorGraphicBBS::OnCopySelectedToComplexDiagram(wxCommandEvent& event) - { - _tabsMgr->copySelectedBBoxesToComplexDiagram(); - } - - - void wxGUIEditorGraphicBBS::OnHelpBBeditor(wxCommandEvent& event) - { - printf("wxGUIEditorGraphicBBS::OnHelpBBeditor ....not implemented..\n"); - } - - - //========================================================================= - void wxGUIEditorGraphicBBS::OnCreatePackage(wxCommandEvent& event) - { - printf("EED wxGUIEditorGraphicBBS::OnCreatePackag ... not implemented ..\n"); - } - - - //========================================================================= - void wxGUIEditorGraphicBBS::OnCreateBlackBox(wxCommandEvent& event) - { - printf("EED wxGUIEditorGraphicBBS::OnCreateBlackBox ... not implemented ..\n"); - } - //========================================================================= - void wxGUIEditorGraphicBBS::OnPlugPackage(wxCommandEvent& event) - { - printf("EED wxGUIEditorGraphicBBS::OnPlugPackage ... not implemented ..\n"); - } - //========================================================================= - void wxGUIEditorGraphicBBS::OnEditConfig(wxCommandEvent& event) - { - printf("EED wxGUIEditorGraphicBBS::OnEditConfig ... not implemented ..\n"); - } - //========================================================================= - void wxGUIEditorGraphicBBS::OnShowHTMLDoc(wxCommandEvent& event) - { - printf("EED wxGUIEditorGraphicBBS::OnShowHTMLDoc ... not implemented ..\n"); - } - //========================================================================= - void wxGUIEditorGraphicBBS::OnCreateIndex(wxCommandEvent& event) - { - printf("EED wxGUIEditorGraphicBBS::OnCreateIndex ... not implemented ..\n"); - } - - - - - //========================================================================= - - void wxGUIEditorGraphicBBS::OnExit(wxCommandEvent& event) - { - Close(true); - } - - - - //========================================================================= - -} // EO namespace bbtk +} + +//========================================================================= + +void wxGUIEditorGraphicBBS::OnCopySelectedToComplexDiagram( + wxCommandEvent& event) { + _tabsMgr->copySelectedBBoxesToComplexDiagram(); +} + +void wxGUIEditorGraphicBBS::OnHelpBBeditor(wxCommandEvent& event) { + printf("wxGUIEditorGraphicBBS::OnHelpBBeditor ....not implemented..\n"); +} + +//========================================================================= +void wxGUIEditorGraphicBBS::OnCreatePackage(wxCommandEvent& event) { + printf("EED wxGUIEditorGraphicBBS::OnCreatePackag ... not implemented ..\n"); +} + +//========================================================================= +void wxGUIEditorGraphicBBS::OnCreateBlackBox(wxCommandEvent& event) { + printf( + "EED wxGUIEditorGraphicBBS::OnCreateBlackBox ... not implemented ..\n"); +} +//========================================================================= +void wxGUIEditorGraphicBBS::OnPlugPackage(wxCommandEvent& event) { + printf("EED wxGUIEditorGraphicBBS::OnPlugPackage ... not implemented ..\n"); +} +//========================================================================= +void wxGUIEditorGraphicBBS::OnEditConfig(wxCommandEvent& event) { + printf("EED wxGUIEditorGraphicBBS::OnEditConfig ... not implemented ..\n"); +} +//========================================================================= +void wxGUIEditorGraphicBBS::OnShowHTMLDoc(wxCommandEvent& event) { + printf("EED wxGUIEditorGraphicBBS::OnShowHTMLDoc ... not implemented ..\n"); +} +//========================================================================= +void wxGUIEditorGraphicBBS::OnCreateIndex(wxCommandEvent& event) { + printf("EED wxGUIEditorGraphicBBS::OnCreateIndex ... not implemented ..\n"); +} + +//========================================================================= + +void wxGUIEditorGraphicBBS::OnExit(wxCommandEvent& event) { + Close(true); +} + +//========================================================================= + +} // EO namespace bbtk // EOF diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx index 3740f98..c482711 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx @@ -1,1957 +1,1754 @@ /*========================================================================= -Program: bbtk -Module: $RCSfile$ -Language: C++ -Date: $Date$ -Version: $Revision$ -=========================================================================*/ + 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::wxVtkSceneManager . -*/ - + * \file + * \brief Class bbtk::wxVtkSceneManager . + */ #include "wxVtkSceneManager.h" - #include - #include - -namespace bbtk -{ - - - //========================================================================= - wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent, wxVtk3DBaseView *baseView,int idManager) - { - _cbName = "ComplexBoxName"; - _cbPackageName = "PackageName"; - _Author = "Author ??"; - _Category = ""; - _Description = "Description ??"; - - _parent = parent; - _numBoxes = 0; - _idManager = idManager; - _baseView = baseView; - _startDragging = false; - _isComplexBox = false; - - if( _baseView!=NULL ) - { -//EED02JUIN2010 - printf ("RaC-EED 21-06-2010 %p wxVtkSceneManager::wxVtkSceneManager If you comment this line, the drag and drop functionnality is not initialized.\n" , this ); +#include +#include + +namespace bbtk { + +//========================================================================= +wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent, + wxVtk3DBaseView *baseView, int idManager) { + _cbName = "ComplexBoxName"; + _cbPackageName = "PackageName"; + _Author = "Author ??"; + _Category = ""; + _Description = "Description ??"; + + _parent = parent; + _numBoxes = 0; + _idManager = idManager; + _baseView = baseView; + _startDragging = false; + _isComplexBox = false; + + if (_baseView != NULL) { + //EED02JUIN2010 + printf( + "RaC-EED 21-06-2010 %p wxVtkSceneManager::wxVtkSceneManager If you comment this line, the drag and drop functionnality is not initialized.\n", + this); #ifdef __APPLE__ - _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget((wxDropTarget*)parent); + _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget((wxDropTarget*)parent); #endif - configureBaseView(); - _worldState=NOTHING_HAPPENS; - registerController(this); - - } - _idConnectionInCreation = -1; - _contLastId = 0; + configureBaseView(); + _worldState = NOTHING_HAPPENS; + registerController(this); } - - //========================================================================= - - void wxVtkSceneManager::disconnectDrop() - { - printf ("EED %p ~wxVtkSceneManager::disconnectDrop()\n" , this ); -//EED02JUIN2010 _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget(NULL); -// _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget( new tmpClasswxTextDropTarget() ); - } - - //========================================================================= - - wxVtkSceneManager::~wxVtkSceneManager() - { - //FCY memory leaks - printf ("EED %p ~wxVtkSceneManager()\n" , this ); - disconnectDrop(); - delete _baseView; + _idConnectionInCreation = -1; + _contLastId = 0; + +} + +//========================================================================= + +void wxVtkSceneManager::disconnectDrop() { + printf("EED %p ~wxVtkSceneManager::disconnectDrop()\n", this); + //EED02JUIN2010 _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget(NULL); + // _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget( new tmpClasswxTextDropTarget() ); +} + +//========================================================================= + +wxVtkSceneManager::~wxVtkSceneManager() { + //FCY memory leaks + printf("EED %p ~wxVtkSceneManager()\n", this); + disconnectDrop(); + delete _baseView; +} + +//========================================================================= + +void wxVtkSceneManager::configureBaseView() { + printf("EED wxVtkSceneManager::configureBaseView 0\n"); + vtkInteractorStyleBaseView2D *interactorstylebaseview = + vtkInteractorStyleBaseView2D::New(); + + _baseView->SetInteractorStyleBaseView(interactorstylebaseview); + + // Important to activate the 2D interaction system + wxVTKRenderWindowInteractor *iren = + _baseView->GetWxVTKRenderWindowInteractor(); + interactorstylebaseview->SetInteractor(iren); + iren->SetInteractorStyle(interactorstylebaseview); + interactorstylebaseview->SetwxVtkBaseView(_baseView); + + _baseView->GetRenderer()->GetActiveCamera()->ParallelProjectionOn(); + _baseView->GetRenderer()->ResetCamera(-100, 100, -100, 100, 800, 1100); + + _baseView->GetRenderer()->SetBackground(0.9, 0.9, 0.9); + _baseView->GetRenderer()->GradientBackgroundOn(); + _baseView->Refresh(); + + // Actos Port_Text + _textActor = vtkTextActor3D::New(); + _textActor->SetPosition(-9999, -9999, 900); + _textActor->SetInput(""); + _textActor->GetTextProperty()->SetFontSize(60); + _textActor->GetTextProperty()->BoldOn(); + _textActor->GetTextProperty()->SetColor(PORTTEXT_NH_R, PORTTEXT_NH_G, + PORTTEXT_NH_B); + + _baseView->GetRenderer()->AddActor(_textActor); + + // Actor Fill_Port_Text + + //------------ + double xInic = 0; + double yInic = 0; + double zInic = 900; + + vtkPolygon *aPolygon = vtkPolygon::New(); + _fillObjectActor = vtkActor::New(); + + _pts = vtkPoints::New(); + + double w = 100, h = 10, b = h / 15, t = 3; + _pts->SetNumberOfPoints(21); + _pts->InsertPoint(0, xInic + w * 0.33 - t / 2, yInic, zInic); + _pts->InsertPoint(1, xInic + w * 0.33, yInic - t, zInic); + _pts->InsertPoint(2, xInic + w * 0.33 + t / 2, yInic, zInic); + _pts->InsertPoint(3, xInic + w * 0.33 + t / 2, yInic, zInic); + _pts->InsertPoint(4, xInic + w - b * 4, yInic + b * 0, zInic); + + _pts->InsertPoint(5, xInic + w - b * 4, yInic + b * 0, zInic); + _pts->InsertPoint(6, xInic + w - b * 2, yInic + b * 1, zInic); + _pts->InsertPoint(7, xInic + w - b * 1, yInic + b * 2, zInic); + _pts->InsertPoint(8, xInic + w - b * 0, yInic + b * 4, zInic); + + _pts->InsertPoint(9, xInic + w - b * 0, yInic + h - b * 4, zInic); + _pts->InsertPoint(10, xInic + w - b * 1, yInic + h - b * 2, zInic); + _pts->InsertPoint(11, xInic + w - b * 2, yInic + h - b * 1, zInic); + _pts->InsertPoint(12, xInic + w - b * 4, yInic + h - b * 0, zInic); + + _pts->InsertPoint(13, xInic + b * 4, yInic + h - b * 0, zInic); + _pts->InsertPoint(14, xInic + b * 2, yInic + h - b * 1, zInic); + _pts->InsertPoint(15, xInic + b * 1, yInic + h - b * 2, zInic); + _pts->InsertPoint(16, xInic + b * 0, yInic + h - b * 4, zInic); + + _pts->InsertPoint(17, xInic + b * 0, yInic + b * 4, zInic); + _pts->InsertPoint(18, xInic + b * 1, yInic + b * 2, zInic); + _pts->InsertPoint(19, xInic + b * 2, yInic + b * 1, zInic); + _pts->InsertPoint(20, xInic + b * 4, yInic + b * 0, zInic); + + aPolygon->GetPointIds()->SetNumberOfIds(21); + for (int i = 0; i < 21; i++) { + aPolygon->GetPointIds()->SetId(i, i); } - //========================================================================= - - void wxVtkSceneManager::configureBaseView() - { -printf("EED wxVtkSceneManager::configureBaseView 0\n"); - vtkInteractorStyleBaseView2D *interactorstylebaseview = vtkInteractorStyleBaseView2D::New(); - - _baseView->SetInteractorStyleBaseView(interactorstylebaseview); - - // Important to activate the 2D interaction system - wxVTKRenderWindowInteractor *iren = _baseView->GetWxVTKRenderWindowInteractor(); - interactorstylebaseview->SetInteractor ( iren ); - iren->SetInteractorStyle(interactorstylebaseview); - interactorstylebaseview->SetwxVtkBaseView(_baseView); - - _baseView->GetRenderer()->GetActiveCamera()->ParallelProjectionOn(); - _baseView->GetRenderer()->ResetCamera(-100,100,-100,100,800,1100); - - _baseView->GetRenderer()->SetBackground(0.9,0.9,0.9); - _baseView->GetRenderer()->GradientBackgroundOn(); - _baseView->Refresh(); - - // Actos Port_Text - _textActor = vtkTextActor3D::New(); - _textActor->SetPosition( -9999 , -9999 , 900 ); - _textActor->SetInput( "" ); - _textActor->GetTextProperty()->SetFontSize(60); - _textActor->GetTextProperty()->BoldOn(); - _textActor->GetTextProperty()->SetColor(PORTTEXT_NH_R,PORTTEXT_NH_G,PORTTEXT_NH_B); - - _baseView->GetRenderer()->AddActor( _textActor ); - - - // Actor Fill_Port_Text - - //------------ - double xInic = 0; - double yInic = 0; - double zInic = 900; - - vtkPolygon *aPolygon = vtkPolygon::New(); - _fillObjectActor = vtkActor::New(); - - _pts = vtkPoints::New(); - - double w=100,h=10,b=h/15,t=3; - _pts->SetNumberOfPoints(21); - _pts->InsertPoint(0, xInic+w*0.33-t/2 , yInic , zInic ); - _pts->InsertPoint(1, xInic+w*0.33 , yInic-t , zInic ); - _pts->InsertPoint(2, xInic+w*0.33+t/2 , yInic , zInic ); - _pts->InsertPoint(3, xInic+w*0.33+t/2 , yInic , zInic ); - _pts->InsertPoint(4, xInic+w-b*4 , yInic+b*0 , zInic ); - - _pts->InsertPoint( 5, xInic+w-b*4 , yInic+b*0 , zInic ); - _pts->InsertPoint( 6, xInic+w-b*2 , yInic+b*1 , zInic ); - _pts->InsertPoint( 7, xInic+w-b*1 , yInic+b*2 , zInic ); - _pts->InsertPoint( 8, xInic+w-b*0 , yInic+b*4 , zInic ); - - _pts->InsertPoint( 9, xInic+w-b*0 , yInic+h-b*4 , zInic ); - _pts->InsertPoint(10, xInic+w-b*1 , yInic+h-b*2 , zInic ); - _pts->InsertPoint(11, xInic+w-b*2 , yInic+h-b*1 , zInic ); - _pts->InsertPoint(12, xInic+w-b*4 , yInic+h-b*0 , zInic ); - - _pts->InsertPoint(13, xInic+b*4 , yInic+h-b*0 , zInic ); - _pts->InsertPoint(14, xInic+b*2 , yInic+h-b*1 , zInic ); - _pts->InsertPoint(15, xInic+b*1 , yInic+h-b*2 , zInic ); - _pts->InsertPoint(16, xInic+b*0 , yInic+h-b*4 , zInic ); - - _pts->InsertPoint(17, xInic+b*0 , yInic+b*4 , zInic ); - _pts->InsertPoint(18, xInic+b*1 , yInic+b*2 , zInic ); - _pts->InsertPoint(19, xInic+b*2 , yInic+b*1 , zInic ); - _pts->InsertPoint(20, xInic+b*4 , yInic+b*0 , zInic ); - - aPolygon->GetPointIds()->SetNumberOfIds(21); - for (int i=0;i<21; i++) - { - aPolygon->GetPointIds()->SetId(i, i); - } - - vtkUnstructuredGrid *aPolygonGrid = vtkUnstructuredGrid::New(); - aPolygonGrid->Allocate(1, 1); - aPolygonGrid->InsertNextCell(aPolygon->GetCellType(), aPolygon->GetPointIds()); - aPolygonGrid->SetPoints(_pts); - _aPolygonMapper = vtkDataSetMapper::New(); - _aPolygonMapper->SetInput(aPolygonGrid); - _fillObjectActor->SetMapper(_aPolygonMapper); - _fillObjectActor->GetProperty()->SetColor(PORTFILL_NH_R,PORTFILL_NH_G,PORTFILL_NH_B); - _fillObjectActor->GetProperty()->SetOpacity(0); - _aPolygonMapper->Modified(); - - _baseView->GetRenderer()->AddActor( _fillObjectActor ); -printf("EED wxVtkSceneManager::configureBaseView 1\n"); + vtkUnstructuredGrid *aPolygonGrid = vtkUnstructuredGrid::New(); + aPolygonGrid->Allocate(1, 1); + aPolygonGrid->InsertNextCell(aPolygon->GetCellType(), + aPolygon->GetPointIds()); + aPolygonGrid->SetPoints(_pts); + _aPolygonMapper = vtkDataSetMapper::New(); + _aPolygonMapper->SetInput(aPolygonGrid); + _fillObjectActor->SetMapper(_aPolygonMapper); + _fillObjectActor->GetProperty()->SetColor(PORTFILL_NH_R, PORTFILL_NH_G, + PORTFILL_NH_B); + _fillObjectActor->GetProperty()->SetOpacity(0); + _aPolygonMapper->Modified(); + + _baseView->GetRenderer()->AddActor(_fillObjectActor); + printf("EED wxVtkSceneManager::configureBaseView 1\n"); +} + +//========================================================================= + +std::string wxVtkSceneManager::generateANewNameForABox() { + std::stringstream boxname; + if (_numBoxes < 10) { + boxname << "Box0" << _numBoxes; + } else { + boxname << "Box" << _numBoxes; } + _numBoxes++; + return boxname.str(); +} - //========================================================================= +//========================================================================= - std::string wxVtkSceneManager::generateANewNameForABox() - { - std::stringstream boxname; - if(_numBoxes<10) - { - boxname << "Box0" << _numBoxes; - }else{ - boxname << "Box" << _numBoxes; - } - _numBoxes++; - return boxname.str(); - } +std::string wxVtkSceneManager::findANewNameForABox() { + std::string boxname = generateANewNameForABox(); - //========================================================================= + while (boxExist(boxname) == true) { + boxname = generateANewNameForABox(); + } // while - std::string wxVtkSceneManager::findANewNameForABox() - { - std::string boxname=generateANewNameForABox(); + return boxname; +} - while (boxExist(boxname)==true) - { - boxname=generateANewNameForABox(); - } // while +//========================================================================= +void wxVtkSceneManager::configGBlackBox(int idBox, double xIn, double yIn, + double zIn, std::string name, bool boxExecutable, double xEn, + double yEn, double zEn) { + GObjectController *cont = _controllers[idBox]; + GBlackBoxModel *bbmod = (GBlackBoxModel*) cont->getModel(); + bbmod->setBBTKName(name); + bbmod->setInicPoint(xIn, yIn, zIn); + bbmod->setFinalPoint(xEn, yEn, zEn); + bbmod->setExecutable(boxExecutable); - return boxname; - } - - //========================================================================= - void wxVtkSceneManager::configGBlackBox(int idBox, double xIn, double yIn, double zIn, std::string name, bool boxExecutable,double xEn,double yEn,double zEn) - { - GObjectController *cont = _controllers[idBox]; - GBlackBoxModel *bbmod = (GBlackBoxModel*)cont->getModel(); - bbmod->setBBTKName(name); - bbmod->setInicPoint(xIn,yIn,zIn); - bbmod->setFinalPoint(xEn,yEn,zEn); - bbmod->setExecutable(boxExecutable); + bbmod->notifyObservers(_idManager); - bbmod->notifyObservers(_idManager); - - } +} +//========================================================================= - //========================================================================= +int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName, + std::string boxType) { + _worldState = NOTHING_HAPPENS; + //EED int windowWidth = _baseView->GetRenWin()->GetSize()[0]; + int windowHeight = _baseView->GetRenWin()->GetSize()[1]; - int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName, std::string boxType) - { - _worldState = NOTHING_HAPPENS; -//EED int windowWidth = _baseView->GetRenWin()->GetSize()[0]; - int windowHeight = _baseView->GetRenWin()->GetSize()[1]; + int type = GBLACKBOX; - int type = GBLACKBOX; + //Create the MVC Objects - //Create the MVC Objects + GBlackBoxModel + *model = + (GBlackBoxModel*) GObjectsMVCFactory::getInstance()->createGObjectModel( + type); + vtkGObjectView *view = + GObjectsMVCFactory::getInstance()->createGObjectView(type); + GObjectController* controller = + GObjectsMVCFactory::getInstance()->createGObjectController(type); - GBlackBoxModel *model = (GBlackBoxModel*)GObjectsMVCFactory::getInstance()->createGObjectModel(type); - vtkGObjectView *view = GObjectsMVCFactory::getInstance()->createGObjectView(type); - GObjectController* controller = GObjectsMVCFactory::getInstance()->createGObjectController(type); + BlackBoxDescriptor::Pointer descriptor = + GObjectsMVCFactory::getInstance()->getBlackBoxDescriptor( + packageName, boxType); - BlackBoxDescriptor::Pointer descriptor = GObjectsMVCFactory::getInstance()->getBlackBoxDescriptor(packageName, boxType); + //Prepares the initial model + //The coordinates obtained are the following. Top-Left:x=0,y=0 Bottom-Right:x=width,y=height - //Prepares the initial model - //The coordinates obtained are the following. Top-Left:x=0,y=0 Bottom-Right:x=width,y=height + double xx = x; + double yy = windowHeight - y; - double xx = x; - double yy = windowHeight-y; + //z value is not important yet, because it is only used a parallel projection + double zz = 900; + _baseView->TransCoordScreenToWorld(xx, yy, zz); + model->setInicPoint(xx, yy, zz); - //z value is not important yet, because it is only used a parallel projection - double zz = 900; - _baseView->TransCoordScreenToWorld(xx,yy,zz); - model->setInicPoint(xx,yy,zz); + std::stringstream stream; - std::stringstream stream; + std::string newBoxName; + newBoxName = findANewNameForABox(); - std::string newBoxName; - newBoxName = findANewNameForABox(); + stream << newBoxName; + std::string arraystring = stream.str(); - stream << newBoxName; + model->setBBTKName(arraystring); + model->setBBTKType(boxType); + model->setBBTKPackage(packageName); - std::string arraystring = stream.str(); + model->addObserver(view); + model->addObserver(this); - model->setBBTKName(arraystring); - model->setBBTKType(boxType); - model->setBBTKPackage(packageName); + //Iterate and create the input ports + std::map descriptorInMap = + descriptor->GetInputDescriptorMap(); + std::map::iterator itInput; - model->addObserver(view); - model->addObserver(this); + int i = 0; + for (itInput = descriptorInMap.begin(); itInput != descriptorInMap.end(); ++itInput) { + BlackBoxInputDescriptor *desc = itInput->second; + createGInputPort(GINPUTPORT, i, model, desc); + i++; + } - //Iterate and create the input ports - std::map descriptorInMap = descriptor->GetInputDescriptorMap(); - std::map::iterator itInput; + //Iterate and create the output ports + std::map descriptorOutMap = + descriptor->GetOutputDescriptorMap(); + std::map::iterator itOutput; + + i = 0; + for (itOutput = descriptorOutMap.begin(); itOutput + != descriptorOutMap.end(); ++itOutput) { + BlackBoxOutputDescriptor *desc = itOutput->second; + createGOutputPort(GOUTPUTPORT, i, model, desc); + i++; + } - int i=0; - for(itInput = descriptorInMap.begin(); itInput != descriptorInMap.end(); ++itInput) - { - BlackBoxInputDescriptor *desc = itInput->second; - createGInputPort(GINPUTPORT,i,model,desc); - i++; - } + //Associates the view with the correspondent renderer and the model. + //(NOTE: Refresh is only made by the view) + view->setModel(model); + view->setBaseView(_baseView); + view->initVtkObjects(); - //Iterate and create the output ports - std::map descriptorOutMap = descriptor->GetOutputDescriptorMap(); - std::map::iterator itOutput; + //Associates the controller with the correspondent model and view + controller->setModelAndView(model, view); - i=0; - for(itOutput = descriptorOutMap.begin();itOutput != descriptorOutMap.end(); ++itOutput) - { - BlackBoxOutputDescriptor *desc = itOutput->second; - createGOutputPort(GOUTPUTPORT,i,model,desc); - i++; - } + //Resgiter change to the observers of the actual model + model->notifyObservers(_idManager); + int newId = addObjectController(controller); - //Associates the view with the correspondent renderer and the model. - //(NOTE: Refresh is only made by the view) - view->setModel(model); - view->setBaseView(_baseView); - view->initVtkObjects(); + return newId; - //Associates the controller with the correspondent model and view - controller->setModelAndView(model,view); +} - //Resgiter change to the observers of the actual model - model->notifyObservers(_idManager); +//========================================================================= - int newId = addObjectController(controller); +int wxVtkSceneManager::createGComplexBoxInputPort(std::string inputName) { + //EED int windowWidth=_baseView->GetRenWin()->GetSize()[0]; + int windowHeight = _baseView->GetRenWin()->GetSize()[1]; - return newId; + int type = GCOMPLEXINPUTPORT; - } + //Create the MVC Objects - //========================================================================= + GComplexBoxPortModel + *model = + (GComplexBoxPortModel*) GObjectsMVCFactory::getInstance()->createGObjectModel( + type); + vtkGObjectView *view = + GObjectsMVCFactory::getInstance()->createGObjectView(type); + GObjectController* controller = + GObjectsMVCFactory::getInstance()->createGObjectController(type); - int wxVtkSceneManager::createGComplexBoxInputPort(std::string inputName) - { -//EED int windowWidth=_baseView->GetRenWin()->GetSize()[0]; - int windowHeight=_baseView->GetRenWin()->GetSize()[1]; + //Prepares the initial model - int type = GCOMPLEXINPUTPORT; + double xx = 5; + double yy = windowHeight - 5; - //Create the MVC Objects + //z value is not important yet, because it is only used a parallel projection + double zz = 900; + printf("EED wxVtkSceneManager::createGComplexBoxInputPort 900-450\n"); - GComplexBoxPortModel *model = (GComplexBoxPortModel*)GObjectsMVCFactory::getInstance()->createGObjectModel(type); - vtkGObjectView *view = GObjectsMVCFactory::getInstance()->createGObjectView(type); - GObjectController* controller = GObjectsMVCFactory::getInstance()->createGObjectController(type); + _baseView->TransCoordScreenToWorld(xx, yy, zz); + model->setInicPoint(xx, yy, zz); - //Prepares the initial model + model->setBBTKName(inputName); + model->setBBTKType("ComplexInputPort"); + model->setComplexPortType(type); - double xx = 5; - double yy = windowHeight-5; + model->addObserver(view); + model->addObserver(this); - //z value is not important yet, because it is only used a parallel projection - double zz = 900; -printf("EED wxVtkSceneManager::createGComplexBoxInputPort 900-450\n"); + //create the output port + GPortController* portController = createGPort(GOUTPUTPORT, inputName, + "ComplexInputPort", 0, model); + model->addOutputPort((GPortModel*) portController->getModel()); - _baseView->TransCoordScreenToWorld(xx,yy,zz); - model->setInicPoint(xx,yy,zz); + //Associates the view with the correspondent renderer and the model. + //(NOTE: Refresh is only made by the view) + view->setModel(model); + view->setBaseView(_baseView); + view->initVtkObjects(); - model->setBBTKName(inputName); - model->setBBTKType("ComplexInputPort"); - model->setComplexPortType(type); + //Associates the controller with the correspondent model and view + controller->setModelAndView(model, view); - model->addObserver(view); - model->addObserver(this); + //Resgiter change to the observers of the actual model + model->notifyObservers(_idManager); - //create the output port - GPortController* portController = createGPort(GOUTPUTPORT,inputName,"ComplexInputPort",0,model); - model->addOutputPort((GPortModel*)portController->getModel()); + int newId = addObjectController(controller); + return newId; +} - //Associates the view with the correspondent renderer and the model. - //(NOTE: Refresh is only made by the view) - view->setModel(model); - view->setBaseView(_baseView); - view->initVtkObjects(); +//========================================================================= - //Associates the controller with the correspondent model and view - controller->setModelAndView(model,view); +int wxVtkSceneManager::createGComplexBoxOutputPort(std::string outputName) { + //EED int windowWidth=_baseView->GetRenWin()->GetSize()[0]; + int windowHeight = _baseView->GetRenWin()->GetSize()[1]; - //Resgiter change to the observers of the actual model - model->notifyObservers(_idManager); + int type = GCOMPLEXOUTPUTPORT; - int newId = addObjectController(controller); - return newId; - } + //Create the MVC Objects - //========================================================================= + GComplexBoxPortModel + *model = + (GComplexBoxPortModel*) GObjectsMVCFactory::getInstance()->createGObjectModel( + type); + vtkGObjectView *view = + GObjectsMVCFactory::getInstance()->createGObjectView(type); + GObjectController *controller = + GObjectsMVCFactory::getInstance()->createGObjectController(type); - int wxVtkSceneManager::createGComplexBoxOutputPort(std::string outputName) - { -//EED int windowWidth=_baseView->GetRenWin()->GetSize()[0]; - int windowHeight=_baseView->GetRenWin()->GetSize()[1]; + //Prepares the initial model - int type = GCOMPLEXOUTPUTPORT; + double xx = 5; + double yy = windowHeight - 5; - //Create the MVC Objects + //z value is not important yet, because it is only used a parallel projection + double zz = 900; - GComplexBoxPortModel *model = (GComplexBoxPortModel*)GObjectsMVCFactory::getInstance()->createGObjectModel(type); - vtkGObjectView *view = GObjectsMVCFactory::getInstance()->createGObjectView(type); - GObjectController *controller = GObjectsMVCFactory::getInstance()->createGObjectController(type); + printf("EED wxVtkSceneManager::createGComplexBoxOutputPort 900-450\n"); - //Prepares the initial model + _baseView->TransCoordScreenToWorld(xx, yy, zz); + model->setInicPoint(xx, yy, zz); - double xx = 5; - double yy = windowHeight-5; + model->setBBTKName(outputName); + model->setBBTKType("ComplexOutputPort"); + model->setComplexPortType(type); - //z value is not important yet, because it is only used a parallel projection - double zz = 900; + model->addObserver(view); + model->addObserver(this); -printf("EED wxVtkSceneManager::createGComplexBoxOutputPort 900-450\n"); + //create the output port + GPortController* portController = createGPort(GINPUTPORT, outputName, + "ComplexInputPort", 0, model); + model->addInputPort((GPortModel*) portController->getModel()); - _baseView->TransCoordScreenToWorld(xx,yy,zz); - model->setInicPoint(xx,yy,zz); + //Associates the view with the correspondent renderer and the model. + //(NOTE: Refresh is only made by the view) + view->setModel(model); + view->setBaseView(_baseView); + view->initVtkObjects(); - model->setBBTKName(outputName); - model->setBBTKType("ComplexOutputPort"); - model->setComplexPortType(type); + //Associates the controller with the correspondent model and view + controller->setModelAndView(model, view); - model->addObserver(view); - model->addObserver(this); + //Resgiter change to the observers of the actual model + model->notifyObservers(_idManager); - //create the output port - GPortController* portController = createGPort(GINPUTPORT,outputName,"ComplexInputPort",0,model); - model->addInputPort((GPortModel*)portController->getModel()); + int newId = addObjectController(controller); + return newId; +} - //Associates the view with the correspondent renderer and the model. - //(NOTE: Refresh is only made by the view) - view->setModel(model); - view->setBaseView(_baseView); - view->initVtkObjects(); +//========================================================================= - //Associates the controller with the correspondent model and view - controller->setModelAndView(model,view); +int wxVtkSceneManager::createGInputPort(int portType, int posinBox, + GBoxModel *blackBox, BlackBoxInputDescriptor *desc) { + GPortController* portController = createGPort(portType, desc->GetName(), + desc->GetTypeName(), posinBox, blackBox); + blackBox->addInputPort((GPortModel*) portController->getModel()); + return portController->getId(); +} - //Resgiter change to the observers of the actual model - model->notifyObservers(_idManager); +//========================================================================= - int newId = addObjectController(controller); - return newId; - } +int wxVtkSceneManager::createGOutputPort(int portType, int posinBox, + GBoxModel *blackBox, BlackBoxOutputDescriptor *desc) { + GPortController* portController = createGPort(portType, desc->GetName(), + desc->GetTypeName(), posinBox, blackBox); + blackBox->addOutputPort((GPortModel*) portController->getModel()); + return portController->getId(); +} - //========================================================================= +//========================================================================= - int wxVtkSceneManager::createGInputPort(int portType, int posinBox,GBoxModel *blackBox, BlackBoxInputDescriptor *desc) - { - GPortController* portController = createGPort(portType,desc->GetName(),desc->GetTypeName(),posinBox,blackBox); - blackBox->addInputPort((GPortModel*)portController->getModel()); - return portController->getId(); - } +GPortController* wxVtkSceneManager::createGPort(int portType, + std::string bbtkName, std::string bbtkType, int posInBox, + GBoxModel *blackBox) { + int type = GPORT; - //========================================================================= + //Create the MVC Objects + GPortModel + *model = + (GPortModel*) GObjectsMVCFactory::getInstance()->createGObjectModel( + type); + vtkGObjectView *view = + GObjectsMVCFactory::getInstance()->createGObjectView(type); + GObjectController* controller = + GObjectsMVCFactory::getInstance()->createGObjectController(type); - int wxVtkSceneManager::createGOutputPort(int portType, int posinBox,GBoxModel *blackBox, BlackBoxOutputDescriptor *desc) - { - GPortController* portController = createGPort(portType,desc->GetName(),desc->GetTypeName(),posinBox,blackBox); - blackBox->addOutputPort((GPortModel*)portController->getModel()); - return portController->getId(); - } + model->registerInBox(blackBox, portType, posInBox); - //========================================================================= + model->setBBTKType(bbtkType); + model->setBBTKName(bbtkName); - GPortController* wxVtkSceneManager::createGPort(int portType,std::string bbtkName, std::string bbtkType, int posInBox,GBoxModel *blackBox) - { - int type = GPORT; + model->addObserver(view); + model->addObserver(this); - //Create the MVC Objects - GPortModel *model = (GPortModel*)GObjectsMVCFactory::getInstance()->createGObjectModel(type); - vtkGObjectView *view = GObjectsMVCFactory::getInstance()->createGObjectView(type); - GObjectController* controller = GObjectsMVCFactory::getInstance()->createGObjectController(type); + //Associates the view with the correspondent renderer and the model. + //(NOTE: Refresh is only made by the view) + view->setModel(model); + view->setBaseView(_baseView); + view->initVtkObjects(); - model->registerInBox(blackBox,portType, posInBox); + //Associates the controller with the correspondent model and view + controller->setModelAndView(model, view); - model->setBBTKType(bbtkType); - model->setBBTKName(bbtkName); + model->notifyObservers(_idManager); - model->addObserver(view); - model->addObserver(this); + addObjectController(controller); - //Associates the view with the correspondent renderer and the model. - //(NOTE: Refresh is only made by the view) - view->setModel(model); - view->setBaseView(_baseView); - view->initVtkObjects(); + return (GPortController*) controller; +} - //Associates the controller with the correspondent model and view - controller->setModelAndView(model,view); +//========================================================================= - model->notifyObservers(_idManager); +int wxVtkSceneManager::createGConnector(GPortModel* startPort) { + int type = GCONNECTOR; - addObjectController(controller); + manualConnectorContourController* manContourControl = + new manualConnectorContourController(); + manualConnectorContourView* manContourView = + new manualConnectorContourView(); + manualContourModel* manContourModel = new manualContourModel(); - return (GPortController*)controller; - } + GConnectorController* connectorcontroller = new GConnectorController(); + GConnectorModel* connectorModel = new GConnectorModel(); + vtkGConnectorView* connectorView = new vtkGConnectorView(); + connectorModel->setGObjectType(type); - //========================================================================= + manContourModel->SetCloseContour(false); + connectorModel->setStartPort(startPort); - int wxVtkSceneManager::createGConnector(GPortModel* startPort) - { - int type = GCONNECTOR; + manContourView->SetModel(manContourModel); + manContourView->SetWxVtkBaseView(_baseView); + manContourView->SetRange(0.5); + manContourView->SetZ(900); - manualConnectorContourController* manContourControl = new manualConnectorContourController(); - manualConnectorContourView* manContourView = new manualConnectorContourView(); - manualContourModel* manContourModel = new manualContourModel(); + manContourView->SetColorNormalContour(0, 0, 1); + manContourView->SetColorEditContour(0.5, 0.5, 0.5); + manContourView->SetColorSelectContour(1, 0.8, 0); + manContourView->SetWidthLine(1); + manContourView->SetShowText(false); - GConnectorController* connectorcontroller = new GConnectorController(); - GConnectorModel* connectorModel = new GConnectorModel(); - vtkGConnectorView* connectorView = new vtkGConnectorView(); - connectorModel->setGObjectType(type); + manContourControl->SetModelView(manContourModel, manContourView); - manContourModel->SetCloseContour(false); - connectorModel->setStartPort(startPort); + manContourControl->CreateNewManualContour(); - manContourView->SetModel( manContourModel ); - manContourView->SetWxVtkBaseView( _baseView ); - manContourView->SetRange( 0.5 ); - manContourView->SetZ( 900 ); + manContourView->RefreshContour(); - manContourView->SetColorNormalContour(0, 0, 1); - manContourView->SetColorEditContour(0.5, 0.5, 0.5); - manContourView->SetColorSelectContour(1, 0.8, 0); - manContourView->SetWidthLine(1); - manContourView->SetShowText(false); + double x, y, z; + connectorModel->getInicPoint(x, y, z); - manContourControl->SetModelView( manContourModel , manContourView ); + manContourControl->SetState(1); + manContourModel->SetCloseContour(false); - manContourControl->CreateNewManualContour(); + manContourModel->AddPoint(x, y, z); + manContourView->AddPoint(); - manContourView->RefreshContour(); + manContourModel->AddPoint(x, y, z); + manContourView->AddPoint(); + int bak = manContourControl->GetNumberOfPointsManualContour() - 1; + manContourControl->_bakIdPoint = bak; + manContourView->Refresh(); - double x,y,z; - connectorModel->getInicPoint(x,y,z); + manContourControl->SetMoving(false); - manContourControl->SetState(1); - manContourModel->SetCloseContour(false); + connectorcontroller->setModelAndView(connectorModel, connectorView); - manContourModel->AddPoint(x,y,z); - manContourView->AddPoint(); + int newId = addObjectController(connectorcontroller); - manContourModel->AddPoint(x,y,z); - manContourView->AddPoint(); + connectorcontroller->setManualContourController(manContourControl); + connectorModel->setManualContourModel(manContourModel); + connectorView->setManualContourView(manContourView); + connectorView->setModel(connectorModel); + connectorView->setBaseView(_baseView); - int bak= manContourControl->GetNumberOfPointsManualContour() - 1; - manContourControl->_bakIdPoint=bak; - manContourView->Refresh(); + connectorModel->addObserver(connectorView); + connectorModel->addObserver(this); - manContourControl->SetMoving( false ); + return newId; +} - connectorcontroller->setModelAndView(connectorModel,connectorView); +//========================================================================= - int newId = addObjectController(connectorcontroller); +void wxVtkSceneManager::registerController(InteractorStyleMaracas *param) { + vtkInteractorStyleBaseView + * baseViewControlManager = + (vtkInteractorStyleBaseView*) _baseView->GetInteractorStyleBaseView(); + baseViewControlManager->AddInteractorStyleMaracas(param); +} - connectorcontroller->setManualContourController(manContourControl); - connectorModel->setManualContourModel(manContourModel); - connectorView->setManualContourView(manContourView); - connectorView->setModel(connectorModel); - connectorView->setBaseView(_baseView); +//========================================================================= +void wxVtkSceneManager::unregisterController(InteractorStyleMaracas *param) { + vtkInteractorStyleBaseView + * baseViewControlManager = + (vtkInteractorStyleBaseView*) _baseView->GetInteractorStyleBaseView(); + baseViewControlManager->RemoveInteractorStyleMaracas(param); +} - connectorModel->addObserver(connectorView); - connectorModel->addObserver(this); +//========================================================================= - return newId; - } +vtkRenderer* wxVtkSceneManager::getRenderer() { + return _baseView->GetRenderer(); +} - //========================================================================= +//========================================================================= - void wxVtkSceneManager::registerController(InteractorStyleMaracas *param) - { - vtkInteractorStyleBaseView* baseViewControlManager = (vtkInteractorStyleBaseView*)_baseView->GetInteractorStyleBaseView(); - baseViewControlManager->AddInteractorStyleMaracas( param ); - } +vtkRenderWindow* wxVtkSceneManager::getRenderWindow() { + return _baseView->GetRenWin(); +} +//========================================================================= - //========================================================================= - void wxVtkSceneManager::unregisterController(InteractorStyleMaracas *param) - { - vtkInteractorStyleBaseView* baseViewControlManager = (vtkInteractorStyleBaseView*)_baseView->GetInteractorStyleBaseView(); - baseViewControlManager->RemoveInteractorStyleMaracas( param ); +//========================================================================= +int wxVtkSceneManager::GetIndexInSelected(int idControler) { + int index = -1; + for (int i = 0; i < (int) _selectedObjects.size(); i++) { + if (_selectedObjects[i] == idControler) { + index = i; + break; + } } + return index; +} +//========================================================================= - //========================================================================= +void wxVtkSceneManager::update(int idController, int command) { - vtkRenderer* wxVtkSceneManager::getRenderer() - { - return _baseView->GetRenderer(); - } - - //========================================================================= + if (command != NO_COMMAND) { + if (command == ADD_TO_SELECTED) { + //EEDBorrame GObjectController* cont = _controllers[idController]; - vtkRenderWindow* wxVtkSceneManager::getRenderWindow() - { - return _baseView->GetRenWin(); - } - //========================================================================= - - - //========================================================================= - int wxVtkSceneManager::GetIndexInSelected(int idControler) - { - int index=-1; - for (int i=0; i<(int)_selectedObjects.size(); i++) - { - if(_selectedObjects[i]==idControler) - { - index=i; - break; - } - } - return index; - } - //========================================================================= - - void wxVtkSceneManager::update(int idController,int command) - { - - if(command != NO_COMMAND) - { - if(command == ADD_TO_SELECTED) - { -//EEDBorrame GObjectController* cont = _controllers[idController]; - - if (GetIndexInSelected(idController)==-1) - { - _selectedObjects.push_back(idController); - } + if (GetIndexInSelected(idController) == -1) { + _selectedObjects.push_back(idController); + } -//EEDBorrame -// bool foundID=false; -// for (int i=0; i<(int)_selectedObjects.size() && foundID==false; i++) -// { -// if(_selectedObjects[i]==idController) -// { -// foundID = true; -// } -// } -// if(!foundID) -// { -// _selectedObjects.push_back(idController); -// } - - }else if(command == REMOVE_FROM_SELECTED) - { - int index=GetIndexInSelected(idController); - if (index>=0) - { - _selectedObjects.erase( _selectedObjects.begin()+index ); - } - } - else if(command == INIT_CREATION_CONTOUR) - { - _worldState = INIT_CREATION_CONTOUR; - GObjectController* cont = _controllers[idController]; - GPortModel* startOutputPort = (GPortModel*)cont->getModel(); - - - // The last one is the controller of the connector - std::map::iterator it2; - - for(it2 = _controllers.begin(); it2 != _controllers.end(); ++it2) - { - GObjectController *cont = it2->second; - if(cont->getGObjectType() == GPORT ) - { - GPortModel* port = (GPortModel*)cont->getModel(); - if(port->getPortType()==GINPUTPORT) - { - cont->SetActive(true); - } - else - { - cont->getView()->setState(NOTHING_HAPPENS); - cont->getModel()->notifyObservers(_idManager); - cont->SetActive(false); - } - } - else - { + //EEDBorrame + // bool foundID=false; + // for (int i=0; i<(int)_selectedObjects.size() && foundID==false; i++) + // { + // if(_selectedObjects[i]==idController) + // { + // foundID = true; + // } + // } + // if(!foundID) + // { + // _selectedObjects.push_back(idController); + // } + + } else if (command == REMOVE_FROM_SELECTED) { + int index = GetIndexInSelected(idController); + if (index >= 0) { + _selectedObjects.erase(_selectedObjects.begin() + index); + } + } else if (command == INIT_CREATION_CONTOUR) { + _worldState = INIT_CREATION_CONTOUR; + GObjectController* cont = _controllers[idController]; + GPortModel* startOutputPort = (GPortModel*) cont->getModel(); + + // The last one is the controller of the connector + std::map::iterator it2; + + for (it2 = _controllers.begin(); it2 != _controllers.end(); ++it2) { + GObjectController *cont = it2->second; + if (cont->getGObjectType() == GPORT) { + GPortModel* port = (GPortModel*) cont->getModel(); + if (port->getPortType() == GINPUTPORT) { + cont->SetActive(true); + } else { cont->getView()->setState(NOTHING_HAPPENS); cont->getModel()->notifyObservers(_idManager); cont->SetActive(false); } + } else { + cont->getView()->setState(NOTHING_HAPPENS); + cont->getModel()->notifyObservers(_idManager); + cont->SetActive(false); } - _selectedObjects.clear(); - _idConnectionInCreation=createGConnector(startOutputPort); } - else if(command == FIN_CREATION_CONTOUR && _worldState == INIT_CREATION_CONTOUR) - { - _worldState = NOTHING_HAPPENS; - //int id = _controllers.size()-1; - GObjectController *cont = _controllers[_idConnectionInCreation]; - GConnectorModel *modelContour = (GConnectorModel*)cont->getModel(); - GObjectController *finPort = _controllers[idController]; - - if(finPort->getGObjectType() == GPORT) - { - GPortModel* modelPort = (GPortModel*)finPort->getModel(); - modelContour->setEndPort(modelPort); - } - - manualConnectorContourController* manCont = ((GConnectorController*)cont)->getManualContourController(); - manualConnectorContourView* connView = (manualConnectorContourView*)manCont->GetManualViewBaseContour(); - connView->Refresh(); - - std::map::iterator it2; + _selectedObjects.clear(); + _idConnectionInCreation = createGConnector(startOutputPort); + } else if (command == FIN_CREATION_CONTOUR && _worldState + == INIT_CREATION_CONTOUR) { + _worldState = NOTHING_HAPPENS; + //int id = _controllers.size()-1; + GObjectController *cont = _controllers[_idConnectionInCreation]; + GConnectorModel *modelContour = (GConnectorModel*) cont->getModel(); + GObjectController *finPort = _controllers[idController]; + + if (finPort->getGObjectType() == GPORT) { + GPortModel* modelPort = (GPortModel*) finPort->getModel(); + modelContour->setEndPort(modelPort); + } - for(it2 = _controllers.begin(); it2 != _controllers.end(); ++it2) - { - GObjectController *cont = it2->second; - if(cont->getView()!=NULL) - { - cont->getView()->setState(NOTHING_HAPPENS); - cont->getModel()->notifyObservers(_idManager); - } - cont->SetActive(true); + manualConnectorContourController + * manCont = + ((GConnectorController*) cont)->getManualContourController(); + manualConnectorContourView + * connView = + (manualConnectorContourView*) manCont->GetManualViewBaseContour(); + connView->Refresh(); + + std::map::iterator it2; + + for (it2 = _controllers.begin(); it2 != _controllers.end(); ++it2) { + GObjectController *cont = it2->second; + if (cont->getView() != NULL) { + cont->getView()->setState(NOTHING_HAPPENS); + cont->getModel()->notifyObservers(_idManager); } + cont->SetActive(true); } - } } - //========================================================================= - - bool wxVtkSceneManager::OnMouseMove() - { - int X,Y; - bool okStatusMessage = false; - bool okPortMessage = false; - wxVTKRenderWindowInteractor *wxVTKiren; - wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor(); - wxVTKiren->GetEventPosition(X,Y); - - - if(_worldState == DRAG_OBJECTS) - { - for (int i=0; i<(int)_selectedObjects.size(); i++) - { - int id = _selectedObjects[i]; - GObjectController* cont = _controllers[id]; - if(_startDragging) - { - cont->getView()->setStartDragging(true); - } - cont->getView()->moveObject(X,Y); - cont->getView()->setState(DRAG); - cont->getModel()->notifyObservers(_idManager); +} + +//========================================================================= + +bool wxVtkSceneManager::OnMouseMove() { + int X, Y; + bool okStatusMessage = false; + bool okPortMessage = false; + wxVTKRenderWindowInteractor *wxVTKiren; + wxVTKiren + = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor(); + wxVTKiren->GetEventPosition(X, Y); + + if (_worldState == DRAG_OBJECTS) { + for (int i = 0; i < (int) _selectedObjects.size(); i++) { + int id = _selectedObjects[i]; + GObjectController* cont = _controllers[id]; + if (_startDragging) { + cont->getView()->setStartDragging(true); } + cont->getView()->moveObject(X, Y); + cont->getView()->setState(DRAG); + cont->getModel()->notifyObservers(_idManager); + } - std::map::iterator it; - + std::map::iterator it; - for(it = _controllers.begin(); it != _controllers.end(); ++it) - { - GObjectController *desc = it->second; - if(desc->getGObjectType()==GCONNECTOR) - { - vtkGConnectorView* vconn = (vtkGConnectorView*)desc->getView(); - vconn->updateStartEndPoints(); - } + for (it = _controllers.begin(); it != _controllers.end(); ++it) { + GObjectController *desc = it->second; + if (desc->getGObjectType() == GCONNECTOR) { + vtkGConnectorView* vconn = (vtkGConnectorView*) desc->getView(); + vconn->updateStartEndPoints(); } + } - _startDragging=false; + _startDragging = false; + } else if (_worldState == NOTHING_HAPPENS || _worldState + == INIT_CREATION_CONTOUR) { + std::map::iterator it; + double px, py, pz; + for (it = _controllers.begin(); it != _controllers.end(); ++it) { + GObjectController *desc = it->second; + int type = desc->getGObjectType(); + int state = desc->getView()->getState(); + desc->getModel()->getCenter(px, py, pz); + + if (state == HIGHLIGHTED) { + okStatusMessage = true; + updateStatusBar(desc->getStatusText()); + if (type == GBLACKBOX) { + GBlackBoxModel *mod = (GBlackBoxModel*) desc->getModel(); + _parent->displayBlackBoxInfo(mod->getBBTKPackage(), + mod->getBBTKType()); + } // if GBLACKBOX + if (type == GPORT) { + // PortText + okPortMessage = true; + py = py + 5; + _textActor->SetInput(desc->getStatusText().c_str()); + _textActor->SetScale(0.1); + _textActor->SetPosition(px - 25, py + 1, pz + 2); + + // FillPortText + px = px - 33; + py = py; + _fillObjectActor->SetScale(1); + _fillObjectActor->GetProperty()->SetOpacity(0.50); + _fillObjectActor->SetPosition(px, py, 1); + _aPolygonMapper->Modified(); + } // if GPORT + + } // for controllers it } - else if(_worldState == NOTHING_HAPPENS || _worldState == INIT_CREATION_CONTOUR) - { - std::map::iterator it; - double px, py, pz; - for(it = _controllers.begin(); it != _controllers.end(); ++it) - { - GObjectController *desc = it->second; - int type = desc->getGObjectType(); - int state = desc->getView()->getState(); - desc->getModel()->getCenter(px,py,pz); - - if(state == HIGHLIGHTED){ - okStatusMessage = true; - updateStatusBar(desc->getStatusText()); - if(type==GBLACKBOX) - { - GBlackBoxModel *mod = (GBlackBoxModel*)desc->getModel(); - _parent->displayBlackBoxInfo(mod->getBBTKPackage(),mod->getBBTKType()); - } // if GBLACKBOX - if(type==GPORT) - { - // PortText - okPortMessage = true; - py=py+5; - _textActor->SetInput( desc->getStatusText().c_str() ); - _textActor->SetScale(0.1); - _textActor->SetPosition( px-25 ,py+1 , pz+2 ); - - // FillPortText - px=px-33; - py=py; - _fillObjectActor->SetScale(1); - _fillObjectActor->GetProperty()->SetOpacity(0.50); - _fillObjectActor->SetPosition(px,py,1); - _aPolygonMapper->Modified(); - } // if GPORT - - } // for controllers it - } - } - if (okStatusMessage==false) - { - updateStatusBar(""); - } + } + if (okStatusMessage == false) { + updateStatusBar(""); + } - if (okPortMessage==false) - { - _textActor->SetScale(0.0001); - _fillObjectActor->SetScale(0.0001); - } - return true; + if (okPortMessage == false) { + _textActor->SetScale(0.0001); + _fillObjectActor->SetScale(0.0001); } + return true; +} - //========================================================================= +//========================================================================= - bool wxVtkSceneManager::OnLeftButtonDown() - { +bool wxVtkSceneManager::OnLeftButtonDown() { - if(_worldState==INIT_CREATION_CONTOUR) - { - bool isOverPort=false; - std::map::iterator it; - for(it = _controllers.begin(); it != _controllers.end() && isOverPort==false; ++it) - { - GObjectController *desc = it->second; - if(desc->getGObjectType()==GPORT) - { - GPortModel *portmod = (GPortModel*)desc->getModel(); - vtkGObjectView *portView = desc->getView(); - if(portmod->getPortType()==GINPUTPORT && portView->getState()==HIGHLIGHTED) - { - isOverPort=true; - } // if + if (_worldState == INIT_CREATION_CONTOUR) { + bool isOverPort = false; + std::map::iterator it; + for (it = _controllers.begin(); it != _controllers.end() && isOverPort + == false; ++it) { + GObjectController *desc = it->second; + if (desc->getGObjectType() == GPORT) { + GPortModel *portmod = (GPortModel*) desc->getModel(); + vtkGObjectView *portView = desc->getView(); + if (portmod->getPortType() == GINPUTPORT + && portView->getState() == HIGHLIGHTED) { + isOverPort = true; } // if - } // for - - if(isOverPort==false) - { - CancelConnection(); - UnSelectBlackBoxes(); - } // isOverPort + } // if + } // for - } else { //_worldState + if (isOverPort == false) { + CancelConnection(); + UnSelectBlackBoxes(); + } // isOverPort - _worldState = DRAG_OBJECTS; - _startDragging = true; + } else { //_worldState - int shiftkey = _vtkInteractorStyleBaseView->GetInteractor()->GetShiftKey(); - int ctrlkey = _vtkInteractorStyleBaseView->GetInteractor()->GetControlKey(); - ctrlkey = ctrlkey + shiftkey; + _worldState = DRAG_OBJECTS; + _startDragging = true; - GObjectController *cont = GetGBlackBoxControlerPointedByMouse(); + int shiftkey = + _vtkInteractorStyleBaseView->GetInteractor()->GetShiftKey(); + int ctrlkey = + _vtkInteractorStyleBaseView->GetInteractor()->GetControlKey(); + ctrlkey = ctrlkey + shiftkey; + GObjectController *cont = GetGBlackBoxControlerPointedByMouse(); - if (GetGBlackBoxControlerPointedByMouse()!=NULL) - { - int state=cont->getView()->getState() ; - if( (ctrlkey==0) && (state==HIGHLIGHTED) ) - { - UnSelectBlackBoxes(); - } + if (GetGBlackBoxControlerPointedByMouse() != NULL) { + int state = cont->getView()->getState(); + if ((ctrlkey == 0) && (state == HIGHLIGHTED)) { + UnSelectBlackBoxes(); } - for (int i = 0; i < (int)_selectedObjects.size(); i++) - { - int id = _selectedObjects[i]; - GObjectController* cont = _controllers[id]; - cont->getView()->setState(DRAG); - cont->getModel()->notifyObservers(_idManager); - } // for + } + for (int i = 0; i < (int) _selectedObjects.size(); i++) { + int id = _selectedObjects[i]; + GObjectController* cont = _controllers[id]; + cont->getView()->setState(DRAG); + cont->getModel()->notifyObservers(_idManager); + } // for - } // if _selectedObjects.size + } // if _selectedObjects.size - return true; + return true; +} + +//========================================================================= + +bool wxVtkSceneManager::OnLeftButtonUp() { + if (_worldState == DRAG_OBJECTS) { + _worldState = NOTHING_HAPPENS; + + for (int i = 0; i < (int) _selectedObjects.size(); i++) { + int id = _selectedObjects[i]; + GObjectController* cont = _controllers[id]; + cont->getView()->setState(SELECTED); + cont->getModel()->notifyObservers(_idManager); + } } + return true; +} - //========================================================================= +//========================================================================= +void wxVtkSceneManager::CancelConnection() { + if (_worldState == INIT_CREATION_CONTOUR) { + _worldState = NOTHING_HAPPENS; + //int lastId = _controllers.size()-1; - bool wxVtkSceneManager::OnLeftButtonUp() - { - if(_worldState == DRAG_OBJECTS) - { - _worldState = NOTHING_HAPPENS; + GConnectorController *connector = + (GConnectorController*) _controllers[_idConnectionInCreation]; + connector->removeFromScene(); + unregisterController(connector); + _controllers.erase(_idConnectionInCreation); + + std::map::iterator it; + for (it = _controllers.begin(); it != _controllers.end(); ++it) { + GObjectController *desc = it->second; + desc->SetActive(true); + desc->getView()->setState(NOTHING_HAPPENS); + desc->getModel()->notifyObservers(_idManager); + } // for + }// if +} + +//========================================================================= + +bool wxVtkSceneManager::OnRightButtonUp() { + if (_worldState == INIT_CREATION_CONTOUR) { + CancelConnection(); + } + UnSelectBlackBoxes(); + return true; +} + +//========================================================================= + +GObjectController *wxVtkSceneManager::GetGBlackBoxControlerPointedByMouse() { + GObjectController *result = NULL; + int X, Y; + wxVTKRenderWindowInteractor *wxVTKiren; + wxVTKiren + = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor(); + wxVTKiren->GetEventPosition(X, Y); + + std::map::iterator it; + + for (it = _controllers.begin(); it != _controllers.end(); ++it) { + GObjectController *cont = it->second; + int type = cont->getGObjectType(); + + if (cont->getView()->isPointInside(X, Y) == true) { + if (type == GBLACKBOX) { + result = cont; + } // if type + } // if isPointInside + } // for it + return result; +} + +//========================================================================= +void wxVtkSceneManager::UnSelectBlackBoxes() { + for (int i = 0; i < (int) _selectedObjects.size(); i++) { + int id = _selectedObjects[i]; + GObjectController* control = _controllers[id]; + control->getView()->setState(NOTHING_HAPPENS); + }// for _selectedObjects + _selectedObjects.clear(); +} + +//========================================================================= +bool wxVtkSceneManager::OnLeftDClick() { + GObjectController *cont = GetGBlackBoxControlerPointedByMouse(); + if (cont != NULL) { + UnSelectBlackBoxes(); + _parent->editBlackBox((GBlackBoxModel*) cont->getModel()); + } - for (int i = 0; i < (int)_selectedObjects.size(); i++) - { + /*EED Borrame + + int X,Y; + wxVTKRenderWindowInteractor *wxVTKiren; + wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor(); + wxVTKiren->GetEventPosition(X,Y); + + std::map::iterator it; + + bool clickOnObject = false; + + for(it = _controllers.begin(); it != _controllers.end() && clickOnObject==false; ++it) + { + GObjectController *cont = it->second; + int type = cont->getGObjectType(); + + if(cont->getView()->isPointInside(X,Y)) + { + if(type==GBLACKBOX) + { + for (int i=0; i< (int)_selectedObjects.size(); i++) + { + int id = _selectedObjects[i]; + GObjectController* control = _controllers[id]; + control->getView()->setState(NOTHING_HAPPENS); + } + _selectedObjects.clear(); + + GBlackBoxModel *bbmodel = (GBlackBoxModel*)cont->getModel(); + _parent->editBlackBox(bbmodel); + } + clickOnObject = true; + } + } + + if(clickOnObject==false) + { + //_parent->editDiagramParameters(this); + } + */ + return true; +} + +//========================================================================= + +bool wxVtkSceneManager::OnChar() { + char keyCode = _vtkInteractorStyleBaseView->GetInteractor()-> GetKeyCode(); + + // KeyCode 127 : Delete Key + // KeyCode 8 : Backspace Key + if (keyCode == 8 || keyCode == 127) { + if (_selectedObjects.size() > 0) { + for (int i = 0; i < (int) _selectedObjects.size(); i++) { int id = _selectedObjects[i]; - GObjectController* cont = _controllers[id]; - cont->getView()->setState(SELECTED); - cont->getModel()->notifyObservers(_idManager); + std::map::iterator it; + it = _controllers.find(id); + if (it != _controllers.end()) { + deleteObject(id); + } } + _selectedObjects.clear(); } - return true; } - //========================================================================= - void wxVtkSceneManager::CancelConnection() - { - if(_worldState==INIT_CREATION_CONTOUR) - { - _worldState=NOTHING_HAPPENS; - //int lastId = _controllers.size()-1; - - GConnectorController *connector = (GConnectorController*)_controllers[_idConnectionInCreation]; - connector->removeFromScene(); - unregisterController(connector); - _controllers.erase(_idConnectionInCreation); - - std::map::iterator it; - for(it = _controllers.begin(); it != _controllers.end(); ++it) - { - GObjectController *desc = it->second; - desc->SetActive(true); - desc->getView()->setState(NOTHING_HAPPENS); - desc->getModel()->notifyObservers(_idManager); - } // for - }// if - } + return true; +} +//========================================================================= - //========================================================================= +void wxVtkSceneManager::AddControlerToBeRemove( + std::vector *controllersToRemove, int id) { - bool wxVtkSceneManager::OnRightButtonUp() - { - if(_worldState==INIT_CREATION_CONTOUR) - { - CancelConnection(); + int i; + bool ok = true; + for (i = 0; i < (int) controllersToRemove->size(); i++) { + if (id == (*controllersToRemove)[i]) { + ok = false; } - UnSelectBlackBoxes(); - return true; } - //========================================================================= + if (ok == true) { + controllersToRemove->push_back(id); + } - GObjectController *wxVtkSceneManager::GetGBlackBoxControlerPointedByMouse() - { - GObjectController *result=NULL; - int X,Y; - wxVTKRenderWindowInteractor *wxVTKiren; - wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor(); - wxVTKiren->GetEventPosition(X,Y); +} - std::map::iterator it; +//========================================================================= - for(it = _controllers.begin(); it != _controllers.end() ; ++it) - { - GObjectController *cont = it->second; - int type = cont->getGObjectType(); +void wxVtkSceneManager::deleteObject(int id) { + GObjectController *control = _controllers[id]; + std::vector controllersToRemove; - if( cont->getView()->isPointInside(X,Y)==true ) - { - if(type==GBLACKBOX) - { - result=cont; - } // if type - } // if isPointInside - } // for it - return result; - } - - //========================================================================= - void wxVtkSceneManager::UnSelectBlackBoxes() - { - for (int i=0; i< (int)_selectedObjects.size(); i++) - { - int id = _selectedObjects[i]; - GObjectController* control = _controllers[id]; - control->getView()->setState(NOTHING_HAPPENS); - }// for _selectedObjects - _selectedObjects.clear(); - } - - //========================================================================= - bool wxVtkSceneManager::OnLeftDClick() - { - GObjectController *cont = GetGBlackBoxControlerPointedByMouse(); - if (cont!=NULL) - { - UnSelectBlackBoxes(); - _parent->editBlackBox( (GBlackBoxModel*)cont->getModel() ); - } + if (control->getGObjectType() == GBLACKBOX || control->getGObjectType() + == GCOMPLEXINPUTPORT || control->getGObjectType() + == GCOMPLEXOUTPUTPORT) { + GBoxModel *bbmod = (GBoxModel*) control->getModel(); + std::vector inputs = bbmod->getInputPorts(); -/*EED Borrame + bool boxConnected = false; - int X,Y; - wxVTKRenderWindowInteractor *wxVTKiren; - wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor(); - wxVTKiren->GetEventPosition(X,Y); + // Add box input controllers to be removed + for (int i = 0; i < (int) inputs.size(); i++) { + AddControlerToBeRemove(&controllersToRemove, + inputs[i]->getObjectId()); + if (inputs[i]->isConnected()) { + boxConnected = true; + } + } - std::map::iterator it; + std::vector outputs = bbmod->getOutputPorts(); - bool clickOnObject = false; + // Add box output controllers to be removed + for (int i = 0; i < (int) outputs.size(); i++) { + AddControlerToBeRemove(&controllersToRemove, + outputs[i]->getObjectId()); + if (outputs[i]->isConnected()) { + boxConnected = true; + } + } - for(it = _controllers.begin(); it != _controllers.end() && clickOnObject==false; ++it) - { + // Add connection controllers to be removed + std::map::iterator it; + for (it = _controllers.begin(); it != _controllers.end(); ++it) { GObjectController *cont = it->second; int type = cont->getGObjectType(); - - if(cont->getView()->isPointInside(X,Y)) - { - if(type==GBLACKBOX) - { - for (int i=0; i< (int)_selectedObjects.size(); i++) - { - int id = _selectedObjects[i]; - GObjectController* control = _controllers[id]; - control->getView()->setState(NOTHING_HAPPENS); - } - _selectedObjects.clear(); - - GBlackBoxModel *bbmodel = (GBlackBoxModel*)cont->getModel(); - _parent->editBlackBox(bbmodel); + if (type == GCONNECTOR) { + GConnectorModel *conMod = (GConnectorModel*) cont->getModel(); + if (conMod->getStartPort() != NULL + && conMod->getStartPort()->getParentBox()->getObjectId() + == bbmod->getObjectId()) { + AddControlerToBeRemove(&controllersToRemove, + conMod->getObjectId()); + } + if (conMod->getEndPort() != NULL + && conMod->getEndPort()->getParentBox()->getObjectId() + == bbmod->getObjectId()) { + AddControlerToBeRemove(&controllersToRemove, + conMod->getObjectId()); } - clickOnObject = true; } } - if(clickOnObject==false) - { - //_parent->editDiagramParameters(this); - } -*/ - return true; + // Add box controller to be removed + AddControlerToBeRemove(&controllersToRemove, bbmod->getObjectId()); + } else if (control->getGObjectType() == GCONNECTOR) { + GConnectorModel *conMod = (GConnectorModel*) control->getModel(); + AddControlerToBeRemove(&controllersToRemove, conMod->getObjectId()); } - //========================================================================= + std::map::iterator it; - bool wxVtkSceneManager::OnChar() - { - char keyCode = _vtkInteractorStyleBaseView->GetInteractor()-> GetKeyCode(); - - // KeyCode 127 : Delete Key - // KeyCode 8 : Backspace Key - if(keyCode == 8 || keyCode == 127) - { - if(_selectedObjects.size()>0) - { - for(int i=0;i<(int)_selectedObjects.size();i++) - { - int id = _selectedObjects[i]; - std::map::iterator it; - it = _controllers.find(id); - if (it!=_controllers.end()) - { - deleteObject(id); - } - } - _selectedObjects.clear(); - } + for (int i = 0; i < (int) controllersToRemove.size(); i++) { + int key = controllersToRemove[i]; + it = _controllers.find(key); + GObjectController *cont = _controllers[key]; + if (cont != NULL) { + cont->removeFromScene(); + unregisterController((InteractorStyleMaracas*) cont); + _controllers.erase(it); + }//if + }// for +} + +//========================================================================= + +void wxVtkSceneManager::displayBlackBoxInfo(std::string packageName, + std::string boxName) { + _parent->displayBlackBoxInfo(packageName, boxName); +} + +//========================================================================= + +void wxVtkSceneManager::updateStatusBar(std::string textStatus) { + _parent->updateStatusBar(textStatus); +} + +//========================================================================= +std::string wxVtkSceneManager::LineNumber(bool withLineNumber, int &value) { + std::string result = ""; + if (withLineNumber == true) { + value++; + stringstream StrStream; + StrStream << value; + std::string strValue = StrStream.str(); + if (value < 10) { + result += " "; + } else if (value < 100) { + result += " "; } + result += strValue + ": "; + } + return result; +} +//========================================================================= +//DFCH +bool wxVtkSceneManager::MakeBoxExecutable() { + std::map selected = getSelectedObjects(); + + std::map::iterator it = selected.end(); + it--; + GObjectController* lastSelected = it->second; + //GObjectController* lastSelected = selected[selected.size()-1]; + if( lastSelected ) + { + vtkGObjectView* view = (vtkGObjectView*) lastSelected->getView(); + GBlackBoxModel *bbmodel = (GBlackBoxModel*) lastSelected->getModel(); + view->setState(HIGHLIGHTED); + if (bbmodel->isExecutable()) { + bbmodel->setExecutable(false); + } else { + bbmodel->setExecutable(true); + } + bbmodel->notifyObservers(lastSelected->getId()); return true; } + else + return( false ); +} +//DFCH - //========================================================================= +//========================================================================= - void wxVtkSceneManager::AddControlerToBeRemove(std::vector *controllersToRemove, int id) - { +std::string wxVtkSceneManager::getDiagramBBS(bool wln) { + bool existsExec = false; - int i; - bool ok=true; - for(i=0 ; i < (int)controllersToRemove->size() ; i++ ) - { - if (id == (*controllersToRemove)[i] ) - { - ok=false; - } - } + std::vector packages; + std::vector boxes; + std::vector connections; + std::vector execBoxes; - if (ok==true) - { - controllersToRemove->push_back( id ); - } + std::map::iterator it; - } + for (it = _controllers.begin(); it != _controllers.end(); ++it) { + GObjectController *desc = it->second; + int type = desc->getGObjectType(); - //========================================================================= + if (type == GBLACKBOX) { + GBlackBoxModel *mod = (GBlackBoxModel*) desc->getModel(); - void wxVtkSceneManager::deleteObject(int id) - { - GObjectController *control = _controllers[id]; - std::vector controllersToRemove; - - if(control->getGObjectType()==GBLACKBOX || control->getGObjectType()==GCOMPLEXINPUTPORT || control->getGObjectType()==GCOMPLEXOUTPUTPORT) - { - GBoxModel *bbmod = (GBoxModel*)control->getModel(); - std::vector inputs = bbmod->getInputPorts(); - - bool boxConnected = false; - - // Add box input controllers to be removed - for(int i = 0;i< (int)inputs.size();i++) - { - AddControlerToBeRemove( &controllersToRemove, inputs[i]->getObjectId() ); - if(inputs[i]->isConnected()) - { - boxConnected = true; + std::string pkg = mod->getBBTKPackage(); + bool existsPkg = false; + for (int t = 0; t < (int) packages.size() && existsPkg == false; t++) { + if (packages[t] == pkg) { + existsPkg = true; } } - - std::vector outputs = bbmod->getOutputPorts(); - - // Add box output controllers to be removed - for(int i = 0;i<(int)outputs.size();i++) - { - AddControlerToBeRemove( &controllersToRemove, outputs[i]->getObjectId() ); - if(outputs[i]->isConnected()) - { - boxConnected = true; - } + if (!existsPkg) { + packages.push_back(pkg); } - // Add connection controllers to be removed - std::map::iterator it; - for(it = _controllers.begin(); it != _controllers.end(); ++it) - { - GObjectController *cont = it->second; - int type = cont->getGObjectType(); - if(type==GCONNECTOR) - { - GConnectorModel *conMod = (GConnectorModel*)cont->getModel(); - if(conMod->getStartPort()!=NULL && conMod->getStartPort()->getParentBox()->getObjectId() == bbmod->getObjectId()) - { - AddControlerToBeRemove( &controllersToRemove, conMod->getObjectId() ); - } - if(conMod->getEndPort()!=NULL && conMod->getEndPort()->getParentBox()->getObjectId() == bbmod->getObjectId()) - { - AddControlerToBeRemove( &controllersToRemove, conMod->getObjectId() ); - } - } + boxes.push_back(it->first); + if (mod->isExecutable()) { + execBoxes.push_back(it->first); + existsExec = true; } - - // Add box controller to be removed - AddControlerToBeRemove( &controllersToRemove, bbmod->getObjectId() ); - } - else if(control->getGObjectType()==GCONNECTOR) - { - GConnectorModel *conMod = (GConnectorModel*)control->getModel(); - AddControlerToBeRemove( &controllersToRemove, conMod->getObjectId() ); + } else if (type == GCONNECTOR) { + connections.push_back(it->first); } - - - std::map::iterator it; - - for(int i = 0;i<(int)controllersToRemove.size();i++) - { - int key = controllersToRemove[i]; - it = _controllers.find( key ); - GObjectController *cont = _controllers[ key ]; - if(cont!=NULL) - { - cont->removeFromScene(); - unregisterController((InteractorStyleMaracas*)cont); - _controllers.erase(it); - }//if - }// for } - //========================================================================= - - void wxVtkSceneManager::displayBlackBoxInfo(std::string packageName, std::string boxName) - { - _parent->displayBlackBoxInfo(packageName,boxName); - } - - //========================================================================= - - void wxVtkSceneManager::updateStatusBar(std::string textStatus) - { - _parent->updateStatusBar(textStatus); - } + int lnNmbr = 0; + std::string script = ""; + script += LineNumber(wln, lnNmbr) + "# BBTK GEditor Script\n"; + script += LineNumber(wln, lnNmbr) + "# ----------------------\n"; + script += LineNumber(wln, lnNmbr) + "\n"; + if (existsExec) { + script += LineNumber(wln, lnNmbr) + "include std\n"; // EED + script += LineNumber(wln, lnNmbr) + "include itkvtk\n"; // EED + int i; + for (i = 0; i < (int) packages.size(); i++) { + script += LineNumber(wln, lnNmbr); + script += "include "; + script += packages[i]; + script += "\n"; + } + script += LineNumber(wln, lnNmbr); + script += "\n"; - //========================================================================= - std::string wxVtkSceneManager::LineNumber(bool withLineNumber, int &value) - { - std::string result=""; - if (withLineNumber==true) - { - value++; - stringstream StrStream; - StrStream << value; - std::string strValue=StrStream.str(); - if (value<10) - { - result+=" "; - }else if (value<100) - { - result+=" "; - } - - result+=strValue+": "; - } - return result; - } - //========================================================================= + //ups2 - std::string wxVtkSceneManager::getDiagramBBS(bool wln) - { - bool existsExec=false; + script += LineNumber(wln, lnNmbr); + script += "author \""; + script += _Author; + script += "\"\n"; - std::vector packages; - std::vector boxes; - std::vector connections; - std::vector execBoxes; + script += LineNumber(wln, lnNmbr); + script += "description \""; + script += _Description; + script += "\"\n"; - std::map::iterator it; + script += LineNumber(wln, lnNmbr); + script += "category \""; + script += _Category; + script += "\"\n"; - for(it = _controllers.begin(); it != _controllers.end(); ++it) - { - GObjectController *desc = it->second; - int type = desc->getGObjectType(); - - if(type==GBLACKBOX) - { - GBlackBoxModel *mod = (GBlackBoxModel*)desc->getModel(); - - std::string pkg = mod->getBBTKPackage(); - bool existsPkg = false; - for(int t = 0;t< (int)packages.size() && existsPkg == false;t++) - { - if(packages[t]==pkg) - { - existsPkg=true; - } - } - if(!existsPkg) - { - packages.push_back(pkg); - } + script += LineNumber(wln, lnNmbr); + script += "\n"; + // script+="include std\n"; // JPR - boxes.push_back(it->first); - if(mod->isExecutable()) - { - execBoxes.push_back(it->first); - existsExec=true; + for (i = 0; i < (int) boxes.size(); i++) { + script += LineNumber(wln, lnNmbr); + script += "new "; + int id = boxes[i]; + GObjectController *control = _controllers[id]; + GBlackBoxModel *model = (GBlackBoxModel*) control->getModel(); + + script += model->getBBTKType(); + script += " "; + script += model->getBBTKName(); + script += "\n"; + + std::vector inputs = model->getInputPorts(); + for (int j = 0; j < (int) inputs.size(); j++) { + GPortModel* inputPort = inputs[j]; + if (inputPort->isValueSet()) { + script += LineNumber(wln, lnNmbr); + script += " set "; + script += model->getBBTKName(); + script += "."; + script += inputPort->getBBTKName(); + script += " "; + script += inputPort->getValue(); + script += "\n"; } } - else if(type==GCONNECTOR) - { - connections.push_back(it->first); - } - } - int lnNmbr=0; - std::string script = ""; - script+=LineNumber(wln,lnNmbr)+"# BBTK GEditor Script\n"; - script+=LineNumber(wln,lnNmbr)+"# ----------------------\n"; - script+=LineNumber(wln,lnNmbr)+"\n"; - if(existsExec) - { - script+=LineNumber(wln,lnNmbr)+"include std\n"; // EED - script+=LineNumber(wln,lnNmbr)+"include itkvtk\n"; // EED - int i; - for(i = 0; i< (int)packages.size();i++) - { - script+=LineNumber(wln,lnNmbr); - script+="include "; - script+=packages[i]; - script+="\n"; - } + script += LineNumber(wln, lnNmbr); + script += "\n"; - script+=LineNumber(wln,lnNmbr); - script+="\n"; - - -//ups2 - - script+=LineNumber(wln,lnNmbr); - script+="author \""; - script+=_Author; - script+="\"\n"; - - script+=LineNumber(wln,lnNmbr); - script+="description \""; - script+=_Description; - script+="\"\n"; - - script+=LineNumber(wln,lnNmbr); - script+="category \""; - script+=_Category; - script+="\"\n"; - - script+=LineNumber(wln,lnNmbr); - script+="\n"; - - - // script+="include std\n"; // JPR - - for(i = 0; i < (int)boxes.size();i++) - { - script+=LineNumber(wln,lnNmbr); - script+="new "; - int id = boxes[i]; - GObjectController *control = _controllers[id]; - GBlackBoxModel *model = (GBlackBoxModel*)control->getModel(); - - script+=model->getBBTKType(); - script+=" "; - script+=model->getBBTKName(); - script+="\n"; - - std::vector inputs = model->getInputPorts(); - for(int j = 0; j < (int)inputs.size();j++) - { - GPortModel* inputPort = inputs[j]; - if(inputPort->isValueSet()) - { - script+=LineNumber(wln,lnNmbr); - script+=" set "; - script+=model->getBBTKName(); - script+="."; - script+=inputPort->getBBTKName(); - script+=" "; - script+=inputPort->getValue(); - script+="\n"; - } - } - - script+=LineNumber(wln,lnNmbr); - script+="\n"; - - } + } - script+=LineNumber(wln,lnNmbr); - script+="\n"; + script += LineNumber(wln, lnNmbr); + script += "\n"; - for(i = 0; i<(int)connections.size();i++) - { - script+=LineNumber(wln,lnNmbr); - script+="connect "; - int id = connections[i]; - GObjectController *control = _controllers[id]; - GConnectorModel *model = (GConnectorModel*)control->getModel(); + for (i = 0; i < (int) connections.size(); i++) { + script += LineNumber(wln, lnNmbr); + script += "connect "; + int id = connections[i]; + GObjectController *control = _controllers[id]; + GConnectorModel *model = (GConnectorModel*) control->getModel(); - //Start Connection info - GPortModel *start = model->getStartPort(); - script+=start->getParentBox()->getBBTKName(); - script+="."; - script+=start->getBBTKName(); + //Start Connection info + GPortModel *start = model->getStartPort(); + script += start->getParentBox()->getBBTKName(); + script += "."; + script += start->getBBTKName(); - script+=" "; + script += " "; - //End Connection info - GPortModel *end = model->getEndPort(); - script+=end->getParentBox()->getBBTKName(); - script+="."; - script+=end->getBBTKName(); + //End Connection info + GPortModel *end = model->getEndPort(); + script += end->getParentBox()->getBBTKName(); + script += "."; + script += end->getBBTKName(); - script+="\n"; - } + script += "\n"; + } - script+=LineNumber(wln,lnNmbr); - script+="\n"; - for(i = 0; i<(int)execBoxes.size();i++) - { - script+=LineNumber(wln,lnNmbr); - script+="exec "; - int id = execBoxes[i]; - GObjectController *control = _controllers[id]; - GBlackBoxModel *model = (GBlackBoxModel*)control->getModel(); - - script+=model->getBBTKName(); - script+="\n"; - } + script += LineNumber(wln, lnNmbr); + script += "\n"; + for (i = 0; i < (int) execBoxes.size(); i++) { + script += LineNumber(wln, lnNmbr); + script += "exec "; + int id = execBoxes[i]; + GObjectController *control = _controllers[id]; + GBlackBoxModel *model = (GBlackBoxModel*) control->getModel(); + script += model->getBBTKName(); + script += "\n"; } - return script; } - //========================================================================= + return script; +} - std::string wxVtkSceneManager::saveComplexBoxBBS() - { - std::vector packages; - std::vector boxes; - std::vector connections; - std::vector execBoxes; +//========================================================================= - std::map::iterator it; +std::string wxVtkSceneManager::saveComplexBoxBBS() { + std::vector packages; + std::vector boxes; + std::vector connections; + std::vector execBoxes; - for(it = _controllers.begin(); it != _controllers.end(); ++it) - { - GObjectController *desc = it->second; - int type = desc->getGObjectType(); + std::map::iterator it; - if(type==GBLACKBOX) - { - GBlackBoxModel *mod = (GBlackBoxModel*)desc->getModel(); - - std::string pkg = mod->getBBTKPackage(); - bool existsPkg = false; - for(int t = 0;t<(int)packages.size() && existsPkg == false;t++) - { - if(packages[t]==pkg) - { - existsPkg=true; - } - } - if(!existsPkg) - { - packages.push_back(pkg); - } + for (it = _controllers.begin(); it != _controllers.end(); ++it) { + GObjectController *desc = it->second; + int type = desc->getGObjectType(); + if (type == GBLACKBOX) { + GBlackBoxModel *mod = (GBlackBoxModel*) desc->getModel(); - boxes.push_back(it->first); - if(mod->isExecutable()) - { - execBoxes.push_back(it->first); + std::string pkg = mod->getBBTKPackage(); + bool existsPkg = false; + for (int t = 0; t < (int) packages.size() && existsPkg == false; t++) { + if (packages[t] == pkg) { + existsPkg = true; } } - else if(type==GCONNECTOR) - { - connections.push_back(it->first); + if (!existsPkg) { + packages.push_back(pkg); } - } - - std::string script = ""; - script+="include std\n"; // EED - script+="include itkvtk\n"; // EED - int i; - for(i = 0; i<(int)packages.size();i++) - { - script+="include "; - script+=packages[i]; - script+="\n"; + boxes.push_back(it->first); + if (mod->isExecutable()) { + execBoxes.push_back(it->first); + } + } else if (type == GCONNECTOR) { + connections.push_back(it->first); } - script+="\n"; - - - // Definition of a complex box - script+="define "; - script+=_cbName+" "+_cbPackageName; - script+="\n"; - script+="\n"; + } - script+="author \""; - script+=_Author; - script+="\"\n"; + std::string script = ""; - script+="description \""; - script+=_Description; - script+="\"\n"; - script+="\n"; + script += "include std\n"; // EED + script += "include itkvtk\n"; // EED + int i; + for (i = 0; i < (int) packages.size(); i++) { + script += "include "; + script += packages[i]; + script += "\n"; + } + script += "\n"; + + // Definition of a complex box + script += "define "; + script += _cbName + " " + _cbPackageName; + script += "\n"; + script += "\n"; + + script += "author \""; + script += _Author; + script += "\"\n"; + + script += "description \""; + script += _Description; + script += "\"\n"; + script += "\n"; + + script += "category \""; + script += _Category; + script += "\"\n"; + script += "\n"; + + // Create boxes + for (i = 0; i < (int) boxes.size(); i++) { + script += "new "; + int id = boxes[i]; + GObjectController *control = _controllers[id]; + GBlackBoxModel *model = (GBlackBoxModel*) control->getModel(); + + script += model->getBBTKType(); + script += " "; + script += model->getBBTKName(); + script += "\n"; + + std::vector inputs = model->getInputPorts(); + for (int j = 0; j < (int) inputs.size(); j++) { + GPortModel* inputPort = inputs[j]; + if (inputPort->isValueSet()) { + script += " set "; + script += model->getBBTKName(); + script += "."; + script += inputPort->getBBTKName(); + script += " "; + script += inputPort->getValue(); + script += "\n"; + } + } + script += "\n"; - script+="category \""; - script+=_Category; - script+="\"\n"; - script+="\n"; + } + // Create connections in the script. If the connection is made with a complex port, it is created the input or output - // Create boxes - for(i = 0; i<(int)boxes.size();i++) - { - script+="new "; - int id = boxes[i]; - GObjectController *control = _controllers[id]; - GBlackBoxModel *model = (GBlackBoxModel*)control->getModel(); - - script+=model->getBBTKType(); - script+=" "; - script+=model->getBBTKName(); - script+="\n"; - - std::vector inputs = model->getInputPorts(); - for(int j = 0; j<(int)inputs.size();j++) - { - GPortModel* inputPort = inputs[j]; - if(inputPort->isValueSet()) - { - script+=" set "; - script+=model->getBBTKName(); - script+="."; - script+=inputPort->getBBTKName(); - script+=" "; - script+=inputPort->getValue(); - script+="\n"; - } - } - script+="\n"; + std::string complexInputs = ""; + std::string complexOutputs = ""; + script += "\n"; - } + for (i = 0; i < (int) connections.size(); i++) { + int id = connections[i]; + GObjectController *control = _controllers[id]; + GConnectorModel *model = (GConnectorModel*) control->getModel(); - // Create connections in the script. If the connection is made with a complex port, it is created the input or output + //Connection info + GPortModel *start = model->getStartPort(); + GBoxModel *startBox = start->getParentBox(); - std::string complexInputs=""; - std::string complexOutputs=""; - script+="\n"; + GPortModel *end = model->getEndPort(); + GBoxModel *endBox = end->getParentBox(); - for(i = 0; i<(int)connections.size();i++) - { - int id = connections[i]; - GObjectController *control = _controllers[id]; - GConnectorModel *model = (GConnectorModel*)control->getModel(); + if (startBox->getGObjectType() == GCOMPLEXINPUTPORT) { + complexInputs += "input "; + complexInputs += startBox->getBBTKName(); - //Connection info - GPortModel *start = model->getStartPort(); - GBoxModel *startBox =start->getParentBox(); + complexInputs += " "; + complexInputs += endBox->getBBTKName(); + complexInputs += "."; + complexInputs += end->getBBTKName(); - GPortModel *end = model->getEndPort(); - GBoxModel *endBox =end->getParentBox(); + complexInputs += " "; + complexInputs += "\" \""; - if(startBox->getGObjectType()==GCOMPLEXINPUTPORT) - { - complexInputs+="input "; - complexInputs+=startBox->getBBTKName(); + complexInputs += "\n"; + } else if (endBox->getGObjectType() == GCOMPLEXOUTPUTPORT) { + complexOutputs += "output "; + complexOutputs += endBox->getBBTKName(); - complexInputs+=" "; - complexInputs+=endBox->getBBTKName(); - complexInputs+="."; - complexInputs+=end->getBBTKName(); + complexOutputs += " "; + complexOutputs += startBox->getBBTKName(); + complexOutputs += "."; + complexOutputs += start->getBBTKName(); - complexInputs+=" "; - complexInputs+="\" \""; + complexOutputs += " "; + complexOutputs += "\" \""; - complexInputs+="\n"; - } - else if(endBox->getGObjectType()==GCOMPLEXOUTPUTPORT) - { - complexOutputs+="output "; - complexOutputs+=endBox->getBBTKName(); + complexOutputs += "\n"; + } else { + script += "connect "; + script += startBox->getBBTKName(); + script += "."; + script += start->getBBTKName(); - complexOutputs+=" "; - complexOutputs+=startBox->getBBTKName(); - complexOutputs+="."; - complexOutputs+=start->getBBTKName(); + script += " "; - complexOutputs+=" "; - complexOutputs+="\" \""; + //End Connection info + script += endBox->getBBTKName(); + script += "."; + script += end->getBBTKName(); - complexOutputs+="\n"; - } - else - { - script+="connect "; - script+=startBox->getBBTKName(); - script+="."; - script+=start->getBBTKName(); - - script+=" "; + script += "\n"; + } + } - //End Connection info - script+=endBox->getBBTKName(); - script+="."; - script+=end->getBBTKName(); + script += "\n"; - script+="\n"; - } - } + for (i = 0; i < (int) execBoxes.size(); i++) { + script += "exec "; + int id = execBoxes[i]; + GObjectController *control = _controllers[id]; + GBlackBoxModel *model = (GBlackBoxModel*) control->getModel(); - script+="\n"; + script += model->getBBTKName(); + script += "\n"; + } - for(i = 0; i<(int)execBoxes.size();i++) - { - script+="exec "; - int id = execBoxes[i]; - GObjectController *control = _controllers[id]; - GBlackBoxModel *model = (GBlackBoxModel*)control->getModel(); + script += "\n"; + script += "# Complex input ports\n"; + script += complexInputs; - script+=model->getBBTKName(); - script+="\n"; - } + script += "\n"; + script += "# Complex output ports\n"; + script += complexOutputs; - script+="\n"; - script+="# Complex input ports\n"; - script+=complexInputs; + script += "\n"; + script += "endefine"; + script += "\n"; - script+="\n"; - script+="# Complex output ports\n"; - script+=complexOutputs; + return script; +} - script+="\n"; - script+="endefine"; - script+="\n"; +//========================================================================= - return script; +void wxVtkSceneManager::deleteAllBoxes() { + std::map::iterator it; + for (it = _controllers.begin(); it != _controllers.end(); ++it) { + GObjectController *cont = it->second; + cont->removeFromScene(); + unregisterController((InteractorStyleMaracas*) cont); } + _selectedObjects.clear(); + _controllers.clear(); + refreshScene(); +} + +//========================================================================= + + +void wxVtkSceneManager::refresh() { + _baseView->Refresh(); +} +//========================================================================= + +void wxVtkSceneManager::refreshScene() { + _baseView->RefreshView(); +} + +//========================================================================= + +void wxVtkSceneManager::centerView() { + double temp[3]; + _baseView->GetRenderer()->GetActiveCamera()->GetFocalPoint(temp); + _baseView->GetRenderer()->GetActiveCamera()->SetFocalPoint(0, 0, temp[2]); + _baseView->GetRenderer()->GetActiveCamera()->GetPosition(temp); + _baseView->GetRenderer()->GetActiveCamera()->SetPosition(0, 0, temp[2]); + _baseView->RefreshView(); + +} + +//========================================================================= + +void wxVtkSceneManager::saveDiagram(std::string &content) { + char buffer[50]; + + content += "CATEGORY:"; + content += GetCategory(); + content += "\n"; + + content += "DESCRIPTION:"; + content += GetDescription(); + content += "\n"; + + content += "AUTHOR:"; + content += GetAuthor(); + content += "\n"; + + //Print info IF COMPLEX BOX + content += "COMPLEXBOX:"; + if (_isComplexBox) { + content += "TRUE\n"; + //ups1 + content += "COMPLEXBOXNAME:"; + content += GetCbName(); + content += "\n"; + + content += "PACKAGENAME:"; + content += GetCbPackageName(); + content += "\n"; + + //Print info complex input ports + std::vector inputs = getComplexInputPorts(); + int insize = inputs.size(); + content += "COMPLEXINPUTS:"; + sprintf(buffer, "%d", insize); + content += buffer; + content += "\n"; + + for (int i = 0; i < insize; i++) { + int id = inputs[i]; + GObjectController *cont = _controllers[id]; + cont->getModel()->save(content); + } - //========================================================================= + //Print info complex output ports + std::vector outputs = getComplexOutputPorts(); + int outsize = outputs.size(); + content += "COMPLEXOUTPUTS:"; + sprintf(buffer, "%d", outsize); + content += buffer; + content += "\n"; - void wxVtkSceneManager::deleteAllBoxes() - { - std::map::iterator it; - for(it = _controllers.begin(); it != _controllers.end(); ++it) - { - GObjectController *cont = it->second; - cont->removeFromScene(); - unregisterController((InteractorStyleMaracas*)cont); + for (int i = 0; i < outsize; i++) { + int id = outputs[i]; + GObjectController *cont = _controllers[id]; + cont->getModel()->save(content); } - _selectedObjects.clear(); - _controllers.clear(); - refreshScene(); + } // _isComplexBox + else { + content += "FALSE\n"; } - //========================================================================= - - - void wxVtkSceneManager::refresh() - { - _baseView->Refresh(); + //Print boxes + std::vector boxes = getBlackBoxes(); + int bsize = boxes.size(); + content += "BOXES:"; + sprintf(buffer, "%d", bsize); + content += buffer; + content += "\n"; + + for (int i = 0; i < bsize; i++) { + int id = boxes[i]; + GObjectController *cont = _controllers[id]; + cont->getModel()->save(content); } - //========================================================================= - void wxVtkSceneManager::refreshScene() - { - _baseView->RefreshView(); + //Print connections + std::vector connections = getConnections(); + int csize = connections.size(); + content += "CONNECTIONS:"; + sprintf(buffer, "%d", csize); + content += buffer; + content += "\n"; + + for (int i = 0; i < csize; i++) { + int id = connections[i]; + GObjectController *cont = _controllers[id]; + cont->getModel()->save(content); } - //========================================================================= +} - void wxVtkSceneManager::centerView() - { - double temp[3]; - _baseView->GetRenderer()->GetActiveCamera()->GetFocalPoint(temp); - _baseView->GetRenderer()->GetActiveCamera()->SetFocalPoint(0,0,temp[2]); - _baseView->GetRenderer()->GetActiveCamera()->GetPosition(temp); - _baseView->GetRenderer()->GetActiveCamera()->SetPosition(0,0,temp[2]); - _baseView->RefreshView(); +//========================================================================= - } +void wxVtkSceneManager::loadDiagram(ifstream &inputStream) { - //========================================================================= + std::string version = ""; + std::string line = ""; + char delims[] = ":"; + char *result = NULL; + getline(inputStream, line); - void wxVtkSceneManager::saveDiagram(std::string &content) - { - char buffer [50]; - - content+="CATEGORY:"; - content+=GetCategory(); - content+="\n"; - - content+="DESCRIPTION:"; - content+=GetDescription(); - content+="\n"; - - content+="AUTHOR:"; - content+=GetAuthor(); - content+="\n"; - - - //Print info IF COMPLEX BOX - content+="COMPLEXBOX:"; - if(_isComplexBox) - { - content+="TRUE\n"; -//ups1 - content+="COMPLEXBOXNAME:"; - content+=GetCbName(); - content+="\n"; - - content+="PACKAGENAME:"; - content+=GetCbPackageName(); - content+="\n"; - - //Print info complex input ports - std::vector inputs = getComplexInputPorts(); - int insize = inputs.size(); - content+="COMPLEXINPUTS:"; - sprintf (buffer, "%d", insize); - content+=buffer; - content+="\n"; - - for(int i = 0;igetModel()->save(content); + bool start = false; + while (!inputStream.eof()) { + if (line == "" || line[0] == '#') { + getline(inputStream, line); + if (line == "# - BBTKGEditor v 1.0 BBG BlackBox Diagram file") { + version = line.substr(18, 3); } - - //Print info complex output ports - std::vector outputs = getComplexOutputPorts(); - int outsize = outputs.size(); - content+="COMPLEXOUTPUTS:"; - sprintf (buffer, "%d", outsize); - content+=buffer; - content+="\n"; - - for(int i = 0;igetModel()->save(content); + if (line == "# - BBTKGEditor v 1.1 BBG BlackBox Diagram file") { + version = line.substr(18, 3); } - } // _isComplexBox - else - { - content+="FALSE\n"; - } - - //Print boxes - std::vector boxes = getBlackBoxes(); - int bsize = boxes.size(); - content+="BOXES:"; - sprintf (buffer, "%d", bsize); - content+=buffer; - content+="\n"; - - for(int i = 0;igetModel()->save(content); - } - - //Print connections - std::vector connections = getConnections(); - int csize = connections.size(); - content+="CONNECTIONS:"; - sprintf (buffer, "%d", csize); - content+=buffer; - content+="\n"; - - for(int i = 0;igetModel()->save(content); + if (line == "# - BBTKGEditor v 1.2 BBG BlackBox Diagram file") { + version = line.substr(18, 3); + } + } else if (line == "APP_START") { + start = true; + break; } - } - //========================================================================= - - void wxVtkSceneManager::loadDiagram(ifstream &inputStream) - { + printf("EED wxVtkSceneManager::loadDiagram version=%s\n", version.c_str()); + + if (start) { + + if ((version != "1.0") && (version != "1.1")) { + getline(inputStream, line);//CATEGORY: + char categoryTmp[30]; + strcpy(categoryTmp, line.c_str()); + result = strtok(categoryTmp, delims); + result = strtok(NULL, delims); + SetCategory(result); + + getline(inputStream, line);//DESCRIPTION: + char descriptionTmp[1024]; + strcpy(descriptionTmp, line.c_str()); + result = strtok(descriptionTmp, delims); + result = strtok(NULL, delims); + SetDescription(result); + + getline(inputStream, line);//AUTHOR: + char authorTmp[255]; + strcpy(authorTmp, line.c_str()); + result = strtok(authorTmp, delims); + result = strtok(NULL, delims); + SetAuthor(result); + } - std::string version=""; - std::string line=""; - char delims[] = ":"; - char *result = NULL; - getline(inputStream,line); - - bool start = false; - while ( !inputStream.eof() ) - { - if(line=="" || line[0]=='#') - { - getline(inputStream,line); - if (line=="# - BBTKGEditor v 1.0 BBG BlackBox Diagram file") - { - version=line.substr(18,3); - } - if (line=="# - BBTKGEditor v 1.1 BBG BlackBox Diagram file") - { - version=line.substr(18,3); - } - if (line=="# - BBTKGEditor v 1.2 BBG BlackBox Diagram file") - { - version=line.substr(18,3); - } - } - else if(line=="APP_START") - { - start = true; - break; + //---------- + getline(inputStream, line);//COMPLEX_BOX:TRUE|FALSE + char complexTmp[30]; + strcpy(complexTmp, line.c_str()); + result = strtok(complexTmp, delims); + result = strtok(NULL, delims); + std::string isComplexBox(result); + + if (isComplexBox == "TRUE") { + _isComplexBox = true; + + if ((version != "1.0") && (version != "1.1")) { + getline(inputStream, line);//COMPLEXNAME: + char complexboxnameTmp[255]; + strcpy(complexboxnameTmp, line.c_str()); + result = strtok(complexboxnameTmp, delims); + result = strtok(NULL, delims); + SetCbName(result); + + getline(inputStream, line);//PACKAGENAME: + char packagenameTmp[255]; + strcpy(packagenameTmp, line.c_str()); + result = strtok(packagenameTmp, delims); + result = strtok(NULL, delims); + SetCbPackageName(result); } - } - printf("EED wxVtkSceneManager::loadDiagram version=%s\n",version.c_str()); - - if(start) - { - - if ((version!="1.0") && (version!="1.1")) - { - getline(inputStream,line);//CATEGORY: - char categoryTmp[30]; - strcpy( categoryTmp, line.c_str() ); - result = strtok( categoryTmp, delims ); - result = strtok( NULL, delims ); - SetCategory(result); - - getline(inputStream,line);//DESCRIPTION: - char descriptionTmp[1024]; - strcpy( descriptionTmp, line.c_str() ); - result = strtok( descriptionTmp, delims ); - result = strtok( NULL, delims ); - SetDescription(result); - - getline(inputStream,line);//AUTHOR: - char authorTmp[255]; - strcpy( authorTmp, line.c_str() ); - result = strtok( authorTmp, delims ); - result = strtok( NULL, delims ); - SetAuthor(result); - } + //----------------------- + //- COMPLEX INPUT PORTS + //----------------------- + getline(inputStream, line);//COMPLEXINPUTS:num + char inputs[30]; + strcpy(inputs, line.c_str()); + result = strtok(inputs, delims); + result = strtok(NULL, delims); - //---------- - getline(inputStream,line);//COMPLEX_BOX:TRUE|FALSE - char complexTmp[30]; - strcpy( complexTmp, line.c_str() ); - result = strtok( complexTmp, delims ); - result = strtok( NULL, delims ); - std::string isComplexBox(result); - - if(isComplexBox=="TRUE") - { - _isComplexBox=true; - - if ((version!="1.0") && (version!="1.1")) - { - getline(inputStream,line);//COMPLEXNAME: - char complexboxnameTmp[255]; - strcpy( complexboxnameTmp, line.c_str() ); - result = strtok( complexboxnameTmp, delims ); - result = strtok( NULL, delims ); - SetCbName(result); - - getline(inputStream,line);//PACKAGENAME: - char packagenameTmp[255]; - strcpy( packagenameTmp, line.c_str() ); - result = strtok( packagenameTmp, delims ); - result = strtok( NULL, delims ); - SetCbPackageName(result); - } - - - //----------------------- - //- COMPLEX INPUT PORTS - //----------------------- - getline(inputStream,line);//COMPLEXINPUTS:num - char inputs[30]; - strcpy( inputs, line.c_str() ); - result = strtok( inputs, delims ); - result = strtok( NULL, delims ); - - int numInputs; - std::istringstream inps(result); - inps >> numInputs; - - for(int i = 0;i> xIn; - std::istringstream ySt(yInic); - ySt >> yIn; - std::istringstream zSt(zInic); - zSt >> zIn; - - getline(inputStream,line);//FIN_COMPLEX_PORT - - configGComBoxInputOutputPort(true, inputPortName,xIn,yIn,zIn); - - - } // for input complex box - - - //----------------------- - //- COMPLEX OUTPUT PORTS - //----------------------- - - getline(inputStream,line);//COMPLEXOUTPUTS:num - char outputs[30]; - strcpy( outputs, line.c_str() ); - result = strtok( outputs, delims ); - result = strtok( NULL, delims ); - - int numOutputs; - std::istringstream outps(result); - outps >> numOutputs; - - for(int i = 0;i> xIn; - std::istringstream ySt(yInic); - ySt >> yIn; - std::istringstream zSt(zInic); - zSt >> zIn; - - getline(inputStream,line);//FIN_COMPLEX_PORT - - configGComBoxInputOutputPort(false, outputPortName,xIn,yIn,zIn); - - } // for output complex box - - } // complex box + int numInputs; + std::istringstream inps(result); + inps >> numInputs; - //---------- - getline(inputStream,line);//BOXES:num - char boxes[9]; - strcpy( boxes, line.c_str() ); - result = strtok( boxes, delims ); - result = strtok( NULL, delims ); - - int numBoxes; - std::istringstream is(result); - is >> numBoxes; - - for(int i = 0;i> zIn; - //---------- - getline(inputStream,line);//xEnd:yEnd:zEnd - strcpy( coord, line.c_str() ); - result = strtok( coord, delims );//xEnd - std::string xEnd(result); - result = strtok( NULL, delims );//yEnd - std::string yEnd(result); - result = strtok( NULL, delims );//zEnd - std::string zEnd(result); - - double xEn, yEn, zEn; - std::istringstream xEt(xEnd); - xEt >> xEn; - std::istringstream yEt(yEnd); - yEt >> yEn; - std::istringstream zEt(zEnd); - zEt >> zEn; - - bool boxExecutable=false; - if(isExec=="TRUE") - { - boxExecutable= true; - } + getline(inputStream, line);//FIN_COMPLEX_PORT - int idBox = createGBlackBox(xIn,yIn,package,type); - configGBlackBox(idBox, xIn,yIn,zIn,name, boxExecutable,xEn,yEn,zEn); + configGComBoxInputOutputPort(true, inputPortName, xIn, yIn, zIn); - GObjectController *cont = _controllers[idBox]; - GBlackBoxModel *bbmod = (GBlackBoxModel*)cont->getModel(); + } // for input complex box - //---------- - getline(inputStream,line);//PORT o FIN_BOX - std::string port=line.substr(0,4); - while(port=="PORT") - { - getline(inputStream,line);//name:value - char poort[150]; - strcpy( poort, line.c_str() ); - result = strtok( poort, delims );//name - std::string name(result); - result = strtok( NULL, delims );//value - std::string value(result); - - bbmod->setValueToInput(name,value); - - getline(inputStream,line);//PORT o FIN_BOX - port=line.substr(0,4); - } // while - -//EED bbmod->notifyObservers(_idManager); - } // for boxes - - /// CONNECTIONS - //---------- - getline(inputStream,line);//CONNECTIONS:num - char conns[30]; - strcpy( conns, line.c_str() ); - result = strtok( conns, delims ); - result = strtok( NULL, delims ); - - int numConns; - std::istringstream isCons(result); - isCons >> numConns; - - for(int i = 0;igetModel(); - vtkGConnectorView *conView= (vtkGConnectorView*)tempp->getView(); - getline(inputStream,line); //NumberOfControlPoints:## - strcpy( conns, line.c_str() ); - result = strtok( conns, delims ); - result = strtok( NULL, delims ); - - int numberOfControlPoints; - std::istringstream isCons(result); - isCons >> numberOfControlPoints; - - for (int ii=0;ii> px; - result = strtok( NULL, delims ); - std::istringstream isPointY(result); - isPointY >> py; - result = strtok( NULL, delims ); - std::istringstream isPointZ(result); - isPointZ >> pz; - - conMod->getManualContourModel()->InsertPoint_id(ii+1,px,py,pz); - conView->getManualContourView()->AddPoint(); - } - }// version !=1.0 - - } // for numConns + //----------------------- + //- COMPLEX OUTPUT PORTS + //----------------------- - } // start + getline(inputStream, line);//COMPLEXOUTPUTS:num + char outputs[30]; + strcpy(outputs, line.c_str()); + result = strtok(outputs, delims); + result = strtok(NULL, delims); - refresh(); - } - //========================================================================= + int numOutputs; + std::istringstream outps(result); + outps >> numOutputs; + for (int i = 0; i < numOutputs; i++) { + //---------- + getline(inputStream, line);//COMPLEX_PORT + getline(inputStream, line);//name + std::string outputPortName(line); + //---------- + getline(inputStream, line);//xInic:yInic:zInic + char coord[80]; + strcpy(coord, line.c_str()); + result = strtok(coord, delims);//xInic + std::string xInic(result); + result = strtok(NULL, delims);//yInic + std::string yInic(result); + result = strtok(NULL, delims);//zInic + std::string zInic(result); - //========================================================================= - void wxVtkSceneManager::configGComBoxInputOutputPort(bool inputoutput, std::string portName, double xIn, double yIn,double zIn) - { - int idPort; - if (inputoutput==true) - { - idPort = createGComplexBoxInputPort(portName); - } else { - idPort = createGComplexBoxOutputPort(portName); - } - GObjectController *cont = _controllers[idPort]; - GBoxModel *cbmod = (GBoxModel*)cont->getModel(); - cbmod->setInicPoint(xIn,yIn,zIn); - cbmod->notifyObservers(_idManager); - } - //========================================================================= + double xIn, yIn, zIn; + std::istringstream xSt(xInic); + xSt >> xIn; + std::istringstream ySt(yInic); + ySt >> yIn; + std::istringstream zSt(zInic); + zSt >> zIn; + getline(inputStream, line);//FIN_COMPLEX_PORT - //========================================================================= - GBoxModel* wxVtkSceneManager::findGBox(std::string boxname) - { - int j; - int idB; - GBoxModel *bMod; - GBoxModel *boxModel = NULL; - std::vector lstB = getBlackBoxes(); - for(j = 0;j<(int)lstB.size();j++) - { - idB = lstB[j]; - bMod = (GBoxModel*)_controllers[idB]->getModel(); - if(_controllers[idB]->getModel()->getBBTKName()==boxname) - { - boxModel = bMod; - } - } // for + configGComBoxInputOutputPort(false, outputPortName, xIn, yIn, + zIn); - if((_isComplexBox) && (boxModel==NULL)) - { - std::vector lstInputs = getComplexInputPorts(); - for(j = 0;j<(int)lstInputs.size();j++) - { - idB = lstInputs[j]; - bMod = (GBoxModel*)_controllers[idB]->getModel(); - if(_controllers[idB]->getModel()->getBBTKName()==boxname) - { - boxModel = bMod; - } - } // for - - std::vector lstOutputs = getComplexOutputPorts(); - for(j = 0;j<(int)lstOutputs.size();j++) - { - int idB = lstOutputs[j]; - bMod = (GBoxModel*)_controllers[idB]->getModel(); - if(_controllers[idB]->getModel()->getBBTKName()==boxname) - { - boxModel = bMod; - } - } // for + } // for output complex box } // complex box - return boxModel; - } + //---------- + getline(inputStream, line);//BOXES:num + char boxes[9]; + strcpy(boxes, line.c_str()); + result = strtok(boxes, delims); + result = strtok(NULL, delims); - //========================================================================= + int numBoxes; + std::istringstream is(result); + is >> numBoxes; + for (int i = 0; i < numBoxes; i++) { + //---------- + getline(inputStream, line);//BOX + getline(inputStream, line);//package:type:name + char box[150]; + strcpy(box, line.c_str()); + result = strtok(box, delims);//package + std::string package(result); + result = strtok(NULL, delims);//type + std::string type(result); + result = strtok(NULL, delims);//name + std::string name(result); + + getline(inputStream, line);//ISEXEC:TRUE|FALSE + char exec[15]; + strcpy(exec, line.c_str()); + result = strtok(exec, delims);//ISEXEC + result = strtok(NULL, delims);//TRUE|FALSE + std::string isExec(result); - int wxVtkSceneManager::configGConnetion(std::string nameStartBox, std::string nameStartPort, std::string - nameEndBox, std::string nameEndPort) - { + //---------- + getline(inputStream, line);//xInic:yInic:zInic + char coord[80]; + strcpy(coord, line.c_str()); + result = strtok(coord, delims);//xInic + std::string xInic(result); + result = strtok(NULL, delims);//yInic + std::string yInic(result); + result = strtok(NULL, delims);//zInic + std::string zInic(result); + + double xIn, yIn, zIn; + std::istringstream xSt(xInic); + xSt >> xIn; + std::istringstream ySt(yInic); + ySt >> yIn; + std::istringstream zSt(zInic); + zSt >> zIn; - GBoxModel *boxModel; - GPortModel *startP = NULL; - GPortModel *endP = NULL; + //---------- + getline(inputStream, line);//xEnd:yEnd:zEnd + strcpy(coord, line.c_str()); + result = strtok(coord, delims);//xEnd + std::string xEnd(result); + result = strtok(NULL, delims);//yEnd + std::string yEnd(result); + result = strtok(NULL, delims);//zEnd + std::string zEnd(result); + + double xEn, yEn, zEn; + std::istringstream xEt(xEnd); + xEt >> xEn; + std::istringstream yEt(yEnd); + yEt >> yEn; + std::istringstream zEt(zEnd); + zEt >> zEn; + + bool boxExecutable = false; + if (isExec == "TRUE") { + boxExecutable = true; + } - boxModel= findGBox(nameStartBox); - if (boxModel!=NULL) - { - startP = boxModel->getOutputPort(nameStartPort); - } + int idBox = createGBlackBox(xIn, yIn, package, type); + configGBlackBox(idBox, xIn, yIn, zIn, name, boxExecutable, xEn, + yEn, zEn); - boxModel= findGBox(nameEndBox); - if (boxModel!=NULL) - { - endP = boxModel->getInputPort(nameEndPort); - } + GObjectController *cont = _controllers[idBox]; + GBlackBoxModel *bbmod = (GBlackBoxModel*) cont->getModel(); -//ups2 - int idCon = createGConnector(startP); - _worldState = NOTHING_HAPPENS; - GConnectorController *tempp = (GConnectorController*)_controllers[idCon]; + //---------- + getline(inputStream, line);//PORT o FIN_BOX + std::string port = line.substr(0, 4); + while (port == "PORT") { + getline(inputStream, line);//name:value + char poort[150]; + strcpy(poort, line.c_str()); + result = strtok(poort, delims);//name + std::string name(result); + result = strtok(NULL, delims);//value + std::string value(result); - GConnectorModel *conMod = (GConnectorModel*)tempp->getModel(); - vtkGConnectorView *conView = (vtkGConnectorView*)tempp->getView(); - tempp->endContourCreation(); - conMod->setEndPort(endP); - conView->updateStartEndPoints(); - return idCon; - } + bbmod->setValueToInput(name, value); - //========================================================================= + getline(inputStream, line);//PORT o FIN_BOX + port = line.substr(0, 4); + } // while - bool wxVtkSceneManager::boxExist(std::string boxname) - { - bool ok=false; - std::map::iterator it; - for(it = _controllers.begin(); it != _controllers.end(); ++it) - { - GObjectController *cont = it->second; - if(cont->getModel()->getBBTKName()==boxname) - { - ok=true; - } - } - return ok; - } + //EED bbmod->notifyObservers(_idManager); + } // for boxes - //========================================================================= + /// CONNECTIONS + //---------- + getline(inputStream, line);//CONNECTIONS:num + char conns[30]; + strcpy(conns, line.c_str()); + result = strtok(conns, delims); + result = strtok(NULL, delims); - std::vector wxVtkSceneManager::getBlackBoxes() - { - std::vector vect; - std::map::iterator it; - for(it = _controllers.begin(); it != _controllers.end(); ++it) - { - GObjectController *cont = it->second; - if(cont->getGObjectType()==GBLACKBOX) - { - vect.push_back(cont->getId()); - } - } - return vect; - } + int numConns; + std::istringstream isCons(result); + isCons >> numConns; - //========================================================================= + for (int i = 0; i < numConns; i++) { + //---------- + getline(inputStream, line);//CONNECTION + getline(inputStream, line);//Startbox.PortName:EndBox.PortName + + char connec[200]; + strcpy(connec, line.c_str()); + result = strtok(connec, delims); + std::string nameStartBox(result); + result = strtok(NULL, delims); + std::string nameStartPort(result); + result = strtok(NULL, delims); + std::string nameEndBox(result); + result = strtok(NULL, delims); + std::string nameEndPort(result); + + int idCon = configGConnetion(nameStartBox, nameStartPort, + nameEndBox, nameEndPort); + + if (version != "1.0") { + //Readding control points of the manualContour + //ups1 + GConnectorController *tempp = + (GConnectorController*) _controllers[idCon]; + GConnectorModel *conMod = (GConnectorModel*) tempp->getModel(); + vtkGConnectorView *conView = + (vtkGConnectorView*) tempp->getView(); + getline(inputStream, line); //NumberOfControlPoints:## + strcpy(conns, line.c_str()); + result = strtok(conns, delims); + result = strtok(NULL, delims); + + int numberOfControlPoints; + std::istringstream isCons(result); + isCons >> numberOfControlPoints; + + for (int ii = 0; ii < numberOfControlPoints; ii++) { + getline(inputStream, line); //XX:YY:ZZ + char connec[200]; + strcpy(connec, line.c_str()); + + double px, py, pz; + result = strtok(connec, delims); + std::istringstream isPointX(result); + isPointX >> px; + result = strtok(NULL, delims); + std::istringstream isPointY(result); + isPointY >> py; + result = strtok(NULL, delims); + std::istringstream isPointZ(result); + isPointZ >> pz; + + conMod->getManualContourModel()->InsertPoint_id(ii + 1, px, + py, pz); + conView->getManualContourView()->AddPoint(); + } + }// version !=1.0 - std::vector wxVtkSceneManager::getComplexInputPorts() - { - std::vector vect; - std::map::iterator it; - for(it = _controllers.begin(); it != _controllers.end(); ++it) - { - GObjectController *cont = it->second; - if(cont->getGObjectType()==GCOMPLEXINPUTPORT) - { - vect.push_back(cont->getId()); - } - } - return vect; - } + } // for numConns - //========================================================================= + } // start - std::vector wxVtkSceneManager::getComplexOutputPorts() - { - std::vector vect; - std::map::iterator it; - for(it = _controllers.begin(); it != _controllers.end(); ++it) - { - GObjectController *cont = it->second; - if(cont->getGObjectType()==GCOMPLEXOUTPUTPORT) - { - vect.push_back(cont->getId()); - } - } - return vect; - } + refresh(); +} +//========================================================================= - //========================================================================= - std::vector wxVtkSceneManager::getConnections() - { - std::vector vect; - std::map::iterator it; - for(it = _controllers.begin(); it != _controllers.end(); ++it) - { - GObjectController *cont = it->second; - if(cont->getGObjectType()==GCONNECTOR) - { - vect.push_back(cont->getId()); - } - } - return vect; +//========================================================================= +void wxVtkSceneManager::configGComBoxInputOutputPort(bool inputoutput, + std::string portName, double xIn, double yIn, double zIn) { + int idPort; + if (inputoutput == true) { + idPort = createGComplexBoxInputPort(portName); + } else { + idPort = createGComplexBoxOutputPort(portName); } + GObjectController *cont = _controllers[idPort]; + GBoxModel *cbmod = (GBoxModel*) cont->getModel(); + cbmod->setInicPoint(xIn, yIn, zIn); + cbmod->notifyObservers(_idManager); +} +//========================================================================= + + +//========================================================================= +GBoxModel* wxVtkSceneManager::findGBox(std::string boxname) { + int j; + int idB; + GBoxModel *bMod; + GBoxModel *boxModel = NULL; + std::vector lstB = getBlackBoxes(); + for (j = 0; j < (int) lstB.size(); j++) { + idB = lstB[j]; + bMod = (GBoxModel*) _controllers[idB]->getModel(); + if (_controllers[idB]->getModel()->getBBTKName() == boxname) { + boxModel = bMod; + } + } // for + + if ((_isComplexBox) && (boxModel == NULL)) { + std::vector lstInputs = getComplexInputPorts(); + for (j = 0; j < (int) lstInputs.size(); j++) { + idB = lstInputs[j]; + bMod = (GBoxModel*) _controllers[idB]->getModel(); + if (_controllers[idB]->getModel()->getBBTKName() == boxname) { + boxModel = bMod; + } + } // for - //========================================================================= + std::vector lstOutputs = getComplexOutputPorts(); + for (j = 0; j < (int) lstOutputs.size(); j++) { + int idB = lstOutputs[j]; + bMod = (GBoxModel*) _controllers[idB]->getModel(); + if (_controllers[idB]->getModel()->getBBTKName() == boxname) { + boxModel = bMod; + } + } // for - bool wxVtkSceneManager::isComplexBox() - { - return _isComplexBox; - } + } // complex box - //========================================================================= + return boxModel; +} - void wxVtkSceneManager::setComplexBox(bool val) - { - _isComplexBox=val; - } +//========================================================================= - //========================================================================= - int wxVtkSceneManager::addObjectController(GObjectController* objController) - { - //Register the controller of the new object - registerController((InteractorStyleMaracas*) objController); - - //Add the object to the objects list - int newId = _contLastId;//_controllers.size(); - objController->setId(newId); - _controllers[newId] = objController; - _contLastId++; - return newId; - } +int wxVtkSceneManager::configGConnetion(std::string nameStartBox, + std::string nameStartPort, std::string nameEndBox, + std::string nameEndPort) { - //========================================================================= + GBoxModel *boxModel; + GPortModel *startP = NULL; + GPortModel *endP = NULL; - int wxVtkSceneManager::getNumSelectedObjects() - { - return _selectedObjects.size(); + boxModel = findGBox(nameStartBox); + if (boxModel != NULL) { + startP = boxModel->getOutputPort(nameStartPort); } - //========================================================================= - - std::map wxVtkSceneManager::getSelectedObjects() - { - std::map mapSelected; + boxModel = findGBox(nameEndBox); + if (boxModel != NULL) { + endP = boxModel->getInputPort(nameEndPort); + } - std::map::iterator it; - for(it = _controllers.begin(); it != _controllers.end(); ++it) - { - GObjectController *cont = it->second; - if(cont->getGObjectType()==GBLACKBOX && cont->getView()->getState()==SELECTED) - { - mapSelected[cont->getId()]=cont; - } + //ups2 + int idCon = createGConnector(startP); + _worldState = NOTHING_HAPPENS; + GConnectorController *tempp = (GConnectorController*) _controllers[idCon]; + + GConnectorModel *conMod = (GConnectorModel*) tempp->getModel(); + vtkGConnectorView *conView = (vtkGConnectorView*) tempp->getView(); + tempp->endContourCreation(); + conMod->setEndPort(endP); + conView->updateStartEndPoints(); + return idCon; +} + +//========================================================================= + +bool wxVtkSceneManager::boxExist(std::string boxname) { + bool ok = false; + std::map::iterator it; + for (it = _controllers.begin(); it != _controllers.end(); ++it) { + GObjectController *cont = it->second; + if (cont->getModel()->getBBTKName() == boxname) { + ok = true; } - - std::map::iterator it2; - for(it2 = _controllers.begin(); it2 != _controllers.end(); ++it2) - { - GObjectController *cont = it2->second; - if(cont->getGObjectType()==GCONNECTOR) - { - GConnectorModel* cmod = (GConnectorModel*)cont->getModel(); - GBoxModel* endPortParentBox = cmod->getEndPort()->getParentBox(); - GBoxModel* startPortParentBox = cmod->getStartPort()->getParentBox(); - - std::map::iterator iterOBJ1 = mapSelected.find(startPortParentBox->getObjectId()); - std::map::iterator iterOBJ2 = mapSelected.find(endPortParentBox->getObjectId()); - - if(iterOBJ1 != mapSelected.end() && iterOBJ2 != mapSelected.end()) - { - int ID = cont->getId(); - mapSelected[ID]=cont; - } - } + } + return ok; +} + +//========================================================================= + +std::vector wxVtkSceneManager::getBlackBoxes() { + std::vector vect; + std::map::iterator it; + for (it = _controllers.begin(); it != _controllers.end(); ++it) { + GObjectController *cont = it->second; + if (cont->getGObjectType() == GBLACKBOX) { + vect.push_back(cont->getId()); + } + } + return vect; +} + +//========================================================================= + +std::vector wxVtkSceneManager::getComplexInputPorts() { + std::vector vect; + std::map::iterator it; + for (it = _controllers.begin(); it != _controllers.end(); ++it) { + GObjectController *cont = it->second; + if (cont->getGObjectType() == GCOMPLEXINPUTPORT) { + vect.push_back(cont->getId()); + } + } + return vect; +} + +//========================================================================= + +std::vector wxVtkSceneManager::getComplexOutputPorts() { + std::vector vect; + std::map::iterator it; + for (it = _controllers.begin(); it != _controllers.end(); ++it) { + GObjectController *cont = it->second; + if (cont->getGObjectType() == GCOMPLEXOUTPUTPORT) { + vect.push_back(cont->getId()); + } + } + return vect; +} + +//========================================================================= + +std::vector wxVtkSceneManager::getConnections() { + std::vector vect; + std::map::iterator it; + for (it = _controllers.begin(); it != _controllers.end(); ++it) { + GObjectController *cont = it->second; + if (cont->getGObjectType() == GCONNECTOR) { + vect.push_back(cont->getId()); + } + } + return vect; +} + +//========================================================================= + +bool wxVtkSceneManager::isComplexBox() { + return _isComplexBox; +} + +//========================================================================= + +void wxVtkSceneManager::setComplexBox(bool val) { + _isComplexBox = val; +} + +//========================================================================= + +int wxVtkSceneManager::addObjectController(GObjectController* objController) { + //Register the controller of the new object + registerController((InteractorStyleMaracas*) objController); + //Add the object to the objects list + int newId = _contLastId;//_controllers.size(); + objController->setId(newId); + _controllers[newId] = objController; + std::cout + << "DFCH: int wxVtkSceneManager::addObjectController(GObjectController* objController) ---- _contLastId = " + << _contLastId << std::endl; + _contLastId++; + return newId; +} + +//========================================================================= + +int wxVtkSceneManager::getNumSelectedObjects() { + return _selectedObjects.size(); +} + +//========================================================================= + +std::map wxVtkSceneManager::getSelectedObjects() { + std::map mapSelected; + + std::map::iterator it; + for (it = _controllers.begin(); it != _controllers.end(); ++it) { + GObjectController *cont = it->second; + if (cont->getGObjectType() == GBLACKBOX && cont->getView()->getState() + == SELECTED) { + mapSelected[cont->getId()] = cont; } - return mapSelected; } - //========================================================================= - - void wxVtkSceneManager::addObjects(std::map objectsMap) - { - - std::map oldIdNewIdBoxes; - std::vector connections; - - std::map::iterator it; - for(it = objectsMap.begin(); it != objectsMap.end(); ++it) - { - GObjectController *cont = it->second; - int type = cont->getGObjectType(); - - if(type==GBLACKBOX) - { - // Copy black box - double xInic, yInic,zInic; - GBlackBoxModel* copyBox = (GBlackBoxModel*)cont->getModel(); - copyBox->getInicPoint(xInic,yInic,zInic); - int idBox = createGBlackBox(0,0,copyBox->getBBTKPackage(),copyBox->getBBTKType()); - - int idcB = copyBox->getObjectId(); - oldIdNewIdBoxes[idcB]=idBox; - cont = _controllers[idBox]; - GBlackBoxModel* newbox = (GBlackBoxModel*)cont->getModel(); - newbox->setInicPoint(xInic,yInic,zInic); - int num = newbox->getNumInputPorts(); - for(int j=0;jsetValueToInputPort(j,copyBox->getValueInputPort(j)); - } - newbox->notifyObservers(_idManager); - } - else if(type==GCONNECTOR) - { - int idCon = cont->getId(); - connections.push_back(idCon); + std::map::iterator it2; + for (it2 = _controllers.begin(); it2 != _controllers.end(); ++it2) { + GObjectController *cont = it2->second; + if (cont->getGObjectType() == GCONNECTOR) { + GConnectorModel* cmod = (GConnectorModel*) cont->getModel(); + GBoxModel* endPortParentBox = cmod->getEndPort()->getParentBox(); + GBoxModel* startPortParentBox = + cmod->getStartPort()->getParentBox(); + + std::map::iterator iterOBJ1 = + mapSelected.find(startPortParentBox->getObjectId()); + std::map::iterator iterOBJ2 = + mapSelected.find(endPortParentBox->getObjectId()); + + if (iterOBJ1 != mapSelected.end() && iterOBJ2 != mapSelected.end()) { + int ID = cont->getId(); + mapSelected[ID] = cont; } - } - - for(int i = 0 ;i<(int)connections.size();i++) - { - int objId = connections[i]; - GObjectController *cont = objectsMap[objId]; - GConnectorModel* connectModel = (GConnectorModel*)cont->getModel(); - - GPortModel* startPort = connectModel->getStartPort(); - int startPortIndex = startPort->getPosInBox(); - GPortModel* endPort = connectModel->getEndPort(); - int endPortIndex = endPort->getPosInBox(); - - GBlackBoxModel* startPortParentBox = (GBlackBoxModel*)startPort->getParentBox(); - GBlackBoxModel* endPortParentBox = (GBlackBoxModel*)endPort->getParentBox(); - - int idNewStartBox = oldIdNewIdBoxes[startPortParentBox->getObjectId()]; - int idNewEndBox = oldIdNewIdBoxes[endPortParentBox->getObjectId()]; - - GBlackBoxModel* newStartBox = (GBlackBoxModel*)_controllers[idNewStartBox]->getModel(); - GBlackBoxModel* newEndBox = (GBlackBoxModel*)_controllers[idNewEndBox]->getModel(); - - GPortModel* newStartPort = newStartBox->getOutputPort(startPortIndex); - GPortModel* newEndPort = newEndBox->getInputPort(endPortIndex); - - // Creates connection - int idCon = createGConnector(newStartPort); - GConnectorController *tempp = (GConnectorController*)_controllers[idCon]; - GConnectorModel *conMod = (GConnectorModel*)tempp->getModel(); - vtkGConnectorView *conView = (vtkGConnectorView*)tempp->getView(); - tempp->endContourCreation(); - conMod->setEndPort(newEndPort); - conView->updateStartEndPoints(); + } + return mapSelected; +} + +//========================================================================= + +void wxVtkSceneManager::addObjects(std::map objectsMap) { + + std::map oldIdNewIdBoxes; + std::vector connections; + + std::map::iterator it; + for (it = objectsMap.begin(); it != objectsMap.end(); ++it) { + GObjectController *cont = it->second; + int type = cont->getGObjectType(); + + if (type == GBLACKBOX) { + // Copy black box + double xInic, yInic, zInic; + GBlackBoxModel* copyBox = (GBlackBoxModel*) cont->getModel(); + copyBox->getInicPoint(xInic, yInic, zInic); + int idBox = createGBlackBox(0, 0, copyBox->getBBTKPackage(), + copyBox->getBBTKType()); + + int idcB = copyBox->getObjectId(); + oldIdNewIdBoxes[idcB] = idBox; + cont = _controllers[idBox]; + GBlackBoxModel* newbox = (GBlackBoxModel*) cont->getModel(); + newbox->setInicPoint(xInic, yInic, zInic); + int num = newbox->getNumInputPorts(); + for (int j = 0; j < num; j++) { + newbox->setValueToInputPort(j, copyBox->getValueInputPort(j)); + } + newbox->notifyObservers(_idManager); + } else if (type == GCONNECTOR) { + int idCon = cont->getId(); + connections.push_back(idCon); } - std::map::iterator itIds; - for(itIds = oldIdNewIdBoxes.begin(); itIds != oldIdNewIdBoxes.end(); ++itIds) - { - int idOld = itIds->first; - int idNew = itIds->second; - - GBlackBoxModel* oldBox = (GBlackBoxModel*)objectsMap[idOld]->getModel(); - GBlackBoxModel* newBox = (GBlackBoxModel*)_controllers[idNew]->getModel(); - - std::vector oldInputConnections = oldBox->getConnectedInputs(); - std::vector oldOutputConnections = oldBox->getConnectedOutputs(); - std::vector newInputConnections = newBox->getConnectedInputs(); - std::vector newOutputConnections = newBox->getConnectedOutputs(); - - for(int k = 0; k<(int)oldInputConnections.size();k++) - { - bool exist=false; -//EED int toCreate=-1; - for(int l = 0; l<(int)newInputConnections.size() && !exist;l++) - { - if(oldInputConnections[k]==newInputConnections[l]) - { - exist=true; - } - } + } - if(exist==false) - { - //Create complex input - int posInBox = oldInputConnections[k]; - GPortModel* inputPort = oldBox->getInputPort(posInBox); - std::string inputPortName = inputPort->getBBTKName(); - int idInputPort = createGComplexBoxInputPort(inputPortName); - GObjectController *cont = _controllers[idInputPort]; - GBoxModel *cbmod = (GBoxModel*)cont->getModel(); - double xIn,yIn,zIn; - inputPort->getInicPoint(xIn,yIn,zIn); - yIn+=20; - cbmod->setInicPoint(xIn,yIn,zIn); - cbmod->notifyObservers(_idManager); - - GPortModel* inputPortEnd = newBox->getInputPort(posInBox); - - // Creates connection - int idCon = createGConnector(cbmod->getOutputPort(0)); - GConnectorController *tempp = (GConnectorController*)_controllers[idCon]; - GConnectorModel *conMod = (GConnectorModel*)tempp->getModel(); - vtkGConnectorView *conView = (vtkGConnectorView*)tempp->getView(); - tempp->endContourCreation(); - conMod->setEndPort(inputPortEnd); - conView->updateStartEndPoints(); + for (int i = 0; i < (int) connections.size(); i++) { + int objId = connections[i]; + GObjectController *cont = objectsMap[objId]; + GConnectorModel* connectModel = (GConnectorModel*) cont->getModel(); + + GPortModel* startPort = connectModel->getStartPort(); + int startPortIndex = startPort->getPosInBox(); + GPortModel* endPort = connectModel->getEndPort(); + int endPortIndex = endPort->getPosInBox(); + + GBlackBoxModel* startPortParentBox = + (GBlackBoxModel*) startPort->getParentBox(); + GBlackBoxModel* endPortParentBox = + (GBlackBoxModel*) endPort->getParentBox(); + + int idNewStartBox = oldIdNewIdBoxes[startPortParentBox->getObjectId()]; + int idNewEndBox = oldIdNewIdBoxes[endPortParentBox->getObjectId()]; + + GBlackBoxModel* newStartBox = + (GBlackBoxModel*) _controllers[idNewStartBox]->getModel(); + GBlackBoxModel* newEndBox = + (GBlackBoxModel*) _controllers[idNewEndBox]->getModel(); + + GPortModel* newStartPort = newStartBox->getOutputPort(startPortIndex); + GPortModel* newEndPort = newEndBox->getInputPort(endPortIndex); + + // Creates connection + int idCon = createGConnector(newStartPort); + GConnectorController *tempp = + (GConnectorController*) _controllers[idCon]; + GConnectorModel *conMod = (GConnectorModel*) tempp->getModel(); + vtkGConnectorView *conView = (vtkGConnectorView*) tempp->getView(); + tempp->endContourCreation(); + conMod->setEndPort(newEndPort); + conView->updateStartEndPoints(); + } + std::map::iterator itIds; + for (itIds = oldIdNewIdBoxes.begin(); itIds != oldIdNewIdBoxes.end(); ++itIds) { + int idOld = itIds->first; + int idNew = itIds->second; + + GBlackBoxModel* oldBox = + (GBlackBoxModel*) objectsMap[idOld]->getModel(); + GBlackBoxModel* newBox = + (GBlackBoxModel*) _controllers[idNew]->getModel(); + + std::vector oldInputConnections = oldBox->getConnectedInputs(); + std::vector oldOutputConnections = oldBox->getConnectedOutputs(); + std::vector newInputConnections = newBox->getConnectedInputs(); + std::vector newOutputConnections = newBox->getConnectedOutputs(); + + for (int k = 0; k < (int) oldInputConnections.size(); k++) { + bool exist = false; + //EED int toCreate=-1; + for (int l = 0; l < (int) newInputConnections.size() && !exist; l++) { + if (oldInputConnections[k] == newInputConnections[l]) { + exist = true; } - } + if (exist == false) { + //Create complex input + int posInBox = oldInputConnections[k]; + GPortModel* inputPort = oldBox->getInputPort(posInBox); + std::string inputPortName = inputPort->getBBTKName(); + int idInputPort = createGComplexBoxInputPort(inputPortName); + GObjectController *cont = _controllers[idInputPort]; + GBoxModel *cbmod = (GBoxModel*) cont->getModel(); + double xIn, yIn, zIn; + inputPort->getInicPoint(xIn, yIn, zIn); + yIn += 20; + cbmod->setInicPoint(xIn, yIn, zIn); + cbmod->notifyObservers(_idManager); + + GPortModel* inputPortEnd = newBox->getInputPort(posInBox); + + // Creates connection + int idCon = createGConnector(cbmod->getOutputPort(0)); + GConnectorController *tempp = + (GConnectorController*) _controllers[idCon]; + GConnectorModel *conMod = (GConnectorModel*) tempp->getModel(); + vtkGConnectorView *conView = + (vtkGConnectorView*) tempp->getView(); + tempp->endContourCreation(); + conMod->setEndPort(inputPortEnd); + conView->updateStartEndPoints(); - for(int k = 0; k<(int)oldOutputConnections.size();k++) - { - bool exist=false; -//EED int toCreate=-1; - for(int l = 0; l<(int)newOutputConnections.size() && !exist;l++) - { - if(oldOutputConnections[k]==newOutputConnections[l]) - { - exist=true; - } - } + } - if(exist==false) - { - //Create complex output - int posInBox = oldOutputConnections[k]; - GPortModel* outputPort = oldBox->getOutputPort(posInBox); - std::string outputPortName = outputPort->getBBTKName(); - int idOutputPort = createGComplexBoxOutputPort(outputPortName); - GObjectController *cont = _controllers[idOutputPort]; - GBoxModel *cbmod = (GBoxModel*)cont->getModel(); - double xIn,yIn,zIn; - outputPort->getInicPoint(xIn,yIn,zIn); - yIn-=20; - cbmod->setInicPoint(xIn,yIn,zIn); - cbmod->notifyObservers(_idManager); - - GPortModel* outputPortEnd = newBox->getOutputPort(posInBox); - - // Creates connection - int idCon = createGConnector(outputPortEnd); - GConnectorController *tempp = (GConnectorController*)_controllers[idCon]; - GConnectorModel *conMod = (GConnectorModel*)tempp->getModel(); - vtkGConnectorView *conView = (vtkGConnectorView*)tempp->getView(); - tempp->endContourCreation(); - conMod->setEndPort(cbmod->getInputPort(0)); - conView->updateStartEndPoints(); + } + for (int k = 0; k < (int) oldOutputConnections.size(); k++) { + bool exist = false; + //EED int toCreate=-1; + for (int l = 0; l < (int) newOutputConnections.size() && !exist; l++) { + if (oldOutputConnections[k] == newOutputConnections[l]) { + exist = true; } + } + + if (exist == false) { + //Create complex output + int posInBox = oldOutputConnections[k]; + GPortModel* outputPort = oldBox->getOutputPort(posInBox); + std::string outputPortName = outputPort->getBBTKName(); + int idOutputPort = createGComplexBoxOutputPort(outputPortName); + GObjectController *cont = _controllers[idOutputPort]; + GBoxModel *cbmod = (GBoxModel*) cont->getModel(); + double xIn, yIn, zIn; + outputPort->getInicPoint(xIn, yIn, zIn); + yIn -= 20; + cbmod->setInicPoint(xIn, yIn, zIn); + cbmod->notifyObservers(_idManager); + + GPortModel* outputPortEnd = newBox->getOutputPort(posInBox); + + // Creates connection + int idCon = createGConnector(outputPortEnd); + GConnectorController *tempp = + (GConnectorController*) _controllers[idCon]; + GConnectorModel *conMod = (GConnectorModel*) tempp->getModel(); + vtkGConnectorView *conView = + (vtkGConnectorView*) tempp->getView(); + tempp->endContourCreation(); + conMod->setEndPort(cbmod->getInputPort(0)); + conView->updateStartEndPoints(); } } + } + +} +//========================================================================= +void wxVtkSceneManager::SetCbName(std::string cbName) { + _cbName = cbName; + if (_cbName == "") { + _cbName = ""; } +} + +//========================================================================= +std::string wxVtkSceneManager::GetCbName() { + return _cbName; +} + +//========================================================================= +void wxVtkSceneManager::SetCbPackageName(std::string packagename) { + _cbPackageName = packagename; + if (_cbPackageName == "") { + _cbPackageName = ""; + } +} + +//========================================================================= +std::string wxVtkSceneManager::GetCbPackageName() { + return _cbPackageName; +} + +//========================================================================= +void wxVtkSceneManager::SetAuthor(std::string author) { + _Author = author; + if (_Author == "") { + _Author = ""; + } +} + +//========================================================================= +std::string wxVtkSceneManager::GetAuthor() { + return _Author; +} + +//========================================================================= +void wxVtkSceneManager::SetCategory(std::string category) { + _Category = category; + if (_Category == "") { + _Category = ""; + } +} + +//========================================================================= +std::string wxVtkSceneManager::GetCategory() { + return _Category; +} + +//========================================================================= +void wxVtkSceneManager::SetDescription(std::string description) { + _Description = description; + if (_Description == "") { + _Description = ""; + } +} + +//========================================================================= +std::string wxVtkSceneManager::GetDescription() { + return _Description; +} + +//========================================================================= - //========================================================================= - void wxVtkSceneManager::SetCbName(std::string cbName) - { - _cbName=cbName; - if (_cbName=="") - { - _cbName=""; - } - } - - //========================================================================= - std::string wxVtkSceneManager::GetCbName() - { - return _cbName; - } - - //========================================================================= - void wxVtkSceneManager::SetCbPackageName(std::string packagename) - { - _cbPackageName=packagename; - if (_cbPackageName=="") - { - _cbPackageName=""; - } - } - - //========================================================================= - std::string wxVtkSceneManager::GetCbPackageName() - { - return _cbPackageName; - } - - //========================================================================= - void wxVtkSceneManager::SetAuthor(std::string author) - { - _Author=author; - if (_Author=="") - { - _Author=""; - } - } - - //========================================================================= - std::string wxVtkSceneManager::GetAuthor() - { - return _Author; - } - - //========================================================================= - void wxVtkSceneManager::SetCategory(std::string category) - { - _Category=category; - if (_Category=="") - { - _Category=""; - } - } - - //========================================================================= - std::string wxVtkSceneManager::GetCategory() - { - return _Category; - } - - //========================================================================= - void wxVtkSceneManager::SetDescription(std::string description) - { - _Description=description; - if (_Description=="") - { - _Description=""; - } - } - - //========================================================================= - std::string wxVtkSceneManager::GetDescription() - { - return _Description; - } - - //========================================================================= - - - - - - - -} // EO namespace bbtk +} // EO namespace bbtk // EOF diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.h b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.h index ac27e88..12c4fc4 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.h +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.h @@ -160,6 +160,9 @@ namespace bbtk void addObjects(std::map objectsMap); + //------- + // Makes a BlackBox Executable + bool MakeBoxExecutable();//DFCH //------- //Returns a string with the BBS script of the current diagram. std::string getDiagramBBS(bool wln=false); -- 2.45.0