X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkWxGUIScriptingInterface.cxx;h=d176ba3d31a2b1eb8adf37ddffdc7169c903362a;hb=d4eee42d2a2b5cc416a30deb49bf07aa76b7b3b1;hp=8654ed2ce0acfefb380a8ebbe2871b6ca026034d;hpb=fc399c5aab38ad24ea5d57552701411b4d805181;p=bbtk.git diff --git a/kernel/src/bbtkWxGUIScriptingInterface.cxx b/kernel/src/bbtkWxGUIScriptingInterface.cxx index 8654ed2..d176ba3 100644 --- a/kernel/src/bbtkWxGUIScriptingInterface.cxx +++ b/kernel/src/bbtkWxGUIScriptingInterface.cxx @@ -3,8 +3,8 @@ Program: bbtk Module: $RCSfile: bbtkWxGUIScriptingInterface.cxx,v $ Language: C++ - Date: $Date: 2008/03/21 14:59:39 $ - Version: $Revision: 1.2 $ + Date: $Date: 2008/09/10 09:25:19 $ + Version: $Revision: 1.17 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -37,9 +37,10 @@ #include "bbtkWxBlackBox.h" #include "bbtkConfigurationFile.h" #include "bbtkWxStreamRedirector.h" - +#include "bbtkUtilities.h" + -#include "icons/cc_run.xpm" +//#include "icons/cc_run.xpm" namespace bbtk { @@ -53,70 +54,128 @@ namespace bbtk ID_Menu_CreateBlackBox, ID_Menu_ShowImageGraph, ID_Menu_CreateIndex, - ID_Button_Run + ID_Menu_Windows_Files, + ID_Menu_Windows_Help, + ID_Menu_Windows_Messages, + ID_Menu_Windows_Command, + ID_Menu_Windows_Save, + ID_Menu_Windows_PackageBrowser + // ID_Button_Run }; //================================================================ - WxGUIScriptingInterface::WxGUIScriptingInterface( wxWindow *parent, wxString title, wxSize size) - : wxFrame((wxFrame *)parent, -1, title, wxDefaultPosition, size) + WxGUIScriptingInterface::WxGUIScriptingInterface( wxWindow *parent ) + : wxFrame((wxFrame *)parent, -1, _T("bbStudio"), + wxDefaultPosition, wxSize(1200,800) ) { -// m_mgr = new wxAuiManager(this); - m_mgr.SetManagedWindow(this); - - mInterpreter = new bbtk::Interpreter(); + // m_mgr = new wxAuiManager(this); + m_mgr.SetManagedWindow(this); + + mInterpreter = bbtk::Interpreter::New(); mInterpreter->SetUser(this); mInterpreter->SetCommandLine(true); + mInterpreter->SetThrow(true); + //============== // Menu wxInitAllImageHandlers(); wxMenu *menuFile = new wxMenu; + menuFile->Append( ID_Menu_EditConfig, _T("Open bbtk &Config file") ); menuFile->Append( ID_Menu_Quit, _T("&Quit") ); wxMenu *menuAbout = new wxMenu; menuAbout->Append( ID_Menu_About, _T("&About...") ); wxMenu *menuTools = new wxMenu; - menuTools->Append( ID_Menu_EditConfig, _T("&Edit bbtk config") ); menuTools->Append( ID_Menu_CreatePackage, _T("Create &package") ); - menuTools->Append( ID_Menu_CreateBlackBox, _T("Create &blackbox") ); + menuTools->Append( ID_Menu_CreateBlackBox, _T("Create &black box") ); menuTools->Append( ID_Menu_ShowImageGraph, _T("&Show last image graph") ); menuTools->Append( ID_Menu_CreateIndex, _T("&Generate index") ); + + wxMenu *menuWindows = new wxMenu; + menuWindows->AppendCheckItem(ID_Menu_Windows_Files, + _T("Show 'files' panel") )->Check(); + menuWindows->AppendCheckItem(ID_Menu_Windows_Help, + _T("Show 'help' panel") )->Check(); + menuWindows->AppendCheckItem(ID_Menu_Windows_Messages, + _T("Show 'messages' panel") )->Check(); + menuWindows->AppendCheckItem(ID_Menu_Windows_Command, + _T("Show 'command' panel") )->Check(); + menuWindows->AppendSeparator(); + menuWindows->Append( ID_Menu_Windows_PackageBrowser, _T("Launch Package &Browser") ); - + // menuWindows->AppendSeparator(); + // menuWindows->Append ( ID_Menu_Windows_Save, _T("Save interface configuration")); + + wxMenu *menuOptions = new wxMenu; + mwxMenuItemReset = menuOptions->AppendCheckItem(-1, + _T("Reset before running") ); + mwxMenuItemReset->Check(); + wxMenuBar *menuBar = new wxMenuBar; menuBar->Append( menuFile, _T("&File") ); menuBar->Append( menuTools, _T("&Tools") ); + menuBar->Append( menuOptions, _T("&Options") ); + menuBar->Append( menuWindows, _T("&Windows") ); menuBar->Append( menuAbout, _T("About") ); SetMenuBar( menuBar ); + //=== + // Status bar CreateStatusBar(); - SetStatusText( _T("Welcome to bbi !") ); + SetStatusText( _T("Welcome to bbStudio !") ); - // + //=== + // Panes (Files, Messages, Help, Command) mWxGUITextEditor = new WxGUITextEditor(this,this); mWxGUITextEditor->SetFileNameFilter("*.bbs"); - + mWxGUIHtmlBrowser = new WxGUIHtmlBrowser(this,wxSize(200,0),this); - /* - wxBitmap bmp_run(cc_run_xpm); - mwxButtonRun = new wxBitmapButton( this, ID_Button_Run,bmp_run);//_T("Run") ); - */ - mWxGUIOutputMessages = new WxGUIOutputMessages(this); mWxGUICommand = new WxGUICommand(this,this); mWxGUICommand->SetFocus(); - // Creates and sets the parent window of all bbtk windows - wxWindow* top = new wxPanel(this,-1);//,_T("top")); - top->Hide(); - Wx::SetTopWindow(top); - + +#if NOTEBOOK + + mwxNotebook = new wxAuiNotebook(this, + -1, + wxPoint(0, 0), + wxSize(500,500), + wxAUI_NB_TAB_SPLIT + | wxAUI_NB_TAB_MOVE + | wxAUI_NB_TAB_EXTERNAL_MOVE + //| wxAUI_NB_WINDOWLIST_BUTTON + //|wxAUI_NB_SCROLL_BUTTONS + // | wxAUI_NB_CLOSE_BUTTON + //| wxAUI_NB_CLOSE_ON_ACTIVE_TAB + //| wxAUI_NB_CLOSE_ON_ALL_TABS + | wxNO_BORDER); + + + mwxNotebook->AddPage(mWxGUITextEditor,_T("Files"),true); + mwxNotebook->AddPage(mWxGUIHtmlBrowser,_T("Help"),true); + + mwxNotebook->AddPage(mWxGUIOutputMessages,_T("Messages"),true); + + mwxNotebook->AddPage(mWxGUICommand,_T("Command"),true); + + + m_mgr.AddPane(mwxNotebook, + wxAuiPaneInfo().Name(wxT("nb")) + .CaptionVisible(false) + .MinimizeButton(false) + .MaximizeButton(false) + .Center() + // .MinSize(wxSize(100,100)) + ); +#else // m_mgr.AddPane(mWxGUITextEditor, @@ -125,20 +184,26 @@ namespace bbtk .MinimizeButton(true) .MaximizeButton(true) .Center() - ); + .MinSize(wxSize(100,100)) + ); + m_mgr.AddPane(mWxGUIHtmlBrowser, wxAuiPaneInfo().Name(wxT("browser_content")) .Caption(wxT("Help")) .MinimizeButton(true) .MaximizeButton(true) .Right() + .Layer(2) + .MinSize(wxSize(400,100)) ); + m_mgr.AddPane(mWxGUIOutputMessages, wxAuiPaneInfo().Name(wxT("messages_content")) .Caption(wxT("Messages")) .MinimizeButton(true) .MaximizeButton(true) .Bottom() + .MinSize(wxSize(100,100)) ); m_mgr.AddPane(mWxGUICommand, wxAuiPaneInfo().Name(wxT("command_content")) @@ -146,25 +211,38 @@ namespace bbtk .MinimizeButton(true) .MaximizeButton(true) .Bottom() - .Position(1) -); - // m_mgr.AddPane(mwxButtonRun, - // wxAuiPaneInfo().Name(wxT("button_run_content"))); + .Layer(1) + .MinSize(wxSize(100,100)) + ); +#endif + // parent window of all bbtk windows will be a child of this + Wx::SetTopWindowParent(this); + // Add the method OnWxSignal as a Wx::Signal observer + //bbtkAddWxSignalObserver(WxGUIPackageBrowser2Window::OnWxSignal); -//.PaneBorder(false)); - m_mgr.Update(); + //.PaneBorder(false)); + // Load the interface appearance saved on last closing + LoadPerspective(); + + // Done in LoadPerspective + // m_mgr.Update(); SetAutoLayout(true); Layout(); + // mwxNotebook->SetSelection(1); + mWxGUIHtmlBrowser->GoHome(); // Refresh(); // m_mgr.Update(); + // LoadPerspective(); + } //================================================================ //================================================================ WxGUIScriptingInterface::~WxGUIScriptingInterface() { + SavePerspective(); m_mgr.UnInit(); } //================================================================ @@ -175,31 +253,50 @@ namespace bbtk mWxGUITextEditor->Open(filename); } //================================================================ - + +#define CATCH_MACRO \ + catch (QuitException e) \ + { \ + std::cout << "* quit exception caught"< 0) { \ + std::cerr << "* Exception thrown : "< "); s += command + "\n"; mWxGUIOutputMessages->Print(s,wxRED); - - if ( mInterpreter->InterpretLine( command ) == - Interpreter::Interpreter_QUIT ) + + try { - Close(true); + mInterpreter->InterpretLine( command ); } + CATCH_MACRO; } //================================================================ - + //================================================================ /// Runs the interpretation of a file bool WxGUIScriptingInterface::InterpretFile( const std::string& filename) { - if ( mInterpreter->InterpretFile(filename) == - Interpreter::Interpreter_ERROR ) + try { - return false; + mInterpreter->InterpretFile(filename); } + CATCH_MACRO; return true; } //================================================================ @@ -207,61 +304,25 @@ namespace bbtk //================================================================ void WxGUIScriptingInterface::WxGUITextEditorRun() { - // wxString per = m_mgr.SavePerspective(); - // std::cout << per<< std::endl; - // wxString temp = mWxGUIHtmlBrowser->GetCurrentPage(); std::stringstream* buf = new std::stringstream; (*buf) << mWxGUITextEditor->GetCurrentPage()->GetText(); - - mInterpreter->SetThrow(true); try { + // std::cout << "RUN"<IsChecked()) WxGUICommandEnter("reset"); mInterpreter->InterpretBuffer(buf); + // std::cout << "EO RUN"< 0) { - std::cerr << "* Exception thrown : "<GetCurrentPage(); - std::string filename = mWxGUITextEditor->GetCurrentPage();//wx2std(temp); - size_t s = filename.length(); - - Interpreter* I = new Interpreter; - - if ((s>3) && (filename[s-1]=='s') - && (filename[s-2]=='b') - && (filename[s-3]=='b') - && (filename[s-4]=='.')) - { - std::string tmp("Executing "); - tmp += filename; - SetStatusText(std2wx(tmp)); - I->InterpretFile(filename); - } - else - { - SetStatusText(_T("The current page is not a bbs file : cannot execute it")); - } - - delete I; - */ + CATCH_MACRO; + // std::cout << "EO RUN 3"<CloseAllPages()) return; Close(true); } //================================================================ @@ -272,7 +333,7 @@ namespace bbtk { m_mgr.Update(); Refresh(); - wxMessageBox(_T(" bbi\nThe Black Box Toolkit interpreter\n(c) CREATIS-LRMN 2008"), + wxMessageBox(_T(" bbStudio\nThe Black Box Toolkit Development Studio\n(c) CREATIS-LRMN 2008"), _T("About ..."), wxOK | wxICON_INFORMATION, this); } @@ -282,35 +343,55 @@ namespace bbtk //================================================================ void WxGUIScriptingInterface::OnMenuEditConfig(wxCommandEvent& WXUNUSED(event)) { - std::string commandStr; - std::string configFile = ConfigurationFile::GetInstance().Get_config_xml_full_path(); -#ifdef WIN32 - commandStr = "notepad.exe "; + std::string configFile = + ConfigurationFile::GetInstance().Get_config_xml_full_path(); + Open(configFile); + } + //================================================================ + + //================================================================ + void WxGUIScriptingInterface::OnMenuWindowsPackageBrowser(wxCommandEvent& WXUNUSED(event)) + { + wxBusyCursor wait; + WxGUIPackageBrowser2Window *helpbrowser = new + WxGUIPackageBrowser2Window(this,_T("Package Browser"), wxSize(600,600) ); + helpbrowser->Show(); + + /* + wxBusyCursor wait; + WxGUIPackageBrowser2 *browser = new WxGUIPackageBrowser2(this); + browser->IncludeAll(); + */ +#if NOTEBOOK + // mwxNotebook->AddPage(browser,_T("Package Browser"),true); #else - commandStr = "gedit "; -#endif - commandStr = commandStr + configFile; - std::cout << "system: " << commandStr << std::endl; - system ( commandStr.c_str() ); + /* + m_mgr.AddPane(browser, + wxAuiPaneInfo().Name(wxT("package_brower")) + .Caption(wxT("Package browser")) + .MinimizeButton(true) + .MaximizeButton(true) + .Bottom() + .Position(1) + .MinSize(wxSize(100,100)) + ); + */ +#endif } //================================================================ + //================================================================ void WxGUIScriptingInterface::OnMenuCreatePackage(wxCommandEvent& WXUNUSED(event)) { -printf("EED WxGUIScriptingInterface::OnMenuCreatePackage 01 \n"); - std::string command("toolsbbtk/appli/CreatePackage"); -printf("EED WxGUIScriptingInterface::OnMenuCreatePackage 02 \n"); + std::string command("toolsbbtk/appli/GUICreatePackage"); bbtkMessage("Debug",1,"Executing : '"<InterpretFile(command); -printf("EED WxGUIScriptingInterface::OnMenuCreatePackage 05 \n"); - delete I; -printf("EED WxGUIScriptingInterface::OnMenuCreatePackage 06 \n"); + } //================================================================ @@ -318,11 +399,11 @@ printf("EED WxGUIScriptingInterface::OnMenuCreatePackage 06 \n"); //================================================================ void WxGUIScriptingInterface::OnMenuCreateBlackBox(wxCommandEvent& WXUNUSED(event)) { - std::string command("toolsbbtk/appli/CreateBlackBox"); + std::string command("toolsbbtk/appli/GUICreateBlackBox"); bbtkMessage("Debug",1,"Executing : '"<InterpretFile(command); - delete I; } //================================================================ @@ -337,7 +418,7 @@ printf("EED WxGUIScriptingInterface::OnMenuCreatePackage 06 \n"); std::string strappli="gnome-open "; #endif std::string strcommand = strappli +default_temp_dir+"/temp_dir/workspace_workspacePrototype.png"; - std::cout << "system: " << strcommand << std::endl; + // std::cout << "system: " << strcommand << std::endl; system ( strcommand.c_str() ); } @@ -349,19 +430,19 @@ printf("EED WxGUIScriptingInterface::OnMenuCreatePackage 06 \n"); { std::string doc_path = ConfigurationFile::GetInstance().Get_doc_path(); std::string filepath = doc_path+"/bbdoc/make-index.bbs"; - Interpreter* I = new Interpreter; -//EED std::cout << "bbi: include "<InterpretFile( filepath ); + Interpreter::Pointer I = Interpreter::New(); + I->InterpretLine( "config"); + I->InterpretLine( "message echo 2"); I->InterpretLine( "exec freeze"); I->InterpretLine( "include *"); + I->InterpretLine( "help packages"); I->InterpretLine( "index "+doc_path+"/bbdoc/index-alpha.html Initials"); I->InterpretLine( "index "+doc_path+"/bbdoc/index-package.html Packages"); I->InterpretLine( "index "+doc_path+"/bbdoc/index-category.html Categories"); I->InterpretLine( "index "+doc_path+"/bbdoc/index-adaptors.html Adaptors"); - delete I; } //================================================================ @@ -386,7 +467,6 @@ printf("EED WxGUIScriptingInterface::OnMenuCreatePackage 06 \n"); //================================================================ bool WxGUIScriptingInterface::WxGUIHtmlBrowserUserOnLinkClicked(const std::string& target) { - std::cout << "OnLink"<3) && (target[s-1]=='s') && (target[s-2]=='b') @@ -394,12 +474,126 @@ printf("EED WxGUIScriptingInterface::OnMenuCreatePackage 06 \n"); && (target[s-4]=='.')) { mWxGUITextEditor->Open(target); +#if NOTEBOOK + mwxNotebook->SetSelection(0); +#endif + mWxGUITextEditor->SetFocus(); return false; } return true; } //================================================================ + void WxGUIScriptingInterface::OnMenuWindowsCheck( wxCommandEvent& event, + wxWindow* w) + { + bool checked = event.IsChecked(); + bool shown = m_mgr.GetPane(w).IsShown(); + // std::cout << "checked = "<> conf; + + int w,h; + + f >> w >> h ; + + f.close(); + + // std::cout << conf << std::endl; + + SetSize(w,h); + m_mgr.LoadPerspective(std2wx(conf)); + } + else + { + m_mgr.Update(); + } + } + //================================================================ + + //================================================================ + void WxGUIScriptingInterface::OnPaneClose(wxAuiManagerEvent& evt) + { + std::cout << "Closing panel '"<name<<"'"<