X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/906c935a80b10d53cecf57f71ab5f3f4f1d529ec..1e30d94eff7dca642729cb2f557650e8f2ebc61f:/include/wx/msw/webview_ie.h diff --git a/include/wx/msw/webview_ie.h b/include/wx/msw/webview_ie.h index 935f2c6c12..9e038ebe3d 100644 --- a/include/wx/msw/webview_ie.h +++ b/include/wx/msw/webview_ie.h @@ -1,9 +1,9 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: include/wx/msw/webviewie.h +// Name: include/wx/msw/webview_ie.h // Purpose: wxMSW IE wxWebView backend // Author: Marianne Gagnon // Id: $Id$ -// Copyright: (c) 2010 Marianne Gagnon, Steven Lamerton +// Copyright: (c) 2010 Marianne Gagnon, 2011 Steven Lamerton // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -12,21 +12,31 @@ #include "wx/setup.h" -#if wxUSE_WEBVIEW_IE +#if wxUSE_WEBVIEW && 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/msw/ole/oleutils.h" +#include "wx/msw/private/comptr.h" +#include "wx/msw/wrapwin.h" +#include "wx/msw/missing.h" +#include "wx/msw/webview_missing.h" #include "wx/sharedptr.h" #include "wx/vector.h" struct IHTMLDocument2; - +struct IHTMLElement; +struct IMarkupPointer; class wxFSFile; -class wxFileSystem; +class ClassFactory; +class wxIEContainer; +class DocHostUIHandler; +class wxFindPointers; +class wxIInternetProtocol; -class WXDLLIMPEXP_WEB wxWebViewIE : public wxWebView +class WXDLLIMPEXP_WEBVIEW wxWebViewIE : public wxWebView { public: @@ -43,6 +53,8 @@ public: Create(parent, id, url, pos, size, style, name); } + ~wxWebViewIE(); + bool Create(wxWindow* parent, wxWindowID id, const wxString& url = wxWebViewDefaultURLStr, @@ -51,13 +63,13 @@ public: long style = 0, const wxString& name = wxWebViewNameStr); - virtual void LoadUrl(const wxString& url); - virtual void LoadHistoryItem(wxSharedPtr item); - virtual wxVector > GetBackwardHistory(); - virtual wxVector > GetForwardHistory(); + virtual void LoadURL(const wxString& url); + virtual void LoadHistoryItem(wxSharedPtr item); + virtual wxVector > GetBackwardHistory(); + virtual wxVector > GetForwardHistory(); - virtual bool CanGoForward(); - virtual bool CanGoBack(); + virtual bool CanGoForward() const; + virtual bool CanGoBack() const; virtual void GoBack(); virtual void GoForward(); virtual void ClearHistory(); @@ -65,12 +77,12 @@ public: virtual void Stop(); virtual void Reload(wxWebViewReloadFlags flags = wxWEB_VIEW_RELOAD_DEFAULT); - virtual wxString GetPageSource(); - virtual wxString GetPageText(); + virtual wxString GetPageSource() const; + virtual wxString GetPageText() const; - virtual bool IsBusy(); - virtual wxString GetCurrentURL(); - virtual wxString GetCurrentTitle(); + virtual bool IsBusy() const; + virtual wxString GetCurrentURL() const; + virtual wxString GetCurrentTitle() const; virtual void SetZoomType(wxWebViewZoomType); virtual wxWebViewZoomType GetZoomType() const; @@ -78,49 +90,55 @@ public: virtual void Print(); - virtual void SetPage(const wxString& html, const wxString& baseUrl); - - virtual wxWebViewZoom GetZoom(); + virtual wxWebViewZoom GetZoom() const; virtual void SetZoom(wxWebViewZoom zoom); //Clipboard functions - virtual bool CanCut(); - virtual bool CanCopy(); - virtual bool CanPaste(); + virtual bool CanCut() const; + virtual bool CanCopy() const; + virtual bool CanPaste() const; virtual void Cut(); virtual void Copy(); virtual void Paste(); //Undo / redo functionality - virtual bool CanUndo(); - virtual bool CanRedo(); + virtual bool CanUndo() const; + virtual bool CanRedo() const; virtual void Undo(); virtual void Redo(); + //Find function + virtual long Find(const wxString& text, int flags = wxWEB_VIEW_FIND_DEFAULT); + //Editing functions virtual void SetEditable(bool enable = true); - virtual bool IsEditable(); + virtual bool IsEditable() const; //Selection virtual void SelectAll(); - virtual bool HasSelection(); + virtual bool HasSelection() const; virtual void DeleteSelection(); - virtual wxString GetSelectedText(); - virtual wxString GetSelectedSource(); + virtual wxString GetSelectedText() const; + virtual wxString GetSelectedSource() const; virtual void ClearSelection(); virtual void RunScript(const wxString& javascript); + //Virtual Filesystem Support + virtual void RegisterHandler(wxSharedPtr handler); + + virtual void* GetNativeBackend() const { return m_webBrowser; } + // ---- IE-specific methods // FIXME: I seem to be able to access remote webpages even in offline mode... bool IsOfflineMode(); void SetOfflineMode(bool offline); - wxWebViewZoom GetIETextZoom(); + wxWebViewZoom GetIETextZoom() const; void SetIETextZoom(wxWebViewZoom level); - wxWebViewZoom GetIEOpticalZoom(); + wxWebViewZoom GetIEOpticalZoom() const; void SetIEOpticalZoom(wxWebViewZoom level); void onActiveXEvent(wxActiveXEvent& evt); @@ -128,11 +146,15 @@ public: DECLARE_EVENT_TABLE(); +protected: + virtual void DoSetPage(const wxString& html, const wxString& baseUrl); + private: - wxActiveXContainer* m_container; + wxIEContainer* m_container; wxAutomationObject m_ie; IWebBrowser2* m_webBrowser; DWORD m_dwCookie; + wxCOMPtr m_uiHandler; //We store the current zoom type; wxWebViewZoomType m_zoomType; @@ -142,84 +164,175 @@ private: * Busy property is false but should be true. */ bool m_isBusy; - //We manage our own history, the history list contains the history items + //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; + wxVector > m_historyList; + wxVector m_factories; 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(); + //We store find flag, results and position. + wxVector m_findPointers; + int m_findFlags; + wxString m_findText; + int m_findPosition; + //Generic helper functions + bool CanExecCommand(wxString command) const; + void ExecCommand(wxString command); + wxCOMPtr GetDocument() const; + bool IsElementVisible(IHTMLElement* elm); + //Find helper functions. + void FindInternal(const wxString& text, int flags, int internal_flag); + long FindNext(int direction = 1); + void FindClear(); + //Toggles control features see INTERNETFEATURELIST for values. + bool EnableControlFeature(long flag, bool enable = true); + + wxDECLARE_DYNAMIC_CLASS(wxWebViewIE); }; -class VirtualProtocol : public IInternetProtocol +class VirtualProtocol : public wxIInternetProtocol { protected: - ULONG m_refCount; - IInternetProtocolSink* m_protocolSink; + wxIInternetProtocolSink* m_protocolSink; wxString m_html; VOID * fileP; wxFSFile* m_file; - wxFileSystem* m_fileSys; + wxSharedPtr m_handler; public: - VirtualProtocol(); - ~VirtualProtocol(); + VirtualProtocol(wxSharedPtr handler); + ~VirtualProtocol() {} //IUnknown - ULONG STDMETHODCALLTYPE AddRef(); - HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject); - ULONG STDMETHODCALLTYPE Release(); + DECLARE_IUNKNOWN_METHODS; //IInternetProtocolRoot - HRESULT STDMETHODCALLTYPE Abort(HRESULT WXUNUSED(hrReason), + HRESULT STDMETHODCALLTYPE Abort(HRESULT WXUNUSED(hrReason), DWORD WXUNUSED(dwOptions)) { return E_NOTIMPL; } - HRESULT STDMETHODCALLTYPE Continue(PROTOCOLDATA *WXUNUSED(pProtocolData)) + HRESULT STDMETHODCALLTYPE Continue(wxPROTOCOLDATA *WXUNUSED(pProtocolData)) { return S_OK; } HRESULT STDMETHODCALLTYPE Resume() { return S_OK; } - HRESULT STDMETHODCALLTYPE Start(LPCWSTR szUrl, - IInternetProtocolSink *pOIProtSink, - IInternetBindInfo *pOIBindInfo, - DWORD grfPI, + HRESULT STDMETHODCALLTYPE Start(LPCWSTR szUrl, + wxIInternetProtocolSink *pOIProtSink, + wxIInternetBindInfo *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)) + 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)) + 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: - //IUnknown - ULONG STDMETHODCALLTYPE AddRef(); - HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject); - ULONG STDMETHODCALLTYPE Release(); + ClassFactory(wxSharedPtr handler) : m_handler(handler) + { AddRef(); } + + wxString GetName() { return m_handler->GetName(); } //IClassFactory - HRESULT STDMETHODCALLTYPE CreateInstance(IUnknown* pUnkOuter, + HRESULT STDMETHODCALLTYPE CreateInstance(IUnknown* pUnkOuter, REFIID riid, void** ppvObject); HRESULT STDMETHODCALLTYPE LockServer(BOOL fLock); + + //IUnknown + DECLARE_IUNKNOWN_METHODS; + +private: + wxSharedPtr m_handler; +}; + +class wxIEContainer : public wxActiveXContainer +{ +public: + wxIEContainer(wxWindow *parent, REFIID iid, IUnknown *pUnk, DocHostUIHandler* uiHandler = NULL); + virtual ~wxIEContainer(); + virtual bool QueryClientSiteInterface(REFIID iid, void **_interface, const char *&desc); +private: + DocHostUIHandler* m_uiHandler; +}; + +class DocHostUIHandler : public wxIDocHostUIHandler +{ +public: + DocHostUIHandler() {}; + ~DocHostUIHandler() {}; + virtual HRESULT wxSTDCALL ShowContextMenu(DWORD dwID, POINT *ppt, + IUnknown *pcmdtReserved, + IDispatch *pdispReserved); + + virtual HRESULT wxSTDCALL GetHostInfo(DOCHOSTUIINFO *pInfo); + + virtual HRESULT wxSTDCALL ShowUI(DWORD dwID, + IOleInPlaceActiveObject *pActiveObject, + IOleCommandTarget *pCommandTarget, + IOleInPlaceFrame *pFrame, + IOleInPlaceUIWindow *pDoc); + + virtual HRESULT wxSTDCALL HideUI(void); + + virtual HRESULT wxSTDCALL UpdateUI(void); + + virtual HRESULT wxSTDCALL EnableModeless(BOOL fEnable); + + virtual HRESULT wxSTDCALL OnDocWindowActivate(BOOL fActivate); + + virtual HRESULT wxSTDCALL OnFrameWindowActivate(BOOL fActivate); + + virtual HRESULT wxSTDCALL ResizeBorder(LPCRECT prcBorder, + IOleInPlaceUIWindow *pUIWindow, + BOOL fRameWindow); + + virtual HRESULT wxSTDCALL TranslateAccelerator(LPMSG lpMsg, + const GUID *pguidCmdGroup, + DWORD nCmdID); + + virtual HRESULT wxSTDCALL GetOptionKeyPath(LPOLESTR *pchKey, + DWORD dw); + + virtual HRESULT wxSTDCALL GetDropTarget(IDropTarget *pDropTarget, + IDropTarget **ppDropTarget); + + virtual HRESULT wxSTDCALL GetExternal(IDispatch **ppDispatch); + + virtual HRESULT wxSTDCALL TranslateUrl(DWORD dwTranslate, + OLECHAR *pchURLIn, + OLECHAR **ppchURLOut); + + virtual HRESULT wxSTDCALL FilterDataObject(IDataObject *pDO, + IDataObject **ppDORet); + //IUnknown + DECLARE_IUNKNOWN_METHODS; +}; + +class wxFindPointers +{ +public: + wxFindPointers(wxIMarkupPointer *ptrBegin, wxIMarkupPointer *ptrEnd) + { + begin = ptrBegin; + end = ptrEnd; + } + //The two markup pointers. + wxIMarkupPointer *begin, *end; }; -#endif // wxUSE_WEBVIEW_IE +#endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_IE && defined(__WXMSW__) #endif // wxWebViewIE_H