]> Creatis software - bbtk.git/blob - kernel/src/bbtkWxBrowser.cxx
*** empty log message ***
[bbtk.git] / kernel / src / bbtkWxBrowser.cxx
1 #ifdef _USE_WXWIDGETS_
2
3
4 #include "bbtkWxBrowser.h"
5 #include "bbtkWxBlackBox.h"
6 #include "bbtkWxConsole.h"
7
8 #include "bbtkConfigurationFile.h"
9 #include "bbtkUtilities.h"
10
11 namespace bbtk
12 {  
13
14   //========================================================================
15   enum 
16     {
17       bwd_id,
18       fwd_id,
19       home_id,
20       reload_id,
21       include_id,
22       url_id  ,
23       html_id
24     };
25
26
27 /*EED
28   //========================================================================
29   void WxHtmlWindow::OnLinkClicked(const wxHtmlLinkInfo& e)
30   {
31         std::cout  << "WxHtmlWindow::OnLink"<<std::endl;
32     //    std::cout  << e.GetHref()<<std::endl;
33     LoadPage(e.GetHref());
34     if ( ! GetOpenedAnchor().IsEmpty() )
35       { 
36         //      std::cout << "#" << GetOpenedAnchor() << std::endl;
37         LoadPage(_T("#"+GetOpenedAnchor()));
38       }
39     mBrowser->UpdateURL();
40   }
41   //========================================================================
42 */
43
44
45   //========================================================================
46   
47   BEGIN_EVENT_TABLE(WxBrowser, wxPanel)
48     EVT_BUTTON(bwd_id, WxBrowser::OnBackButton )
49     EVT_BUTTON(fwd_id, WxBrowser::OnForwardButton )
50     EVT_BUTTON(home_id, WxBrowser::OnHomeButton )
51     EVT_BUTTON(reload_id, WxBrowser::OnReloadButton )
52     EVT_BUTTON(include_id, WxBrowser::OnIncludeFileButton )
53     EVT_TEXT_ENTER(url_id, WxBrowser::OnURLEnter )
54     EVT_HTML_LINK_CLICKED(html_id, WxBrowser::OnLinkClicked)
55   END_EVENT_TABLE()
56   //========================================================================
57
58
59   //========================================================================
60     WxBrowser::WxBrowser ( wxWindow *parent, wxSize size )
61       : 
62       wxPanel ( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL),
63       mWxConsole(0)
64
65   {
66     wxPanel* panel = this;
67
68     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
69     
70
71     wxBoxSizer *bsizer = new wxBoxSizer(wxHORIZONTAL);
72         
73     mwxBackButton = new wxButton( panel, bwd_id,_T("<"),wxDefaultPosition,
74                                   wxDefaultSize,wxBU_EXACTFIT);
75     bsizer->Add ( mwxBackButton , 0, wxALIGN_CENTRE |  wxLEFT | wxTOP | wxBOTTOM , 10 );
76
77     mwxForwardButton = new wxButton( panel, fwd_id,_T(">"),wxDefaultPosition,
78                                      wxDefaultSize,wxBU_EXACTFIT);
79     bsizer->Add ( mwxForwardButton  , 0, wxALIGN_CENTRE | wxTOP | wxBOTTOM , 10);
80
81     mwxHomeButton = new wxButton( panel, home_id,_T("Home"),wxDefaultPosition,
82                                   wxDefaultSize,wxBU_EXACTFIT);
83     bsizer->Add ( mwxHomeButton , 0, wxALIGN_CENTRE | wxLEFT | wxTOP | wxBOTTOM , 10  );
84     
85     mwxReloadButton = new wxButton( panel, reload_id,_T("Reload"),wxDefaultPosition,
86                                     wxDefaultSize,wxBU_EXACTFIT);
87     bsizer->Add ( mwxReloadButton  , 0, wxALIGN_CENTRE |  wxTOP | wxBOTTOM , 10  );
88
89     mwxIncludeFileButton = new wxButton( panel, include_id,
90                                        _T("RUN"),wxDefaultPosition,
91                                        wxDefaultSize,wxBU_EXACTFIT);
92     bsizer->Add ( mwxIncludeFileButton , 0, wxALIGN_CENTRE |  wxLEFT | wxTOP | wxBOTTOM , 10 );
93     
94     mwxURL = new wxTextCtrl(panel,url_id,_T(""),
95                             wxDefaultPosition,
96                             wxDefaultSize,
97                             wxTE_PROCESS_ENTER);
98     mwxURL->SetLabel(_T("URL"));
99     bsizer->Add(mwxURL, 1, wxEXPAND | wxALL, 10);
100
101
102 //    mwxHtmlWindow = new WxHtmlWindow(parent,html_id,this,size);
103     mwxHtmlWindow = new WxHtmlWindow(this,html_id,this,size);
104
105     /*
106
107 -1, 
108                                      wxDefaultPosition, 
109                                      size,
110                                      wxHW_SCROLLBAR_AUTO, 
111                                      "bbtk::WxBrowser");
112     */
113     mwxHtmlWindow->SetBorders(5);
114     //  mwxHtmlWindow->FitInside();
115
116     wxStaticBoxSizer* hw = 
117       new wxStaticBoxSizer( new wxStaticBox( this, -1, _T(""),
118                                              wxDefaultPosition, 
119                                              size ),
120                             wxVERTICAL );
121 //EED    hw->Add ( mwxHtmlWindow, 1, wxGROW  );
122     hw->Add ( mwxHtmlWindow, 1, wxEXPAND  );
123
124
125
126
127
128     //sizer->Add ( mwxHtmlWindow, 1, wxGROW  );
129 //EED    sizer->Add ( hw, 1, wxGROW ); // | wxLEFT | wxRIGHT | wxBOTTOM, 10 );
130
131     sizer->Add ( bsizer , 0, wxEXPAND );
132     sizer->Add ( hw, 1, wxGROW ); // | wxLEFT | wxRIGHT | wxBOTTOM, 10 );
133
134
135
136     panel       -> SetSizer(sizer);
137     panel       -> SetAutoLayout(true);
138     panel       -> Layout();
139
140 //    GoHome();
141
142     /*
143     Connect( mwxBackButton->GetId(), 
144              wxEVT_COMMAND_BUTTON_CLICKED , 
145              (wxObjectEventFunction) 
146              (void (wxPanel::*)(wxEvent&))
147              &WxBrowser::OnBackButton ); 
148     Connect( mwxForwardButton->GetId(), 
149              wxEVT_COMMAND_BUTTON_CLICKED , 
150              (wxObjectEventFunction) 
151              (void (wxPanel::*)(wxEvent&))
152              &WxBrowser::OnForwardButton ); 
153     
154     std::cout << "e="<<wxEVT_COMMAND_HTML_LINK_CLICKED<<std::endl;
155
156     Connect( wxID_ANY, //mwxHtmlWindow->GetId(), 
157              wxEVT_COMMAND_HTML_LINK_CLICKED , 
158              wxHtmlLinkEventHandler( 
159                                     //(wxObjectEventFunction) 
160                                     //       (void (wxPanel::*)(wxEvent&))&
161                                     WxBrowser::OnLinkClicked ) ); 
162     Connect( mwxHtmlWindow->GetId(), 
163              wxEVT_COMMAND_HTML_CELL_HOVER,
164              //(wxObjectEventFunction) 
165              wxHtmlCellEventHandler(
166                                                             //       (void (wxPanel::*)(wxHtmlCellEvent&))&
167                                     WxBrowser::OnCell ) ); 
168     */
169   }
170   //========================================================================
171  
172
173   //========================================================================
174   bool WxBrowser::GoTo(std::string& file)
175   { 
176     //  std::cout << "goto"<<std::endl;
177
178     bool r = mwxHtmlWindow->LoadPage(std2wx(file));
179     UpdateURL();
180     return r;
181   }
182   //========================================================================
183   
184   //========================================================================
185   void WxBrowser::OnBackButton(wxCommandEvent& )
186   {
187     //    std::cout << "back"<<std::endl;
188     mwxHtmlWindow->HistoryBack();
189     UpdateURL();
190   }
191   //========================================================================
192
193   //========================================================================
194   void WxBrowser::OnForwardButton(wxCommandEvent& )
195   {
196     //    std::cout << "forward"<<std::endl;
197     mwxHtmlWindow->HistoryForward();
198     UpdateURL();
199   }
200   //========================================================================
201
202   //========================================================================
203   void WxBrowser::GoHome()
204   {
205     std::string url = ConfigurationFile::GetInstance().Get_doc_path();
206     url += "/bbtkWebSite/menu.html";
207         GoTo(url);
208
209     mwxURL->Clear();
210     mwxURL->AppendText(std2wx(url));
211
212
213 /*EED
214     if (Utilities::FileExists(url)) 
215       {
216         GoTo(url);
217       }
218     else 
219       {
220         // what ?
221       }
222 */
223   }
224   //========================================================================
225
226   //========================================================================
227   void WxBrowser::OnHomeButton(wxCommandEvent& )
228   {
229     GoHome();
230   }
231   //========================================================================
232
233   //========================================================================
234   void WxBrowser::OnReloadButton(wxCommandEvent& e)
235   {
236     OnURLEnter(e);
237   }
238   //========================================================================
239
240   //========================================================================
241   void WxBrowser::OnIncludeFileButton(wxCommandEvent& )
242   {
243     std::string filename = wx2std(mwxURL->GetValue());
244     size_t s = filename.length();
245
246     WxConsole* C = mWxConsole; //::GetInstance();
247     //    MessageManager::SetMessageLevel("All",9);
248     Interpreter* I = new Interpreter;
249     
250     if ((s>3) && (filename[s-1]=='s')
251         && (filename[s-2]=='b')
252         && (filename[s-3]=='b')
253         && (filename[s-4]=='.'))
254       {
255         std::cout << "stat"<<std::endl;
256         if (C!=0) C->SetStatusText(_T("Executing ")+mwxURL->GetValue());
257         std::cout << "int"<<std::endl;
258         I->InterpretFile(filename);
259         std::cout << "eoint"<<std::endl;
260       }
261     else
262       {
263         if (C!=0) C->SetStatusText(_T("The current page is not a bbs file : cannot execute it"));
264       }
265     
266     delete I;
267     /*
268     std::string bbdoc = ConfigurationFile::GetInstance().Get_url();
269     bbdoc += "/bbdoc";
270     std::string command("cd ");
271     command += bbdoc;
272     command += " & bbi -q -n make-index.bbs";
273     system(command.c_str());
274     */
275   }
276   //========================================================================
277
278   //======================================================================== 
279   void WxBrowser::OnURLEnter( wxCommandEvent&)
280   { 
281     mwxHtmlWindow->LoadPage(mwxURL->GetValue());
282   }
283   //========================================================================
284   
285
286   //========================================================================
287   void WxBrowser::OnLinkClicked(wxHtmlLinkEvent& e)
288   {
289     mwxHtmlWindow->LoadPage( e.GetLinkInfo().GetHref() );
290         UpdateURL();
291     mwxHtmlWindow->LoadPage( mwxURL->GetValue() );
292   }
293   //========================================================================
294
295
296   /*
297   void WxBrowser::OnCell(wxHtmlCellEvent& )
298   {
299     std::cout  << "OnCell"<<std::endl;
300   }
301   */
302
303   //========================================================================
304   void WxBrowser::UpdateURL()
305   {
306
307     wxString s = mwxHtmlWindow->GetOpenedPage();
308     if (!mwxHtmlWindow->GetOpenedAnchor().IsEmpty())
309     {
310             s += _T("#") + mwxHtmlWindow->GetOpenedAnchor();
311     }
312     mwxURL->Clear();
313     mwxURL->AppendText(s);
314   }
315   //========================================================================
316
317   //========================================================================
318   void WxBrowser::SetSize( wxSize s)
319   {
320     //    wxPanel::SetSize(s);
321     mwxHtmlWindow->SetSize(s);
322     Fit();
323   }
324   //========================================================================
325 }
326
327 #endif