diff --git a/include/wx/msw/private/webview_ie.h b/include/wx/msw/private/webview_ie.h new file mode 100644 index 0000000000..85523fd532 --- /dev/null +++ b/include/wx/msw/private/webview_ie.h @@ -0,0 +1,219 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: include/wx/msw/private/webview_ie.h +// Purpose: wxMSW IE wxWebView backend private classes +// Author: Marianne Gagnon +// Copyright: (c) 2010 Marianne Gagnon, 2011 Steven Lamerton +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef wxWebViewIE_PRIVATE_H +#define wxWebViewIE_PRIVATE_H + +#include "wx/msw/ole/automtn.h" +#include "wx/msw/private/comptr.h" +#include "wx/msw/webview_missing.h" + +class ClassFactory; +class wxIEContainer; +class DocHostUIHandler; +class wxFindPointers; + +class wxWebViewIEImpl +{ +public: + explicit wxWebViewIEImpl(wxWebViewIE* webview); + ~wxWebViewIEImpl(); + + bool Create(); + + wxWebViewIE* m_webview; + + wxIEContainer* m_container; + wxAutomationObject m_ie; + IWebBrowser2* m_webBrowser; + wxCOMPtr m_uiHandler; + + //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; + wxVector m_factories; + int m_historyPosition; + bool m_historyLoadingFromList; + bool m_historyEnabled; + + //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(wxCOMPtr elm); + //Find helper functions. + long Find(const wxString& text, int flags = wxWEBVIEW_FIND_DEFAULT); + 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_NO_COPY_CLASS(wxWebViewIEImpl); +}; + +class VirtualProtocol : public wxIInternetProtocol +{ +protected: + wxIInternetProtocolSink* m_protocolSink; + wxString m_html; + VOID * fileP; + + wxFSFile* m_file; + wxSharedPtr m_handler; + +public: + VirtualProtocol(wxSharedPtr handler); + virtual ~VirtualProtocol() {} + + //IUnknown + DECLARE_IUNKNOWN_METHODS; + + //IInternetProtocolRoot + HRESULT STDMETHODCALLTYPE Abort(HRESULT WXUNUSED(hrReason), + DWORD WXUNUSED(dwOptions)) wxOVERRIDE + { return E_NOTIMPL; } + HRESULT STDMETHODCALLTYPE Continue(wxPROTOCOLDATA *WXUNUSED(pProtocolData)) wxOVERRIDE + { return S_OK; } + HRESULT STDMETHODCALLTYPE Resume() wxOVERRIDE { return S_OK; } + HRESULT STDMETHODCALLTYPE Start(LPCWSTR szUrl, + wxIInternetProtocolSink *pOIProtSink, + wxIInternetBindInfo *pOIBindInfo, + DWORD grfPI, + HANDLE_PTR dwReserved) wxOVERRIDE; + HRESULT STDMETHODCALLTYPE Suspend() wxOVERRIDE { return S_OK; } + HRESULT STDMETHODCALLTYPE Terminate(DWORD WXUNUSED(dwOptions)) wxOVERRIDE { return S_OK; } + + //IInternetProtocol + HRESULT STDMETHODCALLTYPE LockRequest(DWORD WXUNUSED(dwOptions)) wxOVERRIDE + { return S_OK; } + HRESULT STDMETHODCALLTYPE Read(void *pv, ULONG cb, ULONG *pcbRead) wxOVERRIDE; + HRESULT STDMETHODCALLTYPE Seek(LARGE_INTEGER WXUNUSED(dlibMove), + DWORD WXUNUSED(dwOrigin), + ULARGE_INTEGER* WXUNUSED(plibNewPosition)) wxOVERRIDE + { return E_FAIL; } + HRESULT STDMETHODCALLTYPE UnlockRequest() wxOVERRIDE { return S_OK; } +}; + +class ClassFactory : public IClassFactory +{ +public: + ClassFactory(wxSharedPtr handler) : m_handler(handler) + { AddRef(); } + virtual ~ClassFactory() {} + + wxString GetName() { return m_handler->GetName(); } + + //IClassFactory + HRESULT STDMETHODCALLTYPE CreateInstance(IUnknown* pUnkOuter, + REFIID riid, void** ppvObject) wxOVERRIDE; + HRESULT STDMETHODCALLTYPE LockServer(BOOL fLock) wxOVERRIDE; + + //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) wxOVERRIDE; +private: + DocHostUIHandler* m_uiHandler; +}; + +class DocHostUIHandler : public wxIDocHostUIHandler +{ +public: + DocHostUIHandler(wxWebView* browser) { m_browser = browser; } + virtual ~DocHostUIHandler() {} + + virtual HRESULT wxSTDCALL ShowContextMenu(DWORD dwID, POINT *ppt, + IUnknown *pcmdtReserved, + IDispatch *pdispReserved) wxOVERRIDE; + + virtual HRESULT wxSTDCALL GetHostInfo(DOCHOSTUIINFO *pInfo) wxOVERRIDE; + + virtual HRESULT wxSTDCALL ShowUI(DWORD dwID, + IOleInPlaceActiveObject *pActiveObject, + IOleCommandTarget *pCommandTarget, + IOleInPlaceFrame *pFrame, + IOleInPlaceUIWindow *pDoc) wxOVERRIDE; + + virtual HRESULT wxSTDCALL HideUI(void) wxOVERRIDE; + + virtual HRESULT wxSTDCALL UpdateUI(void) wxOVERRIDE; + + virtual HRESULT wxSTDCALL EnableModeless(BOOL fEnable) wxOVERRIDE; + + virtual HRESULT wxSTDCALL OnDocWindowActivate(BOOL fActivate) wxOVERRIDE; + + virtual HRESULT wxSTDCALL OnFrameWindowActivate(BOOL fActivate) wxOVERRIDE; + + virtual HRESULT wxSTDCALL ResizeBorder(LPCRECT prcBorder, + IOleInPlaceUIWindow *pUIWindow, + BOOL fRameWindow) wxOVERRIDE; + + virtual HRESULT wxSTDCALL TranslateAccelerator(LPMSG lpMsg, + const GUID *pguidCmdGroup, + DWORD nCmdID) wxOVERRIDE; + + virtual HRESULT wxSTDCALL GetOptionKeyPath(LPOLESTR *pchKey, + DWORD dw) wxOVERRIDE; + + virtual HRESULT wxSTDCALL GetDropTarget(IDropTarget *pDropTarget, + IDropTarget **ppDropTarget) wxOVERRIDE; + + virtual HRESULT wxSTDCALL GetExternal(IDispatch **ppDispatch) wxOVERRIDE; + + virtual HRESULT wxSTDCALL TranslateUrl(DWORD dwTranslate, + OLECHAR *pchURLIn, + OLECHAR **ppchURLOut) wxOVERRIDE; + + virtual HRESULT wxSTDCALL FilterDataObject(IDataObject *pDO, + IDataObject **ppDORet) wxOVERRIDE; + //IUnknown + DECLARE_IUNKNOWN_METHODS; + +private: + wxWebView* m_browser; +}; + +class wxFindPointers +{ +public: + wxFindPointers(wxIMarkupPointer *ptrBegin, wxIMarkupPointer *ptrEnd) + { + begin = ptrBegin; + end = ptrEnd; + } + //The two markup pointers. + wxIMarkupPointer *begin, *end; +}; + +#endif // wxWebViewIE_PRIVATE_H diff --git a/include/wx/msw/webview_ie.h b/include/wx/msw/webview_ie.h index 51af6dcfe9..f892cc1c65 100644 --- a/include/wx/msw/webview_ie.h +++ b/include/wx/msw/webview_ie.h @@ -13,28 +13,9 @@ #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" -#include "wx/msw/private.h" -struct IHTMLDocument2; -struct IHTMLElement; -struct IMarkupPointer; -class wxFSFile; -class ClassFactory; -class wxIEContainer; -class DocHostUIHandler; -class wxFindPointers; -class wxIInternetProtocol; class wxWebViewIEImpl; // Note that the highest emulation level may be used even when the @@ -195,61 +176,6 @@ private: wxDECLARE_DYNAMIC_CLASS(wxWebViewIE); }; -class wxWebViewIEImpl -{ -public: - explicit wxWebViewIEImpl(wxWebViewIE* webview); - ~wxWebViewIEImpl(); - - bool Create(); - - wxWebViewIE* m_webview; - - wxIEContainer* m_container; - wxAutomationObject m_ie; - IWebBrowser2* m_webBrowser; - wxCOMPtr m_uiHandler; - - //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; - wxVector m_factories; - int m_historyPosition; - bool m_historyLoadingFromList; - bool m_historyEnabled; - - //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(wxCOMPtr elm); - //Find helper functions. - long Find(const wxString& text, int flags = wxWEBVIEW_FIND_DEFAULT); - 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_NO_COPY_CLASS(wxWebViewIEImpl); -}; - class WXDLLIMPEXP_WEBVIEW wxWebViewFactoryIE : public wxWebViewFactory { public: @@ -264,149 +190,6 @@ public: { return new wxWebViewIE(parent, id, url, pos, size, style, name); } }; -class VirtualProtocol : public wxIInternetProtocol -{ -protected: - wxIInternetProtocolSink* m_protocolSink; - wxString m_html; - VOID * fileP; - - wxFSFile* m_file; - wxSharedPtr m_handler; - -public: - VirtualProtocol(wxSharedPtr handler); - virtual ~VirtualProtocol() {} - - //IUnknown - DECLARE_IUNKNOWN_METHODS; - - //IInternetProtocolRoot - HRESULT STDMETHODCALLTYPE Abort(HRESULT WXUNUSED(hrReason), - DWORD WXUNUSED(dwOptions)) wxOVERRIDE - { return E_NOTIMPL; } - HRESULT STDMETHODCALLTYPE Continue(wxPROTOCOLDATA *WXUNUSED(pProtocolData)) wxOVERRIDE - { return S_OK; } - HRESULT STDMETHODCALLTYPE Resume() wxOVERRIDE { return S_OK; } - HRESULT STDMETHODCALLTYPE Start(LPCWSTR szUrl, - wxIInternetProtocolSink *pOIProtSink, - wxIInternetBindInfo *pOIBindInfo, - DWORD grfPI, - HANDLE_PTR dwReserved) wxOVERRIDE; - HRESULT STDMETHODCALLTYPE Suspend() wxOVERRIDE { return S_OK; } - HRESULT STDMETHODCALLTYPE Terminate(DWORD WXUNUSED(dwOptions)) wxOVERRIDE { return S_OK; } - - //IInternetProtocol - HRESULT STDMETHODCALLTYPE LockRequest(DWORD WXUNUSED(dwOptions)) wxOVERRIDE - { return S_OK; } - HRESULT STDMETHODCALLTYPE Read(void *pv, ULONG cb, ULONG *pcbRead) wxOVERRIDE; - HRESULT STDMETHODCALLTYPE Seek(LARGE_INTEGER WXUNUSED(dlibMove), - DWORD WXUNUSED(dwOrigin), - ULARGE_INTEGER* WXUNUSED(plibNewPosition)) wxOVERRIDE - { return E_FAIL; } - HRESULT STDMETHODCALLTYPE UnlockRequest() wxOVERRIDE { return S_OK; } -}; - -class ClassFactory : public IClassFactory -{ -public: - ClassFactory(wxSharedPtr handler) : m_handler(handler) - { AddRef(); } - virtual ~ClassFactory() {} - - wxString GetName() { return m_handler->GetName(); } - - //IClassFactory - HRESULT STDMETHODCALLTYPE CreateInstance(IUnknown* pUnkOuter, - REFIID riid, void** ppvObject) wxOVERRIDE; - HRESULT STDMETHODCALLTYPE LockServer(BOOL fLock) wxOVERRIDE; - - //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) wxOVERRIDE; -private: - DocHostUIHandler* m_uiHandler; -}; - -class DocHostUIHandler : public wxIDocHostUIHandler -{ -public: - DocHostUIHandler(wxWebView* browser) { m_browser = browser; } - virtual ~DocHostUIHandler() {} - - virtual HRESULT wxSTDCALL ShowContextMenu(DWORD dwID, POINT *ppt, - IUnknown *pcmdtReserved, - IDispatch *pdispReserved) wxOVERRIDE; - - virtual HRESULT wxSTDCALL GetHostInfo(DOCHOSTUIINFO *pInfo) wxOVERRIDE; - - virtual HRESULT wxSTDCALL ShowUI(DWORD dwID, - IOleInPlaceActiveObject *pActiveObject, - IOleCommandTarget *pCommandTarget, - IOleInPlaceFrame *pFrame, - IOleInPlaceUIWindow *pDoc) wxOVERRIDE; - - virtual HRESULT wxSTDCALL HideUI(void) wxOVERRIDE; - - virtual HRESULT wxSTDCALL UpdateUI(void) wxOVERRIDE; - - virtual HRESULT wxSTDCALL EnableModeless(BOOL fEnable) wxOVERRIDE; - - virtual HRESULT wxSTDCALL OnDocWindowActivate(BOOL fActivate) wxOVERRIDE; - - virtual HRESULT wxSTDCALL OnFrameWindowActivate(BOOL fActivate) wxOVERRIDE; - - virtual HRESULT wxSTDCALL ResizeBorder(LPCRECT prcBorder, - IOleInPlaceUIWindow *pUIWindow, - BOOL fRameWindow) wxOVERRIDE; - - virtual HRESULT wxSTDCALL TranslateAccelerator(LPMSG lpMsg, - const GUID *pguidCmdGroup, - DWORD nCmdID) wxOVERRIDE; - - virtual HRESULT wxSTDCALL GetOptionKeyPath(LPOLESTR *pchKey, - DWORD dw) wxOVERRIDE; - - virtual HRESULT wxSTDCALL GetDropTarget(IDropTarget *pDropTarget, - IDropTarget **ppDropTarget) wxOVERRIDE; - - virtual HRESULT wxSTDCALL GetExternal(IDispatch **ppDispatch) wxOVERRIDE; - - virtual HRESULT wxSTDCALL TranslateUrl(DWORD dwTranslate, - OLECHAR *pchURLIn, - OLECHAR **ppchURLOut) wxOVERRIDE; - - virtual HRESULT wxSTDCALL FilterDataObject(IDataObject *pDO, - IDataObject **ppDORet) wxOVERRIDE; - //IUnknown - DECLARE_IUNKNOWN_METHODS; - -private: - wxWebView* m_browser; -}; - -class wxFindPointers -{ -public: - wxFindPointers(wxIMarkupPointer *ptrBegin, wxIMarkupPointer *ptrEnd) - { - begin = ptrBegin; - end = ptrEnd; - } - //The two markup pointers. - wxIMarkupPointer *begin, *end; -}; - #endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_IE && defined(__WXMSW__) #endif // wxWebViewIE_H diff --git a/src/msw/webview_ie.cpp b/src/msw/webview_ie.cpp index a68934e1ab..daf3e3b729 100644 --- a/src/msw/webview_ie.cpp +++ b/src/msw/webview_ie.cpp @@ -17,22 +17,20 @@ #if wxUSE_WEBVIEW && wxUSE_WEBVIEW_IE -#include -#include -#include -#include -#include #include "wx/msw/registry.h" -#include "wx/msw/missing.h" #include "wx/msw/ole/safearray.h" #include "wx/filesys.h" #include "wx/dynlib.h" #include "wx/scopeguard.h" +#include "wx/msw/missing.h" +#include "wx/msw/private.h" +#include "wx/msw/private/webview_ie.h" #include "wx/private/jsscriptwrapper.h" #include -#include +#include +#include /* These GUID definitions are our own implementation to support interfaces * normally in urlmon.h. See include/wx/msw/webview_ie.h