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