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