1 /*=========================================================================
4 Module: $RCSfile: bbtkWxConsole.cxx,v $
6 Date: $Date: 2008/03/19 14:58:13 $
7 Version: $Revision: 1.18 $
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");
291 if ( mInterpreter->InterpretLine( wx2std(line) ) ==
297 //printf("WxConsole::CommandString 06 \n");
299 //================================================================
301 //================================================================
302 /// Runs the interpretation of a file
303 void WxConsole::InterpretFile( const std::string& filename)
305 if ( mInterpreter->InterpretFile(filename) ==
311 //================================================================
313 //================================================================
314 void WxConsole::OnMenuQuit(wxCommandEvent& WXUNUSED(event))
318 //================================================================
321 //================================================================
322 void WxConsole::OnMenuAbout(wxCommandEvent& WXUNUSED(event))
326 wxMessageBox(_T(" bbi\nThe Black Box Toolkit interpreter\n(c) CREATIS-LRMN 2008"),
327 _T("About ..."), wxOK | wxICON_INFORMATION,
330 //================================================================
333 //================================================================
334 void WxConsole::OnMenuEditConfig(wxCommandEvent& WXUNUSED(event))
336 std::string commandStr;
337 std::string configFile = ConfigurationFile::GetInstance().Get_config_xml_full_path();
339 commandStr = "notepad.exe ";
341 commandStr = "gedit ";
343 commandStr = commandStr + configFile;
344 std::cout << "system: " << commandStr << std::endl;
345 system ( commandStr.c_str() );
347 //================================================================
350 //================================================================
351 void WxConsole::OnMenuCreatePackage(wxCommandEvent& WXUNUSED(event))
353 printf("EED WxConsole::OnMenuCreatePackage 01 \n");
354 std::string command("toolsbbtk/appli/CreatePackage");
355 printf("EED WxConsole::OnMenuCreatePackage 02 \n");
357 bbtkMessage("Debug",1,"Executing : '"<<command<<"'"<<std::endl);
358 printf("EED WxConsole::OnMenuCreatePackage 03 \n");
359 Interpreter* I = new Interpreter;
360 printf("EED WxConsole::OnMenuCreatePackage 04 \n");
361 I->InterpretFile(command);
362 printf("EED WxConsole::OnMenuCreatePackage 05 \n");
364 printf("EED WxConsole::OnMenuCreatePackage 06 \n");
366 //================================================================
369 //================================================================
370 void WxConsole::OnMenuCreateBlackBox(wxCommandEvent& WXUNUSED(event))
372 std::string command("toolsbbtk/appli/CreateBlackBox");
373 bbtkMessage("Debug",1,"Executing : '"<<command<<"'"<<std::endl);
374 Interpreter* I = new Interpreter;
375 I->InterpretFile(command);
378 //================================================================
380 //================================================================
381 void WxConsole::OnMenuShowImageGraph(wxCommandEvent& WXUNUSED(event))
383 std::string default_temp_dir = ConfigurationFile::GetInstance().Get_default_temp_dir();
386 std::string strappli="start ";
388 std::string strappli="gnome-open ";
390 std::string strcommand = strappli +default_temp_dir+"/temp_dir/workspace_workspacePrototype.png";
391 std::cout << "system: " << strcommand << std::endl;
392 system ( strcommand.c_str() );
395 //================================================================
398 //================================================================
399 void WxConsole::OnMenuCreateIndex(wxCommandEvent& WXUNUSED(event))
401 std::string doc_path = ConfigurationFile::GetInstance().Get_doc_path();
402 std::string filepath = doc_path+"/bbdoc/make-index.bbs";
403 Interpreter* I = new Interpreter;
405 //EED std::cout << "bbi: include "<<filepath<<std::endl;
406 //EED I->InterpretFile( filepath );
408 I->InterpretLine( "exec freeze");
409 I->InterpretLine( "include *");
410 I->InterpretLine( "index "+doc_path+"/bbdoc/index-alpha.html Initials");
411 I->InterpretLine( "index "+doc_path+"/bbdoc/index-package.html Packages");
412 I->InterpretLine( "index "+doc_path+"/bbdoc/index-category.html Categories");
413 I->InterpretLine( "index "+doc_path+"/bbdoc/index-adaptors.html Adaptors");
417 //================================================================
422 //================================================================
423 void WxConsole::OnCommandChar(wxCommandEvent& event)
427 // Command completion
428 std::vector<std::string> commands;
429 wxString sline( wx2std ( mwxTextCommand->GetValue() ) );
430 int ind = sline.size();
431 mInterpreter->FindCommandsWithPrefix( sline.c_str(),ind,commands);
432 if (commands.size()==1)
434 std::string com = *commands.begin();
435 for (; ind<com.size(); ++ind)
437 mwxTextCommand->TextAppend( std2wx ( com[ind]) );
439 mwxTextCommand->TextAppend(_T(" "));
441 else if (commands.size()>1)
443 std::vector<std::string>::iterator i;
445 for (i=commands.begin();i!=commands.end();++i)
447 write(STDOUT_FILENO,(*i).c_str(),strlen((*i).c_str()));
450 write(STDOUT_FILENO,"\n> ",3);
451 //for (int j=0;j<ind;++j)
453 write(STDOUT_FILENO,line,ind);
458 //================================================================
460 void WxConsole::ShowHtmlPage(std::string& page)
462 // std::cout << "WxConsole::ShowHtmlPage('"<<page<<"')"<<std::endl;
463 if (mwxHtmlWindow->GoTo(page))
465 //EED mwxNotebook->ChangeSelection(1);
466 mwxNotebook->SetSelection(1);
470 // std::cout << "ERROR html"<<std::endl;
476 //================================================================
477 wxPanel* WxConsole::CreateBtnsCtrlPanel(wxWindow *parent)
479 wxPanel *btnsCtrlPanel = new wxPanel(parent,-1);
480 wxBoxSizer *btnsSizer = new wxBoxSizer(wxHORIZONTAL);
482 wxButton *btnInclude = new wxButton( btnsCtrlPanel,-1,_T("Include") );
483 wxButton *btnReset = new wxButton( btnsCtrlPanel,-1,_T("Reset") );
484 wxButton *btnConfig = new wxButton( btnsCtrlPanel,-1,_T("Config") );
485 wxButton *btnGraphS = new wxButton( btnsCtrlPanel,-1,_T("Graph simple") );
486 wxButton *btnGraphD = new wxButton( btnsCtrlPanel,-1,_T("Graph detailed") );
487 wxButton *btnHelp = new wxButton( btnsCtrlPanel,-1,_T("Help") );
489 btnsSizer->Add( btnInclude );
490 btnsSizer->Add( btnReset );
491 btnsSizer->Add( btnConfig );
492 btnsSizer->Add( btnGraphS );
493 btnsSizer->Add( btnGraphD );
494 btnsSizer->Add( btnHelp );
495 btnsCtrlPanel->SetSizer(btnsSizer);
497 Connect(btnInclude->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxConsole::OnBtnInclude );
498 Connect(btnReset->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxConsole::OnBtnReset );
499 Connect(btnConfig->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxConsole::OnBtnConfig );
500 Connect(btnGraphS->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxConsole::OnBtnGraphS );
501 Connect(btnGraphD->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxConsole::OnBtnGraphD );
502 Connect(btnHelp->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxConsole::OnBtnHelp );
503 return btnsCtrlPanel;
505 //================================================================
508 //================================================================
509 void WxConsole::OnBtnInclude(wxCommandEvent& event)
511 std::string default_doc_dir = ConfigurationFile::GetInstance().Get_default_temp_dir();
512 std::string stdDir = default_doc_dir+"/share/bbtk/bbs";
513 wxString defaultDir(stdDir.c_str(), wxConvUTF8);
515 wxFileDialog dialog(this, _T("Choose a file"),defaultDir, _T(""), _T("*.bbs"), wxOPEN );
516 if (dialog.ShowModal() == wxID_OK)
518 // std::string command(_T("include "));
519 // std::string pathfilename = (const char *)(dialog.GetFilename().mb_str());
520 wxString command(_T("include "));
521 wxString pathfilename = dialog.GetPath();
522 command += pathfilename;
523 CommandString( command );
527 //================================================================
530 //================================================================
531 void WxConsole::OnBtnReset(wxCommandEvent& event)
533 CommandString(_T("reset"));
535 //================================================================
538 //================================================================
539 void WxConsole::OnBtnConfig(wxCommandEvent& event)
541 CommandString(_T("config"));
543 //================================================================
547 //================================================================
548 void WxConsole::OnBtnGraphS(wxCommandEvent& event)
550 CommandString(_T("graph"));
552 //================================================================
554 //================================================================
555 void WxConsole::OnBtnGraphD(wxCommandEvent& event)
557 CommandString(_T("graph . 1"));
559 //================================================================
561 //================================================================
562 void WxConsole::OnBtnHelp(wxCommandEvent& event)
564 CommandString(_T("help"));
566 //================================================================
569 //================================================================
570 BEGIN_EVENT_TABLE(WxConsole, wxFrame)
571 EVT_MENU(WxConsole::ID_Menu_Quit, WxConsole::OnMenuQuit)
572 EVT_MENU(WxConsole::ID_Menu_About, WxConsole::OnMenuAbout)
573 EVT_MENU(WxConsole::ID_Menu_EditConfig, WxConsole::OnMenuEditConfig)
574 EVT_MENU(WxConsole::ID_Menu_CreatePackage, WxConsole::OnMenuCreatePackage)
575 EVT_MENU(WxConsole::ID_Menu_CreateBlackBox, WxConsole::OnMenuCreateBlackBox)
576 EVT_MENU(WxConsole::ID_Menu_ShowImageGraph, WxConsole::OnMenuShowImageGraph)
577 EVT_MENU(WxConsole::ID_Menu_CreateIndex, WxConsole::OnMenuCreateIndex)
578 EVT_TEXT_ENTER(WxConsole::ID_Text_Command, WxConsole::OnCommandEnter)
579 // EVT_CHAR(WxConsole::ID_Text_Command, WxConsole::OnCommandChar)
581 //================================================================
586 #endif //_USE_WXWIDGETS_