X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/66f2aa61c3c7bc326f3287739eded70ca61f775d..1f0acb435592470b421b80df854fbbb08cd2853f:/include/wx/msw/webview_ie.h diff --git a/include/wx/msw/webview_ie.h b/include/wx/msw/webview_ie.h index 23cf573ce6..aec06fc0d1 100644 --- a/include/wx/msw/webview_ie.h +++ b/include/wx/msw/webview_ie.h @@ -3,7 +3,7 @@ // Purpose: wxMSW IE wxWebView backend // Author: Marianne Gagnon // Id: $Id$ -// Copyright: (c) 2010 Marianne Gagnon +// Copyright: (c) 2010 Marianne Gagnon, 2011 Steven Lamerton // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -12,12 +12,17 @@ #include "wx/setup.h" -#if wxUSE_WEBVIEW_IE +#if wxUSE_WEBVIEW_IE && defined(__WXMSW__) #include "wx/control.h" #include "wx/webview.h" #include "wx/msw/ole/automtn.h" #include "wx/msw/ole/activex.h" +#include "wx/sharedptr.h" +#include "wx/vector.h" + +struct IHTMLDocument2; +class wxFSFile; class WXDLLIMPEXP_WEB wxWebViewIE : public wxWebView { @@ -45,15 +50,21 @@ public: const wxString& name = wxWebViewNameStr); virtual void LoadUrl(const wxString& url); + virtual void LoadHistoryItem(wxSharedPtr item); + virtual wxVector > GetBackwardHistory(); + virtual wxVector > GetForwardHistory(); - virtual bool CanGoForward() { return m_canNavigateForward; } - virtual bool CanGoBack() { return m_canNavigateBack; } + virtual bool CanGoForward(); + virtual bool CanGoBack(); virtual void GoBack(); virtual void GoForward(); + virtual void ClearHistory(); + virtual void EnableHistory(bool enable = true); virtual void Stop(); virtual void Reload(wxWebViewReloadFlags flags = wxWEB_VIEW_RELOAD_DEFAULT); virtual wxString GetPageSource(); + virtual wxString GetPageText(); virtual bool IsBusy(); virtual wxString GetCurrentURL(); @@ -70,28 +81,51 @@ public: virtual wxWebViewZoom GetZoom(); virtual void SetZoom(wxWebViewZoom zoom); + //Clipboard functions + virtual bool CanCut(); + virtual bool CanCopy(); + virtual bool CanPaste(); + virtual void Cut(); + virtual void Copy(); + virtual void Paste(); + + //Undo / redo functionality + virtual bool CanUndo(); + virtual bool CanRedo(); + virtual void Undo(); + virtual void Redo(); + + //Editing functions + virtual void SetEditable(bool enable = true); + virtual bool IsEditable(); + + //Selection + virtual void SelectAll(); + virtual bool HasSelection(); + virtual void DeleteSelection(); + virtual wxString GetSelectedText(); + virtual wxString GetSelectedSource(); + virtual void ClearSelection(); + + virtual void RunScript(const wxString& javascript); + + //Virtual Filesystem Support + virtual void RegisterHandler(wxWebHandler* handler); + // ---- IE-specific methods // FIXME: I seem to be able to access remote webpages even in offline mode... bool IsOfflineMode(); void SetOfflineMode(bool offline); - /** - * Get text zoom - * @return text zoom from 0 to 4 - */ - int GetIETextZoom(); - - /** - * @param level 0 to 4 - */ - void SetIETextZoom(int level); + wxWebViewZoom GetIETextZoom(); + void SetIETextZoom(wxWebViewZoom level); - void SetIEOpticalZoom(float zoom); - float GetIEOpticalZoom(); + wxWebViewZoom GetIEOpticalZoom(); + void SetIEOpticalZoom(wxWebViewZoom level); void onActiveXEvent(wxActiveXEvent& evt); - void onEraseBg(wxEraseEvent& evt) {} + void onEraseBg(wxEraseEvent&) {} DECLARE_EVENT_TABLE(); @@ -100,16 +134,97 @@ private: wxAutomationObject m_ie; IWebBrowser2* m_webBrowser; DWORD m_dwCookie; - bool m_canNavigateBack; - bool m_canNavigateForward; + + //We store the current zoom type; + wxWebViewZoomType m_zoomType; /** The "Busy" property of IWebBrowser2 does not always return busy when * we'd want it to; this variable may be set to true in cases where the * Busy property is false but should be true. */ bool m_isBusy; + //We manage our own history, the history list contains the history items + //which are added as documentcomplete events arrive, unless we are loading + //an item from the history. The position is stored as an int, and reflects + //where we are in the history list. + wxVector > m_historyList; + int m_historyPosition; + bool m_historyLoadingFromList; + bool m_historyEnabled; + + //Generic helper functions for IHtmlDocument commands + bool CanExecCommand(wxString command); + void ExecCommand(wxString command); + IHTMLDocument2* GetDocument(); + + wxDECLARE_DYNAMIC_CLASS(wxWebViewIE); +}; + +class VirtualProtocol : public IInternetProtocol +{ +protected: + ULONG m_refCount; + IInternetProtocolSink* m_protocolSink; + wxString m_html; + VOID * fileP; + + wxFSFile* m_file; + wxWebHandler* m_handler; + +public: + VirtualProtocol(wxWebHandler *handler); + ~VirtualProtocol(); + + //IUnknown + ULONG STDMETHODCALLTYPE AddRef(); + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject); + ULONG STDMETHODCALLTYPE Release(); + + //IInternetProtocolRoot + HRESULT STDMETHODCALLTYPE Abort(HRESULT WXUNUSED(hrReason), + DWORD WXUNUSED(dwOptions)) + { return E_NOTIMPL; } + HRESULT STDMETHODCALLTYPE Continue(PROTOCOLDATA *WXUNUSED(pProtocolData)) + { return S_OK; } + HRESULT STDMETHODCALLTYPE Resume() { return S_OK; } + HRESULT STDMETHODCALLTYPE Start(LPCWSTR szUrl, + IInternetProtocolSink *pOIProtSink, + IInternetBindInfo *pOIBindInfo, + DWORD grfPI, + HANDLE_PTR dwReserved); + HRESULT STDMETHODCALLTYPE Suspend() { return S_OK; } + HRESULT STDMETHODCALLTYPE Terminate(DWORD WXUNUSED(dwOptions)) { return S_OK; } + + //IInternetProtocol + HRESULT STDMETHODCALLTYPE LockRequest(DWORD WXUNUSED(dwOptions)) + { return S_OK; } + HRESULT STDMETHODCALLTYPE Read(void *pv, ULONG cb, ULONG *pcbRead); + HRESULT STDMETHODCALLTYPE Seek(LARGE_INTEGER WXUNUSED(dlibMove), + DWORD WXUNUSED(dwOrigin), + ULARGE_INTEGER* WXUNUSED(plibNewPosition)) + { return E_FAIL; } + HRESULT STDMETHODCALLTYPE UnlockRequest() { return S_OK; } +}; + +class ClassFactory : public IClassFactory +{ +private: + ULONG m_refCount; +public: + ClassFactory(wxWebHandler* handler) : m_handler(handler) {} + //IUnknown + ULONG STDMETHODCALLTYPE AddRef(); + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject); + ULONG STDMETHODCALLTYPE Release(); + + //IClassFactory + HRESULT STDMETHODCALLTYPE CreateInstance(IUnknown* pUnkOuter, + REFIID riid, void** ppvObject); + HRESULT STDMETHODCALLTYPE LockServer(BOOL fLock); +private: + wxWebHandler* m_handler; }; -#endif // wxUSE_WEBVIEW_IE +#endif // wxUSE_WEBVIEW_IE && defined(__WXMSW__) #endif // wxWebViewIE_H