Reviewed/landed by Adam.
[WebKit-https.git] / WebCore / platform / qt / WidgetQt.cpp
1 /*
2  * Copyright (C) 2006 Dirk Mueller <mueller@kde.org>
3  * Copyright (C) 2006 George Stiakos <staikos@kde.org>
4  * Copyright (C) 2006 Zack Rusin <zack@kde.org>
5  * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
6  *
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
19  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
22  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
26  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #include "config.h"
32
33 #include "Font.h"
34 #include "Widget.h"
35 #include "Cursor.h"
36 #include "IntRect.h"
37 #include "RenderObject.h"
38 #include "GraphicsContext.h"
39
40 #include <QWidget>
41
42 #define notImplemented() do { fprintf(stderr, "FIXME: UNIMPLEMENTED: %s:%d\n", __FILE__, __LINE__); } while(0)
43
44 namespace WebCore {
45
46 struct WidgetPrivate
47 {
48     WidgetPrivate() : m_parent(0), m_widget(0) { }
49     ~WidgetPrivate() { delete m_widget; }
50
51     QWidget* m_parent;
52     QWidget* m_widget;
53     Font m_font;
54 };
55
56 Widget::Widget()
57     : data(new WidgetPrivate())
58 {
59 }
60
61 Widget::~Widget()
62 {
63     delete data;
64     data = 0;
65 }
66
67 void Widget::setClient(WidgetClient* c)
68 {
69     notImplemented();
70 }
71
72 WidgetClient* Widget::client() const
73 {
74     notImplemented();
75     return 0;
76 }
77
78 IntRect Widget::frameGeometry() const
79 {
80     if (!data->m_widget)
81         return IntRect();
82
83     return data->m_widget->geometry();
84 }
85
86 bool Widget::hasFocus() const
87 {
88     if (!data->m_widget)
89         return false;
90
91     return data->m_widget->hasFocus();
92 }
93
94 void Widget::setFocus()
95 {
96     if (data->m_widget)
97         data->m_widget->setFocus();
98 }
99
100 void Widget::clearFocus()
101 {
102     if (data->m_widget)
103         data->m_widget->clearFocus();
104 }
105
106 const Font& Widget::font() const
107 {
108     return data->m_font;
109 }
110
111 void Widget::setFont(const Font& font)
112 {
113     if (data->m_widget)
114         data->m_widget->setFont(font);
115 }
116
117 void Widget::setCursor(const Cursor& cursor)
118 {
119     if (data->m_widget)
120         data->m_widget->setCursor(cursor.impl());
121 }
122
123 void Widget::show()
124 {
125     if (data->m_widget)
126         data->m_widget->show();
127 }
128
129 void Widget::hide()
130 {
131     if (data->m_widget)
132         data->m_widget->hide();
133 }
134
135 void Widget::setQWidget(QWidget* child)
136 {
137     delete data->m_widget;
138     data->m_widget = child;
139 }
140
141 QWidget* Widget::qwidget()
142 {
143     return data->m_widget;
144 }
145
146 void Widget::setParentWidget(QWidget* parent)
147 {
148     data->m_parent = parent;
149 }
150
151 QWidget* Widget::parentWidget() const
152 {
153     return data->m_parent;
154 }
155
156 void Widget::setFrameGeometry(const IntRect& r)
157 {
158     if (!data->m_widget)
159         return;
160
161     data->m_widget->setGeometry(r);
162 }
163
164 IntPoint Widget::mapFromGlobal(const IntPoint& p) const
165 {
166     if (!data->m_widget)
167         return IntPoint();
168
169     return data->m_widget->mapFromGlobal(p);
170 }
171
172 GraphicsContext* Widget::lockDrawingFocus()
173 {
174     notImplemented();
175     return 0;
176 }
177
178 void Widget::unlockDrawingFocus(GraphicsContext*)
179 {
180     notImplemented();
181 }
182
183 void Widget::paint(GraphicsContext*, IntRect const&)
184 {
185     notImplemented();
186 }
187
188 void Widget::enableFlushDrawing()
189 {
190     notImplemented();
191 }
192
193 bool Widget::isEnabled() const
194 {
195     if (!data->m_widget)
196         return false;
197
198     return data->m_widget->isEnabled();
199 }
200
201 void Widget::setIsSelected(bool)
202 {
203     notImplemented();
204 }
205
206 void Widget::disableFlushDrawing()
207 {
208     notImplemented();
209 }
210
211 void Widget::setEnabled(bool en)
212 {
213     if (data->m_widget)
214         data->m_widget->setEnabled(en);
215 }
216
217 Widget::FocusPolicy Widget::focusPolicy() const
218 {
219     if (!data->m_widget)
220         return NoFocus;
221
222     switch (data->m_widget->focusPolicy())
223     {
224         case Qt::TabFocus:
225             return TabFocus;
226         case Qt::ClickFocus:
227             return ClickFocus;
228         case Qt::StrongFocus:
229             return StrongFocus;
230         case Qt::WheelFocus:
231             return WheelFocus;
232         case Qt::NoFocus:
233             return NoFocus;    
234     }
235
236     return NoFocus;
237 }
238
239 }
240
241 // vim: ts=4 sw=4 et