previous 2.9 versions (but like in 2.8). Use wxLocale (preferred) or call
wxApp::SetCLocale() from your overridden wxApp::Initialize() to restore the
old behaviour.
+- wxWebView::New now takes a string identifier for the backend to be used
+ rather than a wxWebViewBackend enum value.
All:
- Add generic wxFileSystem support to wxWebView with
wxWebViewFSHandler (Nick Matthews).
- Add possibility to disable context menu in wxWebView.
+- Add ability to register custom wxWebView backends using
+ wxWebView::RegisterFactory and a wxWebViewFactory derived class.
- Add possibility to hide and show again wxRibbonBar pages (wxBen).
- Add wxRibbonBar pages highlighting (wxBen).
- Add expand/collapse button to wxRibbonBar (rakeshthp).
wxDECLARE_DYNAMIC_CLASS(wxWebViewWebKit);
};
+class WXDLLIMPEXP_WEBVIEW wxWebViewFactoryWebKit : public wxWebViewFactory
+{
+public:
+ virtual wxWebView* Create() { return new wxWebViewWebKit; }
+ virtual wxWebView* Create(wxWindow* parent,
+ wxWindowID id,
+ const wxString& url = wxWebViewDefaultURLStr,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ long style = 0,
+ const wxString& name = wxWebViewNameStr)
+ { return new wxWebViewWebKit(parent, id, url, pos, size, style, name); }
+};
+
+
#endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_WEBKIT && defined(__WXGTK__)
#endif
wxDECLARE_DYNAMIC_CLASS(wxWebViewIE);
};
+class WXDLLIMPEXP_WEBVIEW wxWebViewFactoryIE : public wxWebViewFactory
+{
+public:
+ virtual wxWebView* Create() { return new wxWebViewIE; }
+ virtual wxWebView* Create(wxWindow* parent,
+ wxWindowID id,
+ const wxString& url = wxWebViewDefaultURLStr,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ long style = 0,
+ const wxString& name = wxWebViewNameStr)
+ { return new wxWebViewIE(parent, id, url, pos, size, style, name); }
+};
+
class VirtualProtocol : public wxIInternetProtocol
{
protected:
//TODO: look into using DECLARE_WXCOCOA_OBJC_CLASS rather than this.
};
+class WXDLLIMPEXP_WEBVIEW wxWebViewFactoryWebKit : public wxWebViewFactory
+{
+public:
+ virtual wxWebView* Create() { return new wxWebViewWebKit; }
+ virtual wxWebView* Create(wxWindow* parent,
+ wxWindowID id,
+ const wxString& url = wxWebViewDefaultURLStr,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ long style = 0,
+ const wxString& name = wxWebViewNameStr)
+ { return new wxWebViewWebKit(parent, id, url, pos, size, style, name); }
+};
+
#endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_WEBKIT
#endif // _WX_WEBKIT_H_
class wxFSFile;
class wxFileSystem;
+class wxWebView;
enum wxWebViewZoom
{
wxWEB_VIEW_FIND_DEFAULT = 0
};
-enum wxWebViewBackend
-{
- wxWEB_VIEW_BACKEND_DEFAULT,
- wxWEB_VIEW_BACKEND_WEBKIT,
- wxWEB_VIEW_BACKEND_IE
-};
-
//Base class for custom scheme handlers
class WXDLLIMPEXP_WEBVIEW wxWebViewHandler
{
extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewNameStr[];
extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewDefaultURLStr[];
+extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewBackendDefault[];
+extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewBackendIE[];
+extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewBackendWebKit[];
+
+class WXDLLIMPEXP_WEBVIEW wxWebViewFactory : public wxObject
+{
+public:
+ virtual wxWebView* Create() = 0;
+ virtual wxWebView* Create(wxWindow* parent,
+ wxWindowID id,
+ const wxString& url = wxWebViewDefaultURLStr,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ long style = 0,
+ const wxString& name = wxWebViewNameStr) = 0;
+};
+
+WX_DECLARE_STRING_HASH_MAP(wxSharedPtr<wxWebViewFactory>, wxStringWebViewFactoryMap);
class WXDLLIMPEXP_WEBVIEW wxWebView : public wxControl
{
long style = 0,
const wxString& name = wxWebViewNameStr) = 0;
- static wxWebView* New(wxWebViewBackend backend = wxWEB_VIEW_BACKEND_DEFAULT);
+ // Factory methods allowing the use of custom factories registered with
+ // RegisterFactory
+ static wxWebView* New(const wxString& backend = wxWebViewBackendDefault);
static wxWebView* New(wxWindow* parent,
- wxWindowID id,
- const wxString& url = wxWebViewDefaultURLStr,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- wxWebViewBackend backend = wxWEB_VIEW_BACKEND_DEFAULT,
- long style = 0,
- const wxString& name = wxWebViewNameStr);
-
- //General methods
+ wxWindowID id,
+ const wxString& url = wxWebViewDefaultURLStr,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ const wxString& backend = wxWebViewBackendDefault,
+ long style = 0,
+ const wxString& name = wxWebViewNameStr);
+
+ static void RegisterFactory(const wxString& backend,
+ wxSharedPtr<wxWebViewFactory> factory);
+
+ // General methods
virtual void EnableContextMenu(bool enable = true)
{
m_showMenu = enable;
virtual void DoSetPage(const wxString& html, const wxString& baseUrl) = 0;
private:
+ static void InitFactoryMap();
+ static wxStringWebViewFactoryMap::iterator FindFactory(const wxString &backend);
+
bool m_showMenu;
+ static wxStringWebViewFactoryMap m_factoryMap;
wxDECLARE_ABSTRACT_CLASS(wxWebView);
};
wxString GetTitle();
};
+/**
+ @class wxWebViewFactory
+
+ An abstract factory class for creating wxWebView backends. Each
+ implementation of wxWebView should have its own factory.
+
+ @since 2.9.5
+ @library{wxwebview}
+ @category{webview}
+
+ @see wxWebView
+ */
+class wxWebViewFactory : public wxObject
+{
+public:
+ /**
+ Function to create a new wxWebView with two-step creation,
+ wxWebView::Create should be called on the returned object.
+ @return the created wxWebView
+ */
+ virtual wxWebView* Create() = 0;
+
+ /**
+ Function to create a new wxWebView with parameters.
+ @param parent Parent window for the control
+ @param id ID of this control
+ @param url Initial URL to load
+ @param pos Position of the control
+ @param size Size of the control
+ @return the created wxWebView
+ */
+ virtual wxWebView* Create(wxWindow* parent,
+ wxWindowID id,
+ const wxString& url = wxWebViewDefaultURLStr,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ long style = 0,
+ const wxString& name = wxWebViewNameStr) = 0;
+};
+
/**
@class wxWebViewHandler
const wxString& name = wxWebViewNameStr) = 0;
/**
- Factory function to create a new wxWebView for two-step creation
- (you need to call wxWebView::Create on the returned object)
- @param backend which web engine to use as backend for wxWebView
- @return the created wxWebView, or NULL if the requested backend is
- not available
+ Factory function to create a new wxWebView with two-step creation,
+ wxWebView::Create should be called on the returned object.
+ @param backend The backend web rendering engine to use.
+ @c wxWebViewBackendDefault, @c wxWebViewBackendIE and
+ @c wxWebViewBackendWebKit are predefined where appropriate.
+ @return The created wxWebView
+ @since 2.9.5
*/
- static wxWebView* New(wxWebViewBackend backend = wxWEB_VIEW_BACKEND_DEFAULT);
-
+ static wxWebView* New(const wxString& backend = wxWebViewBackendDefault);
+
/**
- Factory function to create a new wxWebView
- @param parent parent window to create this view in
+ Factory function to create a new wxWebView using a wxWebViewFactory.
+ @param parent Parent window for the control
@param id ID of this control
- @param url URL to load by default in the web view
- @param pos position to create this control at
- (you may use wxDefaultPosition if you use sizers)
- @param size size to create this control with
- (you may use wxDefaultSize if you use sizers)
- @param backend which web engine to use as backend for wxWebView
- @return the created wxWebView, or NULL if the requested backend
+ @param url Initial URL to load
+ @param pos Position of the control
+ @param size Size of the control
+ @param backend The backend web rendering engine to use.
+ @c wxWebViewBackendDefault, @c wxWebViewBackendIE and
+ @c wxWebViewBackendWebKit are predefined where appropriate.
+ @return The created wxWebView, or @c NULL if the requested backend
is not available
+ @since 2.9.5
*/
static wxWebView* New(wxWindow* parent,
- wxWindowID id,
- const wxString& url = wxWebViewDefaultURLStr,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- wxWebViewBackend backend = wxWEB_VIEW_BACKEND_DEFAULT,
- long style = 0,
- const wxString& name = wxWebViewNameStr);
+ wxWindowID id,
+ const wxString& url = wxWebViewDefaultURLStr,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ const wxString& backend = wxWebViewBackendDefault,
+ long style = 0,
+ const wxString& name = wxWebViewNameStr);
+
+ /**
+ Allows the registering of new backend for wxWebView. @a backend can be
+ used as an argument to New().
+ @param backend The name for the new backend to be registered under
+ @param factory A shared pointer to the factory which creates the
+ appropriate backend.
+ @since 2.9.5
+ */
+ static void RegisterFactory(const wxString& backend,
+ wxSharedPtr<wxWebViewFactory> factory);
/**
Get the title of the current web page, or its URL/path if title is not
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_NEWWINDOW, wxWebViewEvent );
wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_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();
+}
+
+// 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);
+
+ if(iter == m_factoryMap.end())
+ return NULL;
+ else
+ return (*iter).second->Create(parent, id, url, pos, size, style, name);
+
+}
+
// static
-wxWebView* wxWebView::New(wxWebViewBackend backend)
+void wxWebView::RegisterFactory(const wxString& backend,
+ wxSharedPtr<wxWebViewFactory> factory)
{
- 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;
- }
+ 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
-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 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;
- }
+#ifdef __WXMSW__
+ RegisterFactory(wxWebViewBackendIE, wxSharedPtr<wxWebViewFactory>
+ (new wxWebViewFactoryIE));
+#else
+ RegisterFactory(wxWebViewBackendWebKit, wxSharedPtr<wxWebViewFactory>
+ (new wxWebViewFactoryWebKit));
+#endif
}
#endif // wxUSE_WEBVIEW