#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"
{
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);
wxMenuItem* m_selection_clear;
wxMenuItem* m_selection_delete;
- wxTimer* m_timer;
- int m_animation_angle;
-
wxInfoBar *m_info;
wxStaticText* m_info_text;
SetIcon(wxICON(sample));
SetTitle("wxWebView Sample");
- m_timer = NULL;
- m_animation_angle = 0;
-
-
wxBoxSizer* topsizer = new wxBoxSizer(wxVERTICAL);
// Create the toolbar
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;
}
/**
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 );
}
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();
}
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
void WebFrame::OnTitleChanged(wxWebViewEvent& evt)
{
+ SetTitle(evt.GetString());
wxLogMessage("%s", "Title changed; title='" + evt.GetString() + "'");
- UpdateState();
}
/**
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" +