Derive wxWebViewEvent from wxNotifyEvent.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/SOC2011_WEBVIEW@68761 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Steve Lamerton
2011-08-17 11:19:29 +00:00
parent 4d0dddc7ad
commit 3225a4b8b8
5 changed files with 61 additions and 96 deletions

View File

@@ -171,36 +171,23 @@ public:
wxDECLARE_ABSTRACT_CLASS(wxWebView); wxDECLARE_ABSTRACT_CLASS(wxWebView);
}; };
class WXDLLIMPEXP_WEB wxWebViewEvent : public wxCommandEvent class WXDLLIMPEXP_WEB wxWebViewEvent : public wxNotifyEvent
{ {
public: public:
wxWebViewEvent() {} wxWebViewEvent() {}
wxWebViewEvent(wxEventType type, int id, const wxString url, wxWebViewEvent(wxEventType type, int id, const wxString url,
const wxString target, bool canVeto) const wxString target)
: wxCommandEvent(type, id) : wxNotifyEvent(type, id), m_url(url), m_target(target)
{ {}
m_url = url;
m_target = target;
m_vetoed = false;
m_canVeto = canVeto;
}
const wxString& GetURL() const { return m_url; } const wxString& GetURL() const { return m_url; }
const wxString& GetTarget() const { return m_target; } const wxString& GetTarget() const { return m_target; }
virtual wxEvent* Clone() const { return new wxWebViewEvent(*this); } virtual wxEvent* Clone() const { return new wxWebViewEvent(*this); }
bool CanVeto() const { return m_canVeto; }
bool IsVetoed() const { return m_vetoed; }
void Veto() { wxASSERT(m_canVeto); m_vetoed = true; }
private: private:
wxString m_url; wxString m_url;
wxString m_target; wxString m_target;
bool m_canVeto;
bool m_vetoed;
wxDECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxWebViewEvent); wxDECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxWebViewEvent);
}; };

View File

@@ -243,7 +243,7 @@ public:
@library{wxweb} @library{wxweb}
@category{ctrl,web} @category{ctrl,web}
@see wxWebHandler, wxWebViewEvent @see wxWebViewHandler, wxWebViewEvent
*/ */
class wxWebView : public wxControl class wxWebView : public wxControl
{ {
@@ -626,12 +626,12 @@ public:
@see wxWebView @see wxWebView
*/ */
class wxWebViewEvent : public wxCommandEvent class wxWebViewEvent : public wxNotifyEvent
{ {
public: public:
wxWebViewEvent(); wxWebViewEvent();
wxWebViewEvent(wxEventType type, int id, const wxString href, wxWebViewEvent(wxEventType type, int id, const wxString href,
const wxString target, bool canVeto); const wxString target);
/** /**
Get the name of the target frame which the url of this event Get the name of the target frame which the url of this event
@@ -644,24 +644,4 @@ public:
Get the URL being visited Get the URL being visited
*/ */
const wxString& GetURL() const; const wxString& GetURL() const;
virtual wxEvent* Clone() const;
/**
Get whether this event may be vetoed (stopped/prevented). Only
meaningful for events fired before navigation takes place.
*/
bool CanVeto() const;
/**
Whether this event was vetoed (stopped/prevented). Only meaningful for
events fired before navigation takes place or new window events.
*/
bool IsVetoed() const;
/**
Veto (prevent/stop) this event. Only meaningful for events fired
before navigation takes place. Only valid if CanVeto() returned true.
*/
void Veto();
}; };

View File

@@ -46,7 +46,7 @@ wxgtk_webview_webkit_load_status(GtkWidget* widget,
webKitCtrl->m_busy = false; webKitCtrl->m_busy = false;
wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_LOADED, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_LOADED,
webKitCtrl->GetId(), webKitCtrl->GetId(),
url, target, false); url, target);
if (webKitCtrl && webKitCtrl->GetEventHandler()) if (webKitCtrl && webKitCtrl->GetEventHandler())
webKitCtrl->GetEventHandler()->ProcessEvent(event); webKitCtrl->GetEventHandler()->ProcessEvent(event);
@@ -56,7 +56,7 @@ wxgtk_webview_webkit_load_status(GtkWidget* widget,
webKitCtrl->m_busy = true; webKitCtrl->m_busy = true;
wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATED, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATED,
webKitCtrl->GetId(), webKitCtrl->GetId(),
url, target, false); url, target);
if (webKitCtrl && webKitCtrl->GetEventHandler()) if (webKitCtrl && webKitCtrl->GetEventHandler())
webKitCtrl->GetEventHandler()->ProcessEvent(event); webKitCtrl->GetEventHandler()->ProcessEvent(event);
@@ -89,13 +89,12 @@ wxgtk_webview_webkit_navigation(WebKitWebView *,
wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATING, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATING,
webKitCtrl->GetId(), webKitCtrl->GetId(),
wxString( uri, wxConvUTF8 ), wxString( uri, wxConvUTF8 ),
target, target);
true);
if (webKitCtrl && webKitCtrl->GetEventHandler()) if (webKitCtrl && webKitCtrl->GetEventHandler())
webKitCtrl->GetEventHandler()->ProcessEvent(event); webKitCtrl->GetEventHandler()->ProcessEvent(event);
if (event.IsVetoed()) if (!event.IsAllowed())
{ {
webKitCtrl->m_busy = false; webKitCtrl->m_busy = false;
webkit_web_policy_decision_ignore(policy_decision); webkit_web_policy_decision_ignore(policy_decision);
@@ -262,7 +261,7 @@ wxgtk_webview_webkit_error(WebKitWebView*,
wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_ERROR, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_ERROR,
webKitWindow->GetId(), webKitWindow->GetId(),
uri, "", false); uri, "");
event.SetString(description); event.SetString(description);
event.SetInt(type); event.SetInt(type);
@@ -288,8 +287,7 @@ wxgtk_webview_webkit_new_window(WebKitWebView*,
wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NEWWINDOW,
webKitCtrl->GetId(), webKitCtrl->GetId(),
wxString( uri, wxConvUTF8 ), wxString( uri, wxConvUTF8 ),
target, target);
true);
if (webKitCtrl && webKitCtrl->GetEventHandler()) if (webKitCtrl && webKitCtrl->GetEventHandler())
webKitCtrl->GetEventHandler()->ProcessEvent(event); webKitCtrl->GetEventHandler()->ProcessEvent(event);
@@ -308,7 +306,7 @@ wxgtk_webview_webkit_title_changed(WebKitWebView*,
wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED,
webKitCtrl->GetId(), webKitCtrl->GetId(),
webKitCtrl->GetCurrentURL(), webKitCtrl->GetCurrentURL(),
"", true); "");
event.SetString(wxString(title, wxConvUTF8)); event.SetString(wxString(title, wxConvUTF8));
if (webKitCtrl && webKitCtrl->GetEventHandler()) if (webKitCtrl && webKitCtrl->GetEventHandler())

View File

@@ -110,7 +110,7 @@ void wxWebViewIE::SetPage(const wxString& html, const wxString& baseUrl)
//We send the events when we are done to mimic webkit //We send the events when we are done to mimic webkit
//Navigated event //Navigated event
wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATED, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATED,
GetId(), baseUrl, "", false); GetId(), baseUrl, "");
event.SetEventObject(this); event.SetEventObject(this);
HandleWindowEvent(event); HandleWindowEvent(event);
@@ -723,11 +723,11 @@ void wxWebViewIE::onActiveXEvent(wxActiveXEvent& evt)
wxString target = evt[3].GetString(); wxString target = evt[3].GetString();
wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATING, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATING,
GetId(), url, target, true); GetId(), url, target);
event.SetEventObject(this); event.SetEventObject(this);
HandleWindowEvent(event); HandleWindowEvent(event);
if (event.IsVetoed()) if (!event.IsAllowed())
{ {
wxActiveXEventNativeMSW* nativeParams = wxActiveXEventNativeMSW* nativeParams =
evt.GetNativeParameters(); evt.GetNativeParameters();
@@ -749,7 +749,7 @@ void wxWebViewIE::onActiveXEvent(wxActiveXEvent& evt)
// TODO: set target parameter if possible // TODO: set target parameter if possible
wxString target = wxEmptyString; wxString target = wxEmptyString;
wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATED, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATED,
GetId(), url, target, false); GetId(), url, target);
event.SetEventObject(this); event.SetEventObject(this);
HandleWindowEvent(event); HandleWindowEvent(event);
break; break;
@@ -798,7 +798,7 @@ void wxWebViewIE::onActiveXEvent(wxActiveXEvent& evt)
// TODO: set target parameter if possible // TODO: set target parameter if possible
wxString target = wxEmptyString; wxString target = wxEmptyString;
wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_LOADED, GetId(), wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_LOADED, GetId(),
url, target, false); url, target);
event.SetEventObject(this); event.SetEventObject(this);
HandleWindowEvent(event); HandleWindowEvent(event);
break; break;
@@ -814,7 +814,7 @@ void wxWebViewIE::onActiveXEvent(wxActiveXEvent& evt)
wxString title = evt[0].GetString(); wxString title = evt[0].GetString();
wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED,
GetId(), GetCurrentURL(), wxEmptyString, true); GetId(), GetCurrentURL(), "");
event.SetString(title); event.SetString(title);
event.SetEventObject(this); event.SetEventObject(this);
HandleWindowEvent(event); HandleWindowEvent(event);
@@ -938,7 +938,7 @@ void wxWebViewIE::onActiveXEvent(wxActiveXEvent& evt)
wxString url = evt[1].GetString(); wxString url = evt[1].GetString();
wxString target = evt[2].GetString(); wxString target = evt[2].GetString();
wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_ERROR, GetId(), wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_ERROR, GetId(),
url, target, false); url, target);
event.SetEventObject(this); event.SetEventObject(this);
event.SetInt(errorType); event.SetInt(errorType);
event.SetString(errorCode); event.SetString(errorCode);
@@ -950,7 +950,7 @@ void wxWebViewIE::onActiveXEvent(wxActiveXEvent& evt)
wxString url = evt[4].GetString(); wxString url = evt[4].GetString();
wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NEWWINDOW,
GetId(), url, wxEmptyString, true); GetId(), url, wxEmptyString);
event.SetEventObject(this); event.SetEventObject(this);
HandleWindowEvent(event); HandleWindowEvent(event);

View File

@@ -1018,13 +1018,13 @@ void wxWebViewWebKit::RegisterHandler(wxSharedPtr<wxWebViewHandler> handler)
if (webKitWindow && frame == [sender mainFrame]){ if (webKitWindow && frame == [sender mainFrame]){
NSString *url = [[[[frame dataSource] request] URL] absoluteString]; NSString *url = [[[[frame dataSource] request] URL] absoluteString];
wxString target = wxStringWithNSString([frame name]); wxString target = wxStringWithNSString([frame name]);
wxWebViewNavigationEvent thisEvent(wxEVT_COMMAND_WEB_VIEW_NAVIGATED, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATED,
webKitWindow->GetId(), webKitWindow->GetId(),
wxStringWithNSString( url ), wxStringWithNSString( url ),
target, false); target);
if (webKitWindow && webKitWindow->GetEventHandler()) if (webKitWindow && webKitWindow->GetEventHandler())
webKitWindow->GetEventHandler()->ProcessEvent(thisEvent); webKitWindow->GetEventHandler()->ProcessEvent(event);
} }
} }
@@ -1036,13 +1036,13 @@ void wxWebViewWebKit::RegisterHandler(wxSharedPtr<wxWebViewHandler> handler)
NSString *url = [[[[frame dataSource] request] URL] absoluteString]; NSString *url = [[[[frame dataSource] request] URL] absoluteString];
wxString target = wxStringWithNSString([frame name]); wxString target = wxStringWithNSString([frame name]);
wxWebViewNavigationEvent thisEvent(wxEVT_COMMAND_WEB_VIEW_LOADED, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_LOADED,
webKitWindow->GetId(), webKitWindow->GetId(),
wxStringWithNSString( url ), wxStringWithNSString( url ),
target, false); target);
if (webKitWindow && webKitWindow->GetEventHandler()) if (webKitWindow && webKitWindow->GetEventHandler())
webKitWindow->GetEventHandler()->ProcessEvent(thisEvent); webKitWindow->GetEventHandler()->ProcessEvent(event);
} }
} }
@@ -1130,16 +1130,16 @@ wxString nsErrorToWxHtmlError(NSError* error, wxWebViewNavigationError* out)
wxWebViewNavigationError type; wxWebViewNavigationError type;
wxString description = nsErrorToWxHtmlError(error, &type); wxString description = nsErrorToWxHtmlError(error, &type);
wxWebViewNavigationEvent thisEvent(wxEVT_COMMAND_WEB_VIEW_ERROR, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_ERROR,
webKitWindow->GetId(), webKitWindow->GetId(),
wxStringWithNSString( url ), wxStringWithNSString( url ),
wxEmptyString, false); wxEmptyString);
thisEvent.SetString(description); event.SetString(description);
thisEvent.SetInt(type); event.SetInt(type);
if (webKitWindow && webKitWindow->GetEventHandler()) if (webKitWindow && webKitWindow->GetEventHandler())
{ {
webKitWindow->GetEventHandler()->ProcessEvent(thisEvent); webKitWindow->GetEventHandler()->ProcessEvent(event);
} }
} }
} }
@@ -1156,15 +1156,15 @@ wxString nsErrorToWxHtmlError(NSError* error, wxWebViewNavigationError* out)
wxWebViewNavigationError type; wxWebViewNavigationError type;
wxString description = nsErrorToWxHtmlError(error, &type); wxString description = nsErrorToWxHtmlError(error, &type);
wxWebViewNavigationEvent thisEvent(wxEVT_COMMAND_WEB_VIEW_ERROR, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_ERROR,
webKitWindow->GetId(), webKitWindow->GetId(),
wxStringWithNSString( url ), wxStringWithNSString( url ),
wxEmptyString, false); wxEmptyString);
thisEvent.SetString(description); event.SetString(description);
thisEvent.SetInt(type); event.SetInt(type);
if (webKitWindow && webKitWindow->GetEventHandler()) if (webKitWindow && webKitWindow->GetEventHandler())
webKitWindow->GetEventHandler()->ProcessEvent(thisEvent); webKitWindow->GetEventHandler()->ProcessEvent(event);
} }
} }
@@ -1172,15 +1172,15 @@ wxString nsErrorToWxHtmlError(NSError* error, wxWebViewNavigationError* out)
forFrame:(WebFrame *)frame forFrame:(WebFrame *)frame
{ {
wxString target = wxStringWithNSString([frame name]); wxString target = wxStringWithNSString([frame name]);
wxWebViewNavigationEvent thisEvent(wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED,
webKitWindow->GetId(), webKitWindow->GetId(),
webKitWindow->GetCurrentURL(), webKitWindow->GetCurrentURL(),
target, true); target);
thisEvent.SetString(wxStringWithNSString(title)); event.SetString(wxStringWithNSString(title));
if (webKitWindow && webKitWindow->GetEventHandler()) if (webKitWindow && webKitWindow->GetEventHandler())
webKitWindow->GetEventHandler()->ProcessEvent(thisEvent); webKitWindow->GetEventHandler()->ProcessEvent(event);
} }
@end @end
@@ -1204,14 +1204,14 @@ wxString nsErrorToWxHtmlError(NSError* error, wxWebViewNavigationError* out)
webKitWindow->m_busy = true; webKitWindow->m_busy = true;
NSString *url = [[request URL] absoluteString]; NSString *url = [[request URL] absoluteString];
wxString target = wxStringWithNSString([frame name]); wxString target = wxStringWithNSString([frame name]);
wxWebViewNavigationEvent thisEvent(wxEVT_COMMAND_WEB_VIEW_NAVIGATING, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATING,
webKitWindow->GetId(), webKitWindow->GetId(),
wxStringWithNSString( url ), target, true); wxStringWithNSString( url ), target);
if (webKitWindow && webKitWindow->GetEventHandler()) if (webKitWindow && webKitWindow->GetEventHandler())
webKitWindow->GetEventHandler()->ProcessEvent(thisEvent); webKitWindow->GetEventHandler()->ProcessEvent(event);
if (thisEvent.IsVetoed()) if (!event.IsAllowed())
{ {
webKitWindow->m_busy = false; webKitWindow->m_busy = false;
[listener ignore]; [listener ignore];
@@ -1231,12 +1231,12 @@ wxString nsErrorToWxHtmlError(NSError* error, wxWebViewNavigationError* out)
wxUnusedVar(actionInformation); wxUnusedVar(actionInformation);
NSString *url = [[request URL] absoluteString]; NSString *url = [[request URL] absoluteString];
wxWebViewNavigationEvent thisEvent(wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NEWWINDOW,
webKitWindow->GetId(), webKitWindow->GetId(),
wxStringWithNSString( url ), "", true); wxStringWithNSString( url ), "");
if (webKitWindow && webKitWindow->GetEventHandler()) if (webKitWindow && webKitWindow->GetEventHandler())
webKitWindow->GetEventHandler()->ProcessEvent(thisEvent); webKitWindow->GetEventHandler()->ProcessEvent(event);
[listener ignore]; [listener ignore];
} }