]> Creatis software - bbtk.git/blob - kernel/src/bbtkWxGUIConsole.cxx
edaaf6aed2d86151f93574dd3616ccedb95d8ea6
[bbtk.git] / kernel / src / bbtkWxGUIConsole.cxx
1 /*=========================================================================
2                                                                                 
3   Program:   bbtk
4   Module:    $RCSfile: bbtkWxGUIConsole.cxx,v $
5   Language:  C++
6   Date:      $Date: 2008/03/21 11:44:37 $
7   Version:   $Revision: 1.4 $
8                                                                                 
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.
12                                                                                 
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.
16                                                                                 
17 =========================================================================*//**
18  * \brief Short description in one line
19  * 
20  * Long description which 
21  * can span multiple lines
22  */
23 /**
24  * \file 
25  * \brief 
26  */
27 /**
28  * \class bbtk::
29  * \brief 
30  */
31
32
33 #ifdef _USE_WXWIDGETS_
34
35 #include <iostream>     
36 #include "bbtkWxGUIConsole.h"
37 #include "bbtkWxBlackBox.h"
38 #include "bbtkConfigurationFile.h"
39 #include "bbtkWxStreamRedirector.h"
40  
41
42 #include "icons/cc_run.xpm"
43
44 namespace bbtk
45 {
46
47     enum
48     {
49       ID_Menu_Quit = 1,
50       ID_Menu_About,
51       ID_Menu_EditConfig,
52       ID_Menu_CreatePackage,
53       ID_Menu_CreateBlackBox,
54       ID_Menu_ShowImageGraph,
55       ID_Menu_CreateIndex,
56       ID_Button_Run
57     };
58     
59   
60   //================================================================
61   WxGUIConsole::WxGUIConsole( wxWindow *parent, wxString title, wxSize size)
62     : wxFrame((wxFrame *)parent, -1, title, wxDefaultPosition, size)
63   {     
64 //    m_mgr = new wxAuiManager(this);
65         m_mgr.SetManagedWindow(this);
66    
67     mInterpreter = new bbtk::Interpreter();
68     mInterpreter->SetUser(this);
69     mInterpreter->SetCommandLine(true);
70     //==============
71     // Menu
72     wxInitAllImageHandlers();
73     
74     wxMenu *menuFile = new wxMenu;
75     menuFile->Append( ID_Menu_Quit, _T("&Quit") );
76     
77     wxMenu *menuAbout = new wxMenu;
78     menuAbout->Append( ID_Menu_About, _T("&About...") );
79
80     wxMenu *menuTools = new wxMenu;
81     menuTools->Append( ID_Menu_EditConfig, _T("&Edit bbtk config") );
82     menuTools->Append( ID_Menu_CreatePackage, _T("Create &package") );
83     menuTools->Append( ID_Menu_CreateBlackBox, _T("Create &blackbox") );
84     menuTools->Append( ID_Menu_ShowImageGraph, _T("&Show last image graph") );
85     menuTools->Append( ID_Menu_CreateIndex, _T("&Generate index") );
86     
87     
88     wxMenuBar *menuBar = new wxMenuBar;
89     menuBar->Append( menuFile, _T("&File") );
90     menuBar->Append( menuTools, _T("&Tools") );
91     menuBar->Append( menuAbout, _T("About") );
92     
93     SetMenuBar( menuBar );
94     
95     CreateStatusBar();
96     SetStatusText( _T("Welcome to bbi !") );
97     
98     //==============
99     // Notebook
100     
101     //    wxFlexGridSizer *sizer = new wxFlexGridSizer(1);
102     
103 //EED    wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
104 //    mwxNotebook = new wxNotebook(this,-1,wxDefaultPosition, wxDefaultSize, 0);
105     mwxNotebook = new wxAuiNotebook(this,  
106                                     -1,
107                                     wxPoint(0, 0),
108                                     wxSize(500,500),
109                                     wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER);
110     
111     mwxPageCommand = new wxPanel(mwxNotebook,-1);        
112     mwxPageHelp = new wxPanel(mwxNotebook,-1);    
113     
114     
115     wxBoxSizer *cmdsizer = new wxBoxSizer(wxVERTICAL);
116     
117     mwxPageCommand->SetAutoLayout(true);    
118     mwxPageCommand->SetSizer(cmdsizer);
119     cmdsizer->Fit(mwxPageCommand);
120     cmdsizer->SetSizeHints(mwxPageCommand);
121
122     wxBoxSizer *helpsizer = new wxBoxSizer(wxVERTICAL);
123     
124     mwxPageHelp->SetAutoLayout(true);    
125     mwxPageHelp->SetSizer(helpsizer);
126     helpsizer->Fit(mwxPageHelp);
127     helpsizer->SetSizeHints(mwxPageHelp);
128    
129     mWxGUIHtmlBrowser = new WxGUIHtmlBrowser(mwxPageHelp,
130                                              //EED                                wxSize(1200,0));
131                                              wxSize(200,0));
132
133     //    mWxGUIHtmlBrowser->SetSize(wxSize(800,1000));
134     helpsizer->Add (mWxGUIHtmlBrowser,1, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5  );
135 //    helpsizer->Add ( new wxButton(mwxPageHelp,-1,"perro"), 0,  wxEXPAND  );
136     wxBitmap bmp_run(cc_run_xpm);
137     mwxButtonRun = new wxBitmapButton( mwxPageHelp,ID_Button_Run,bmp_run);//_T("Run")  );
138     helpsizer->Add( mwxButtonRun, 0, wxALL, 5  );
139
140   
141     //==============
142     // Command page 
143     mWxGUIOutputMessages = new WxGUIOutputMessages(mwxPageCommand);
144
145     mWxGUICommand = new WxGUICommand(mwxPageCommand,this);
146    
147     mWxGUICommand->SetFocus();
148
149     cmdsizer->Add (mWxGUIOutputMessages, 1, wxALL | wxGROW, 5);
150     cmdsizer->Add (mWxGUICommand, 0, wxALL | wxGROW, 5);
151
152         
153     // Creates and sets the parent window of all bbtk windows
154     wxWindow* top = new wxPanel(this,-1);//,_T("top"));
155     top->Hide();
156     Wx::SetTopWindow(top);
157     
158
159     // Layout
160 //EED    SetSizer(sizer);
161
162     mwxNotebook->AddPage( mwxPageCommand, _T("Command"));
163     mwxNotebook->AddPage( mwxPageHelp, _T("Help"));
164     m_mgr.AddPane(mwxNotebook, wxAuiPaneInfo().Name(wxT("notebook_content")).CenterPane().PaneBorder(false)); 
165     m_mgr.Update();
166         
167     SetAutoLayout(true);
168     Layout();
169 //    Refresh();
170 //    m_mgr.Update();
171   }
172   //================================================================
173
174  //================================================================
175   WxGUIConsole::~WxGUIConsole()
176   {
177     m_mgr.UnInit();
178   }
179   //================================================================
180
181
182   //================================================================
183   void WxGUIConsole::WxGUICommandEnter(const std::string& command)
184   {
185     std::string s("> ");
186     s += command + "\n";
187     mWxGUIOutputMessages->Print(s,wxRED);
188
189     if (  mInterpreter->InterpretLine( command ) == 
190           Interpreter::Interpreter_QUIT )
191       {
192         Close(true); 
193       }
194   }
195   //================================================================
196
197   //================================================================
198   /// Runs the interpretation of a file
199   bool WxGUIConsole::InterpretFile( const std::string& filename) 
200   { 
201     if ( mInterpreter->InterpretFile(filename) ==
202          Interpreter::Interpreter_ERROR ) 
203       {
204         return false;
205       }
206     return true;
207   }
208   //================================================================
209  
210   //================================================================
211   void WxGUIConsole::OnButtonRun(wxCommandEvent& WXUNUSED(event))
212   {
213 //    wxString temp = mWxGUIHtmlBrowser->GetCurrentPage();
214     std::string filename = mWxGUIHtmlBrowser->GetCurrentPage();//wx2std(temp);
215     size_t s = filename.length();
216
217     Interpreter* I = new Interpreter;
218     
219     if ((s>3) && (filename[s-1]=='s')
220         && (filename[s-2]=='b')
221         && (filename[s-3]=='b')
222         && (filename[s-4]=='.'))
223       {
224         std::string tmp("Executing ");
225         tmp += filename;
226         SetStatusText(std2wx(tmp));
227         I->InterpretFile(filename);
228       }
229     else
230       {
231         SetStatusText(_T("The current page is not a bbs file : cannot execute it"));
232       }
233     
234     delete I;
235   }
236   //================================================================  
237
238   //================================================================
239   void WxGUIConsole::OnMenuQuit(wxCommandEvent& WXUNUSED(event))
240   {
241     Close(true);
242   }
243   //================================================================
244
245
246   //================================================================
247   void WxGUIConsole::OnMenuAbout(wxCommandEvent& WXUNUSED(event))
248   {
249     m_mgr.Update();
250         Refresh();
251     wxMessageBox(_T("  bbi\nThe Black Box Toolkit interpreter\n(c) CREATIS-LRMN 2008"),
252                  _T("About ..."), wxOK | wxICON_INFORMATION,
253                  this);
254   }
255   //================================================================
256
257
258   //================================================================
259   void WxGUIConsole::OnMenuEditConfig(wxCommandEvent& WXUNUSED(event))
260   {
261         std::string commandStr;
262     std::string configFile = ConfigurationFile::GetInstance().Get_config_xml_full_path();
263 #ifdef WIN32
264         commandStr = "notepad.exe ";
265 #else
266         commandStr = "gedit ";
267 #endif 
268         commandStr = commandStr + configFile;
269         std::cout << "system: " << commandStr << std::endl;
270         system ( commandStr.c_str() );
271   }
272   //================================================================
273
274
275   //================================================================
276   void WxGUIConsole::OnMenuCreatePackage(wxCommandEvent& WXUNUSED(event))
277   {
278 printf("EED WxGUIConsole::OnMenuCreatePackage 01 \n");
279     std::string command("toolsbbtk/appli/CreatePackage");
280 printf("EED WxGUIConsole::OnMenuCreatePackage 02 \n");
281
282     bbtkMessage("Debug",1,"Executing : '"<<command<<"'"<<std::endl);
283 printf("EED WxGUIConsole::OnMenuCreatePackage 03 \n");
284     Interpreter* I = new Interpreter;    
285 printf("EED WxGUIConsole::OnMenuCreatePackage 04 \n");
286     I->InterpretFile(command);
287 printf("EED WxGUIConsole::OnMenuCreatePackage 05 \n");
288     delete I;
289 printf("EED WxGUIConsole::OnMenuCreatePackage 06 \n");
290   }
291   //================================================================
292
293
294   //================================================================
295   void WxGUIConsole::OnMenuCreateBlackBox(wxCommandEvent& WXUNUSED(event))
296   {
297     std::string command("toolsbbtk/appli/CreateBlackBox");
298     bbtkMessage("Debug",1,"Executing : '"<<command<<"'"<<std::endl);
299     Interpreter* I = new Interpreter;    
300     I->InterpretFile(command);
301     delete I;
302   }
303   //================================================================
304   
305   //================================================================
306   void WxGUIConsole::OnMenuShowImageGraph(wxCommandEvent& WXUNUSED(event))
307   {
308     std::string default_temp_dir = ConfigurationFile::GetInstance().Get_default_temp_dir();
309
310 #if defined(WIN32)
311     std::string strappli="start ";
312 #else
313     std::string strappli="gnome-open ";
314 #endif
315     std::string strcommand = strappli +default_temp_dir+"/temp_dir/workspace_workspacePrototype.png";
316         std::cout << "system: " << strcommand << std::endl;
317     system ( strcommand.c_str() );
318
319   }
320   //================================================================
321
322
323   //================================================================
324   void WxGUIConsole::OnMenuCreateIndex(wxCommandEvent& WXUNUSED(event))
325   {
326     std::string doc_path = ConfigurationFile::GetInstance().Get_doc_path();
327     std::string filepath = doc_path+"/bbdoc/make-index.bbs";
328     Interpreter* I = new Interpreter;    
329
330 //EED   std::cout << "bbi: include "<<filepath<<std::endl;
331 //EED   I->InterpretFile( filepath );
332
333     I->InterpretLine( "exec freeze");
334     I->InterpretLine( "include *");
335     I->InterpretLine( "index "+doc_path+"/bbdoc/index-alpha.html Initials");
336     I->InterpretLine( "index "+doc_path+"/bbdoc/index-package.html Packages");
337     I->InterpretLine( "index "+doc_path+"/bbdoc/index-category.html Categories");
338     I->InterpretLine( "index "+doc_path+"/bbdoc/index-adaptors.html Adaptors");
339     
340     delete I;
341   }
342   //================================================================
343
344
345   //================================================================
346   void WxGUIConsole::InterpreterUserViewHtmlPage(const std::string& page)
347   {
348     std::string s(page);
349     //  std::cout << "WxGUIConsole::ShowHtmlPage('"<<page<<"')"<<std::endl;
350     if (mWxGUIHtmlBrowser->GoTo(s)) 
351       {
352 //EED   mwxNotebook->ChangeSelection(1);
353         mwxNotebook->SetSelection(1);
354       }
355     else 
356       {
357          // std::cout << "ERROR html"<<std::endl;
358       }
359   } 
360   //================================================================  
361   
362     
363   //================================================================  
364   BEGIN_EVENT_TABLE(WxGUIConsole, wxFrame)
365     EVT_MENU(ID_Menu_Quit, WxGUIConsole::OnMenuQuit)
366     EVT_MENU(ID_Menu_About, WxGUIConsole::OnMenuAbout)
367     EVT_MENU(ID_Menu_EditConfig, WxGUIConsole::OnMenuEditConfig)
368     EVT_MENU(ID_Menu_CreatePackage, WxGUIConsole::OnMenuCreatePackage)
369     EVT_MENU(ID_Menu_CreateBlackBox, WxGUIConsole::OnMenuCreateBlackBox)
370     EVT_MENU(ID_Menu_ShowImageGraph, WxGUIConsole::OnMenuShowImageGraph)
371     EVT_MENU(ID_Menu_CreateIndex, WxGUIConsole::OnMenuCreateIndex)
372     EVT_BUTTON(ID_Button_Run, WxGUIConsole::OnButtonRun )
373     END_EVENT_TABLE()
374   //================================================================
375
376 } // namespace bbtk
377
378
379 #endif //_USE_WXWIDGETS_