1 /*=========================================================================
4 Module: $RCSfile: bbtkWxConsole.cxx,v $
6 Date: $Date: 2008/03/19 12:26:07 $
7 Version: $Revision: 1.17 $
9 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10 l'Image). All rights reserved. See Doc/License.txt or
11 http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
13 This software is distributed WITHOUT ANY WARRANTY; without even
14 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 PURPOSE. See the above copyright notices for more information.
17 =========================================================================*//**
18 * \brief Short description in one line
20 * Long description which
21 * can span multiple lines
33 #ifdef _USE_WXWIDGETS_
36 #include "bbtkWxConsole.h"
37 #include "bbtkWxBlackBox.h"
38 #include "bbtkConfigurationFile.h"
39 #include "bbtkWxStreamRedirector.h"
46 //================================================================
47 WxConsole::WxConsole( wxWindow *parent, wxString title, wxSize size)
48 : wxFrame((wxFrame *)parent, -1, title, wxDefaultPosition, size)
50 // m_mgr = new wxAuiManager(this);
51 m_mgr.SetManagedWindow(this);
53 mInterpreter = new bbtk::Interpreter();
54 mInterpreter->SetWxConsole(this);
55 mInterpreter->SetCommandLine(true);
58 wxInitAllImageHandlers();
60 wxMenu *menuFile = new wxMenu;
61 menuFile->Append( ID_Menu_Quit, _T("&Quit") );
63 wxMenu *menuAbout = new wxMenu;
64 menuAbout->Append( ID_Menu_About, _T("&About...") );
66 wxMenu *menuTools = new wxMenu;
67 menuTools->Append( ID_Menu_EditConfig, _T("&Edit bbtk config") );
68 menuTools->Append( ID_Menu_CreatePackage, _T("Create &package") );
69 menuTools->Append( ID_Menu_CreateBlackBox, _T("Create &blackbox") );
70 menuTools->Append( ID_Menu_ShowImageGraph, _T("&Show last image graph") );
71 menuTools->Append( ID_Menu_CreateIndex, _T("&Generate index") );
74 wxMenuBar *menuBar = new wxMenuBar;
75 menuBar->Append( menuFile, _T("&File") );
76 menuBar->Append( menuTools, _T("&Tools") );
77 menuBar->Append( menuAbout, _T("About") );
79 SetMenuBar( menuBar );
82 SetStatusText( _T("Welcome to bbi !") );
87 // wxFlexGridSizer *sizer = new wxFlexGridSizer(1);
89 //EED wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
90 // mwxNotebook = new wxNotebook(this,-1,wxDefaultPosition, wxDefaultSize, 0);
91 mwxNotebook = new wxAuiNotebook(this,
95 wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER);
97 mwxPageCommand = new wxPanel(mwxNotebook,-1);
98 mwxPageHelp = new wxPanel(mwxNotebook,-1);
101 wxBoxSizer *cmdsizer = new wxBoxSizer(wxVERTICAL);
103 mwxPageCommand->SetAutoLayout(true);
104 mwxPageCommand->SetSizer(cmdsizer);
105 cmdsizer->Fit(mwxPageCommand);
106 cmdsizer->SetSizeHints(mwxPageCommand);
108 wxBoxSizer *helpsizer = new wxBoxSizer(wxVERTICAL);
110 mwxPageHelp->SetAutoLayout(true);
111 mwxPageHelp->SetSizer(helpsizer);
112 helpsizer->Fit(mwxPageHelp);
113 helpsizer->SetSizeHints(mwxPageHelp);
115 mwxHtmlWindow = new WxBrowser(mwxPageHelp,
116 //EED wxSize(1200,0));
119 // mwxHtmlWindow->SetSize(wxSize(800,1000));
120 helpsizer->Add (mwxHtmlWindow,1, wxGROW |wxLEFT | wxRIGHT | wxBOTTOM );
121 // helpsizer->Add ( new wxButton(mwxPageHelp,-1,"perro"), 0, wxEXPAND );
127 new wxTextCtrl(mwxPageCommand,
129 _T(""),wxDefaultPosition,
130 wxDefaultSize, //HistorySize,
134 wxFont* FixedFont = new wxFont(10,
140 mwxTextHistoryAttr = new wxTextAttr;
141 mwxTextHistoryAttr->SetFont(*FixedFont);
144 new wxTextCtrl(mwxPageCommand,
146 _T(""),wxDefaultPosition,
153 mwxTextCommandAttr = new wxTextAttr;
154 mwxTextCommandAttr->SetFont(*FixedFont);
155 mwxTextCommand->SetDefaultStyle(*mwxTextCommandAttr);
158 new wxComboBox(mwxPageCommand,
165 // | wxTE_PROCESS_TAB
167 // //| wxTAB_TRAVERSAL
171 mwxTextCommand->SetFocus();
173 wxPanel *btnsCtrlPanel = CreateBtnsCtrlPanel(mwxPageCommand);
175 wxButton *btnGo = new wxButton( mwxPageCommand,-1,_T("Go") );
176 Connect(btnGo->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxConsole::OnBtnGo );
178 wxFlexGridSizer *sizerCommand= new wxFlexGridSizer(2);
179 sizerCommand->AddGrowableCol(0);
180 sizerCommand->Add(mwxTextCommand,1,wxGROW);
181 sizerCommand->Add(btnGo);
183 cmdsizer->Add ( mwxTextHistory, 1, wxALL | wxGROW, 10);
184 //EED cmdsizer->Add ( mwxTextCommand, 0, wxLEFT | wxRIGHT | wxBOTTOM | wxGROW, 10 );
185 cmdsizer->Add ( sizerCommand, 0, wxLEFT | wxRIGHT | wxBOTTOM | wxGROW, 10 );
186 cmdsizer->Add ( btnsCtrlPanel, 0, wxLEFT | wxRIGHT | wxBOTTOM | wxGROW, 10 );
189 // cmdsizer->AddGrowableCol(0);
190 // cmdsizer->AddGrowableRow(0);
191 // cmdsizer->AddGrowableRow(1);
192 // cmdsizer->SetFlexibleDirection(wxBOTH);
194 //=============================
198 Connect( mwxTextCommand->GetId(),
199 wxEVT_COMMAND_TEXT_ENTER,
200 (wxObjectEventFunction)& WxConsole::OnCommandEnter );
202 Connect( mwxTextCommand->GetId(),
204 //wxEVT_COMMAND_TEXT_UPDATED,
205 (wxObjectEventFunction)& WxConsole::OnCommandChar );
210 // Redirection of std::cout to mwxTextHistory and printf
212 new WxStreamRedirector(std::cout,mwxTextHistory,*wxBLACK,true);
214 new WxStreamRedirector(std::cerr,mwxTextHistory,*wxGREEN,true);
216 // Creates and sets the parent window of all bbtk windows
217 wxWindow* top = new wxPanel(this,-1);//,_T("top"));
219 //new wxFrame(this,-1,_T("bbtk"),
220 // wxDefaultPosition,
222 // wxFRAME_TOOL_WINDOW) ;//wxMINIMIZE_BOX);
224 Wx::SetTopWindow(top);
230 //EED SetSizer(sizer);
232 mwxNotebook->AddPage( mwxPageCommand, _T("Command"));
233 mwxNotebook->AddPage( mwxPageHelp, _T("Help"));
234 m_mgr.AddPane(mwxNotebook, wxAuiPaneInfo().Name(wxT("notebook_content")).CenterPane().PaneBorder(false));
243 //================================================================
245 //================================================================
246 WxConsole::~WxConsole()
249 delete mRedirect_cout;
250 delete mRedirect_cerr;
252 //================================================================
255 //================================================================
256 void WxConsole::OnCommandEnter(wxCommandEvent& event)
258 wxString line(mwxTextCommand->GetValue());
261 //================================================================
263 //================================================================
264 void WxConsole::OnBtnGo(wxCommandEvent& event)
266 wxString line(mwxTextCommand->GetValue());
269 //================================================================
271 //================================================================
272 void WxConsole::CommandString(wxString line )
274 //printf("WxConsole::CommandString 01 \n");
275 wxString s = _T("> ") + line + _T("\n");
276 mwxTextHistoryAttr->SetTextColour(*wxRED);
277 mwxTextHistory->SetDefaultStyle(*mwxTextHistoryAttr);
278 mwxTextHistory->AppendText(s);
279 // send to standard console also
280 //printf("WxConsole::CommandString 02 \n");
281 // printf("%s",wx2std(s).c_str());
282 //EED mwxTextCommand->Clear();
283 mwxTextCommand->SetValue(_T(""));
284 mwxTextCommand->Append(line);
286 //EED mwxTextCommand->SetDefaultStyle(*mwxTextCommandAttr);
287 mwxTextHistoryAttr->SetTextColour(*wxBLACK);
288 mwxTextHistory->SetDefaultStyle(*mwxTextHistoryAttr);
290 //printf("WxConsole::CommandString 03 \n");
293 bool insideComment = false;
295 mInterpreter->InterpretLine( wx2std(line), insideComment );
297 catch (bbtk::QuitException)
301 catch (bbtk::Exception e)
305 catch (std::exception& e)
307 std::cout << "* ERROR : "<<e.what()<<" (not in bbtk)"<<std::endl;
311 std::cout << "* UNDEFINED ERROR (not a bbtk nor a std exception)"
314 //printf("WxConsole::CommandString 06 \n");
316 //================================================================
319 //================================================================
320 void WxConsole::OnMenuQuit(wxCommandEvent& WXUNUSED(event))
324 //================================================================
327 //================================================================
328 void WxConsole::OnMenuAbout(wxCommandEvent& WXUNUSED(event))
332 wxMessageBox(_T(" bbi\nThe Black Box Toolkit interpreter\n(c) CREATIS-LRMN 2008"),
333 _T("About ..."), wxOK | wxICON_INFORMATION,
336 //================================================================
339 //================================================================
340 void WxConsole::OnMenuEditConfig(wxCommandEvent& WXUNUSED(event))
342 std::string commandStr;
343 std::string configFile = ConfigurationFile::GetInstance().Get_config_xml_full_path();
345 commandStr = "notepad.exe ";
347 commandStr = "gedit ";
349 commandStr = commandStr + configFile;
350 std::cout << "system: " << commandStr << std::endl;
351 system ( commandStr.c_str() );
353 //================================================================
356 //================================================================
357 void WxConsole::OnMenuCreatePackage(wxCommandEvent& WXUNUSED(event))
359 printf("EED WxConsole::OnMenuCreatePackage 01 \n");
360 std::string command("toolsbbtk/appli/CreatePackage");
361 printf("EED WxConsole::OnMenuCreatePackage 02 \n");
363 bbtkMessage("Debug",1,"Executing : '"<<command<<"'"<<std::endl);
364 printf("EED WxConsole::OnMenuCreatePackage 03 \n");
365 Interpreter* I = new Interpreter;
366 printf("EED WxConsole::OnMenuCreatePackage 04 \n");
367 I->InterpretFile(command);
368 printf("EED WxConsole::OnMenuCreatePackage 05 \n");
370 printf("EED WxConsole::OnMenuCreatePackage 06 \n");
372 //================================================================
375 //================================================================
376 void WxConsole::OnMenuCreateBlackBox(wxCommandEvent& WXUNUSED(event))
378 std::string command("toolsbbtk/appli/CreateBlackBox");
379 bbtkMessage("Debug",1,"Executing : '"<<command<<"'"<<std::endl);
380 Interpreter* I = new Interpreter;
381 I->InterpretFile(command);
384 //================================================================
386 //================================================================
387 void WxConsole::OnMenuShowImageGraph(wxCommandEvent& WXUNUSED(event))
389 std::string default_temp_dir = ConfigurationFile::GetInstance().Get_default_temp_dir();
392 std::string strappli="start ";
394 std::string strappli="gnome-open ";
396 std::string strcommand = strappli +default_temp_dir+"/temp_dir/workspace_workspacePrototype.png";
397 std::cout << "system: " << strcommand << std::endl;
398 system ( strcommand.c_str() );
401 //================================================================
404 //================================================================
405 void WxConsole::OnMenuCreateIndex(wxCommandEvent& WXUNUSED(event))
407 std::string doc_path = ConfigurationFile::GetInstance().Get_doc_path();
408 std::string filepath = doc_path+"/bbdoc/make-index.bbs";
409 Interpreter* I = new Interpreter;
411 //EED std::cout << "bbi: include "<<filepath<<std::endl;
412 //EED I->InterpretFile( filepath );
414 bool insideComment = false; // for multiline comment
415 I->InterpretLine( "exec freeze" ,insideComment );
416 I->InterpretLine( "include *" ,insideComment );
417 I->InterpretLine( "index "+doc_path+"/bbdoc/index-alpha.html Initials" ,insideComment );
418 I->InterpretLine( "index "+doc_path+"/bbdoc/index-package.html Packages" ,insideComment );
419 I->InterpretLine( "index "+doc_path+"/bbdoc/index-category.html Categories" ,insideComment );
420 I->InterpretLine( "index "+doc_path+"/bbdoc/index-adaptors.html Adaptors",insideComment );
424 //================================================================
429 //================================================================
430 void WxConsole::OnCommandChar(wxCommandEvent& event)
434 // Command completion
435 std::vector<std::string> commands;
436 wxString sline( wx2std ( mwxTextCommand->GetValue() ) );
437 int ind = sline.size();
438 mInterpreter->FindCommandsWithPrefix( sline.c_str(),ind,commands);
439 if (commands.size()==1)
441 std::string com = *commands.begin();
442 for (; ind<com.size(); ++ind)
444 mwxTextCommand->TextAppend( std2wx ( com[ind]) );
446 mwxTextCommand->TextAppend(_T(" "));
448 else if (commands.size()>1)
450 std::vector<std::string>::iterator i;
452 for (i=commands.begin();i!=commands.end();++i)
454 write(STDOUT_FILENO,(*i).c_str(),strlen((*i).c_str()));
457 write(STDOUT_FILENO,"\n> ",3);
458 //for (int j=0;j<ind;++j)
460 write(STDOUT_FILENO,line,ind);
465 //================================================================
467 void WxConsole::ShowHtmlPage(std::string& page)
469 // std::cout << "WxConsole::ShowHtmlPage('"<<page<<"')"<<std::endl;
470 if (mwxHtmlWindow->GoTo(page))
472 //EED mwxNotebook->ChangeSelection(1);
473 mwxNotebook->SetSelection(1);
477 // std::cout << "ERROR html"<<std::endl;
483 //================================================================
484 wxPanel* WxConsole::CreateBtnsCtrlPanel(wxWindow *parent)
486 wxPanel *btnsCtrlPanel = new wxPanel(parent,-1);
487 wxBoxSizer *btnsSizer = new wxBoxSizer(wxHORIZONTAL);
489 wxButton *btnInclude = new wxButton( btnsCtrlPanel,-1,_T("Include") );
490 wxButton *btnReset = new wxButton( btnsCtrlPanel,-1,_T("Reset") );
491 wxButton *btnConfig = new wxButton( btnsCtrlPanel,-1,_T("Config") );
492 wxButton *btnGraphS = new wxButton( btnsCtrlPanel,-1,_T("Graph simple") );
493 wxButton *btnGraphD = new wxButton( btnsCtrlPanel,-1,_T("Graph detailed") );
494 wxButton *btnHelp = new wxButton( btnsCtrlPanel,-1,_T("Help") );
496 btnsSizer->Add( btnInclude );
497 btnsSizer->Add( btnReset );
498 btnsSizer->Add( btnConfig );
499 btnsSizer->Add( btnGraphS );
500 btnsSizer->Add( btnGraphD );
501 btnsSizer->Add( btnHelp );
502 btnsCtrlPanel->SetSizer(btnsSizer);
504 Connect(btnInclude->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxConsole::OnBtnInclude );
505 Connect(btnReset->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxConsole::OnBtnReset );
506 Connect(btnConfig->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxConsole::OnBtnConfig );
507 Connect(btnGraphS->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxConsole::OnBtnGraphS );
508 Connect(btnGraphD->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxConsole::OnBtnGraphD );
509 Connect(btnHelp->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxConsole::OnBtnHelp );
510 return btnsCtrlPanel;
512 //================================================================
515 //================================================================
516 void WxConsole::OnBtnInclude(wxCommandEvent& event)
518 std::string default_doc_dir = ConfigurationFile::GetInstance().Get_default_temp_dir();
519 std::string stdDir = default_doc_dir+"/share/bbtk/bbs";
520 wxString defaultDir(stdDir.c_str(), wxConvUTF8);
522 wxFileDialog dialog(this, _T("Choose a file"),defaultDir, _T(""), _T("*.bbs"), wxOPEN );
523 if (dialog.ShowModal() == wxID_OK)
525 // std::string command(_T("include "));
526 // std::string pathfilename = (const char *)(dialog.GetFilename().mb_str());
527 wxString command(_T("include "));
528 wxString pathfilename = dialog.GetPath();
529 command += pathfilename;
530 CommandString( command );
534 //================================================================
537 //================================================================
538 void WxConsole::OnBtnReset(wxCommandEvent& event)
540 CommandString(_T("reset"));
542 //================================================================
545 //================================================================
546 void WxConsole::OnBtnConfig(wxCommandEvent& event)
548 CommandString(_T("config"));
550 //================================================================
554 //================================================================
555 void WxConsole::OnBtnGraphS(wxCommandEvent& event)
557 CommandString(_T("graph"));
559 //================================================================
561 //================================================================
562 void WxConsole::OnBtnGraphD(wxCommandEvent& event)
564 CommandString(_T("graph . 1"));
566 //================================================================
568 //================================================================
569 void WxConsole::OnBtnHelp(wxCommandEvent& event)
571 CommandString(_T("help"));
573 //================================================================
576 //================================================================
577 BEGIN_EVENT_TABLE(WxConsole, wxFrame)
578 EVT_MENU(WxConsole::ID_Menu_Quit, WxConsole::OnMenuQuit)
579 EVT_MENU(WxConsole::ID_Menu_About, WxConsole::OnMenuAbout)
580 EVT_MENU(WxConsole::ID_Menu_EditConfig, WxConsole::OnMenuEditConfig)
581 EVT_MENU(WxConsole::ID_Menu_CreatePackage, WxConsole::OnMenuCreatePackage)
582 EVT_MENU(WxConsole::ID_Menu_CreateBlackBox, WxConsole::OnMenuCreateBlackBox)
583 EVT_MENU(WxConsole::ID_Menu_ShowImageGraph, WxConsole::OnMenuShowImageGraph)
584 EVT_MENU(WxConsole::ID_Menu_CreateIndex, WxConsole::OnMenuCreateIndex)
585 EVT_TEXT_ENTER(WxConsole::ID_Text_Command, WxConsole::OnCommandEnter)
586 // EVT_CHAR(WxConsole::ID_Text_Command, WxConsole::OnCommandChar)
588 //================================================================
593 #endif //_USE_WXWIDGETS_