00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00048 #ifdef _USE_WXWIDGETS_
00049
00050 #include <iostream>
00051 #include "bbtkWxGUIScriptingInterface.h"
00052 #include "bbtkWxBlackBox.h"
00053 #include "bbtkConfigurationFile.h"
00054 #include "bbtkWxStreamRedirector.h"
00055 #include "bbtkUtilities.h"
00056
00057 #include <wx/tipwin.h>
00058 #include <wx/splash.h>
00059
00060
00061
00062
00063 namespace bbtk
00064 {
00065
00066 enum
00067 {
00068 ID_Menu_Quit = 1,
00069 ID_Menu_About,
00070 ID_Menu_EditConfig,
00071 ID_Menu_CreatePackage,
00072 ID_Menu_CreateBlackBox,
00073 ID_Menu_ShowImageGraph,
00074 ID_Menu_RegeneratePackageDoc,
00075 ID_Menu_RegenerateBoxesLists,
00076 ID_Menu_RegenerateAll,
00077 ID_Menu_PlugPackage,
00078 ID_Menu_Windows_Files,
00079 ID_Menu_Windows_Help,
00080 ID_Menu_Windows_Messages,
00081 ID_Menu_Windows_Command,
00082 ID_Menu_Windows_Save,
00083 ID_Menu_Windows_PackageBrowser
00084
00085 };
00086
00087
00088
00089 WxGUIScriptingInterface::WxGUIScriptingInterface( wxWindow *parent )
00090 : wxFrame((wxFrame *)parent, -1, _T("bbStudio"),
00091 wxDefaultPosition, wxSize(1200,800) )
00092 {
00093 m_mgr.SetManagedWindow(this);
00094
00095 mInterpreter = bbtk::Interpreter::New();
00096 mInterpreter->SetUser(this);
00097 mInterpreter->SetCommandLine(true);
00098 mInterpreter->SetThrow(true);
00099
00100
00101
00102
00103 wxInitAllImageHandlers();
00104
00105 wxMenu *menuFile = new wxMenu;
00106 menuFile->Append( ID_Menu_EditConfig, _T("Open bbtk &Config file") );
00107 menuFile->Append( ID_Menu_Quit, _T("&Quit") );
00108
00109 wxMenu *menuAbout = new wxMenu;
00110 menuAbout->Append( ID_Menu_About, _T("&About...") );
00111
00112 wxMenu *menuTools = new wxMenu;
00113 menuTools->Append( ID_Menu_CreatePackage, _T("Create &package") );
00114 menuTools->Append( ID_Menu_CreateBlackBox, _T("Create &black box") );
00115 menuTools->Append( ID_Menu_PlugPackage, _T("&Plug package") );
00116 menuTools->AppendSeparator();
00117 menuTools->Append( ID_Menu_RegeneratePackageDoc,_T("Regenerate package &doc") );
00118 menuTools->Append( ID_Menu_RegenerateBoxesLists,_T("Regenerate boxes &lists") );
00119 menuTools->Append( ID_Menu_RegenerateAll, _T("Regenerate &all") );
00120 menuTools->AppendSeparator();
00121 menuTools->Append( ID_Menu_ShowImageGraph, _T("&Show last graph") );
00122
00123 wxMenu *menuWindows = new wxMenu;
00124 menuWindows->AppendCheckItem(ID_Menu_Windows_Files,
00125 _T("Show 'files' panel") )->Check();
00126 menuWindows->AppendCheckItem(ID_Menu_Windows_Help,
00127 _T("Show 'help' panel") )->Check();
00128 menuWindows->AppendCheckItem(ID_Menu_Windows_Messages,
00129 _T("Show 'messages' panel") )->Check();
00130 menuWindows->AppendCheckItem(ID_Menu_Windows_Command,
00131 _T("Show 'command' panel") )->Check();
00132 menuWindows->AppendSeparator();
00133 menuWindows->Append( ID_Menu_Windows_PackageBrowser, _T("Start Package &Browser") );
00134
00135
00136
00137
00138 wxMenu *menuOptions = new wxMenu;
00139 mwxMenuItemReset = menuOptions->AppendCheckItem(-1,
00140 _T("Reset before running") );
00141 mwxMenuItemReset->Check();
00142
00143 wxMenuBar *menuBar = new wxMenuBar;
00144 menuBar->Append( menuFile, _T("&File") );
00145 menuBar->Append( menuTools, _T("&Tools") );
00146 menuBar->Append( menuOptions, _T("&Options") );
00147 menuBar->Append( menuWindows, _T("&Windows") );
00148 menuBar->Append( menuAbout, _T("About") );
00149
00150 SetMenuBar( menuBar );
00151
00152
00153
00154 CreateStatusBar();
00155 SetStatusText( _T("Welcome to bbStudio !") );
00156
00157
00158
00159 mWxGUITextEditor = new WxGUITextEditor(this,this);
00160 mWxGUITextEditor->SetFileNameFilter("*.bbs");
00161
00162 mWxGUIHtmlBrowser = new WxGUIHtmlBrowser(this,wxSize(200,0),this);
00163
00164 mWxGUIOutputMessages = new WxGUIOutputMessages(this);
00165
00166 mWxGUICommand = new WxGUICommand(this,this);
00167
00168 mWxGUICommand->SetFocus();
00169
00170
00171 #if NOTEBOOK
00172
00173 mwxNotebook = new wxAuiNotebook(this,
00174 -1,
00175 wxPoint(0, 0),
00176 wxSize(500,500),
00177 wxAUI_NB_TAB_SPLIT
00178 | wxAUI_NB_TAB_MOVE
00179 | wxAUI_NB_TAB_EXTERNAL_MOVE
00180
00181
00182
00183
00184
00185 | wxNO_BORDER);
00186
00187
00188 mwxNotebook->AddPage(mWxGUITextEditor,_T("Files"),true);
00189 mwxNotebook->AddPage(mWxGUIHtmlBrowser,_T("Help"),true);
00190
00191 mwxNotebook->AddPage(mWxGUIOutputMessages,_T("Messages"),true);
00192
00193 mwxNotebook->AddPage(mWxGUICommand,_T("Command"),true);
00194
00195
00196 m_mgr.AddPane(mwxNotebook,
00197 wxAuiPaneInfo().Name(wxT("nb"))
00198 .CaptionVisible(false)
00199 .MinimizeButton(false)
00200 .MaximizeButton(false)
00201 .Center()
00202
00203 );
00204 #else
00205
00206
00207 m_mgr.AddPane(mWxGUITextEditor,
00208 wxAuiPaneInfo().Name(wxT("editor_content"))
00209 .Caption(wxT("Files"))
00210 .MinimizeButton(true)
00211 .MaximizeButton(true)
00212 .Center()
00213 .MinSize(wxSize(100,100))
00214 );
00215
00216 m_mgr.AddPane(mWxGUIHtmlBrowser,
00217 wxAuiPaneInfo().Name(wxT("browser_content"))
00218 .Caption(wxT("Help"))
00219 .MinimizeButton(true)
00220 .MaximizeButton(true)
00221 .Right()
00222 .Layer(2)
00223 .MinSize(wxSize(400,100))
00224 );
00225
00226 m_mgr.AddPane(mWxGUIOutputMessages,
00227 wxAuiPaneInfo().Name(wxT("messages_content"))
00228 .Caption(wxT("Messages"))
00229 .MinimizeButton(true)
00230 .MaximizeButton(true)
00231 .Bottom()
00232 .MinSize(wxSize(100,100))
00233 );
00234
00235 m_mgr.AddPane(mWxGUICommand,
00236 wxAuiPaneInfo().Name(wxT("command_content"))
00237 .Caption(wxT("Command"))
00238 .MinimizeButton(true)
00239 .MaximizeButton(true)
00240 .Bottom()
00241 .Layer(1)
00242 .MinSize(wxSize(100,100))
00243 );
00244 #endif
00245
00246
00247
00248 Wx::SetTopWindow(this);
00249
00250
00251
00252
00253
00254
00255 LoadPerspective();
00256
00257
00258
00259
00260 SetAutoLayout(true);
00261 Layout();
00262
00263 mWxGUIHtmlBrowser->GoHome();
00264
00265 m_mgr.Update();
00266
00267
00268 mBreaked = false;
00269
00270 wxBitmap bitmap;
00271 wxSplashScreen* splash;
00272 long style = wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_TIMEOUT;
00273 if (ConfigurationFile::GetInstance().DotBbtkIsNew())
00274 style = wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_NO_TIMEOUT;
00275 std::string splash_file = ConfigurationFile::GetInstance().Get_data_path();
00276 splash_file += "/kernel/icons/bbStudioSplashScreen.png";
00277
00278 if (bitmap.LoadFile(std2wx(splash_file),wxBITMAP_TYPE_PNG))
00279 splash =
00280 new wxSplashScreen(bitmap,
00281 style,
00282 1000, 0, -1, wxDefaultPosition, wxDefaultSize,
00283 wxSIMPLE_BORDER|wxSTAY_ON_TOP);
00284
00285 if (ConfigurationFile::GetInstance().DotBbtkIsNew())
00286 {
00287
00288 DoRegeneratePackageDoc("-a");
00289 DoRegenerateBoxesLists();
00290
00291
00292
00293
00294
00295
00296
00297 if (splash) splash->Destroy();
00298 }
00299
00300 }
00301
00302
00303
00304 WxGUIScriptingInterface::~WxGUIScriptingInterface()
00305 {
00306 bbtkDebugMessage("widget",9,"bbStudio::~bbStudio()"<<std::endl);
00307 SavePerspective();
00308 m_mgr.UnInit();
00309 }
00310
00311
00312
00313 void WxGUIScriptingInterface::OnClose(wxCloseEvent& event)
00314 {
00315 bbtkDebugMessage("widget",9,"bbStudio::OnClose()"<<std::endl);
00316
00317
00318 wxWindowList& list = GetChildren();
00319 wxWindowList::iterator iter;
00320 for (iter = list.begin(); iter != list.end(); ++iter)
00321 {
00322 (*iter)->Close();
00323 }
00324 this->Destroy();
00325 }
00326
00327
00328
00329
00330 void WxGUIScriptingInterface::Open(const std::string& filename)
00331 {
00332 mWxGUITextEditor->Open(filename);
00333 }
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352 #define CATCH_MACRO \
00353 catch (InterpreterException e) \
00354 { \
00355 if (e.GetErrorMessage()=="quit") \
00356 { \
00357 std::cerr << "* QUIT ENCOUNTERED"<<std::endl; \
00358 if (e.IsInScriptFile()) \
00359 std::cerr << "* FILE : '"<<e.GetScriptFile()<<"'"<<std::endl; \
00360 std::cerr << "* LINE : "<<e.GetScriptLine()<<std::endl; \
00361 } \
00362 else if (e.GetErrorMessage()=="break") \
00363 { \
00364 mBreaked = true; \
00365 std::cerr << "* BREAK"<<std::endl; \
00366 if (e.IsInScriptFile()) \
00367 std::cerr << "* FILE : '"<<e.GetScriptFile()<<"'"<<std::endl; \
00368 std::cerr << "* LINE : "<<e.GetScriptLine()<<std::endl; \
00369 } \
00370 else \
00371 { \
00372 std::cerr << "* ERROR : "<<e.GetErrorMessage()<<std::endl; \
00373 if (e.IsInScriptFile()) \
00374 std::cerr << "* FILE : '"<<e.GetScriptFile()<<"'"<<std::endl; \
00375 std::cerr << "* LINE : "<<e.GetScriptLine()<<std::endl; \
00376 int lev = bbtk::MessageManager::GetMessageLevel("Error"); \
00377 if (lev > 0) { \
00378 std::cerr << "* Exception thrown : "<<std::endl; \
00379 std::cerr << "* OBJECT : " <<e.GetObject()<<std::endl; \
00380 std::cerr << "* FILE : " <<e.GetSourceFile()<<std::endl; \
00381 } \
00382 } \
00383 }
00384
00385
00386 void WxGUIScriptingInterface::WxGUICommandEnter(const std::string& command)
00387 {
00388 std::string s("> ");
00389 s += command + "\n";
00390 mWxGUIOutputMessages->Print(s,wxRED);
00391
00392 try
00393 {
00394 mInterpreter->InterpretLine( command );
00395 }
00396 CATCH_MACRO;
00397 }
00398
00399
00400
00402 bool WxGUIScriptingInterface::InterpretFile( const std::string& filename)
00403 {
00404 try
00405 {
00406 mInterpreter->InterpretFile(filename);
00407 }
00408 CATCH_MACRO;
00409 return true;
00410 }
00411
00412
00413
00414
00415 void WxGUIScriptingInterface::WxGUITextEditorGraphSimple()
00416 {
00417 WxGUICommandEnter("exec freeze_no_error");
00418 WxGUITextEditorRun();
00419 WxGUICommandEnter("exec unfreeze");
00420 WxGUICommandEnter("graph");
00421 }
00422
00423
00424
00425 void WxGUIScriptingInterface::WxGUITextEditorGraphDetail()
00426 {
00427 WxGUICommandEnter("exec freeze_no_error");
00428 WxGUITextEditorRun();
00429 WxGUICommandEnter("exec unfreeze");
00430 WxGUICommandEnter("graph . 1");
00431 }
00432
00433
00434
00435
00436 void WxGUIScriptingInterface::WxGUITextEditorRunBBI()
00437 {
00438 std::string separator = ConfigurationFile::GetInstance().Get_file_separator ();
00439 std::string dir = ConfigurationFile::GetInstance().Get_default_temp_dir();
00440 std::string filename = dir + separator + "tmp_bbtk.bbs";
00441 mWxGUITextEditor->GetCurrentPage()->SaveFile(filename);
00442
00443 std::string command = "\"";
00444
00445 #ifdef WIN32
00446 command += "\"";
00447 #endif
00448
00449 command += ConfigurationFile::GetInstance().Get_bin_path();
00450 #ifdef MACOSX
00451 command += separator + "bbi.app/Contents/MacOS/bbi\" ";
00452 #else
00453 command += separator + "bbi\" ";
00454 #endif
00455 command += "\""+filename + "\"";
00456
00457 #ifdef WIN32
00458 command += "\"";
00459 #endif
00460
00461 command += " & ";
00462
00463 printf ("EED WxGUIScriptingInterface::WxGUITextEditorRunBBI %s \n" , command.c_str() );
00464 system( command.c_str() );
00465 }
00466
00467
00468
00469
00470 void WxGUIScriptingInterface::WxGUITextEditorRun()
00471 {
00472
00473 std::stringstream* buf = new std::stringstream;
00474 (*buf) << mWxGUITextEditor->GetCurrentPage()->GetText();
00475 try
00476 {
00477 if (!mBreaked)
00478 {
00479 if (mwxMenuItemReset->IsChecked()) WxGUICommandEnter("reset");
00480 mInterpreter->InterpretBuffer(buf);
00481 }
00482 else
00483 {
00484 mBreaked = false;
00485 mInterpreter->InterpretCurrentStreams();
00486 }
00487
00488 }
00489 CATCH_MACRO;
00490
00491 }
00492
00493
00494
00495 void WxGUIScriptingInterface::OnMenuQuit(wxCommandEvent& WXUNUSED(event))
00496 {
00497 if (!mWxGUITextEditor->CloseAllPages()) return;
00498 Close(true);
00499 }
00500
00501
00502
00503
00504 void WxGUIScriptingInterface::OnMenuAbout(wxCommandEvent& WXUNUSED(event))
00505 {
00506 m_mgr.Update();
00507 Refresh();
00508 wxMessageBox(_T(" bbStudio\nThe Black Box Toolkit Development Studio\n(c) CREATIS-LRMN 2008\n\n http://www.creatis.insa-lyon.fr/site/en/CreaTools_home"),
00509 _T("About ..."), wxOK | wxICON_INFORMATION,
00510 this);
00511 }
00512
00513
00514
00515
00516 void WxGUIScriptingInterface::OnMenuEditConfig(wxCommandEvent& WXUNUSED(event))
00517 {
00518
00519 std::string configFile =
00520 ConfigurationFile::GetInstance().Get_config_xml_full_path();
00521 Open(configFile);
00522 wxMessageDialog ww(NULL,_T("If you change the bbtk_config.xml, you have to restart this appliaction..."), _T("Alert !"), wxOK);
00523 ww.ShowModal();
00524 }
00525
00526
00527
00528 void WxGUIScriptingInterface::OnMenuWindowsPackageBrowser(wxCommandEvent& WXUNUSED(event))
00529 {
00530 wxBusyCursor wait;
00531 WxGUIPackageBrowser2Window *helpbrowser = new
00532 WxGUIPackageBrowser2Window(this,_T("Package Browser"), wxSize(600,600) );
00533 helpbrowser->Show();
00534
00535
00536
00537
00538
00539
00540 #if NOTEBOOK
00541
00542 #else
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554 #endif
00555 }
00556
00557
00558
00559
00560
00561 void WxGUIScriptingInterface::OnMenuCreatePackage(wxCommandEvent& WXUNUSED(event))
00562 {
00563
00564
00565
00566
00567
00568
00569
00570 std::string command("reset");
00571 mWxGUICommand->SendCommand(command);
00572 command = "include toolsbbtk/appli/GUICreatePackage";
00573 bbtkMessage("Debug",1,"Executing : '"<<command<<"'"<<std::endl);
00574 mWxGUICommand->SendCommand(command);
00575 }
00576
00577
00578
00579
00580 void WxGUIScriptingInterface::OnMenuCreateBlackBox(wxCommandEvent& WXUNUSED(event))
00581 {
00582
00583
00584
00585
00586
00587
00588
00589 std::string command("reset");
00590 mWxGUICommand->SendCommand(command);
00591 command = "include toolsbbtk/appli/GUICreateBlackBox";
00592 bbtkMessage("Debug",1,"Executing : '"<<command<<"'"<<std::endl);
00593 mWxGUICommand->SendCommand(command);
00594 }
00595
00596
00597
00598 void WxGUIScriptingInterface::OnMenuShowImageGraph(wxCommandEvent& WXUNUSED(event))
00599 {
00600
00601 std::string doc_path = bbtk::ConfigurationFile::GetInstance().Get_doc_path();
00602 doc_path += bbtk::ConfigurationFile::GetInstance().Get_file_separator();
00603 doc_path += "bbdoc";
00604 doc_path += bbtk::ConfigurationFile::GetInstance().Get_file_separator();
00605
00606 std::string pack_name("User");
00607 std::string pack_path = doc_path + pack_name;
00608
00609 #if defined(WIN32)
00610 std::string strappli="start ";
00611 #else
00612 #if defined(MACOSX)
00613 std::string strappli="open ";
00614 #else
00615 std::string strappli="gnome-open ";
00616 #endif
00617 #endif
00618 std::string strcommand = strappli +pack_path+"/workspace_workspacePrototype.png";
00619
00620 system ( strcommand.c_str() );
00621
00622 }
00623
00624
00625 void WxGUIScriptingInterface::DoRegeneratePackageDoc( const std::string& pack )
00626 {
00627 std::string mess("Regenerating doc for package '");
00628 if (pack!="-a")
00629 mess += pack + "'";
00630 else
00631 mess = "Regenerating doc for all packages";
00632 mess += " ... please wait";
00633
00634 SetStatusText( std2wx(mess) );
00635
00636 BBTK_BUSY_CURSOR;
00637
00638 std::string command;
00639 #if defined(WIN32)
00640 command = "\"";
00641 #endif
00642 command += ConfigurationFile::GetInstance().Get_bin_path();
00643 command += ConfigurationFile::GetInstance().Get_file_separator();
00644 command += "bbRegeneratePackageDoc";
00645 #if defined(WIN32)
00646 command += "\"";
00647 #endif
00648 command += " " + pack + " -q";
00649 bbtkMessage("debug",1,"Executing system command '"<<command<<"'"<<std::endl);
00650
00651
00652 if ( ! system ( command.c_str() ) )
00653 {
00654 SetStatusText( _T("Done !"));
00655
00656
00657
00658
00659
00660 }
00661 else
00662 {
00663 SetStatusText( _T("Done !"));
00664 wxString err(_T("An error occured while running '"));
00665 err += bbtk::std2wx(command) + _T("'");
00666 wxMessageBox(err,_T("Regenerate package doc"),wxOK | wxICON_ERROR);
00667 }
00668 }
00669
00670
00671
00672 void WxGUIScriptingInterface::OnMenuRegeneratePackageDoc(wxCommandEvent& WXUNUSED(event))
00673 {
00674 wxString name = wxGetTextFromUser(_T("Enter package name (-a for all)"),
00675 _T("Regenerate package doc"),
00676 _T(""));
00677 if (name.IsEmpty()) return;
00678 std::string pack = bbtk::wx2std(name);
00679
00680 DoRegeneratePackageDoc(pack);
00681 }
00682
00683
00684
00685
00686 void WxGUIScriptingInterface::DoRegenerateBoxesLists()
00687 {
00688 SetStatusText( _T("Regenerating boxes lists ... please wait") );
00689 BBTK_BUSY_CURSOR ;
00690
00691 std::string command;
00692 #if defined(WIN32)
00693 command = "\"";
00694 #endif
00695 command += ConfigurationFile::GetInstance().Get_bin_path();
00696 command += ConfigurationFile::GetInstance().Get_file_separator();
00697 command += "bbRegenerateBoxesLists";
00698 #if defined(WIN32)
00699 command += "\"";
00700 #endif
00701 command += " -q";
00702 bbtkMessage("debug",1,"Executing system command '"<<command<<"'"<<std::endl);
00703
00704 std::cout << "==========================================================================================================" << command.c_str() << std::endl;
00705 if ( ! system ( command.c_str() ) )
00706 {
00707 SetStatusText( _T("Done !"));
00708
00709
00710
00711
00712 }
00713 else
00714 {
00715 SetStatusText( _T("Done !"));
00716 wxString err(_T("An error occured while running '"));
00717 err += bbtk::std2wx(command) + _T("'");
00718 wxMessageBox(err,_T("Regenerate boxes lists"),wxOK | wxICON_ERROR);
00719 }
00720 }
00721
00722
00723
00724
00725 void WxGUIScriptingInterface::OnMenuRegenerateBoxesLists(wxCommandEvent& WXUNUSED(event))
00726 {
00727 DoRegenerateBoxesLists();
00728 }
00729
00730
00731
00732 void WxGUIScriptingInterface::OnMenuRegenerateAll(wxCommandEvent& WXUNUSED(event))
00733 {
00734
00735 DoRegeneratePackageDoc("-a");
00736 DoRegenerateBoxesLists();
00737 }
00738
00739
00740
00741
00742 void WxGUIScriptingInterface::OnMenuPlugPackage(wxCommandEvent& WXUNUSED(event))
00743 {
00744 long style = wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST;
00745 wxDirDialog* FD =
00746 new wxDirDialog( 0,
00747 _T("Select package directory"),
00748 _T(""),
00749 style);
00750
00751 if (FD->ShowModal()==wxID_OK)
00752 {
00753 std::string path = wx2std (FD->GetPath()) ;
00754 std::string fname = path + "/bbtkPackage";
00755 if ( ! Utilities::FileExists( fname ) )
00756 {
00757 wxString err(_T("The directory does not contain a 'bbtkPackage' file"));
00758 wxMessageBox(err,_T("Plug package"),wxOK | wxICON_ERROR);
00759 return;
00760 }
00761
00762 std::ifstream f;
00763 f.open(fname.c_str());
00764 std::string pname;
00765 f >> pname;
00766 f.close();
00767
00768 bbtk::ConfigurationFile::GetInstance().AddPackagePathsAndWrite( path );
00769
00770 DoRegeneratePackageDoc(pname);
00771 DoRegenerateBoxesLists();
00772 }
00773 }
00774
00775
00776
00777 void WxGUIScriptingInterface::InterpreterUserViewHtmlPage(const std::string& page)
00778 {
00779 std::string s(page);
00780
00781 if (mWxGUIHtmlBrowser->GoTo(s))
00782 {
00783
00784
00785 }
00786 else
00787 {
00788
00789 }
00790 }
00791
00792
00793
00794
00795
00796
00797
00798
00799
00800
00801
00802
00803
00804 bool WxGUIScriptingInterface::WxGUIHtmlBrowserUserOnLinkClicked(const std::string& target)
00805 {
00806 size_t s = target.length();
00807 if ((s>3) && (target[s-1]=='s')
00808 && (target[s-2]=='b')
00809 && (target[s-3]=='b')
00810 && (target[s-4]=='.'))
00811 {
00812 mWxGUITextEditor->Open(target);
00813 #if NOTEBOOK
00814 mwxNotebook->SetSelection(0);
00815 #endif
00816 mWxGUITextEditor->SetFocus();
00817 return false;
00818 }
00819
00820 if ((s>3) && (target[s-1]=='f')
00821 && (target[s-2]=='d')
00822 && (target[s-3]=='p')
00823 && (target[s-4]=='.'))
00824 {
00825
00826
00827
00828
00829
00830
00831
00832 int size=target.size();
00833 int pos=target.rfind("\\");
00834 std::string commandStart("start ");
00835 std::string commandPath("/D \""+target.substr(0,pos) +"\"");
00836 std::string commandPDF( target.substr(pos+1,size-pos+1) );
00837
00838 printf("EED WxGUIScriptingInterface::WxGUIHtmlBrowserUserOnLinkClicked cc %s \n",commandPath.c_str() );
00839
00840 while (commandPath.rfind("\\\\")!=-1 )
00841 {
00842 commandPath.erase( commandPath.rfind("\\\\") , 1 );
00843 printf("EED WxGUIScriptingInterface::WxGUIHtmlBrowserUserOnLinkClicked cc %s \n",commandPath.c_str() );
00844 }
00845
00846 std::string command = commandStart+commandPath+" "+commandPDF;
00847 printf("EED WxGUIScriptingInterface::WxGUIHtmlBrowserUserOnLinkClicked BB %s \n",command.c_str() );
00848 system( command.c_str() );
00849 return false;
00850 }
00851 return true;
00852 }
00853
00854
00855 void WxGUIScriptingInterface::OnMenuWindowsCheck( wxCommandEvent& event,
00856 wxWindow* w)
00857 {
00858 bool checked = event.IsChecked();
00859 bool shown = m_mgr.GetPane(w).IsShown();
00860
00861 if (checked ^ shown)
00862 {
00863 m_mgr.GetPane(w).Show(checked);
00864 m_mgr.Update();
00865 }
00866 }
00867
00868
00869 void WxGUIScriptingInterface::OnMenuWindowsFiles(wxCommandEvent& event)
00870 {
00871 OnMenuWindowsCheck(event,mWxGUITextEditor);
00872 }
00873
00874
00875
00876 void WxGUIScriptingInterface::OnMenuWindowsHelp(wxCommandEvent& event)
00877 {
00878 OnMenuWindowsCheck(event,mWxGUIHtmlBrowser);
00879 }
00880
00881
00882
00883 void WxGUIScriptingInterface::OnMenuWindowsMessages(wxCommandEvent& event)
00884 {
00885 OnMenuWindowsCheck(event,mWxGUIOutputMessages);
00886 }
00887
00888
00889
00890 void WxGUIScriptingInterface::OnMenuWindowsCommand(wxCommandEvent& event)
00891 {
00892 OnMenuWindowsCheck(event,mWxGUICommand);
00893 }
00894
00895
00896
00897 void WxGUIScriptingInterface::OnMenuWindowsSave( wxCommandEvent& WXUNUSED(event))
00898 {
00899 SavePerspective();
00900 }
00901
00902
00903
00904 void WxGUIScriptingInterface::SavePerspective()
00905 {
00906
00907 std::string conf = wx2std(m_mgr.SavePerspective());
00908 std::string fname = Utilities::MakeUserSettingsFullFileName("bbStudio.aui");
00909 std::ofstream f;
00910 f.open(fname.c_str(), std::ios::out );
00911 f << conf << std::endl;
00912
00913
00914
00915
00916
00917
00918 int w,h;
00919 GetSize(&w,&h);
00920
00921 f << w << " " << h << std::endl;
00922
00923 f.close();
00924 }
00925
00926
00927
00928 void WxGUIScriptingInterface::LoadPerspective()
00929 {
00930 std::string fname =
00931 Utilities::MakeUserSettingsFullFileName("bbStudio.aui");
00932 if ( Utilities::FileExists( fname ))
00933 {
00934
00935
00936 std::ifstream f;
00937 f.open(fname.c_str());
00938 std::string conf;
00939 f >> conf;
00940
00941
00942
00943
00944 int w,h;
00945 f >> w >> h ;
00946
00947 f.close();
00948
00949
00950
00951
00952 SetSize(w,h);
00953 m_mgr.LoadPerspective(std2wx(conf));
00954 }
00955 else
00956 {
00957 m_mgr.Update();
00958 }
00959 }
00960
00961
00962
00963 void WxGUIScriptingInterface::OnPaneClose(wxAuiManagerEvent& evt)
00964 {
00965 std::cout << "Closing panel '"<<evt.pane->name<<"'"<<std::endl;
00966
00967
00968 }
00969
00970
00971
00972
00973 BEGIN_EVENT_TABLE(WxGUIScriptingInterface, wxFrame)
00974 EVT_CLOSE( WxGUIScriptingInterface::OnClose)
00975 EVT_MENU(ID_Menu_Quit, WxGUIScriptingInterface::OnMenuQuit)
00976 EVT_MENU(ID_Menu_About, WxGUIScriptingInterface::OnMenuAbout)
00977 EVT_MENU(ID_Menu_EditConfig, WxGUIScriptingInterface::OnMenuEditConfig)
00978 EVT_MENU(ID_Menu_CreatePackage, WxGUIScriptingInterface::OnMenuCreatePackage)
00979 EVT_MENU(ID_Menu_CreateBlackBox, WxGUIScriptingInterface::OnMenuCreateBlackBox)
00980 EVT_MENU(ID_Menu_ShowImageGraph, WxGUIScriptingInterface::OnMenuShowImageGraph)
00981 EVT_MENU(ID_Menu_RegeneratePackageDoc, WxGUIScriptingInterface::OnMenuRegeneratePackageDoc)
00982 EVT_MENU(ID_Menu_RegenerateBoxesLists, WxGUIScriptingInterface::OnMenuRegenerateBoxesLists)
00983 EVT_MENU(ID_Menu_RegenerateAll, WxGUIScriptingInterface::OnMenuRegenerateAll)
00984 EVT_MENU(ID_Menu_PlugPackage, WxGUIScriptingInterface::OnMenuPlugPackage)
00985 EVT_MENU(ID_Menu_Windows_Files, WxGUIScriptingInterface::OnMenuWindowsFiles)
00986 EVT_MENU(ID_Menu_Windows_Help, WxGUIScriptingInterface::OnMenuWindowsHelp)
00987 EVT_MENU(ID_Menu_Windows_Messages, WxGUIScriptingInterface::OnMenuWindowsMessages)
00988 EVT_MENU(ID_Menu_Windows_Command, WxGUIScriptingInterface::OnMenuWindowsCommand)
00989 EVT_MENU(ID_Menu_Windows_Save, WxGUIScriptingInterface::OnMenuWindowsSave)
00990 EVT_MENU(ID_Menu_Windows_PackageBrowser, WxGUIScriptingInterface::OnMenuWindowsPackageBrowser)
00991 EVT_AUI_PANE_CLOSE(WxGUIScriptingInterface::OnPaneClose)
00992
00993 END_EVENT_TABLE()
00994
00995
00996 }
00997
00998
00999 #endif //_USE_WXWIDGETS_