Reviewed by Kevin Ollivier.
[WebKit.git] / WebKit / wx / WebKitSupport / ChromeClientWx.cpp
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 #include "config.h"
29 #include "ChromeClientWx.h"
30 #include "FileChooser.h"
31 #include "FloatRect.h"
32 #include "FrameLoadRequest.h"
33 #include "NotImplemented.h"
34 #include "PlatformString.h"
35
36 #include <stdio.h>
37
38 #include <wx/wxprec.h>
39 #ifndef WX_PRECOMP
40     #include <wx/wx.h>
41 #endif
42 #include <wx/textdlg.h>
43 #include <wx/tooltip.h>
44
45 #include "WebBrowserShell.h"
46 #include "WebView.h"
47 #include "WebViewPrivate.h"
48
49 namespace WebCore {
50
51 ChromeClientWx::ChromeClientWx(wxWebView* webView)
52 {
53     m_webView = webView;
54 }
55
56 ChromeClientWx::~ChromeClientWx()
57 {
58 }
59
60 void ChromeClientWx::chromeDestroyed()
61 {
62     notImplemented();
63 }
64
65 void ChromeClientWx::setWindowRect(const FloatRect&)
66 {
67     notImplemented();
68 }
69
70 FloatRect ChromeClientWx::windowRect()
71 {
72     notImplemented();
73     return FloatRect();
74 }
75
76 FloatRect ChromeClientWx::pageRect()
77 {
78     notImplemented();
79     return FloatRect();
80 }
81
82 float ChromeClientWx::scaleFactor()
83 {
84     notImplemented();
85     return 0.0;
86 }
87
88 void ChromeClientWx::focus()
89 {
90     notImplemented();
91 }
92
93 void ChromeClientWx::unfocus()
94 {
95     notImplemented();
96 }
97
98 bool ChromeClientWx::canTakeFocus(FocusDirection)
99 {
100     notImplemented();
101     return false;
102 }
103
104 void ChromeClientWx::takeFocus(FocusDirection)
105 {
106     notImplemented();
107 }
108
109
110 Page* ChromeClientWx::createWindow(Frame*, const FrameLoadRequest& request, const WindowFeatures&)
111 {
112
113     // FIXME: Create a EVT_WEBKIT_NEW_WINDOW event, and only run this code
114     // when that event is not handled.
115     
116     Page* myPage = 0;
117     wxWebBrowserShell* newFrame = new wxWebBrowserShell(wxTheApp->GetAppName());
118     
119     if (newFrame->webview) {
120         newFrame->webview->LoadURL(request.resourceRequest().url().string());
121         newFrame->Show(true);
122
123         WebViewPrivate* impl = newFrame->webview->m_impl;
124         if (impl)
125             myPage = impl->page;
126     }
127     
128     return myPage;
129 }
130
131 Page* ChromeClientWx::createModalDialog(Frame*, const FrameLoadRequest&)
132 {
133     notImplemented();
134     return 0;
135 }
136
137 void ChromeClientWx::show()
138 {
139     notImplemented();
140 }
141
142 bool ChromeClientWx::canRunModal()
143 {
144     notImplemented();
145     return false;
146 }
147
148 void ChromeClientWx::runModal()
149 {
150     notImplemented();
151 }
152
153 void ChromeClientWx::setToolbarsVisible(bool)
154 {
155     notImplemented();
156 }
157
158 bool ChromeClientWx::toolbarsVisible()
159 {
160     notImplemented();
161     return false;
162 }
163
164 void ChromeClientWx::setStatusbarVisible(bool)
165 {
166     notImplemented();
167 }
168
169 bool ChromeClientWx::statusbarVisible()
170 {
171     notImplemented();
172     return false;
173 }
174
175 void ChromeClientWx::setScrollbarsVisible(bool)
176 {
177     notImplemented();
178 }
179
180 bool ChromeClientWx::scrollbarsVisible()
181 {
182     notImplemented();
183     return false;
184 }
185
186 void ChromeClientWx::setMenubarVisible(bool)
187 {
188     notImplemented();
189 }
190
191 bool ChromeClientWx::menubarVisible()
192 {
193     notImplemented();
194     return false;
195 }
196
197 void ChromeClientWx::setResizable(bool)
198 {
199     notImplemented();
200 }
201
202 void ChromeClientWx::addMessageToConsole(const String& message,
203                                           unsigned int lineNumber,
204                                           const String& sourceID)
205 {
206     if (m_webView) {
207         wxWebViewConsoleMessageEvent wkEvent(m_webView);
208         wkEvent.SetMessage(message);
209         wkEvent.SetLineNumber(lineNumber);
210         wkEvent.SetSourceID(sourceID);
211         m_webView->GetEventHandler()->ProcessEvent(wkEvent);
212     }
213 }
214
215 bool ChromeClientWx::canRunBeforeUnloadConfirmPanel()
216 {
217     notImplemented();
218     return true;
219 }
220
221 bool ChromeClientWx::runBeforeUnloadConfirmPanel(const String& string,
222                                                   Frame* frame)
223 {
224     wxMessageDialog dialog(NULL, string, wxT("Confirm Action?"), wxYES_NO);
225     return dialog.ShowModal() == wxYES;
226 }
227
228 void ChromeClientWx::closeWindowSoon()
229 {
230     notImplemented();
231 }
232
233 /*
234     Sites for testing prompts: 
235     Alert - just type in a bad web address or http://www.htmlite.com/JS002.php
236     Prompt - http://www.htmlite.com/JS007.php
237     Confirm - http://www.htmlite.com/JS006.php
238 */
239
240 void ChromeClientWx::runJavaScriptAlert(Frame* frame, const String& string)
241 {
242     if (m_webView) {
243         wxWebViewAlertEvent wkEvent(m_webView);
244         wkEvent.SetMessage(string);
245         if (!m_webView->GetEventHandler()->ProcessEvent(wkEvent))
246             wxMessageBox(string, wxT("JavaScript Alert"), wxOK);
247     }
248 }
249
250 bool ChromeClientWx::runJavaScriptConfirm(Frame* frame, const String& string)
251 {
252     bool result = false;
253     if (m_webView) {
254         wxWebViewConfirmEvent wkEvent(m_webView);
255         wkEvent.SetMessage(string);
256         if (m_webView->GetEventHandler()->ProcessEvent(wkEvent))
257             result = wkEvent.GetReturnCode() == wxID_YES;
258         else {
259             wxMessageDialog dialog(NULL, string, wxT("JavaScript Confirm"), wxYES_NO);
260             dialog.Centre();
261             result = (dialog.ShowModal() == wxID_YES);
262         }
263     }
264     return result;
265 }
266
267 bool ChromeClientWx::runJavaScriptPrompt(Frame* frame, const String& message, const String& defaultValue, String& result)
268 {
269     if (m_webView) {
270         wxWebViewPromptEvent wkEvent(m_webView);
271         wkEvent.SetMessage(message);
272         wkEvent.SetResponse(defaultValue);
273         if (m_webView->GetEventHandler()->ProcessEvent(wkEvent)) {
274             result = wkEvent.GetResponse();
275             return true;
276         }
277         else {
278             wxTextEntryDialog dialog(NULL, message, wxT("JavaScript Prompt"), wxEmptyString, wxOK | wxCANCEL);
279             dialog.Centre();
280             if (dialog.ShowModal() == wxID_OK) {
281                 result = dialog.GetValue();
282                 return true;
283             }
284         }
285     }
286     return false;
287 }
288
289 void ChromeClientWx::setStatusbarText(const String&)
290 {
291     notImplemented();
292 }
293
294 bool ChromeClientWx::shouldInterruptJavaScript()
295 {
296     notImplemented();
297     return false;
298 }
299
300 bool ChromeClientWx::tabsToLinks() const
301 {
302     notImplemented();
303     return false;
304 }
305
306 IntRect ChromeClientWx::windowResizerRect() const
307 {
308     notImplemented();
309     return IntRect();
310 }
311
312 void ChromeClientWx::repaint(const IntRect& rect, bool contentChanged, bool immediate, bool repaintContentOnly)
313 {
314     if (!m_webView)
315         return;
316     
317     if (contentChanged)
318         m_webView->RefreshRect(rect);
319     
320     if (immediate) {
321         m_webView->Update();
322     }
323 }
324
325 IntRect ChromeClientWx::windowToScreen(const IntRect& rect) const
326 {
327     notImplemented();
328     return rect;
329 }
330
331 IntPoint ChromeClientWx::screenToWindow(const IntPoint& point) const
332 {
333     notImplemented();
334     return point;
335 }
336
337 PlatformWidget ChromeClientWx::platformWindow() const
338 {
339     return 0;
340 }
341
342 void ChromeClientWx::contentsSizeChanged(Frame*, const IntSize&) const
343 {
344     notImplemented();
345 }
346
347 void ChromeClientWx::scrollBackingStore(int dx, int dy, 
348                     const IntRect& scrollViewRect, 
349                     const IntRect& clipRect)
350 {
351     notImplemented();
352 }
353
354 void ChromeClientWx::updateBackingStore()
355 {
356     notImplemented();
357 }
358
359 void ChromeClientWx::mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags)
360 {
361     notImplemented();
362 }
363
364 void ChromeClientWx::setToolTip(const String& tip)
365 {
366     wxToolTip* tooltip = m_webView->GetToolTip();
367     if (!tooltip || tooltip->GetTip() != wxString(tip))
368         m_webView->SetToolTip(tip);
369 }
370
371 void ChromeClientWx::print(Frame*)
372 {
373     notImplemented();
374 }
375
376 void ChromeClientWx::exceededDatabaseQuota(Frame*, const String&)
377 {
378     notImplemented();
379 }
380
381 void ChromeClientWx::scroll(const IntSize&, const IntRect&, const IntRect&)
382 {
383     notImplemented();
384 }
385
386 void ChromeClientWx::runOpenPanel(Frame*, PassRefPtr<FileChooser>)
387 {
388     notImplemented();
389 }
390
391 }