a408e923b872fdeb881f67264018ff69d20a2ff5
[WebKit-https.git] / WebKit / qt / WebCoreSupport / ChromeClientQt.cpp
1 /*
2  * Copyright (C) 2006 Zack Rusin <zack@kde.org>
3  * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
4  *
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28 #include "config.h"
29 #include "ChromeClientQt.h"
30
31 #include "Frame.h"
32 #include "FrameLoadRequest.h"
33 #include "FrameLoader.h"
34 #include "FrameLoaderClientQt.h"
35 #include "FrameView.h"
36 #include "NotImplemented.h"
37 #include "WindowFeatures.h"
38
39 #include "qwebpage.h"
40 #include "qwebpage_p.h"
41 #include "qwebframe_p.h"
42
43 namespace WebCore
44 {
45
46     
47 ChromeClientQt::ChromeClientQt(QWebPage* webPage)
48     : m_webPage(webPage)
49 {
50     
51 }
52
53
54 ChromeClientQt::~ChromeClientQt()
55 {
56     
57 }
58
59 void ChromeClientQt::setWindowRect(const FloatRect& rect)
60 {
61     if (!m_webPage)
62         return;
63     emit m_webPage->geometryChangeRequest(QRect(qRound(rect.x()), qRound(rect.y()),
64                             qRound(rect.width()), qRound(rect.height())));
65 }
66
67
68 FloatRect ChromeClientQt::windowRect()
69 {
70     if (!m_webPage)
71         return FloatRect();
72
73     QWidget* view = m_webPage->view();
74     if (!view)
75         return FloatRect();
76     return IntRect(view->topLevelWidget()->geometry());
77 }
78
79
80 FloatRect ChromeClientQt::pageRect()
81 {
82     if (!m_webPage)
83         return FloatRect();
84     return FloatRect(QRectF(QPointF(0,0), m_webPage->viewportSize()));
85 }
86
87
88 float ChromeClientQt::scaleFactor()
89 {
90     notImplemented();
91     return 1;
92 }
93
94
95 void ChromeClientQt::focus()
96 {
97     if (!m_webPage)
98         return;
99     QWidget* view = m_webPage->view();
100     if (!view)
101         return;
102     
103     view->setFocus();
104 }
105
106
107 void ChromeClientQt::unfocus()
108 {
109     if (!m_webPage)
110         return;
111     QWidget* view = m_webPage->view();
112     if (!view)
113         return;
114     view->clearFocus();
115 }
116
117 bool ChromeClientQt::canTakeFocus(FocusDirection)
118 {
119     if (!m_webPage)
120         return false;
121     QWidget* view = m_webPage->view();
122     if (!view)
123         return false;
124     return view->focusPolicy() != Qt::NoFocus;
125 }
126
127 void ChromeClientQt::takeFocus(FocusDirection)
128 {
129     if (!m_webPage)
130         return;
131     QWidget* view = m_webPage->view();
132     if (!view)
133         return;
134     view->clearFocus();
135 }
136
137
138 Page* ChromeClientQt::createWindow(Frame*, const FrameLoadRequest& request, const WindowFeatures& features)
139 {
140     QWebPage *newPage = features.dialog ? m_webPage->createModalDialog() : m_webPage->createWindow();
141     if (!newPage)
142         return 0;
143     newPage->mainFrame()->load(request.resourceRequest().url());
144     return newPage->d->page;
145 }
146
147 void ChromeClientQt::show()
148 {
149     if (!m_webPage)
150         return;
151     QWidget* view = m_webPage->view();
152     if (!view)
153         return;
154     view->topLevelWidget()->show();
155 }
156
157
158 bool ChromeClientQt::canRunModal()
159 {
160     notImplemented();
161     return false;
162 }
163
164
165 void ChromeClientQt::runModal()
166 {
167     notImplemented();
168 }
169
170
171 void ChromeClientQt::setToolbarsVisible(bool)
172 {
173     notImplemented();
174 }
175
176
177 bool ChromeClientQt::toolbarsVisible()
178 {
179     notImplemented();
180     return false;
181 }
182
183
184 void ChromeClientQt::setStatusbarVisible(bool)
185 {
186     notImplemented();
187 }
188
189
190 bool ChromeClientQt::statusbarVisible()
191 {
192     notImplemented();
193     return false;
194 }
195
196
197 void ChromeClientQt::setScrollbarsVisible(bool)
198 {
199     notImplemented();
200 }
201
202
203 bool ChromeClientQt::scrollbarsVisible()
204 {
205     notImplemented();
206     return true;
207 }
208
209
210 void ChromeClientQt::setMenubarVisible(bool)
211 {
212     notImplemented();
213 }
214
215 bool ChromeClientQt::menubarVisible()
216 {
217     notImplemented();
218     return false;
219 }
220
221 void ChromeClientQt::setResizable(bool)
222 {
223     notImplemented();
224 }
225
226 void ChromeClientQt::addMessageToConsole(const String& message, unsigned int lineNumber,
227                                          const String& sourceID)
228 {
229     QString x = message;
230     QString y = sourceID;
231     m_webPage->javaScriptConsoleMessage(x, lineNumber, y);
232 }
233
234 void ChromeClientQt::chromeDestroyed()
235 {
236     delete this;
237 }
238
239 bool ChromeClientQt::canRunBeforeUnloadConfirmPanel()
240 {
241     return true;
242 }
243
244 bool ChromeClientQt::runBeforeUnloadConfirmPanel(const String& message, Frame* frame)
245 {
246     return runJavaScriptConfirm(frame, message);
247 }
248
249 void ChromeClientQt::closeWindowSoon()
250 {
251     m_webPage->mainFrame()->d->frame->loader()->stopAllLoaders();
252     m_webPage->deleteLater();
253 }
254
255 void ChromeClientQt::runJavaScriptAlert(Frame* f, const String& msg)
256 {
257     QString x = msg;
258     FrameLoaderClientQt *fl = static_cast<FrameLoaderClientQt*>(f->loader()->client());
259     m_webPage->javaScriptAlert(fl->webFrame(), x);
260 }
261
262 bool ChromeClientQt::runJavaScriptConfirm(Frame* f, const String& msg)
263 {
264     QString x = msg;
265     FrameLoaderClientQt *fl = static_cast<FrameLoaderClientQt*>(f->loader()->client());
266     return m_webPage->javaScriptConfirm(fl->webFrame(), x);
267 }
268
269 bool ChromeClientQt::runJavaScriptPrompt(Frame* f, const String& message, const String& defaultValue, String& result)
270 {
271     QString x = result;
272     FrameLoaderClientQt *fl = static_cast<FrameLoaderClientQt*>(f->loader()->client());
273     bool rc = m_webPage->javaScriptPrompt(fl->webFrame(), (QString)message, (QString)defaultValue, &x);
274     result = x;
275     return rc;
276 }
277
278 void ChromeClientQt::setStatusbarText(const String& msg)
279 {
280     QString x = msg;
281     emit m_webPage->statusBarTextChanged(x);
282 }
283
284 bool ChromeClientQt::shouldInterruptJavaScript()
285 {
286     notImplemented();
287     return false;
288 }
289
290 bool ChromeClientQt::tabsToLinks() const
291 {
292     return false;
293 }
294
295 IntRect ChromeClientQt::windowResizerRect() const
296 {
297     return IntRect();
298 }
299
300 void ChromeClientQt::addToDirtyRegion(const IntRect& r)
301 {
302     QWidget* view = m_webPage->view();
303     if (view) {
304         QRect rect(r);
305         rect = rect.intersected(QRect(QPoint(0, 0), m_webPage->viewportSize()));
306         if (!r.isEmpty())
307             view->update(r);
308     }
309 }
310
311 void ChromeClientQt::scrollBackingStore(int dx, int dy, const IntRect& scrollViewRect, const IntRect& clipRect)
312 {
313     QWidget* view = m_webPage->view();
314     if (view)
315         view->scroll(dx, dy, scrollViewRect);
316 }
317
318 void ChromeClientQt::updateBackingStore()
319 {
320 }
321
322 void ChromeClientQt::mouseDidMoveOverElement(const HitTestResult&, unsigned /*modifierFlags*/)
323 {
324     notImplemented();
325 }
326
327 void ChromeClientQt::setToolTip(const String&)
328 {
329     notImplemented();
330 }
331
332 void ChromeClientQt::print(Frame*)
333 {
334     notImplemented();
335 }
336
337 unsigned long long ChromeClientQt::requestQuotaIncreaseForNewDatabase(Frame*, SecurityOrigin*, const String&, unsigned long long)
338 {
339     notImplemented();
340     return 0;
341 }
342
343 unsigned long long ChromeClientQt::requestQuotaIncreaseForDatabaseOperation(Frame*, SecurityOrigin*, const String&, unsigned long long)
344 {
345     notImplemented();
346     return 0;
347 }
348
349 }
350
351