wxWebKit API changes in preparation for DRT implementation.
[WebKit.git] / WebKit / wx / WebView.h
1 /*
2  * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.com>
3  *
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27  
28 #ifndef WXWEBVIEW_H
29 #define WXWEBVIEW_H
30
31 #include "wx/wxprec.h"
32 #ifndef WX_PRECOMP
33     #include "wx/wx.h"
34 #endif
35
36 class WebViewPrivate;
37 class WebViewFrameData;
38
39 namespace WebCore {
40     class ChromeClientWx;
41 }
42
43 #ifndef SWIG
44
45 #if WXMAKINGDLL_WEBKIT
46 #define WXDLLIMPEXP_WEBKIT WXEXPORT
47 #elif defined(WXUSINGDLL_WEBKIT)
48 #define WXDLLIMPEXP_WEBKIT WXIMPORT
49 #else
50 #define WXDLLIMPEXP_WEBKIT
51 #endif
52
53 #else 
54 #define WXDLLIMPEXP_WEBKIT
55 #endif // SWIG
56
57 class WXDLLIMPEXP_WEBKIT wxWebView : public wxScrolledWindow
58 {
59     // ChromeClientWx needs to get the Page* stored by the wxWebView
60     // for the createWindow function. 
61     friend class WebCore::ChromeClientWx;
62
63 public:
64     // ctor(s)
65 #if SWIG
66     %pythonAppend wxWebView "self._setOORInfo(self)"
67 #endif
68     wxWebView(wxWindow* parent, int id = wxID_ANY, 
69                 const wxPoint& point = wxDefaultPosition, 
70                 const wxSize& size = wxDefaultSize, 
71                 WebViewFrameData* data = NULL); // For wxWebView internal data passing
72
73 #ifndef SWIG
74     ~wxWebView();
75 #endif
76     
77     void LoadURL(wxString url);
78     bool GoBack();
79     bool GoForward();
80     void Stop();
81     void Reload();
82     
83     bool CanCut();
84     bool CanCopy();
85     bool CanPaste();
86     
87     void Cut();
88     void Copy();
89     void Paste();
90     
91     //bool CanGetPageSource();
92     wxString GetPageSource();
93     void SetPageSource(const wxString& source, const wxString& baseUrl = wxEmptyString);
94     
95     wxString GetInnerText();
96     wxString GetAsMarkup();
97     wxString GetExternalRepresentation();
98     
99     wxString RunScript(const wxString& javascript);
100     
101     bool CanIncreaseTextSize() const;
102     void IncreaseTextSize();
103     bool CanDecreaseTextSize() const;
104     void DecreaseTextSize();
105     void MakeEditable(bool enable);
106     bool IsEditable() const { return m_isEditable; }
107
108     wxString GetPageTitle() const { return m_title; }
109     void SetPageTitle(const wxString& title) { m_title = title; }
110
111 protected:
112
113     // event handlers (these functions should _not_ be virtual)
114     void OnPaint(wxPaintEvent& event);
115     void OnSize(wxSizeEvent& event);
116     void OnMouseEvents(wxMouseEvent& event);
117     void OnKeyEvents(wxKeyEvent& event);
118     void OnSetFocus(wxFocusEvent& event);
119     void OnKillFocus(wxFocusEvent& event);
120     void OnActivate(wxActivateEvent& event);
121     
122 private:
123     // any class wishing to process wxWindows events must use this macro
124 #ifndef SWIG
125     DECLARE_EVENT_TABLE()
126 #endif
127     float m_textMagnifier;
128     bool m_isEditable;
129     bool m_isInitialized;
130     bool m_beingDestroyed;
131     WebViewPrivate* m_impl;
132     wxString m_title;
133     
134 };
135
136 // ----------------------------------------------------------------------------
137 // Web Kit Events
138 // ----------------------------------------------------------------------------
139
140 enum {
141     wxWEBVIEW_LOAD_STARTED = 1,
142     wxWEBVIEW_LOAD_NEGOTIATING = 2,
143     wxWEBVIEW_LOAD_REDIRECTING = 4,
144     wxWEBVIEW_LOAD_TRANSFERRING = 8,
145     wxWEBVIEW_LOAD_STOPPED = 16,
146     wxWEBVIEW_LOAD_FAILED = 32,
147     wxWEBVIEW_LOAD_DL_COMPLETED = 64,
148     wxWEBVIEW_LOAD_DOC_COMPLETED = 128,
149     wxWEBVIEW_LOAD_ONLOAD_HANDLED = 256,
150     wxWEBVIEW_LOAD_WINDOW_OBJECT_CLEARED = 512
151 };
152
153 enum {
154     wxWEBVIEW_NAV_LINK_CLICKED = 1,
155     wxWEBVIEW_NAV_BACK_NEXT = 2,
156     wxWEBVIEW_NAV_FORM_SUBMITTED = 4,
157     wxWEBVIEW_NAV_RELOAD = 8,
158     wxWEBVIEW_NAV_FORM_RESUBMITTED = 16,
159     wxWEBVIEW_NAV_OTHER = 32
160 };
161
162 class WXDLLIMPEXP_WEBKIT wxWebViewDOMElementInfo
163 {
164 public: 
165     wxWebViewDOMElementInfo();
166
167     ~wxWebViewDOMElementInfo() { }
168     
169     wxString GetTagName() const { return m_tagName; }
170     void SetTagName(const wxString& name) { m_tagName = name; }
171
172     bool IsSelected() const { return m_isSelected; }
173     void SetSelected(bool sel) { m_isSelected = sel; }
174  
175     wxString GetText() const { return m_text; }
176     void SetText(const wxString& text) { m_text = text; }
177  
178     wxString GetImageSrc() const { return m_imageSrc; }
179     void SetImageSrc(const wxString& src) { m_imageSrc = src; }
180  
181     wxString GetLink() const { return m_link; }
182     void SetLink(const wxString& link) { m_link = link; }
183
184 private:
185     void* m_domElement;
186     bool m_isSelected;
187     wxString m_tagName;
188     wxString m_text;
189     wxString m_imageSrc;
190     wxString m_link;
191 };
192
193 class WXDLLIMPEXP_WEBKIT wxWebViewBeforeLoadEvent : public wxCommandEvent
194 {
195 #ifndef SWIG
196     DECLARE_DYNAMIC_CLASS( wxWebViewBeforeLoadEvent )
197 #endif
198
199 public:
200     bool IsCancelled() const { return m_cancelled; }
201     void Cancel(bool cancel = true) { m_cancelled = cancel; }
202     wxString GetURL() const { return m_url; }
203     void SetURL(const wxString& url) { m_url = url; }
204     void SetNavigationType(int navType) { m_navType = navType; }
205     int GetNavigationType() const { return m_navType; }
206
207     wxWebViewBeforeLoadEvent( wxWindow* win = (wxWindow*) NULL );
208     wxEvent *Clone(void) const { return new wxWebViewBeforeLoadEvent(*this); }
209
210 private:
211     bool m_cancelled;
212     wxString m_url;
213     int m_navType;
214 };
215
216 class WXDLLIMPEXP_WEBKIT wxWebViewLoadEvent : public wxCommandEvent
217 {
218 #ifndef SWIG
219     DECLARE_DYNAMIC_CLASS( wxWebViewLoadEvent )
220 #endif
221
222 public:
223     int GetState() const { return m_state; }
224     void SetState(const int state) { m_state = state; }
225     wxString GetURL() const { return m_url; }
226     void SetURL(const wxString& url) { m_url = url; }
227
228     wxWebViewLoadEvent( wxWindow* win = (wxWindow*) NULL );
229     wxEvent *Clone(void) const { return new wxWebViewLoadEvent(*this); }
230
231 private:
232     int m_state;
233     wxString m_url;
234 };
235
236 class WXDLLIMPEXP_WEBKIT wxWebViewNewWindowEvent : public wxCommandEvent
237 {
238 #ifndef SWIG
239     DECLARE_DYNAMIC_CLASS( wxWebViewNewWindowEvent )
240 #endif
241
242 public:
243     wxString GetURL() const { return m_url; }
244     void SetURL(const wxString& url) { m_url = url; }
245
246     wxWebViewNewWindowEvent( wxWindow* win = static_cast<wxWindow*>(NULL));
247     wxEvent *Clone(void) const { return new wxWebViewNewWindowEvent(*this); }
248
249 private:
250     wxString m_url;
251 };
252
253 class WXDLLIMPEXP_WEBKIT wxWebViewRightClickEvent : public wxCommandEvent
254 {
255 #ifndef SWIG
256     DECLARE_DYNAMIC_CLASS( wxWebViewRightClickEvent )
257 #endif
258
259 public:
260     wxWebViewRightClickEvent( wxWindow* win = static_cast<wxWindow*>(NULL));
261     wxEvent *Clone(void) const { return new wxWebViewRightClickEvent(*this); }
262     
263     wxWebViewDOMElementInfo GetInfo() const { return m_info; }
264     void SetInfo(wxWebViewDOMElementInfo info) { m_info = info; }
265     
266     wxPoint GetPosition() const { return m_position; }
267     void SetPosition(wxPoint pos) { m_position = pos; }
268
269 private:
270     wxWebViewDOMElementInfo m_info;
271     wxPoint m_position;
272 };
273
274 class WXDLLIMPEXP_WEBKIT wxWebViewConsoleMessageEvent : public wxCommandEvent
275 {
276 #ifndef SWIG
277     DECLARE_DYNAMIC_CLASS( wxWebViewConsoleMessageEvent )
278 #endif
279
280 public:
281     wxString GetMessage() const { return m_message; }
282     void SetMessage(const wxString& message) { m_message = message; }
283     
284     unsigned int GetLineNumber() const { return m_lineNumber; }
285     void SetLineNumber(unsigned int lineNumber) { m_lineNumber = lineNumber; }
286     
287     wxString GetSourceID() const { return m_sourceID; }
288     void SetSourceID(const wxString& sourceID) { m_sourceID = sourceID; }
289
290     wxWebViewConsoleMessageEvent( wxWindow* win = (wxWindow*) NULL );
291     wxEvent *Clone(void) const { return new wxWebViewConsoleMessageEvent(*this); }
292
293 private:
294     unsigned int m_lineNumber;
295     wxString m_message;
296     wxString m_sourceID;
297 };
298
299 typedef void (wxEvtHandler::*wxWebViewLoadEventFunction)(wxWebViewLoadEvent&);
300 typedef void (wxEvtHandler::*wxWebViewBeforeLoadEventFunction)(wxWebViewBeforeLoadEvent&);
301 typedef void (wxEvtHandler::*wxWebViewNewWindowEventFunction)(wxWebViewNewWindowEvent&);
302 typedef void (wxEvtHandler::*wxWebViewRightClickEventFunction)(wxWebViewRightClickEvent&);
303 typedef void (wxEvtHandler::*wxWebViewConsoleMessageEventFunction)(wxWebViewConsoleMessageEvent&);
304
305 #ifndef SWIG
306 BEGIN_DECLARE_EVENT_TYPES()
307     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_BEFORE_LOAD, wxID_ANY)
308     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_LOAD, wxID_ANY)
309     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_NEW_WINDOW, wxID_ANY)
310     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_RIGHT_CLICK, wxID_ANY)
311     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_CONSOLE_MESSAGE, wxID_ANY)
312 END_DECLARE_EVENT_TYPES()
313 #endif
314
315 #define EVT_WEBVIEW_LOAD(func) \
316             DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_LOAD, \
317                             wxID_ANY, \
318                             wxID_ANY, \
319                             (wxObjectEventFunction)   \
320                             (wxWebViewLoadEventFunction) & func, \
321                             static_cast<wxObject*>(NULL)),
322                             
323 #define EVT_WEBVIEW_BEFORE_LOAD(func) \
324             DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_BEFORE_LOAD, \
325                             wxID_ANY, \
326                             wxID_ANY, \
327                             (wxObjectEventFunction)   \
328                             (wxWebViewBeforeLoadEventFunction) & func, \
329                             static_cast<wxObject*>(NULL)),
330                             
331 #define EVT_WEBVIEW_NEW_WINDOW(func) \
332             DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_NEW_WINDOW, \
333                             wxID_ANY, \
334                             wxID_ANY, \
335                             (wxObjectEventFunction)   \
336                             (wxWebViewNewWindowEventFunction) & func, \
337                             static_cast<wxObject*>(NULL)),
338
339 #define EVT_WEBVIEW_RIGHT_CLICK(func) \
340             DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_RIGHT_CLICK, \
341                             wxID_ANY, \
342                             wxID_ANY, \
343                             (wxObjectEventFunction)   \
344                             (wxWebViewRightClickEventFunction) & func, \
345                             static_cast<wxObject*>(NULL)),
346                             
347 #define EVT_WEBVIEW_CONSOLE_MESSAGE(func) \
348             DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_CONSOLE_MESSAGE, \
349                             wxID_ANY, \
350                             wxID_ANY, \
351                             (wxObjectEventFunction)   \
352                             (wxWebViewConsoleMessageEventFunction) & func, \
353                             static_cast<wxObject*>(NULL)),
354
355 #endif // ifndef WXWEBVIEW_H