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