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