1 /*
2  * DQt - D bindings for the Qt Toolkit
3  *
4  * GNU Lesser General Public License Usage
5  * This file may be used under the terms of the GNU Lesser
6  * General Public License version 3 as published by the Free Software
7  * Foundation and appearing in the file LICENSE.LGPL3 included in the
8  * packaging of this file. Please review the following information to
9  * ensure the GNU Lesser General Public License version 3 requirements
10  * will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
11  */
12 module qt.gui.guiapplication;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.bytearray;
17 import qt.core.coreapplication;
18 import qt.core.coreevent;
19 import qt.core.global;
20 import qt.core.list;
21 import qt.core.namespace;
22 import qt.core.nativeinterface;
23 import qt.core.object;
24 import qt.core.point;
25 import qt.core.string;
26 import qt.gui.font;
27 import qt.gui.icon;
28 import qt.gui.inputmethod;
29 import qt.gui.palette;
30 import qt.gui.screen;
31 import qt.gui.stylehints;
32 import qt.gui.windowdefs;
33 import qt.helpers;
34 version(QT_NO_CLIPBOARD){}else
35     import qt.gui.clipboard;
36 version(QT_NO_CURSOR){}else
37     import qt.gui.cursor;
38 
39 extern(C++, class) struct QSessionManager;
40 extern(C++, class) struct QGuiApplicationPrivate;
41 extern(C++, class) struct QPlatformNativeInterface;
42 extern(C++, class) struct QPlatformIntegration;
43 
44 /+ #if defined(qApp)
45 #undef qApp
46 #endif
47 #define qApp (static_cast<QGuiApplication *>(QCoreApplication::instance()))
48 
49 #if defined(qGuiApp)
50 #undef qGuiApp
51 #endif
52 #define qGuiApp (static_cast<QGuiApplication *>(QCoreApplication::instance())) +/
53 
54 /// Binding for C++ class [QGuiApplication](https://doc.qt.io/qt-6/qguiapplication.html).
55 class /+ Q_GUI_EXPORT +/ QGuiApplication : QCoreApplication
56 {
57     mixin(Q_OBJECT);
58     /+ Q_PROPERTY(QIcon windowIcon READ windowIcon WRITE setWindowIcon)
59     Q_PROPERTY(QString applicationDisplayName READ applicationDisplayName
60                WRITE setApplicationDisplayName NOTIFY applicationDisplayNameChanged)
61     Q_PROPERTY(QString desktopFileName READ desktopFileName WRITE setDesktopFileName)
62     Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection
63                NOTIFY layoutDirectionChanged)
64     Q_PROPERTY(QString platformName READ platformName STORED false)
65     Q_PROPERTY(bool quitOnLastWindowClosed  READ quitOnLastWindowClosed
66                WRITE setQuitOnLastWindowClosed)
67     Q_PROPERTY(QScreen *primaryScreen READ primaryScreen NOTIFY primaryScreenChanged STORED false) +/
68 
69 public:
70 /+ #ifdef Q_QDOC
71     QGuiApplication(int &argc, char **argv);
72 #else +/
73     this(ref int argc, char** argv, int = ApplicationFlags);
74 /+ #endif +/
75     ~this();
76 
77     static void setApplicationDisplayName(ref const(QString) name);
78     static QString applicationDisplayName();
79 
80     static void setDesktopFileName(ref const(QString) name);
81     static QString desktopFileName();
82 
83     static QWindowList allWindows();
84     static QWindowList topLevelWindows();
85     static QWindow* topLevelAt(ref const(QPoint) pos);
86 
87     static void setWindowIcon(ref const(QIcon) icon);
88     static QIcon windowIcon();
89 
90     static QString platformName();
91 
92     static QWindow* modalWindow();
93 
94     static QWindow* focusWindow();
95     static QObject focusObject();
96 
97     static QScreen primaryScreen();
98     static QList!(QScreen) screens();
99     static QScreen screenAt(ref const(QPoint) point);
100 
101     final qreal devicePixelRatio() const;
102 
103     version(QT_NO_CURSOR){}else
104     {
105         static QCursor* overrideCursor();
106         static void setOverrideCursor(ref const(QCursor) );
107         static void changeOverrideCursor(ref const(QCursor) );
108         static void restoreOverrideCursor();
109     }
110 
111     static QFont font();
112     static void setFont(ref const(QFont) );
113 
114     version(QT_NO_CLIPBOARD){}else
115     {
116         static QClipboard clipboard();
117     }
118 
119     static QPalette palette();
120     static void setPalette(ref const(QPalette) pal);
121 
122     static /+ Qt:: +/qt.core.namespace.KeyboardModifiers keyboardModifiers();
123     static /+ Qt:: +/qt.core.namespace.KeyboardModifiers queryKeyboardModifiers();
124     static /+ Qt:: +/qt.core.namespace.MouseButtons mouseButtons();
125 
126     static void setLayoutDirection(/+ Qt:: +/qt.core.namespace.LayoutDirection direction);
127     static /+ Qt:: +/qt.core.namespace.LayoutDirection layoutDirection();
128 
129     pragma(inline, true) static bool isRightToLeft() { return layoutDirection() == /+ Qt:: +/qt.core.namespace.LayoutDirection.RightToLeft; }
130     pragma(inline, true) static bool isLeftToRight() { return layoutDirection() == /+ Qt:: +/qt.core.namespace.LayoutDirection.LeftToRight; }
131 
132     static QStyleHints styleHints();
133     static void setDesktopSettingsAware(bool on);
134     static bool desktopSettingsAware();
135 
136     static QInputMethod inputMethod();
137 
138     static QPlatformNativeInterface* platformNativeInterface();
139 
140     mixin(mangleWindows("?platformFunction@QGuiApplication@@SAP6AXXZAEBVQByteArray@@@Z", q{
141     static QFunctionPointer platformFunction(ref const(QByteArray) function_);
142     }));
143 
144     static void setQuitOnLastWindowClosed(bool quit);
145     static bool quitOnLastWindowClosed();
146 
147     static /+ Qt:: +/qt.core.namespace.ApplicationState applicationState();
148 
149     static void setHighDpiScaleFactorRoundingPolicy(/+ Qt:: +/qt.core.namespace.HighDpiScaleFactorRoundingPolicy policy);
150     static /+ Qt:: +/qt.core.namespace.HighDpiScaleFactorRoundingPolicy highDpiScaleFactorRoundingPolicy();
151 
152     static int exec();
153     override bool notify(QObject , QEvent );
154 
155     version(QT_NO_SESSIONMANAGER){}else
156     {
157         // session management
158         final bool isSessionRestored() const;
159         final QString sessionId() const;
160         final QString sessionKey() const;
161         final bool isSavingSession() const;
162     }
163 
164     mixin(QT_DECLARE_NATIVE_INTERFACE_ACCESSOR(q{ValueClass!(QGuiApplication)}));
165 
166     static void sync();
167 /+ Q_SIGNALS +/public:
168     @QSignal final void fontDatabaseChanged();
169     @QSignal final void screenAdded(QScreen screen);
170     @QSignal final void screenRemoved(QScreen screen);
171     @QSignal final void primaryScreenChanged(QScreen screen);
172     @QSignal final void lastWindowClosed();
173     @QSignal final void focusObjectChanged(QObject focusObject);
174     @QSignal final void focusWindowChanged(QWindow* focusWindow);
175     @QSignal final void applicationStateChanged(/+ Qt:: +/qt.core.namespace.ApplicationState state);
176     @QSignal final void layoutDirectionChanged(/+ Qt:: +/qt.core.namespace.LayoutDirection direction);
177     version(QT_NO_SESSIONMANAGER){}else
178     {
179         @QSignal final void commitDataRequest(ref QSessionManager sessionManager);
180         @QSignal final void saveStateRequest(ref QSessionManager sessionManager);
181     }
182     @QSignal final void applicationDisplayNameChanged();
183 /+ #if QT_DEPRECATED_SINCE(6, 0) +/
184     /+ QT_DEPRECATED_VERSION_X_6_0("Handle QEvent::ApplicationPaletteChange instead") +/ @QSignal final void paletteChanged(ref const(QPalette) pal);
185     /+ QT_DEPRECATED_VERSION_X_6_0("Handle QEvent::ApplicationFontChange instead") +/  @QSignal final void fontChanged(ref const(QFont) font);
186 /+ #endif +/
187 protected:
188     override bool event(QEvent );
189     override bool compressEvent(QEvent , QObject receiver, QPostEventList* );
190 
191     this(ref QGuiApplicationPrivate p);
192 
193 private:
194     /+ Q_DISABLE_COPY(QGuiApplication) +/
195     /+ Q_DECLARE_PRIVATE(QGuiApplication) +/
196 
197     /+ Q_PRIVATE_SLOT(d_func(), void _q_updateFocusObject(QObject *object)) +/
198 
199     version(QT_NO_GESTURES){}else
200     {
201         /+ friend class QGestureManager; +/
202     }
203     /+ friend class QFontDatabasePrivate; +/
204     /+ friend class QPlatformIntegration; +/
205     version(QT_NO_SESSIONMANAGER){}else
206     {
207         /+ friend class QPlatformSessionManager; +/
208     }
209     mixin(CREATE_CONVENIENCE_WRAPPERS);
210 }
211