X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1d156af3247c862e51a7c62f569a3fd302052a42..33d8353fa58dbc66fc9d22fcd510ded6b26ce719:/samples/webview/webview.cpp diff --git a/samples/webview/webview.cpp b/samples/webview/webview.cpp index 17dca1d8c5..de03b11709 100644 --- a/samples/webview/webview.cpp +++ b/samples/webview/webview.cpp @@ -22,6 +22,10 @@ #include "wx/wx.h" #endif +#if !wxUSE_WEBVIEW_WEBKIT && !wxUSE_WEBVIEW_IE +#error "A wxWebView backend is required by this sample" +#endif + #include "wx/artprov.h" #include "wx/notifmsg.h" #include "wx/settings.h" @@ -31,7 +35,7 @@ #include "wx/filesys.h" #include "wx/fs_arc.h" -#if !defined(__WXMSW__) && !defined(__WXPM__) +#ifndef wxHAS_IMAGES_IN_RESOURCES #include "../sample.xpm" #endif @@ -63,9 +67,10 @@ class WebFrame : public wxFrame { public: WebFrame(); + ~WebFrame(); - void OnAnimationTimer(wxTimerEvent& evt); void UpdateState(); + void OnIdle(wxIdleEvent& evt); void OnUrl(wxCommandEvent& evt); void OnBack(wxCommandEvent& evt); void OnForward(wxCommandEvent& evt); @@ -128,9 +133,6 @@ private: wxMenuItem* m_selection_clear; wxMenuItem* m_selection_delete; - wxTimer* m_timer; - int m_animation_angle; - wxInfoBar *m_info; wxStaticText* m_info_text; @@ -169,10 +171,6 @@ WebFrame::WebFrame() : wxFrame(NULL, wxID_ANY, "wxWebView Sample") SetIcon(wxICON(sample)); SetTitle("wxWebView Sample"); - m_timer = NULL; - m_animation_angle = 0; - - wxBoxSizer* topsizer = new wxBoxSizer(wxVERTICAL); // Create the toolbar @@ -351,40 +349,14 @@ WebFrame::WebFrame() : wxFrame(NULL, wxID_ANY, "wxWebView Sample") wxCommandEventHandler(WebFrame::OnSelectAll), NULL, this ); Connect(loadscheme->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WebFrame::OnLoadScheme), NULL, this ); + + //Connect the idle events + Connect(wxID_ANY, wxEVT_IDLE, wxIdleEventHandler(WebFrame::OnIdle), NULL, this); } -void WebFrame::OnAnimationTimer(wxTimerEvent& WXUNUSED(evt)) +WebFrame::~WebFrame() { - m_animation_angle += 15; - if (m_animation_angle > 360) m_animation_angle -= 360; - - wxBitmap image(24, 24); - { - wxMemoryDC dc; - dc.SelectObject(image); - dc.SetBackground(wxBrush(wxColour(255,0,255))); - dc.Clear(); - - if (m_animation_angle >= 0 && m_animation_angle <= 180) - { - dc.SetBrush(*wxYELLOW_BRUSH); - dc.SetPen(*wxYELLOW_PEN); - dc.DrawCircle(16 - int(sin(m_animation_angle*0.01745f /* convert to radians */)*14.0f), - 16 + int(cos(m_animation_angle*0.01745f /* convert to radians */)*14.0f), 3 ); - } - - dc.DrawBitmap(wxBitmap(wxlogo_xpm), 0, 0, true); - - if (m_animation_angle > 180) - { - dc.SetBrush(*wxYELLOW_BRUSH); - dc.SetPen(*wxYELLOW_PEN); - dc.DrawCircle(16 - int(sin(m_animation_angle*0.01745f /* convert to radians */)*14.0f), - 16 + int(cos(m_animation_angle*0.01745f /* convert to radians */)*14.0f), 3 ); - } - } - image.SetMask(new wxMask(image, wxColour(255,0,255))); - m_toolbar->SetToolNormalBitmap(m_toolbar_tools->GetId(), image); + delete m_tools_menu; } /** @@ -398,19 +370,10 @@ void WebFrame::UpdateState() if (m_browser->IsBusy()) { - if (m_timer == NULL) - { - m_timer = new wxTimer(this); - this->Connect(wxEVT_TIMER, wxTimerEventHandler(WebFrame::OnAnimationTimer), NULL, this); - } - m_timer->Start(100); // start animation timer - m_toolbar->EnableTool( m_toolbar_stop->GetId(), true ); } else { - if (m_timer != NULL) m_timer->Stop(); // stop animation timer - m_toolbar->SetToolNormalBitmap(m_toolbar_tools->GetId(), wxBitmap(wxlogo_xpm)); m_toolbar->EnableTool( m_toolbar_stop->GetId(), false ); } @@ -418,12 +381,27 @@ void WebFrame::UpdateState() m_url->SetValue( m_browser->GetCurrentURL() ); } +void WebFrame::OnIdle(wxIdleEvent& WXUNUSED(evt)) +{ + if(m_browser->IsBusy()) + { + wxSetCursor(wxCURSOR_ARROWWAIT); + m_toolbar->EnableTool(m_toolbar_stop->GetId(), true); + } + else + { + wxSetCursor(wxNullCursor); + m_toolbar->EnableTool(m_toolbar_stop->GetId(), false); + } +} + /** * Callback invoked when user entered an URL and pressed enter */ void WebFrame::OnUrl(wxCommandEvent& WXUNUSED(evt)) { m_browser->LoadURL( m_url->GetValue() ); + m_browser->SetFocus(); UpdateState(); } @@ -537,8 +515,6 @@ void WebFrame::OnNavigationRequest(wxWebViewEvent& evt) if(!m_tools_handle_navigation->IsChecked()) { evt.Veto(); - if (m_timer != NULL) m_timer->Stop(); // stop animation timer - m_toolbar->SetToolNormalBitmap(m_toolbar_tools->GetId(), wxBitmap(wxlogo_xpm)); m_toolbar->EnableTool( m_toolbar_stop->GetId(), false ); } else @@ -586,8 +562,8 @@ void WebFrame::OnNewWindow(wxWebViewEvent& evt) void WebFrame::OnTitleChanged(wxWebViewEvent& evt) { + SetTitle(evt.GetString()); wxLogMessage("%s", "Title changed; title='" + evt.GetString() + "'"); - UpdateState(); } /** @@ -792,7 +768,7 @@ void WebFrame::OnError(wxWebViewEvent& evt) break; } - wxLogMessage("Error; url='" + evt.GetURL() + "', error='" + errorCategory + "' (" + evt.GetString() + ")"); + wxLogMessage("%s", "Error; url='" + evt.GetURL() + "', error='" + errorCategory + "' (" + evt.GetString() + ")"); //Show the info bar with an error m_info->ShowMessage(_("An error occurred loading ") + evt.GetURL() + "\n" +