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