]> Creatis software - bbtk.git/blob - kernel/src/bbtkWxGUIHtmlBrowser.cxx
abc4835e484acf84178adc03529c096e4f753a27
[bbtk.git] / kernel / src / bbtkWxGUIHtmlBrowser.cxx
1 /*=========================================================================
2                                                                                 
3   Program:   bbtk
4   Module:    $RCSfile: bbtkWxGUIHtmlBrowser.cxx,v $
5   Language:  C++
6   Date:      $Date: 2008/03/20 15:27:57 $
7   Version:   $Revision: 1.2 $
8                                                                                 
9   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10   l'Image). All rights reserved. See Doc/License.txt or
11   http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
12                                                                                 
13      This software is distributed WITHOUT ANY WARRANTY; without even
14      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15      PURPOSE.  See the above copyright notices for more information.
16                                                                                 
17 =========================================================================*//**
18  * \brief Short description in one line
19  * 
20  * Long description which 
21  * can span multiple lines
22  */
23 /**
24  * \file 
25  * \brief 
26  */
27 /**
28  * \class bbtk::
29  * \brief 
30  */
31
32 #ifdef _USE_WXWIDGETS_
33
34
35 #include "bbtkWxGUIHtmlBrowser.h"
36 //#include "bbtkWxBlackBox.h"
37 //#include "bbtkWxGUIConsole.h"
38
39 #include "bbtkConfigurationFile.h"
40 #include "bbtkUtilities.h"
41
42 namespace bbtk
43 {  
44
45   //========================================================================
46   enum 
47     {
48       bwd_id,
49       fwd_id,
50       home_id,
51       reload_id,
52       include_id,
53       url_id  ,
54       html_id
55     };
56
57
58 /*EED
59   //========================================================================
60   void WxHtmlWindow::OnLinkClicked(const wxHtmlLinkInfo& e)
61   {
62         std::cout  << "WxHtmlWindow::OnLink"<<std::endl;
63     //    std::cout  << e.GetHref()<<std::endl;
64     LoadPage(e.GetHref());
65     if ( ! GetOpenedAnchor().IsEmpty() )
66       { 
67         //      std::cout << "#" << GetOpenedAnchor() << std::endl;
68         LoadPage(_T("#"+GetOpenedAnchor()));
69       }
70     mBrowser->UpdateURL();
71   }
72   //========================================================================
73 */
74
75
76   //========================================================================
77   
78   BEGIN_EVENT_TABLE(WxGUIHtmlBrowser, wxPanel)
79     EVT_BUTTON(bwd_id, WxGUIHtmlBrowser::OnBackButton )
80     EVT_BUTTON(fwd_id, WxGUIHtmlBrowser::OnForwardButton )
81     EVT_BUTTON(home_id, WxGUIHtmlBrowser::OnHomeButton )
82     EVT_BUTTON(reload_id, WxGUIHtmlBrowser::OnReloadButton )
83   //    EVT_BUTTON(include_id, WxGUIHtmlBrowser::OnIncludeFileButton )
84     EVT_TEXT_ENTER(url_id, WxGUIHtmlBrowser::OnURLEnter )
85     EVT_HTML_LINK_CLICKED(html_id, WxGUIHtmlBrowser::OnLinkClicked)
86   END_EVENT_TABLE()
87   //========================================================================
88
89
90   //========================================================================
91     WxGUIHtmlBrowser::WxGUIHtmlBrowser ( wxWindow *parent, wxSize size )
92       : 
93       wxPanel ( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
94                                        // ,      mWxGUIConsole(0)
95
96   {
97     wxPanel* panel = this;
98     
99     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
100     
101     
102     wxBoxSizer *bsizer = new wxBoxSizer(wxHORIZONTAL);
103     
104     mwxBackButton = new wxButton( panel, bwd_id,_T("<"),wxDefaultPosition,
105                                   wxDefaultSize,wxBU_EXACTFIT);
106     bsizer->Add ( mwxBackButton , 0, wxALIGN_CENTRE );
107     
108     mwxForwardButton = new wxButton( panel, fwd_id,_T(">"),wxDefaultPosition,
109                                      wxDefaultSize,wxBU_EXACTFIT);
110     bsizer->Add ( mwxForwardButton  , 0, wxALIGN_CENTRE );
111     
112     mwxHomeButton = new wxButton( panel, home_id,_T("Home"),wxDefaultPosition,
113                                   wxDefaultSize,wxBU_EXACTFIT);
114     bsizer->Add ( mwxHomeButton , 0, wxALIGN_CENTRE );
115     
116     mwxReloadButton = new wxButton( panel, reload_id,_T("Reload"),wxDefaultPosition,
117                                     wxDefaultSize,wxBU_EXACTFIT);
118     bsizer->Add ( mwxReloadButton  , 0, wxALIGN_CENTRE );
119     
120     /*
121     mwxIncludeFileButton = new wxButton( panel, include_id,
122                                        _T("RUN"),wxDefaultPosition,
123                                        wxDefaultSize,wxBU_EXACTFIT);
124     bsizer->Add ( mwxIncludeFileButton , 0, wxALIGN_CENTRE |  wxLEFT | wxTOP | wxBOTTOM , 10 );
125     */
126
127     mwxURL = new wxTextCtrl(panel,url_id,_T(""),
128                             wxDefaultPosition,
129                             wxDefaultSize,
130                             wxTE_PROCESS_ENTER);
131     mwxURL->SetLabel(_T("URL"));
132     bsizer->Add(mwxURL, 1, wxEXPAND);
133
134
135 //    mwxHtmlWindow = new WxHtmlWindow(parent,html_id,this,size);
136     mwxHtmlWindow = new WxHtmlWindow(this,html_id,this,size);
137
138     /*
139
140 -1, 
141                                      wxDefaultPosition, 
142                                      size,
143                                      wxHW_SCROLLBAR_AUTO, 
144                                      "bbtk::WxGUIHtmlBrowser");
145     */
146     mwxHtmlWindow->SetBorders(5);
147     //  mwxHtmlWindow->FitInside();
148
149     wxStaticBoxSizer* hw = 
150       new wxStaticBoxSizer( new wxStaticBox( this, -1, _T(""),
151                                              wxDefaultPosition, 
152                                              size ),
153                             wxVERTICAL );
154 //EED    hw->Add ( mwxHtmlWindow, 1, wxGROW  );
155     hw->Add ( mwxHtmlWindow, 1, wxEXPAND  );
156
157
158
159
160
161     //sizer->Add ( mwxHtmlWindow, 1, wxGROW  );
162 //EED    sizer->Add ( hw, 1, wxGROW ); // | wxLEFT | wxRIGHT | wxBOTTOM, 10 );
163
164     sizer->Add ( bsizer , 0, wxEXPAND );
165     sizer->Add ( hw, 1, wxGROW ); // | wxLEFT | wxRIGHT | wxBOTTOM, 10 );
166
167
168
169     panel       -> SetSizer(sizer);
170     panel       -> SetAutoLayout(true);
171     panel       -> Layout();
172
173 //    GoHome();
174
175    }
176   //========================================================================
177  
178
179   //========================================================================
180   bool WxGUIHtmlBrowser::GoTo(std::string& file)
181   { 
182     //  std::cout << "goto"<<std::endl;
183
184     bool r = mwxHtmlWindow->LoadPage(std2wx(file));
185     UpdateURL();
186     return r;
187   }
188   //========================================================================
189   
190   //========================================================================
191   void WxGUIHtmlBrowser::OnBackButton(wxCommandEvent& )
192   {
193     //    std::cout << "back"<<std::endl;
194     mwxHtmlWindow->HistoryBack();
195     UpdateURL();
196   }
197   //========================================================================
198
199   //========================================================================
200   void WxGUIHtmlBrowser::OnForwardButton(wxCommandEvent& )
201   {
202     //    std::cout << "forward"<<std::endl;
203     mwxHtmlWindow->HistoryForward();
204     UpdateURL();
205   }
206   //========================================================================
207
208   //========================================================================
209   void WxGUIHtmlBrowser::GoHome()
210   {
211     std::string url = ConfigurationFile::GetInstance().Get_doc_path();
212     url += "/bbtkWebSite/menu.html";
213         GoTo(url);
214
215     mwxURL->Clear();
216     mwxURL->AppendText(std2wx(url));
217
218
219 /*EED
220     if (Utilities::FileExists(url)) 
221       {
222         GoTo(url);
223       }
224     else 
225       {
226         // what ?
227       }
228 */
229   }
230   //========================================================================
231
232   //========================================================================
233   void WxGUIHtmlBrowser::OnHomeButton(wxCommandEvent& )
234   {
235     GoHome();
236   }
237   //========================================================================
238
239   //========================================================================
240   void WxGUIHtmlBrowser::OnReloadButton(wxCommandEvent& e)
241   {
242     OnURLEnter(e);
243   }
244   //========================================================================
245   //========================================================================
246   std::string WxGUIHtmlBrowser::GetCurrentPage()
247   {
248     return wx2std(mwxURL->GetValue());
249   }
250   //========================================================================
251
252   /*
253   //========================================================================
254   void WxGUIHtmlBrowser::OnIncludeFileButton(wxCommandEvent& )
255   {
256     std::string filename = wx2std(mwxURL->GetValue());
257     size_t s = filename.length();
258
259     WxGUIConsole* C = mWxGUIConsole; //::GetInstance();
260     //    MessageManager::SetMessageLevel("All",9);
261     Interpreter* I = new Interpreter;
262     
263     if ((s>3) && (filename[s-1]=='s')
264         && (filename[s-2]=='b')
265         && (filename[s-3]=='b')
266         && (filename[s-4]=='.'))
267       {
268         std::cout << "stat"<<std::endl;
269         if (C!=0) C->SetStatusText(_T("Executing ")+mwxURL->GetValue());
270         std::cout << "int"<<std::endl;
271         I->InterpretFile(filename);
272         std::cout << "eoint"<<std::endl;
273       }
274     else
275       {
276         if (C!=0) C->SetStatusText(_T("The current page is not a bbs file : cannot execute it"));
277       }
278     
279     delete I;
280    }
281   //========================================================================
282   */
283
284
285   //======================================================================== 
286   void WxGUIHtmlBrowser::OnURLEnter( wxCommandEvent&)
287   { 
288     mwxHtmlWindow->LoadPage(mwxURL->GetValue());
289   }
290   //========================================================================
291   
292
293   //========================================================================
294   void WxGUIHtmlBrowser::OnLinkClicked(wxHtmlLinkEvent& e)
295   {
296     mwxHtmlWindow->LoadPage( e.GetLinkInfo().GetHref() );
297         UpdateURL();
298     mwxHtmlWindow->LoadPage( mwxURL->GetValue() );
299   }
300   //========================================================================
301
302
303   /*
304   void WxGUIHtmlBrowser::OnCell(wxHtmlCellEvent& )
305   {
306     std::cout  << "OnCell"<<std::endl;
307   }
308   */
309
310   //========================================================================
311   void WxGUIHtmlBrowser::UpdateURL()
312   {
313
314     wxString s = mwxHtmlWindow->GetOpenedPage();
315     if (!mwxHtmlWindow->GetOpenedAnchor().IsEmpty())
316     {
317             s += _T("#") + mwxHtmlWindow->GetOpenedAnchor();
318     }
319     mwxURL->Clear();
320     mwxURL->AppendText(s);
321   }
322   //========================================================================
323
324   //========================================================================
325   void WxGUIHtmlBrowser::SetSize( wxSize s)
326   {
327     //    wxPanel::SetSize(s);
328     mwxHtmlWindow->SetSize(s);
329     Fit();
330   }
331   //========================================================================
332 }
333
334 #endif