Merge remote branch 'gerrit/master' into refactor
[profile/ivi/qtbase.git] / src / widgets / kernel / qapplication.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
6 **
7 ** This file is part of the QtGui module of the Qt Toolkit.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 **
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 **
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
29 **
30 ** Other Usage
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #ifndef QAPPLICATION_H
43 #define QAPPLICATION_H
44
45 #include <QtCore/qcoreapplication.h>
46 #include <QtGui/qwindowdefs.h>
47 #include <QtCore/qpoint.h>
48 #include <QtCore/qsize.h>
49 #include <QtGui/qcursor.h>
50 #ifdef QT_INCLUDE_COMPAT
51 # include <QtWidgets/qdesktopwidget.h>
52 #endif
53 #ifdef QT3_SUPPORT
54 # include <QtWidgets/qwidget.h>
55 # include <QtGui/qpalette.h>
56 #endif
57 #ifdef Q_WS_QWS
58 # include <QtGui/qrgb.h>
59 # include <QtGui/qtransportauth_qws.h>
60 #endif
61 #ifdef Q_WS_QPA
62 # include <QtGui/qguiapplication.h>
63 #endif
64
65 QT_BEGIN_HEADER
66
67 #if defined(Q_OS_SYMBIAN)
68 class CApaApplication;
69 #endif
70
71 QT_BEGIN_NAMESPACE
72
73 QT_MODULE(Gui)
74
75 class QSessionManager;
76 class QDesktopWidget;
77 class QStyle;
78 class QEventLoop;
79 class QIcon;
80 class QInputContext;
81 template <typename T> class QList;
82 class QLocale;
83 #if defined(Q_WS_QWS)
84 class QDecoration;
85 #elif defined(Q_WS_QPA)
86 class QPlatformNativeInterface;
87 #endif
88 #if defined(Q_OS_SYMBIAN)
89 class QSymbianEvent;
90 #endif
91
92 class QApplication;
93 class QApplicationPrivate;
94 #if defined(qApp)
95 #undef qApp
96 #endif
97 #define qApp (static_cast<QApplication *>(QCoreApplication::instance()))
98
99 #ifdef Q_WS_QPA
100 #define QApplicationBase QGuiApplication
101 #else
102 #define QApplicationBase QCoreApplication
103 #endif
104
105 class Q_WIDGETS_EXPORT QApplication : public QApplicationBase
106 {
107     Q_OBJECT
108     Q_PROPERTY(QIcon windowIcon READ windowIcon WRITE setWindowIcon)
109     Q_PROPERTY(int cursorFlashTime READ cursorFlashTime WRITE setCursorFlashTime)
110     Q_PROPERTY(int doubleClickInterval  READ doubleClickInterval WRITE setDoubleClickInterval)
111     Q_PROPERTY(int keyboardInputInterval READ keyboardInputInterval WRITE setKeyboardInputInterval)
112 #ifndef QT_NO_WHEELEVENT
113     Q_PROPERTY(int wheelScrollLines  READ wheelScrollLines WRITE setWheelScrollLines)
114 #endif
115     Q_PROPERTY(QSize globalStrut READ globalStrut WRITE setGlobalStrut)
116     Q_PROPERTY(int startDragTime  READ startDragTime WRITE setStartDragTime)
117     Q_PROPERTY(int startDragDistance  READ startDragDistance WRITE setStartDragDistance)
118     Q_PROPERTY(bool quitOnLastWindowClosed  READ quitOnLastWindowClosed WRITE setQuitOnLastWindowClosed)
119 #ifndef QT_NO_STYLE_STYLESHEET
120     Q_PROPERTY(QString styleSheet READ styleSheet WRITE setStyleSheet)
121 #endif
122 #ifdef Q_WS_WINCE
123     Q_PROPERTY(int autoMaximizeThreshold READ autoMaximizeThreshold WRITE setAutoMaximizeThreshold)
124 #endif
125     Q_PROPERTY(bool autoSipEnabled READ autoSipEnabled WRITE setAutoSipEnabled)
126
127 public:
128     enum Type { Tty, GuiClient, GuiServer };
129
130 #ifdef Q_OS_SYMBIAN
131     typedef CApaApplication * (*QS60MainApplicationFactory)();
132 #endif
133
134 #ifndef qdoc
135     QApplication(int &argc, char **argv, int = ApplicationFlags);
136     QApplication(int &argc, char **argv, bool GUIenabled, int = ApplicationFlags);
137     QApplication(int &argc, char **argv, Type, int = ApplicationFlags);
138 #if defined(Q_WS_X11)
139     QApplication(Display* dpy, Qt::HANDLE visual = 0, Qt::HANDLE cmap = 0, int = ApplicationFlags);
140     QApplication(Display *dpy, int &argc, char **argv, Qt::HANDLE visual = 0, Qt::HANDLE cmap= 0, int = ApplicationFlags);
141 #endif
142 #if defined(Q_OS_SYMBIAN)
143     QApplication(QApplication::QS60MainApplicationFactory factory, int &argc, char **argv, int = ApplicationFlags);
144 #endif
145 #endif
146     virtual ~QApplication();
147
148     static Type type();
149
150     static QStyle *style();
151     static void setStyle(QStyle*);
152     static QStyle *setStyle(const QString&);
153     enum ColorSpec { NormalColor=0, CustomColor=1, ManyColor=2 };
154     static int colorSpec();
155     static void setColorSpec(int);
156     // ### Qt4 compatibility, remove?
157     static inline void setGraphicsSystem(const QString &) {}
158
159     using QGuiApplication::palette;
160     static QPalette palette(const QWidget *);
161     static QPalette palette(const char *className);
162     static void setPalette(const QPalette &, const char* className = 0);
163     static QFont font();
164     static QFont font(const QWidget*);
165     static QFont font(const char *className);
166     static void setFont(const QFont &, const char* className = 0);
167     static QFontMetrics fontMetrics();
168
169     static void setWindowIcon(const QIcon &icon);
170     static QIcon windowIcon();
171
172
173 #ifdef QT3_SUPPORT
174     static QT3_SUPPORT QWidget *mainWidget();
175     static QT3_SUPPORT void setMainWidget(QWidget *);
176 #endif
177
178     static QWidgetList allWidgets();
179     static QWidgetList topLevelWidgets();
180
181     static QDesktopWidget *desktop();
182
183     static QWidget *activePopupWidget();
184     static QWidget *activeModalWidget();
185 #if !defined(Q_WS_QPA) && !defined(QT_NO_CLIPBOARD)
186     static QClipboard *clipboard();
187 #endif
188     static QWidget *focusWidget();
189
190     static QWidget *activeWindow();
191     static void setActiveWindow(QWidget* act);
192
193     static QWidget *widgetAt(const QPoint &p);
194     static inline QWidget *widgetAt(int x, int y) { return widgetAt(QPoint(x, y)); }
195     static QWidget *topLevelAt(const QPoint &p);
196     static inline QWidget *topLevelAt(int x, int y)  { return topLevelAt(QPoint(x, y)); }
197
198     static void syncX();
199     static void beep();
200     static void alert(QWidget *widget, int duration = 0);
201
202     static Qt::KeyboardModifiers keyboardModifiers();
203     static Qt::KeyboardModifiers queryKeyboardModifiers();
204     static Qt::MouseButtons mouseButtons();
205
206     static void setDesktopSettingsAware(bool);
207     static bool desktopSettingsAware();
208
209     static void setCursorFlashTime(int);
210     static int cursorFlashTime();
211
212     static void setDoubleClickInterval(int);
213     static int doubleClickInterval();
214
215     static void setKeyboardInputInterval(int);
216     static int keyboardInputInterval();
217
218 #ifndef QT_NO_WHEELEVENT
219     static void setWheelScrollLines(int);
220     static int wheelScrollLines();
221 #endif
222     static void setGlobalStrut(const QSize &);
223     static QSize globalStrut();
224
225     static void setStartDragTime(int ms);
226     static int startDragTime();
227     static void setStartDragDistance(int l);
228     static int startDragDistance();
229
230     static bool isEffectEnabled(Qt::UIEffect);
231     static void setEffectEnabled(Qt::UIEffect, bool enable = true);
232
233 #if defined(Q_WS_MAC)
234     virtual bool macEventFilter(EventHandlerCallRef, EventRef);
235 #endif
236 #if defined(Q_WS_X11)
237     virtual bool x11EventFilter(XEvent *);
238     virtual int x11ClientMessage(QWidget*, XEvent*, bool passive_only);
239     int x11ProcessEvent(XEvent*);
240 #endif
241 #if defined(Q_OS_SYMBIAN)
242     int symbianProcessEvent(const QSymbianEvent *event);
243     virtual bool symbianEventFilter(const QSymbianEvent *event);
244 #endif
245 #if defined(Q_WS_QWS)
246     virtual bool qwsEventFilter(QWSEvent *);
247     int qwsProcessEvent(QWSEvent*);
248     void qwsSetCustomColors(QRgb *colortable, int start, int numColors);
249 #ifndef QT_NO_QWS_MANAGER
250     static QDecoration &qwsDecoration();
251     static void qwsSetDecoration(QDecoration *);
252     static QDecoration *qwsSetDecoration(const QString &decoration);
253 #endif
254 #endif
255
256 #if defined(Q_WS_QPA)
257     static QPlatformNativeInterface *platformNativeInterface();
258 #endif
259
260
261 #if defined(Q_WS_WIN)
262     void winFocus(QWidget *, bool);
263     static void winMouseButtonUp();
264 #endif
265 #ifndef QT_NO_SESSIONMANAGER
266     // session management
267     bool isSessionRestored() const;
268     QString sessionId() const;
269     QString sessionKey() const;
270     virtual void commitData(QSessionManager& sm);
271     virtual void saveState(QSessionManager& sm);
272 #endif
273
274 #ifndef QT_NO_IM
275     void setInputContext(QInputContext *);
276     QInputContext *inputContext() const;
277 #endif
278
279     static int exec();
280     bool notify(QObject *, QEvent *);
281
282
283     static void setQuitOnLastWindowClosed(bool quit);
284     static bool quitOnLastWindowClosed();
285
286 #ifdef QT_KEYPAD_NAVIGATION
287     static Q_DECL_DEPRECATED void setKeypadNavigationEnabled(bool);
288     static bool keypadNavigationEnabled();
289     static void setNavigationMode(Qt::NavigationMode mode);
290     static Qt::NavigationMode navigationMode();
291 #endif
292
293 Q_SIGNALS:
294     void lastWindowClosed();
295     void focusChanged(QWidget *old, QWidget *now);
296 #ifndef QT_NO_SESSIONMANAGER
297     void commitDataRequest(QSessionManager &sessionManager);
298     void saveStateRequest(QSessionManager &sessionManager);
299 #endif
300
301 public:
302     QString styleSheet() const;
303 public Q_SLOTS:
304 #ifndef QT_NO_STYLE_STYLESHEET
305     void setStyleSheet(const QString& sheet);
306 #endif
307 #ifdef Q_WS_WINCE
308     void setAutoMaximizeThreshold(const int threshold);
309     int autoMaximizeThreshold() const;
310 #endif
311     void setAutoSipEnabled(const bool enabled);
312     bool autoSipEnabled() const;
313     static void closeAllWindows();
314     static void aboutQt();
315
316 protected:
317 #if defined(Q_WS_QWS)
318     void setArgs(int, char **);
319 #endif
320     bool event(QEvent *);
321     bool compressEvent(QEvent *, QObject *receiver, QPostEventList *);
322
323 #ifdef QT3_SUPPORT
324 public:
325     static inline QT3_SUPPORT void setReverseLayout(bool b) { setLayoutDirection(b?Qt::RightToLeft:Qt::LeftToRight); }
326     static inline bool QT3_SUPPORT reverseLayout() { return layoutDirection() == Qt::RightToLeft; }
327     static QT3_SUPPORT Qt::Alignment horizontalAlignment(Qt::Alignment align);
328     typedef int ColorMode;
329     enum { NormalColors = NormalColor, CustomColors = CustomColor };
330     static inline QT3_SUPPORT ColorMode colorMode() { return static_cast<ColorMode>(colorSpec()); }
331     static inline QT3_SUPPORT void setColorMode(ColorMode mode) { setColorSpec(int(mode)); }
332 #if defined(Q_OS_WIN32) || defined(Q_OS_CYGWIN)
333     static QT3_SUPPORT Qt::WindowsVersion winVersion() { return (Qt::WindowsVersion)QSysInfo::WindowsVersion; }
334 #endif
335 #if defined(Q_OS_MAC)
336     static QT3_SUPPORT Qt::MacintoshVersion macVersion() { return (Qt::MacintoshVersion)QSysInfo::MacintoshVersion; }
337 #endif
338 #  ifndef QT_NO_CURSOR
339     inline static  QT3_SUPPORT void setOverrideCursor(const QCursor &cursor, bool replace)
340     { if (replace) changeOverrideCursor(cursor); else setOverrideCursor(cursor); }
341 #  endif
342     inline static QT3_SUPPORT bool hasGlobalMouseTracking() {return true;}
343     inline static QT3_SUPPORT void setGlobalMouseTracking(bool) {}
344     inline static QT3_SUPPORT void flushX() { flush(); }
345     static inline QT3_SUPPORT void setWinStyleHighlightColor(const QColor &c) {
346         QPalette p(palette());
347         p.setColor(QPalette::Highlight, c);
348         setPalette(p);
349     }
350     static inline QT3_SUPPORT const QColor &winStyleHighlightColor()
351         { return palette().color(QPalette::Active, QPalette::Highlight); }
352     static inline QT3_SUPPORT void setPalette(const QPalette &pal, bool, const char* className = 0)
353         { setPalette(pal, className); }
354     static inline QT3_SUPPORT void setFont(const QFont &font, bool, const char* className = 0)
355         { setFont(font, className); }
356
357     static inline QT3_SUPPORT QWidget *widgetAt(int x, int y, bool child)
358         { QWidget *w = widgetAt(x, y); return child ? w : (w ? w->window() : 0); }
359     static inline QT3_SUPPORT QWidget *widgetAt(const QPoint &p, bool child)
360         { QWidget *w = widgetAt(p); return child ? w : (w ? w->window() : 0); }
361 #endif // QT3_SUPPORT
362
363 #if defined(Q_INTERNAL_QAPP_SRC) || defined(qdoc)
364     QApplication(int &argc, char **argv);
365     QApplication(int &argc, char **argv, bool GUIenabled);
366     QApplication(int &argc, char **argv, Type);
367 #if defined(Q_WS_X11)
368     QApplication(Display* dpy, Qt::HANDLE visual = 0, Qt::HANDLE cmap = 0);
369     QApplication(Display *dpy, int &argc, char **argv, Qt::HANDLE visual = 0, Qt::HANDLE cmap= 0);
370 #endif
371 #if defined(Q_OS_SYMBIAN) || defined(qdoc)
372     QApplication(QApplication::QS60MainApplicationFactory factory, int &argc, char **argv);
373 #endif
374 #endif
375
376 private:
377     Q_DISABLE_COPY(QApplication)
378     Q_DECLARE_PRIVATE(QApplication)
379
380     friend class QGraphicsWidget;
381     friend class QGraphicsItem;
382     friend class QGraphicsScene;
383     friend class QGraphicsScenePrivate;
384     friend class QWidget;
385     friend class QWidgetPrivate;
386     friend class QWidgetWindow;
387     friend class QETWidget;
388     friend class Q3AccelManager;
389     friend class QTranslator;
390     friend class QWidgetAnimator;
391 #ifndef QT_NO_SHORTCUT
392     friend class QShortcut;
393     friend class QLineEdit;
394     friend class QWidgetTextControl;
395 #endif
396     friend class QAction;
397
398 #if defined(Q_WS_QWS)
399     friend class QInputContext;
400     friend class QWSDirectPainterSurface;
401     friend class QDirectPainter;
402     friend class QDirectPainterPrivate;
403 #endif
404 #ifndef QT_NO_GESTURES
405     friend class QGestureManager;
406 #endif
407
408 #if defined(Q_WS_MAC) || defined(Q_WS_X11)
409     Q_PRIVATE_SLOT(d_func(), void _q_alertTimeOut())
410 #endif
411 #if defined(QT_RX71_MULTITOUCH)
412     Q_PRIVATE_SLOT(d_func(), void _q_readRX71MultiTouchEvents())
413 #endif
414 #if defined(Q_OS_SYMBIAN)
415     Q_PRIVATE_SLOT(d_func(), void _q_aboutToQuit())
416 #endif
417 };
418
419 QT_END_NAMESPACE
420
421 QT_END_HEADER
422
423 #endif // QAPPLICATION_H