X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0fe8a1b6ca95414cdffcb8120e7d6bdf44bf571d..dc73d7f5d468881a9cbb71f1a234f364ff52ceaa:/interface/wx/webview.h diff --git a/interface/wx/webview.h b/interface/wx/webview.h index 0fb9ca6148..94d3c68bb1 100644 --- a/interface/wx/webview.h +++ b/interface/wx/webview.h @@ -37,7 +37,7 @@ enum wxWebViewZoomType /** Types of errors that can cause navigation to fail */ -enum wxWebNavigationError +enum wxWebViewNavigationError { /** Connection error (timeout, etc.) */ wxWEB_NAV_ERR_CONNECTION, @@ -87,23 +87,24 @@ enum wxWebViewBackend }; /** - @class wxWebHistoryItem + @class wxWebViewHistoryItem A simple class that contains the URL and title of an element of the history of a wxWebView. - @library{wxweb} - @category{web} + @since 2.9.3 + @library{wxwebview} + @category{webview} @see wxWebView */ -class wxWebHistoryItem +class wxWebViewHistoryItem { public: /** Construtor. */ - wxWebHistoryItem(const wxString& url, const wxString& title); + wxWebViewHistoryItem(const wxString& url, const wxString& title); /** @return The url of the page. @@ -116,23 +117,103 @@ public: wxString GetTitle(); }; +/** + @class wxWebViewHandler + + The base class for handling custom schemes in wxWebView, for example to + allow virtual file system support. + + @since 2.9.3 + @library{wxwebview} + @category{webview} + + @see wxWebView + */ +class wxWebViewHandler +{ +public: + /** + Constructor. Takes the name of the scheme that will be handled by this + class for example @c file or @c zip. + */ + wxWebViewHandler(const wxString& scheme); + + /** + @return A pointer to the file represented by @c uri. + */ + virtual wxFSFile* GetFile(const wxString &uri) = 0; + + /** + @return The name of the scheme, as passed to the constructor. + */ + virtual wxString GetName() const = 0; +}; + /** @class wxWebView This control may be used to render web (HTML / CSS / javascript) documents. - Capabilities of the HTML renderer will depend upon the backed. - - @c wxWEB_VIEW_BACKEND_IE uses the the Trident rendering engine, which - is also used by Internet Explorer. It is important to note that by default - it emulates Internet Explorer 7, this can be chaged with a registry - setting, see + It is designed to allow the creation of multiple backends for each port, + although currently just one is available. It differs from wxHtmlWindow in + that each backend is actually a full rendering engine, Trident on MSW and + Webkit on OSX and GTK. This allows the correct viewing complex pages with + javascript and css. + + @section descriptions Backend Descriptions + + @par wxWEB_VIEW_BACKEND_IE (MSW) + + The IE backend uses Microsoft's Trident rendering engine, specifically the + version used by the locally installed copy of Internet Explorer. As such it + is only available for the MSW port. By default recent versions of the + WebBrowser + control, which this backend uses, emulate Internet Explorer 7. This can be + changed with a registry setting, see - this article for more information. - - Note that errors are generally reported asynchronously though the - @c wxEVT_COMMAND_WEB_VIEW_ERROR event described below. + this article for more information. This backend has full support for + custom schemes and virtual file systems. + + @par wxWEB_VIEW_WEBKIT (GTK) + + Under GTK the WebKit backend uses + WebKitGTK+. The current minimum version + required is 1.3.1 which ships by default with Ubuntu Natty and Debian + Wheezy and has the package name libwebkitgtk-dev. Custom schemes and + virtual files systems are supported under this backend, however embedded + resources such as images and stylesheets are currently loaded using the + data:// scheme. + + @par wxWEB_VIEW_WEBKIT (OSX) + + The OSX WebKit backend uses Apple's + WebView + class. This backend has full support for custom schemes and virtual file + systems. + + @section async Asynchronous Notifications + + Many of the methods in wxWebView are asynchronous, i.e. they return + immediately and perform their work in the background. This includes + functions such as LoadUrl() and Reload(). To receive notification of the + progress and completion of these functions you need to handle the events + that are provided. Specifically @c wxEVT_COMMAND_WEB_VIEW_LOADED notifies + when the page or a sub-frame has finished loading and + @c wxEVT_COMMAND_WEB_VIEW_ERROR notifies that an error has occurred. + + @section vfs Virtual File Systems and Custom Schemes + + wxWebView supports the registering of custom scheme handlers, for example + @c file or @c http. To do this create a new class which inherits from + wxWebViewHandler, where wxWebHandler::GetFile() returns a pointer to a + wxFSFile which represents the given url. You can then register your handler + with RegisterHandler() it will be called for all pages and resources. + + wxWebFileHandler is provided to allow the navigation of pages inside a zip + archive. It overrides the @c file scheme and provides support for the + standard @c file syntax as well as paths to archives of the form + @c file:///C:/exmaple/docs.zip;protocol=zip/main.htm - @beginEventEmissionTable{wxWebNavigationEvent} + @beginEventEmissionTable{wxWebViewEvent} @event{EVT_WEB_VIEW_NAVIGATING(id, func)} Process a @c wxEVT_COMMAND_WEB_VIEW_NAVIGATING event, generated before trying to get a resource. This event may be vetoed to prevent navigating to this @@ -155,12 +236,17 @@ public: precise error message/code. @event{EVT_WEB_VIEW_NEWWINDOW(id, func)} Process a @c wxEVT_COMMAND_WEB_VIEW_NEWWINDOW event, generated when a new - window is created. This event may be vetoed to prevent a new window showing, - for example if you want to open the url in the existing window or a new tab. + window is created. You must handle this event if you want anything to + happen, for example to load the page in a new window or tab. + @event{EVT_WEB_VIEW_TITLE_CHANGED(id, func)} + Process a @c wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED event, generated when + the page title changes. Use GetString to get the title. @endEventTable - @library{wxweb} - @category{ctrl,web} + @since 2.9.3 + @library{wxwebview} + @category{ctrl,webview} + @see wxWebViewHandler, wxWebViewEvent */ class wxWebView : public wxControl { @@ -212,29 +298,34 @@ public: Get the title of the current web page, or its URL/path if title is not available. */ - virtual wxString GetCurrentTitle() = 0; + virtual wxString GetCurrentTitle() const = 0; /** Get the URL of the currently displayed document. */ - virtual wxString GetCurrentURL() = 0; + virtual wxString GetCurrentURL() const = 0; /** Get the HTML source code of the currently displayed document. @return The HTML source code, or an empty string if no page is currently shown. */ - virtual wxString GetPageSource() = 0; + virtual wxString GetPageSource() const = 0; + + /** + Get the text of the current page. + */ + virtual wxString GetPageText() const = 0; /** Returns whether the web control is currently busy (e.g. loading a page). */ - virtual bool IsBusy() = 0; + virtual bool IsBusy() const = 0; /** Returns whether the web control is currently editable */ - virtual bool IsEditable() = 0; + virtual bool IsEditable() const = 0; /** Load a web page from a URL @@ -243,13 +334,19 @@ public: to know whether loading the URL was successful, register to receive navigation error events. */ - virtual void LoadUrl(const wxString& url) = 0; + virtual void LoadURL(const wxString& url) = 0; /** Opens a print dialog so that the user may print the currently displayed page. */ virtual void Print() = 0; + + /** + Registers a custom scheme handler. + @param handler A shared pointer to a wxWebHandler. + */ + virtual void RegisterHandler(wxSharedPtr handler) = 0; /** Reload the currently displayed URL. @@ -257,6 +354,11 @@ public: */ virtual void Reload(wxWebViewReloadFlags flags = wxWEB_VIEW_RELOAD_DEFAULT) = 0; + /** + Runs the given javascript code. + */ + virtual void RunScript(const wxString& javascript) = 0; + /** Set the editable property of the web control. Enabling allows the user to edit the page even if the @c contenteditable attribute is not set. @@ -278,12 +380,7 @@ public: @param baseUrl URL assigned to the HTML data, to be used to resolve relative paths, for instance. */ - virtual void SetPage(wxInputStream& html, wxString baseUrl) - { - wxStringOutputStream stream; - stream.Write(html); - SetPage(stream.GetString(), baseUrl); - } + virtual void SetPage(wxInputStream& html, wxString baseUrl); /** Stop the current page loading process, if any. @@ -298,18 +395,24 @@ public: /** Returns @true if the current selection can be copied. + + @note This always returns @c true on the OSX WebKit backend. */ - virtual bool CanCopy() = 0; + virtual bool CanCopy() const = 0; /** Returns @true if the current selection can be cut. + + @note This always returns @c true on the OSX WebKit backend. */ - virtual bool CanCut() = 0; + virtual bool CanCut() const = 0; /** Returns @true if data can be pasted. + + @note This always returns @c true on the OSX WebKit backend. */ - virtual bool CanPaste() = 0; + virtual bool CanPaste() const = 0; /** Copies the current selection. @@ -334,13 +437,13 @@ public: Returns @true if it is possible to navigate backward in the history of visited pages. */ - virtual bool CanGoBack() = 0; + virtual bool CanGoBack() const = 0; /** Returns @true if it is possible to navigate forward in the history of visited pages. */ - virtual bool CanGoForward() = 0; + virtual bool CanGoForward() const = 0; /** Clear the history, this will also remove the visible page. @@ -356,14 +459,14 @@ public: Returns a list of items in the back history. The first item in the vector is the first page that was loaded by the control. */ - virtual wxVector > GetBackwardHistory() = 0; + virtual wxVector > GetBackwardHistory() = 0; /** Returns a list of items in the forward history. The first item in the vector is the next item in the history with respect to the curently loaded page. */ - virtual wxVector > GetForwardHistory() = 0; + virtual wxVector > GetForwardHistory() = 0; /** Navigate back in the history of visited pages. @@ -380,12 +483,17 @@ public: /** Loads a history item. */ - virtual void LoadHistoryItem(wxSharedPtr item) = 0; + virtual void LoadHistoryItem(wxSharedPtr item) = 0; /** @name Selection */ + /** + Clears the current selection. + */ + virtual void ClearSelection() = 0; + /** Deletes the current selection. Note that for @c wxWEB_VIEW_BACKEND_WEBKIT the selection must be editable, either through SetEditable or the @@ -394,19 +502,19 @@ public: virtual void DeleteSelection() = 0; /** - Returns the currently selected HTML, if any. + Returns the currently selected source, if any. */ - virtual wxString GetSelectedHTML() = 0; + virtual wxString GetSelectedSource() const = 0; /** Returns the currently selected text, if any. */ - virtual wxString GetSelectedText() = 0; + virtual wxString GetSelectedText() const = 0; /** Returns @true if there is a current selection. */ - virtual bool HasSelection() = 0; + virtual bool HasSelection() const = 0; /** Selects the entire page. @@ -420,12 +528,12 @@ public: /** Returns @true if there is an action to redo. */ - virtual bool CanRedo() = 0; + virtual bool CanRedo() const = 0; /** Returns @true if there is an action to undo. */ - virtual bool CanUndo() = 0; + virtual bool CanUndo() const = 0; /** Redos the last action. @@ -453,7 +561,7 @@ public: Get the zoom factor of the page. @return The current level of zoom. */ - virtual wxWebViewZoom GetZoom() = 0; + virtual wxWebViewZoom GetZoom() const = 0; /** Get how the zoom factor is currently interpreted. @@ -481,12 +589,12 @@ public: /** - @class wxWebNavigationEvent + @class wxWebViewEvent A navigation event holds information about events associated with wxWebView objects. - @beginEventEmissionTable{wxWebNavigationEvent} + @beginEventEmissionTable{wxWebViewEvent} @event{EVT_WEB_VIEW_NAVIGATING(id, func)} Process a @c wxEVT_COMMAND_WEB_VIEW_NAVIGATING event, generated before trying to get a resource. This event may be vetoed to prevent navigating to this @@ -509,51 +617,35 @@ public: precise error message/code. @event{EVT_WEB_VIEW_NEWWINDOW(id, func)} Process a @c wxEVT_COMMAND_WEB_VIEW_NEWWINDOW event, generated when a new - window is created. This event may be vetoed to prevent a new window showing, - for example if you want to open the url in the existing window or a new tab. + window is created. You must handle this event if you want anything to + happen, for example to load the page in a new window or tab. + @event{EVT_WEB_VIEW_TITLE_CHANGED(id, func)} + Process a @c wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED event, generated when + the page title changes. Use GetString to get the title. @endEventTable - - @library{wxweb} - @category{events,web} + + @since 2.9.3 + @library{wxwebview} + @category{events,webview} @see wxWebView */ -class wxWebNavigationEvent : public wxCommandEvent +class wxWebViewEvent : public wxNotifyEvent { public: - wxWebNavigationEvent(); - wxWebNavigationEvent(wxEventType type, int id, const wxString href, - const wxString target, bool canVeto); - /** - Get the URL being visited - */ - const wxString& GetHref() const { return m_href; } + wxWebViewEvent(); + wxWebViewEvent(wxEventType type, int id, const wxString href, + const wxString target); /** - Get the target (frame or window) in which the URL that caused this event - is viewed, or an empty string if not available. + Get the name of the target frame which the url of this event + has been or will be loaded into. This may return an emptry string + if the frame is not avaliable. */ const wxString& GetTarget() const; - virtual wxEvent* Clone() const; - - /** - Get whether this event may be vetoed (stopped/prevented). Only - meaningful for events fired before navigation takes place or new - window events. - */ - 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 or new window events. Only valid - if CanVeto() returned true. - */ - void Veto(); + /** + Get the URL being visited + */ + const wxString& GetURL() const; }; \ No newline at end of file