]> git.saurik.com Git - wxWidgets.git/blame - include/wx/msw/webview_ie.h
Initial work on virtual file system support for the WebKitGTK+ backend. It now suppor...
[wxWidgets.git] / include / wx / msw / webview_ie.h
CommitLineData
61b98a2d
SL
1/////////////////////////////////////////////////////////////////////////////
2// Name: include/wx/msw/webviewie.h
3// Purpose: wxMSW IE wxWebView backend
4// Author: Marianne Gagnon
5// Id: $Id$
153530af 6// Copyright: (c) 2010 Marianne Gagnon, 2011 Steven Lamerton
61b98a2d
SL
7// Licence: wxWindows licence
8/////////////////////////////////////////////////////////////////////////////
9
10#ifndef wxWebViewIE_H
11#define wxWebViewIE_H
12
13#include "wx/setup.h"
14
bd7901aa 15#if wxUSE_WEBVIEW_IE && defined(__WXMSW__)
61b98a2d
SL
16
17#include "wx/control.h"
18#include "wx/webview.h"
19#include "wx/msw/ole/automtn.h"
20#include "wx/msw/ole/activex.h"
74af0b13 21#include "wx/sharedptr.h"
5cbda74b 22#include "wx/vector.h"
61b98a2d 23
22ca10fa 24struct IHTMLDocument2;
7d3f6b4d 25class wxFSFile;
29365629 26
3046dbdc 27class WXDLLIMPEXP_WEB wxWebViewIE : public wxWebView
61b98a2d
SL
28{
29public:
30
31 wxWebViewIE() {}
32
33 wxWebViewIE(wxWindow* parent,
34 wxWindowID id,
35 const wxString& url = wxWebViewDefaultURLStr,
36 const wxPoint& pos = wxDefaultPosition,
37 const wxSize& size = wxDefaultSize,
38 long style = 0,
39 const wxString& name = wxWebViewNameStr)
40 {
41 Create(parent, id, url, pos, size, style, name);
42 }
43
44 bool Create(wxWindow* parent,
45 wxWindowID id,
46 const wxString& url = wxWebViewDefaultURLStr,
47 const wxPoint& pos = wxDefaultPosition,
48 const wxSize& size = wxDefaultSize,
49 long style = 0,
50 const wxString& name = wxWebViewNameStr);
51
52 virtual void LoadUrl(const wxString& url);
3e7968c2 53 virtual void LoadHistoryItem(wxSharedPtr<wxWebHistoryItem> item);
5cbda74b
SL
54 virtual wxVector<wxSharedPtr<wxWebHistoryItem> > GetBackwardHistory();
55 virtual wxVector<wxSharedPtr<wxWebHistoryItem> > GetForwardHistory();
61b98a2d 56
74af0b13
SL
57 virtual bool CanGoForward();
58 virtual bool CanGoBack();
61b98a2d
SL
59 virtual void GoBack();
60 virtual void GoForward();
74af0b13
SL
61 virtual void ClearHistory();
62 virtual void EnableHistory(bool enable = true);
61b98a2d 63 virtual void Stop();
a703012a 64 virtual void Reload(wxWebViewReloadFlags flags = wxWEB_VIEW_RELOAD_DEFAULT);
61b98a2d
SL
65
66 virtual wxString GetPageSource();
241b769f 67 virtual wxString GetPageText();
61b98a2d
SL
68
69 virtual bool IsBusy();
70 virtual wxString GetCurrentURL();
71 virtual wxString GetCurrentTitle();
72
73 virtual void SetZoomType(wxWebViewZoomType);
74 virtual wxWebViewZoomType GetZoomType() const;
75 virtual bool CanSetZoomType(wxWebViewZoomType) const;
76
77 virtual void Print();
78
79 virtual void SetPage(const wxString& html, const wxString& baseUrl);
80
81 virtual wxWebViewZoom GetZoom();
82 virtual void SetZoom(wxWebViewZoom zoom);
83
4681a3ea
SL
84 //Clipboard functions
85 virtual bool CanCut();
86 virtual bool CanCopy();
87 virtual bool CanPaste();
88 virtual void Cut();
89 virtual void Copy();
90 virtual void Paste();
91
97e49559
SL
92 //Undo / redo functionality
93 virtual bool CanUndo();
94 virtual bool CanRedo();
95 virtual void Undo();
96 virtual void Redo();
97
c7cbe308
SL
98 //Editing functions
99 virtual void SetEditable(bool enable = true);
100 virtual bool IsEditable();
101
63a65070
SL
102 //Selection
103 virtual void SelectAll();
104 virtual bool HasSelection();
105 virtual void DeleteSelection();
c9355a3d 106 virtual wxString GetSelectedText();
97ba4d81 107 virtual wxString GetSelectedSource();
41933aa5 108 virtual void ClearSelection();
63a65070 109
c9ccc09c 110 virtual void RunScript(const wxString& javascript);
63a65070 111
29365629 112 //Virtual Filesystem Support
9e3d4a32 113 virtual void RegisterHandler(wxWebHandler* handler);
29365629 114
61b98a2d
SL
115 // ---- IE-specific methods
116
117 // FIXME: I seem to be able to access remote webpages even in offline mode...
118 bool IsOfflineMode();
119 void SetOfflineMode(bool offline);
120
c5f417cb
SL
121 wxWebViewZoom GetIETextZoom();
122 void SetIETextZoom(wxWebViewZoom level);
61b98a2d 123
c5f417cb
SL
124 wxWebViewZoom GetIEOpticalZoom();
125 void SetIEOpticalZoom(wxWebViewZoom level);
61b98a2d
SL
126
127 void onActiveXEvent(wxActiveXEvent& evt);
22ca10fa 128 void onEraseBg(wxEraseEvent&) {}
61b98a2d
SL
129
130 DECLARE_EVENT_TABLE();
131
132private:
133 wxActiveXContainer* m_container;
134 wxAutomationObject m_ie;
135 IWebBrowser2* m_webBrowser;
136 DWORD m_dwCookie;
61b98a2d 137
c5f417cb
SL
138 //We store the current zoom type;
139 wxWebViewZoomType m_zoomType;
140
61b98a2d
SL
141 /** The "Busy" property of IWebBrowser2 does not always return busy when
142 * we'd want it to; this variable may be set to true in cases where the
143 * Busy property is false but should be true.
144 */
145 bool m_isBusy;
3e7968c2
SL
146 //We manage our own history, the history list contains the history items
147 //which are added as documentcomplete events arrive, unless we are loading
148 //an item from the history. The position is stored as an int, and reflects
149 //where we are in the history list.
74af0b13
SL
150 wxVector<wxSharedPtr<wxWebHistoryItem> > m_historyList;
151 int m_historyPosition;
152 bool m_historyLoadingFromList;
153 bool m_historyEnabled;
154
4681a3ea
SL
155 //Generic helper functions for IHtmlDocument commands
156 bool CanExecCommand(wxString command);
157 void ExecCommand(wxString command);
617227c3 158 IHTMLDocument2* GetDocument();
4681a3ea 159
cddf4541 160 wxDECLARE_DYNAMIC_CLASS(wxWebViewIE);
61b98a2d
SL
161};
162
666f73c4 163class VirtualProtocol : public IInternetProtocol, public IInternetProtocolInfo
7d3f6b4d
SL
164{
165protected:
166 ULONG m_refCount;
167 IInternetProtocolSink* m_protocolSink;
168 wxString m_html;
169 VOID * fileP;
170
171 wxFSFile* m_file;
9e3d4a32 172 wxWebHandler* m_handler;
7d3f6b4d
SL
173
174public:
9e3d4a32 175 VirtualProtocol(wxWebHandler *handler);
7d3f6b4d
SL
176 ~VirtualProtocol();
177
178 //IUnknown
179 ULONG STDMETHODCALLTYPE AddRef();
180 HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject);
181 ULONG STDMETHODCALLTYPE Release();
182
183 //IInternetProtocolRoot
0995b9dc
SL
184 HRESULT STDMETHODCALLTYPE Abort(HRESULT WXUNUSED(hrReason),
185 DWORD WXUNUSED(dwOptions))
7d3f6b4d 186 { return E_NOTIMPL; }
0995b9dc 187 HRESULT STDMETHODCALLTYPE Continue(PROTOCOLDATA *WXUNUSED(pProtocolData))
7d3f6b4d
SL
188 { return S_OK; }
189 HRESULT STDMETHODCALLTYPE Resume() { return S_OK; }
190 HRESULT STDMETHODCALLTYPE Start(LPCWSTR szUrl,
191 IInternetProtocolSink *pOIProtSink,
192 IInternetBindInfo *pOIBindInfo,
193 DWORD grfPI,
194 HANDLE_PTR dwReserved);
195 HRESULT STDMETHODCALLTYPE Suspend() { return S_OK; }
0995b9dc 196 HRESULT STDMETHODCALLTYPE Terminate(DWORD WXUNUSED(dwOptions)) { return S_OK; }
7d3f6b4d
SL
197
198 //IInternetProtocol
0995b9dc
SL
199 HRESULT STDMETHODCALLTYPE LockRequest(DWORD WXUNUSED(dwOptions))
200 { return S_OK; }
7d3f6b4d 201 HRESULT STDMETHODCALLTYPE Read(void *pv, ULONG cb, ULONG *pcbRead);
0995b9dc
SL
202 HRESULT STDMETHODCALLTYPE Seek(LARGE_INTEGER WXUNUSED(dlibMove),
203 DWORD WXUNUSED(dwOrigin),
204 ULARGE_INTEGER* WXUNUSED(plibNewPosition))
7d3f6b4d
SL
205 { return E_FAIL; }
206 HRESULT STDMETHODCALLTYPE UnlockRequest() { return S_OK; }
666f73c4
SL
207
208 //IInternetProtocolInfo
209 HRESULT STDMETHODCALLTYPE CombineUrl(LPCWSTR pwzBaseUrl,
210 LPCWSTR pwzRelativeUrl,
211 DWORD dwCombineFlags,
212 LPWSTR pwzResult, DWORD cchResult,
213 DWORD *pcchResult, DWORD dwReserved);
b7d74e9c
SL
214 HRESULT STDMETHODCALLTYPE CompareUrl(LPCWSTR WXUNUSED(pwzUrl1),
215 LPCWSTR WXUNUSED(pwzUrl2),
216 DWORD WXUNUSED(dwCompareFlags))
666f73c4
SL
217 { return INET_E_DEFAULT_ACTION; }
218 HRESULT STDMETHODCALLTYPE ParseUrl(LPCWSTR pwzUrl, PARSEACTION ParseAction,
219 DWORD dwParseFlags, LPWSTR pwzResult,
220 DWORD cchResult, DWORD *pcchResult,
221 DWORD dwReserved);
222 HRESULT STDMETHODCALLTYPE QueryInfo(LPCWSTR pwzUrl,
223 QUERYOPTION OueryOption,
224 DWORD dwQueryFlags, LPVOID pBuffer,
225 DWORD cbBuffer, DWORD *pcbBuf,
226 DWORD dwReserved);
7d3f6b4d
SL
227};
228
229class ClassFactory : public IClassFactory
230{
231private:
232 ULONG m_refCount;
233public:
9e3d4a32 234 ClassFactory(wxWebHandler* handler) : m_handler(handler) {}
7d3f6b4d
SL
235 //IUnknown
236 ULONG STDMETHODCALLTYPE AddRef();
237 HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject);
238 ULONG STDMETHODCALLTYPE Release();
239
240 //IClassFactory
241 HRESULT STDMETHODCALLTYPE CreateInstance(IUnknown* pUnkOuter,
242 REFIID riid, void** ppvObject);
243 HRESULT STDMETHODCALLTYPE LockServer(BOOL fLock);
29365629 244private:
9e3d4a32 245 wxWebHandler* m_handler;
7d3f6b4d
SL
246};
247
bd7901aa 248#endif // wxUSE_WEBVIEW_IE && defined(__WXMSW__)
61b98a2d
SL
249
250#endif // wxWebViewIE_H