X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/384b8d9f3d9e239d5e639e406c4703a9ccbf8ad6..62795f413a7222863b4aee76c08764071f94bd87:/src/common/webview.cpp diff --git a/src/common/webview.cpp b/src/common/webview.cpp index 3763b1b31c..afaf3ffd09 100644 --- a/src/common/webview.cpp +++ b/src/common/webview.cpp @@ -2,119 +2,110 @@ // Name: webview.cpp // Purpose: Common interface and events for web view component // Author: Marianne Gagnon -// Id: $Id$ -// Copyright: (c) 2010 Marianne Gagnon +// Copyright: (c) 2010 Marianne Gagnon, 2011 Steven Lamerton // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" +#if wxUSE_WEBVIEW + #if defined(__BORLANDC__) #pragma hdrstop #endif #include "wx/webview.h" -#include "wx/osx/webview.h" -#include "wx/gtk/webview.h" -#include "wx/msw/webviewie.h" +#if defined(__WXOSX_COCOA__) || defined(__WXOSX_CARBON__) +#include "wx/osx/webview_webkit.h" +#elif defined(__WXGTK__) +#include "wx/gtk/webview_webkit.h" +#elif defined(__WXMSW__) +#include "wx/msw/webview_ie.h" +#endif + +// DLL options compatibility check: +#include "wx/app.h" +WX_CHECK_BUILD_OPTIONS("wxWEBVIEW") + +extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewNameStr[] = "wxWebView"; +extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewDefaultURLStr[] = "about:blank"; +extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewBackendIE[] = "wxWebViewIE"; +extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewBackendWebKit[] = "wxWebViewWebKit"; + +#ifdef __WXMSW__ +extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewBackendDefault[] = "wxWebViewIE"; +#else +extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewBackendDefault[] = "wxWebViewWebKit"; +#endif + +wxIMPLEMENT_ABSTRACT_CLASS(wxWebView, wxControl); +wxIMPLEMENT_DYNAMIC_CLASS(wxWebViewEvent, wxCommandEvent); + +wxDEFINE_EVENT( wxEVT_WEBVIEW_NAVIGATING, wxWebViewEvent ); +wxDEFINE_EVENT( wxEVT_WEBVIEW_NAVIGATED, wxWebViewEvent ); +wxDEFINE_EVENT( wxEVT_WEBVIEW_LOADED, wxWebViewEvent ); +wxDEFINE_EVENT( wxEVT_WEBVIEW_ERROR, wxWebViewEvent ); +wxDEFINE_EVENT( wxEVT_WEBVIEW_NEWWINDOW, wxWebViewEvent ); +wxDEFINE_EVENT( wxEVT_WEBVIEW_TITLE_CHANGED, wxWebViewEvent ); + +wxStringWebViewFactoryMap wxWebView::m_factoryMap; + +// static +wxWebView* wxWebView::New(const wxString& backend) +{ + wxStringWebViewFactoryMap::iterator iter = FindFactory(backend); + + if(iter == m_factoryMap.end()) + return NULL; + else + return (*iter).second->Create(); +} -extern WXDLLEXPORT_DATA(const char) wxWebViewNameStr[] = "wxWebView"; -extern WXDLLEXPORT_DATA(const char) wxWebViewDefaultURLStr[] = "about:blank"; +// static +wxWebView* wxWebView::New(wxWindow* parent, wxWindowID id, const wxString& url, + const wxPoint& pos, const wxSize& size, + const wxString& backend, long style, + const wxString& name) +{ + wxStringWebViewFactoryMap::iterator iter = FindFactory(backend); -IMPLEMENT_DYNAMIC_CLASS(wxWebNavigationEvent, wxCommandEvent) + if(iter == m_factoryMap.end()) + return NULL; + else + return (*iter).second->Create(parent, id, url, pos, size, style, name); -wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_NAVIGATING, wxWebNavigationEvent ); -wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_NAVIGATED, wxWebNavigationEvent ); -wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_LOADED, wxWebNavigationEvent ); -wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_ERROR, wxWebNavigationEvent ); +} // static -wxWebView* wxWebView::New(wxWebViewBackend backend) +void wxWebView::RegisterFactory(const wxString& backend, + wxSharedPtr factory) { - switch (backend) - { - #if wxHAVE_WEB_BACKEND_OSX_WEBKIT - case wxWEB_VIEW_BACKEND_OSX_WEBKIT: - return new wxOSXWebKitCtrl(); - #endif - - #if wxHAVE_WEB_BACKEND_GTK_WEBKIT - case wxWEB_VIEW_BACKEND_GTK_WEBKIT: - return new wxGtkWebKitCtrl(); - #endif - - #if wxHAVE_WEB_BACKEND_IE - case wxWEB_VIEW_BACKEND_IE: - return new wxIEPanel(); - #endif - - case wxWEB_VIEW_BACKEND_DEFAULT: - - #if wxHAVE_WEB_BACKEND_OSX_WEBKIT - return new wxOSXWebKitCtrl(); - #endif - - #if wxHAVE_WEB_BACKEND_GTK_WEBKIT - return new wxGtkWebKitCtrl(); - #endif - - #if wxHAVE_WEB_BACKEND_IE - return new wxIEPanel(); - #endif - - // fall-through intended - default: - return NULL; - } + m_factoryMap[backend] = factory; } +// static +wxStringWebViewFactoryMap::iterator wxWebView::FindFactory(const wxString &backend) +{ + // Initialise the map, it checks internally for existing factories + InitFactoryMap(); + + return m_factoryMap.find(backend); +} + // static -wxWebView* wxWebView::New(wxWindow* parent, - wxWindowID id, - const wxString& url, - const wxPoint& pos, - const wxSize& size, - wxWebViewBackend backend, - long style, - const wxString& name) +void wxWebView::InitFactoryMap() { - switch (backend) - { - #if wxHAVE_WEB_BACKEND_OSX_WEBKIT - case wxWEB_VIEW_BACKEND_OSX_WEBKIT: - return new wxOSXWebKitCtrl(parent, id, url, pos, size, style, - name); - #endif - - #if wxHAVE_WEB_BACKEND_GTK_WEBKIT - case wxWEB_VIEW_BACKEND_GTK_WEBKIT: - return new wxGtkWebKitCtrl(parent, id, url, pos, size, style, - name); - #endif - - #if wxHAVE_WEB_BACKEND_IE - case wxWEB_VIEW_BACKEND_IE: - return new wxIEPanel(parent, id, url, pos, size, style, name); - #endif - - case wxWEB_VIEW_BACKEND_DEFAULT: - - #if wxHAVE_WEB_BACKEND_OSX_WEBKIT - return new wxOSXWebKitCtrl(parent, id, url, pos, size, style, name); - #endif - - #if wxHAVE_WEB_BACKEND_GTK_WEBKIT - return new wxGtkWebKitCtrl(parent, id, url, pos, size, style, name); - #endif - - #if wxHAVE_WEB_BACKEND_IE - return new wxIEPanel(parent, id, url, pos, size, style, name); - #endif - - // fall-through intended - default: - return NULL; - } +#ifdef __WXMSW__ + if(m_factoryMap.find(wxWebViewBackendIE) == m_factoryMap.end()) + RegisterFactory(wxWebViewBackendIE, wxSharedPtr + (new wxWebViewFactoryIE)); +#else + if(m_factoryMap.find(wxWebViewBackendWebKit) == m_factoryMap.end()) + RegisterFactory(wxWebViewBackendWebKit, wxSharedPtr + (new wxWebViewFactoryWebKit)); +#endif } + +#endif // wxUSE_WEBVIEW