1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: HtmlCtrl sample
4 // Author: Julian Smart / Kevin Ollivier
8 // Copyright: (c) Julian Smart / Kevin Ollivier
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
20 // For compilers that support precompilation, includes "wx/wx.h".
21 #include "wx/wxprec.h"
27 // for all others, include the necessary headers (this file is usually all you
28 // need because it includes almost all "standard" wxWidgets headers)
33 #include "wx/html/webkit.h"
35 // ----------------------------------------------------------------------------
37 // ----------------------------------------------------------------------------
39 // the application icon (under Windows and OS/2 it is in resources and even
40 // though we could still include the XPM here it would be unused)
41 #if !defined(__WXMSW__) && !defined(__WXPM__)
42 #include "../../sample.xpm"
46 ID_BACK
= wxID_HIGHEST
+ 1,
47 ID_NEXT
= wxID_HIGHEST
+ 2,
48 ID_RELOAD
= wxID_HIGHEST
+ 3,
49 ID_URLLIST
= wxID_HIGHEST
+ 4,
50 ID_STOP
= wxID_HIGHEST
+ 5,
51 ID_WEBKIT
= wxID_HIGHEST
+ 6,
52 ID_VIEW_SOURCE
= wxID_HIGHEST
+ 7,
53 ID_OPEN
= wxID_HIGHEST
+ 8,
54 ID_SAVE
= wxID_HIGHEST
+ 9,
55 ID_SET_SOURCE
= wxID_HIGHEST
+ 10
58 // ----------------------------------------------------------------------------
60 // ----------------------------------------------------------------------------
62 // Define a new application type, each program should derive a class from wxApp
63 class MyApp
: public wxApp
66 // override base class virtuals
67 // ----------------------------
69 // this one is called on application startup and is a good place for the app
70 // initialization (doing it here and not in the ctor allows to have an error
71 // return: if OnInit() returns false, the application terminates)
72 virtual bool OnInit();
75 // Define a new frame type: this is going to be our main frame
76 class MyFrame
: public wxFrame
80 MyFrame(const wxString
& title
);
81 void OnBackButton(wxCommandEvent
& myEvent
);
82 void OnNextButton(wxCommandEvent
& myEvent
);
83 void OnURLEnter(wxCommandEvent
& myEvent
);
84 void OnStopButton(wxCommandEvent
& myEvent
);
85 void OnReloadButton(wxCommandEvent
& myEvent
);
86 void OnViewSource(wxCommandEvent
& myEvent
);
87 void OnSetSource(wxCommandEvent
& myEvent
);
88 void OnStateChanged(wxWebKitStateChangedEvent
& myEvent
);
89 wxWebKitCtrl
* mySafari
;
92 // any class wishing to process wxWidgets events must use this macro
96 // ----------------------------------------------------------------------------
97 // event tables and other macros for wxWidgets
98 // ----------------------------------------------------------------------------
100 // the event tables connect the wxWidgets events with the functions (event
101 // handlers) which process them. It can be also done at run-time, but for the
102 // simple menu events like this the static method is much simpler.
103 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
104 EVT_BUTTON(ID_BACK
, MyFrame::OnBackButton
)
105 EVT_BUTTON(ID_NEXT
, MyFrame::OnNextButton
)
106 EVT_BUTTON(ID_STOP
, MyFrame::OnStopButton
)
107 EVT_BUTTON(ID_RELOAD
, MyFrame::OnReloadButton
)
108 EVT_MENU(ID_VIEW_SOURCE
, MyFrame::OnViewSource
)
109 EVT_MENU(ID_SET_SOURCE
, MyFrame::OnSetSource
)
110 EVT_TEXT_ENTER(ID_URLLIST
, MyFrame::OnURLEnter
)
111 EVT_WEBKIT_STATE_CHANGED(MyFrame::OnStateChanged
)
112 //EVT_MENU(Minimal_Quit, MyFrame::OnQuit)
113 //EVT_MENU(Minimal_About, MyFrame::OnAbout)
116 // Create a new application object: this macro will allow wxWidgets to create
117 // the application object during program execution (it's better than using a
118 // static object for many reasons) and also implements the accessor function
119 // wxGetApp() which will return the reference of the right type (i.e. MyApp and
123 // ============================================================================
125 // ============================================================================
127 // ----------------------------------------------------------------------------
128 // the application class
129 // ----------------------------------------------------------------------------
131 // 'Main program' equivalent: the program execution "starts" here
134 // create the main application window
135 MyFrame
*frame
= new MyFrame(_T("wxWebKit Sample"));
137 // and show it (the frames, unlike simple controls, are not shown when
138 // created initially)
141 // success: wxApp::OnRun() will be called which will enter the main message
142 // loop and the application will run. If we returned false here, the
143 // application would exit immediately.
147 // ----------------------------------------------------------------------------
149 // ----------------------------------------------------------------------------
152 MyFrame::MyFrame(const wxString
& title
)
153 : wxFrame(NULL
, wxID_ANY
, title
, wxDefaultPosition
, wxSize(500,500))
155 wxMenuBar
* myBar
= new wxMenuBar();
156 wxMenu
* fileMenu
= new wxMenu
;
157 fileMenu
->Append(ID_OPEN
, _("&Open"));
158 fileMenu
->Append(ID_SAVE
, _("&Save"));
159 myBar
->Append(fileMenu
, _("&File"));
161 wxMenu
* editMenu
= new wxMenu
;
162 editMenu
->Append(ID_SET_SOURCE
, _("Set Page Source"));
163 myBar
->Append(editMenu
, _("&Edit"));
165 //wxMenu* viewMenu = new wxMenu(_("View"));
166 //viewMenu->Append(ID_VIEW_SOURCE, _("View Source"));
167 //myBar->Append(viewMenu, _("View"));
171 wxToolBar
* myToolbar
= CreateToolBar();
172 wxButton
* btnBack
= new wxButton(myToolbar
, ID_BACK
, _("Back"));
173 myToolbar
->AddControl(btnBack
);
174 myToolbar
->AddSeparator();
175 wxButton
* btnNext
= new wxButton(myToolbar
, ID_NEXT
, _("Next"));
176 myToolbar
->AddControl(btnNext
);
177 myToolbar
->AddSeparator();
178 wxButton
* btnStop
= new wxButton(myToolbar
, ID_STOP
, _("Stop"));
179 myToolbar
->AddControl(btnStop
);
180 myToolbar
->AddSeparator();
181 wxButton
* btnReload
= new wxButton(myToolbar
, ID_RELOAD
, _("Reload"));
182 myToolbar
->AddControl(btnReload
);
183 myToolbar
->AddSeparator();
184 urlText
= new wxTextCtrl(myToolbar
, ID_URLLIST
, _T("http://www.wxwidgets.org"), wxDefaultPosition
, wxSize(220, -1), wxTE_PROCESS_ENTER
);
185 myToolbar
->AddControl(urlText
);
186 myToolbar
->AddSeparator();
187 myToolbar
->Realize();
189 // Testing wxWebKitCtrl inside a panel
191 wxPanel
* panel
= new wxPanel(this, wxID_ANY
);
193 wxBoxSizer
* boxSizer
= new wxBoxSizer(wxVERTICAL
);
194 panel
->SetSizer(boxSizer
);
196 mySafari
= new wxWebKitCtrl(panel
, ID_WEBKIT
, _T("http://www.wxwidgets.org"), wxDefaultPosition
, wxSize(200, 200));
198 boxSizer
->Add(mySafari
, 1, wxEXPAND
);
200 wxBoxSizer
* frameSizer
= new wxBoxSizer(wxVERTICAL
);
201 SetSizer(frameSizer
);
202 frameSizer
->Add(panel
, 1, wxEXPAND
);
204 mySafari
= new wxWebKitCtrl(this, ID_WEBKIT
, _T("http://www.wxwidgets.org"), wxDefaultPosition
, wxSize(200, 200));
209 #endif // wxUSE_STATUSBAR
212 void MyFrame::OnBackButton(wxCommandEvent
& myEvent
){
213 if (mySafari
->CanGoBack())
217 void MyFrame::OnNextButton(wxCommandEvent
& myEvent
){
218 if (mySafari
->CanGoForward())
219 mySafari
->GoForward();
222 void MyFrame::OnStopButton(wxCommandEvent
& myEvent
){
226 void MyFrame::OnReloadButton(wxCommandEvent
& myEvent
){
230 void MyFrame::OnURLEnter(wxCommandEvent
& myEvent
){
231 mySafari
->LoadURL(urlText
->GetValue());
234 void MyFrame::OnStateChanged(wxWebKitStateChangedEvent
& myEvent
){
235 if (GetStatusBar() != NULL
){
236 if (myEvent
.GetState() == wxWEBKIT_STATE_NEGOTIATING
){
237 GetStatusBar()->SetStatusText(_("Contacting ") + myEvent
.GetURL());
238 urlText
->SetValue(myEvent
.GetURL());
240 else if (myEvent
.GetState() == wxWEBKIT_STATE_TRANSFERRING
){
241 GetStatusBar()->SetStatusText(_("Loading ") + myEvent
.GetURL());
243 else if (myEvent
.GetState() == wxWEBKIT_STATE_STOP
){
244 GetStatusBar()->SetStatusText(_("Load complete."));
245 SetTitle(mySafari
->GetTitle());
247 else if (myEvent
.GetState() == wxWEBKIT_STATE_FAILED
){
248 GetStatusBar()->SetStatusText(_("Failed to load ") + myEvent
.GetURL());
254 void MyFrame::OnViewSource(wxCommandEvent
& myEvent
){
255 if (mySafari
->CanGetPageSource())
256 wxMessageBox(mySafari
->GetPageSource());
259 void MyFrame::OnSetSource(wxCommandEvent
& myEvent
){
261 wxString myText
= wxT("<HTML><HEAD></HEAD><BODY><P>Hello world!</P></BODY></HTML>");
262 mySafari
->SetPageSource(myText
);