X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1d156af3247c862e51a7c62f569a3fd302052a42..d485bda109d5ef0fef36a3f737549e9b9f54baab:/src/common/webview.cpp?ds=sidebyside diff --git a/src/common/webview.cpp b/src/common/webview.cpp index 63f5f2b343..e664d60192 100644 --- a/src/common/webview.cpp +++ b/src/common/webview.cpp @@ -18,9 +18,13 @@ #include "wx/webview.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" @@ -28,88 +32,80 @@ 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_COMMAND_WEB_VIEW_NAVIGATING, wxWebViewEvent ); -wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_NAVIGATED, wxWebViewEvent ); -wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_LOADED, wxWebViewEvent ); -wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_ERROR, wxWebViewEvent ); -wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, wxWebViewEvent ); -wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED, wxWebViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_WEBVIEW_NAVIGATING, wxWebViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_WEBVIEW_NAVIGATED, wxWebViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_WEBVIEW_LOADED, wxWebViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_WEBVIEW_ERROR, wxWebViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_WEBVIEW_NEWWINDOW, wxWebViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_WEBVIEW_TITLE_CHANGED, wxWebViewEvent ); + +wxStringWebViewFactoryMap wxWebView::m_factoryMap; // static -wxWebView* wxWebView::New(wxWebViewBackend backend) +wxWebView* wxWebView::New(const wxString& backend) { - switch (backend) - { - #if defined(wxUSE_WEBVIEW_WEBKIT) && \ - (defined(__WXGTK__) || defined(__WXOSX__)) - case wxWEB_VIEW_BACKEND_WEBKIT: - return new wxWebViewWebKit(); - #endif - - #if wxUSE_WEBVIEW_IE - case wxWEB_VIEW_BACKEND_IE: - return new wxWebViewIE(); - #endif - - case wxWEB_VIEW_BACKEND_DEFAULT: - - #if defined(wxUSE_WEBVIEW_WEBKIT) && \ - (defined(__WXGTK__) || defined(__WXOSX__)) - return new wxWebViewWebKit(); - #endif - - #if wxUSE_WEBVIEW_IE - return new wxWebViewIE(); - #endif - - // fall-through intended - default: - return NULL; - } + wxStringWebViewFactoryMap::iterator iter = FindFactory(backend); + + if(iter == m_factoryMap.end()) + return NULL; + else + return (*iter).second->Create(); } // static -wxWebView* wxWebView::New(wxWindow* parent, - wxWindowID id, - const wxString& url, - const wxPoint& pos, - const wxSize& size, - wxWebViewBackend backend, - long style, - const wxString& name) +wxWebView* wxWebView::New(wxWindow* parent, wxWindowID id, const wxString& url, + const wxPoint& pos, const wxSize& size, + const wxString& backend, long style, + const wxString& name) { - switch (backend) - { - #if defined(wxUSE_WEBVIEW_WEBKIT) && \ - (defined(__WXGTK__) || defined(__WXOSX__)) - case wxWEB_VIEW_BACKEND_WEBKIT: - return new wxWebViewWebKit(parent, id, url, pos, size, style, name); - #endif - - #if wxUSE_WEBVIEW_IE - case wxWEB_VIEW_BACKEND_IE: - return new wxWebViewIE(parent, id, url, pos, size, style, name); - #endif - - case wxWEB_VIEW_BACKEND_DEFAULT: - - #if defined(wxUSE_WEBVIEW_WEBKIT) && \ - (defined(__WXGTK__) || defined(__WXOSX__)) - return new wxWebViewWebKit(parent, id, url, pos, size, style, name); - #endif - - #if wxUSE_WEBVIEW_IE - return new wxWebViewIE(parent, id, url, pos, size, style, name); - #endif - - // fall-through intended - default: - return NULL; - } + wxStringWebViewFactoryMap::iterator iter = FindFactory(backend); + + if(iter == m_factoryMap.end()) + return NULL; + else + return (*iter).second->Create(parent, id, url, pos, size, style, name); + +} + +// static +void wxWebView::RegisterFactory(const wxString& backend, + wxSharedPtr factory) +{ + m_factoryMap[backend] = factory; +} + +// static +wxStringWebViewFactoryMap::iterator wxWebView::FindFactory(const wxString &backend) +{ + // Initialise the map if needed + if(m_factoryMap.empty()) + InitFactoryMap(); + + return m_factoryMap.find(backend); +} + +// static +void wxWebView::InitFactoryMap() +{ +#ifdef __WXMSW__ + RegisterFactory(wxWebViewBackendIE, wxSharedPtr + (new wxWebViewFactoryIE)); +#else + RegisterFactory(wxWebViewBackendWebKit, wxSharedPtr + (new wxWebViewFactoryWebKit)); +#endif } #endif // wxUSE_WEBVIEW