Merge remote-tracking branch 'gerrit/master' into newdocs
[profile/ivi/qtbase.git] / src / gui / kernel / qwindow.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtGui module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia.  For licensing terms and
14 ** conditions see http://qt.digia.com/licensing.  For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file.  Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights.  These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file.  Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #ifndef QWINDOW_H
43 #define QWINDOW_H
44
45 #include <QtCore/QObject>
46 #include <QtCore/QEvent>
47 #include <QtCore/QMargins>
48 #include <QtCore/QRect>
49
50 #include <QtCore/qnamespace.h>
51
52 #include <QtGui/qsurface.h>
53 #include <QtGui/qsurfaceformat.h>
54 #include <QtGui/qwindowdefs.h>
55
56 #include <QtGui/qicon.h>
57
58 #ifndef QT_NO_CURSOR
59 #include <QtGui/qcursor.h>
60 #endif
61
62 QT_BEGIN_HEADER
63
64 QT_BEGIN_NAMESPACE
65
66
67 class QWindowPrivate;
68
69 class QExposeEvent;
70 class QFocusEvent;
71 class QMoveEvent;
72 class QResizeEvent;
73 class QShowEvent;
74 class QHideEvent;
75 class QKeyEvent;
76 class QMouseEvent;
77 #ifndef QT_NO_WHEELEVENT
78 class QWheelEvent;
79 #endif
80 class QTouchEvent;
81 #ifndef QT_NO_TABLETEVENT
82 class QTabletEvent;
83 #endif
84
85 class QPlatformSurface;
86 class QPlatformWindow;
87 class QBackingStore;
88 class QScreen;
89 class QAccessibleInterface;
90
91 class Q_GUI_EXPORT QWindow : public QObject, public QSurface
92 {
93     Q_OBJECT
94     Q_DECLARE_PRIVATE(QWindow)
95
96     Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle)
97     Q_PROPERTY(QString windowFilePath READ windowFilePath WRITE setWindowFilePath)
98     Q_PROPERTY(QIcon windowIcon READ windowIcon WRITE setWindowIcon)
99     Q_PROPERTY(Qt::WindowModality windowModality READ windowModality WRITE setWindowModality NOTIFY windowModalityChanged)
100     Q_PROPERTY(int x READ x WRITE setX NOTIFY xChanged)
101     Q_PROPERTY(int y READ y WRITE setY NOTIFY yChanged)
102     Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged)
103     Q_PROPERTY(int height READ height WRITE setHeight NOTIFY heightChanged)
104     Q_PROPERTY(QPoint pos READ pos WRITE setPos)
105     Q_PROPERTY(QSize size READ size WRITE resize)
106     Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry)
107     Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged)
108     Q_PROPERTY(Qt::ScreenOrientation contentOrientation READ contentOrientation WRITE reportContentOrientationChange NOTIFY contentOrientationChanged)
109 #ifndef QT_NO_CURSOR
110     Q_PROPERTY(QCursor cursor READ cursor WRITE setCursor RESET unsetCursor)
111 #endif
112
113 public:
114
115     explicit QWindow(QScreen *screen = 0);
116     explicit QWindow(QWindow *parent);
117     virtual ~QWindow();
118
119     void setSurfaceType(SurfaceType surfaceType);
120     SurfaceType surfaceType() const;
121
122     bool isVisible() const;
123
124     void create();
125
126     WId winId() const;
127
128     QWindow *parent() const;
129     void setParent(QWindow *parent);
130
131     bool isTopLevel() const;
132
133     bool isModal() const;
134     Qt::WindowModality windowModality() const;
135     void setWindowModality(Qt::WindowModality windowModality);
136
137     void setFormat(const QSurfaceFormat &format);
138     QSurfaceFormat format() const;
139     QSurfaceFormat requestedFormat() const;
140
141     void setWindowFlags(Qt::WindowFlags flags);
142     Qt::WindowFlags windowFlags() const;
143     Qt::WindowType windowType() const;
144
145     QString windowTitle() const;
146
147     void setOpacity(qreal level);
148     void requestActivateWindow();
149
150     bool isActive() const;
151
152     void reportContentOrientationChange(Qt::ScreenOrientation orientation);
153     Qt::ScreenOrientation contentOrientation() const;
154
155     bool requestWindowOrientation(Qt::ScreenOrientation orientation);
156     Qt::ScreenOrientation windowOrientation() const;
157
158     Qt::WindowState windowState() const;
159     void setWindowState(Qt::WindowState state);
160
161     void setTransientParent(QWindow *parent);
162     QWindow *transientParent() const;
163
164     enum AncestorMode {
165         ExcludeTransients,
166         IncludeTransients
167     };
168
169     bool isAncestorOf(const QWindow *child, AncestorMode mode = IncludeTransients) const;
170
171     bool isExposed() const;
172
173     QSize minimumSize() const;
174     QSize maximumSize() const;
175     QSize baseSize() const;
176     QSize sizeIncrement() const;
177
178     void setMinimumSize(const QSize &size);
179     void setMaximumSize(const QSize &size);
180     void setBaseSize(const QSize &size);
181     void setSizeIncrement(const QSize &size);
182
183     void setGeometry(int posx, int posy, int w, int h) { setGeometry(QRect(posx, posy, w, h)); }
184     void setGeometry(const QRect &rect);
185     QRect geometry() const;
186
187     QMargins frameMargins() const;
188     QRect frameGeometry() const;
189
190     QPoint framePos() const;
191     void setFramePos(const QPoint &point);
192
193     inline int width() const { return geometry().width(); }
194     inline int height() const { return geometry().height(); }
195     inline int x() const { return geometry().x(); }
196     inline int y() const { return geometry().y(); }
197
198     inline QSize size() const { return geometry().size(); }
199     inline QPoint pos() const { return geometry().topLeft(); }
200
201     inline void setPos(const QPoint &pt) { setGeometry(QRect(pt, size())); }
202     inline void setPos(int posx, int posy) { setPos(QPoint(posx, posy)); }
203
204     void resize(const QSize &newSize);
205     inline void resize(int w, int h) { resize(QSize(w, h)); }
206
207     void setWindowFilePath(const QString &filePath);
208     QString windowFilePath() const;
209
210     void setWindowIcon(const QIcon &icon);
211     QIcon windowIcon() const;
212
213     void destroy();
214
215     QPlatformWindow *handle() const;
216
217     bool setKeyboardGrabEnabled(bool grab);
218     bool setMouseGrabEnabled(bool grab);
219
220     QScreen *screen() const;
221     void setScreen(QScreen *screen);
222
223     virtual QAccessibleInterface *accessibleRoot() const;
224     virtual QObject *focusObject() const;
225
226     QPoint mapToGlobal(const QPoint &pos) const;
227     QPoint mapFromGlobal(const QPoint &pos) const;
228
229 #ifndef QT_NO_CURSOR
230     QCursor cursor() const;
231     void setCursor(const QCursor &);
232     void unsetCursor();
233 #endif
234
235 public Q_SLOTS:
236     void setVisible(bool visible);
237
238     void show();
239     void hide();
240
241     void showMinimized();
242     void showMaximized();
243     void showFullScreen();
244     void showNormal();
245
246     bool close();
247     void raise();
248     void lower();
249
250     void setWindowTitle(const QString &);
251
252     void setX(int arg)
253     {
254         if (x() != arg)
255             setGeometry(QRect(arg, y(), width(), height()));
256     }
257
258     void setY(int arg)
259     {
260         if (y() != arg)
261             setGeometry(QRect(x(), arg, width(), height()));
262     }
263
264     void setWidth(int arg)
265     {
266         if (width() != arg)
267             setGeometry(QRect(x(), y(), arg, height()));
268     }
269
270     void setHeight(int arg)
271     {
272         if (height() != arg)
273             setGeometry(QRect(x(), y(), width(), arg));
274     }
275
276 Q_SIGNALS:
277     void screenChanged(QScreen *screen);
278     void windowModalityChanged(Qt::WindowModality windowModality);
279
280     void xChanged(int arg);
281     void yChanged(int arg);
282
283     void widthChanged(int arg);
284     void heightChanged(int arg);
285
286     void visibleChanged(bool arg);
287     void contentOrientationChanged(Qt::ScreenOrientation orientation);
288
289     void focusObjectChanged(QObject *object);
290
291 private Q_SLOTS:
292     void screenDestroyed(QObject *screen);
293
294 protected:
295     virtual void exposeEvent(QExposeEvent *);
296     virtual void resizeEvent(QResizeEvent *);
297     virtual void moveEvent(QMoveEvent *);
298     virtual void focusInEvent(QFocusEvent *);
299     virtual void focusOutEvent(QFocusEvent *);
300
301     virtual void showEvent(QShowEvent *);
302     virtual void hideEvent(QHideEvent *);
303
304     virtual bool event(QEvent *);
305     virtual void keyPressEvent(QKeyEvent *);
306     virtual void keyReleaseEvent(QKeyEvent *);
307     virtual void mousePressEvent(QMouseEvent *);
308     virtual void mouseReleaseEvent(QMouseEvent *);
309     virtual void mouseDoubleClickEvent(QMouseEvent *);
310     virtual void mouseMoveEvent(QMouseEvent *);
311 #ifndef QT_NO_WHEELEVENT
312     virtual void wheelEvent(QWheelEvent *);
313 #endif
314     virtual void touchEvent(QTouchEvent *);
315 #ifndef QT_NO_TABLETEVENT
316     virtual void tabletEvent(QTabletEvent *);
317 #endif
318     virtual bool nativeEvent(const QByteArray &eventType, void *message, long *result);
319
320     QWindow(QWindowPrivate &dd, QWindow *parent);
321
322 private:
323     QPlatformSurface *surfaceHandle() const;
324
325     Q_DISABLE_COPY(QWindow)
326
327     friend class QGuiApplication;
328     friend class QGuiApplicationPrivate;
329     friend Q_GUI_EXPORT QWindowPrivate *qt_window_private(QWindow *window);
330 };
331
332 QT_END_NAMESPACE
333
334 QT_END_HEADER
335
336 #endif // QWINDOW_H