Add another feed to Planet WebKit.
[WebKit-https.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 RunScript(const wxString& javascript);
96     
97     bool CanIncreaseTextSize() const;
98     void IncreaseTextSize();
99     bool CanDecreaseTextSize() const;
100     void DecreaseTextSize();
101     void MakeEditable(bool enable);
102     bool IsEditable() const { return m_isEditable; }
103
104     wxString GetPageTitle() const { return m_title; }
105     void SetPageTitle(const wxString& title) { m_title = title; }
106
107 protected:
108
109     // event handlers (these functions should _not_ be virtual)
110     void OnPaint(wxPaintEvent& event);
111     void OnSize(wxSizeEvent& event);
112     void OnMouseEvents(wxMouseEvent& event);
113     void OnKeyEvents(wxKeyEvent& event);
114     void OnSetFocus(wxFocusEvent& event);
115     void OnKillFocus(wxFocusEvent& event);
116     void OnActivate(wxActivateEvent& event);
117     
118 private:
119     // any class wishing to process wxWindows events must use this macro
120 #ifndef SWIG
121     DECLARE_EVENT_TABLE()
122 #endif
123     float m_textMagnifier;
124     bool m_isEditable;
125     bool m_isInitialized;
126     bool m_beingDestroyed;
127     WebViewPrivate* m_impl;
128     wxString m_title;
129     
130 };
131
132 // ----------------------------------------------------------------------------
133 // Web Kit Events
134 // ----------------------------------------------------------------------------
135
136 enum {
137     wxWEBVIEW_STATE_START = 1,
138     wxWEBVIEW_STATE_NEGOTIATING = 2,
139     wxWEBVIEW_STATE_REDIRECTING = 4,
140     wxWEBVIEW_STATE_TRANSFERRING = 8,
141     wxWEBVIEW_STATE_STOP = 16,
142     wxWEBVIEW_STATE_FAILED = 32
143 };
144
145 enum {
146     wxWEBVIEW_NAV_LINK_CLICKED = 1,
147     wxWEBVIEW_NAV_BACK_NEXT = 2,
148     wxWEBVIEW_NAV_FORM_SUBMITTED = 4,
149     wxWEBVIEW_NAV_RELOAD = 8,
150     wxWEBVIEW_NAV_FORM_RESUBMITTED = 16,
151     wxWEBVIEW_NAV_OTHER = 32
152 };
153
154 class WXDLLIMPEXP_WEBKIT wxWebViewDOMElementInfo
155 {
156 public: 
157     wxWebViewDOMElementInfo();
158
159     ~wxWebViewDOMElementInfo() { }
160     
161     wxString GetTagName() const { return m_tagName; }
162     void SetTagName(const wxString& name) { m_tagName = name; }
163
164     bool IsSelected() const { return m_isSelected; }
165     void SetSelected(bool sel) { m_isSelected = sel; }
166  
167     wxString GetText() const { return m_text; }
168     void SetText(const wxString& text) { m_text = text; }
169  
170     wxString GetImageSrc() const { return m_imageSrc; }
171     void SetImageSrc(const wxString& src) { m_imageSrc = src; }
172  
173     wxString GetLink() const { return m_link; }
174     void SetLink(const wxString& link) { m_link = link; }
175
176 private:
177     void* m_domElement;
178     bool m_isSelected;
179     wxString m_tagName;
180     wxString m_text;
181     wxString m_imageSrc;
182     wxString m_link;
183 };
184
185 class WXDLLIMPEXP_WEBKIT wxWebViewBeforeLoadEvent : public wxCommandEvent
186 {
187 #ifndef SWIG
188     DECLARE_DYNAMIC_CLASS( wxWebViewBeforeLoadEvent )
189 #endif
190
191 public:
192     bool IsCancelled() const { return m_cancelled; }
193     void Cancel(bool cancel = true) { m_cancelled = cancel; }
194     wxString GetURL() const { return m_url; }
195     void SetURL(const wxString& url) { m_url = url; }
196     void SetNavigationType(int navType) { m_navType = navType; }
197     int GetNavigationType() const { return m_navType; }
198
199     wxWebViewBeforeLoadEvent( wxWindow* win = (wxWindow*) NULL );
200     wxEvent *Clone(void) const { return new wxWebViewBeforeLoadEvent(*this); }
201
202 private:
203     bool m_cancelled;
204     wxString m_url;
205     int m_navType;
206 };
207
208 class WXDLLIMPEXP_WEBKIT wxWebViewStateChangedEvent : public wxCommandEvent
209 {
210 #ifndef SWIG
211     DECLARE_DYNAMIC_CLASS( wxWebViewStateChangedEvent )
212 #endif
213
214 public:
215     int GetState() const { return m_state; }
216     void SetState(const int state) { m_state = state; }
217     wxString GetURL() const { return m_url; }
218     void SetURL(const wxString& url) { m_url = url; }
219
220     wxWebViewStateChangedEvent( wxWindow* win = (wxWindow*) NULL );
221     wxEvent *Clone(void) const { return new wxWebViewStateChangedEvent(*this); }
222
223 private:
224     int m_state;
225     wxString m_url;
226 };
227
228 class WXDLLIMPEXP_WEBKIT wxWebViewNewWindowEvent : public wxCommandEvent
229 {
230 #ifndef SWIG
231     DECLARE_DYNAMIC_CLASS( wxWebViewNewWindowEvent )
232 #endif
233
234 public:
235     wxString GetURL() const { return m_url; }
236     void SetURL(const wxString& url) { m_url = url; }
237
238     wxWebViewNewWindowEvent( wxWindow* win = static_cast<wxWindow*>(NULL));
239     wxEvent *Clone(void) const { return new wxWebViewNewWindowEvent(*this); }
240
241 private:
242     wxString m_url;
243 };
244
245 class WXDLLIMPEXP_WEBKIT wxWebViewRightClickEvent : public wxCommandEvent
246 {
247 #ifndef SWIG
248     DECLARE_DYNAMIC_CLASS( wxWebViewRightClickEvent )
249 #endif
250
251 public:
252     wxWebViewRightClickEvent( wxWindow* win = static_cast<wxWindow*>(NULL));
253     wxEvent *Clone(void) const { return new wxWebViewRightClickEvent(*this); }
254     
255     wxWebViewDOMElementInfo GetInfo() const { return m_info; }
256     void SetInfo(wxWebViewDOMElementInfo info) { m_info = info; }
257     
258     wxPoint GetPosition() const { return m_position; }
259     void SetPosition(wxPoint pos) { m_position = pos; }
260
261 private:
262     wxWebViewDOMElementInfo m_info;
263     wxPoint m_position;
264 };
265
266 typedef void (wxEvtHandler::*wxWebViewStateChangedEventFunction)(wxWebViewStateChangedEvent&);
267 typedef void (wxEvtHandler::*wxWebViewBeforeLoadEventFunction)(wxWebViewBeforeLoadEvent&);
268 typedef void (wxEvtHandler::*wxWebViewNewWindowEventFunction)(wxWebViewNewWindowEvent&);
269 typedef void (wxEvtHandler::*wxWebViewRightClickEventFunction)(wxWebViewRightClickEvent&);
270
271 #ifndef SWIG
272 BEGIN_DECLARE_EVENT_TYPES()
273     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_BEFORE_LOAD, wxID_ANY)
274     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_STATE_CHANGED, wxID_ANY)
275     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_NEW_WINDOW, wxID_ANY)
276     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_RIGHT_CLICK, wxID_ANY)
277 END_DECLARE_EVENT_TYPES()
278 #endif
279
280 #define EVT_WEBVIEW_STATE_CHANGED(func) \
281             DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_STATE_CHANGED, \
282                             wxID_ANY, \
283                             wxID_ANY, \
284                             (wxObjectEventFunction)   \
285                             (wxWebViewStateChangedEventFunction) & func, \
286                             static_cast<wxObject*>(NULL)),
287                             
288 #define EVT_WEBVIEW_BEFORE_LOAD(func) \
289             DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_BEFORE_LOAD, \
290                             wxID_ANY, \
291                             wxID_ANY, \
292                             (wxObjectEventFunction)   \
293                             (wxWebViewBeforeLoadEventFunction) & func, \
294                             static_cast<wxObject*>(NULL)),
295                             
296 #define EVT_WEBVIEW_NEW_WINDOW(func) \
297             DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_BEFORE_LOAD, \
298                             wxID_ANY, \
299                             wxID_ANY, \
300                             (wxObjectEventFunction)   \
301                             (wxWebViewBeforeLoadEventFunction) & func, \
302                             static_cast<wxObject*>(NULL)),
303
304 #define EVT_WEBVIEW_RIGHT_CLICK(func) \
305             DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_RIGHT_CLICK, \
306                             wxID_ANY, \
307                             wxID_ANY, \
308                             (wxObjectEventFunction)   \
309                             (wxWebViewRightClickEventFunction) & func, \
310                             static_cast<wxObject*>(NULL)),
311
312 #endif // ifndef WXWEBVIEW_H