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.widgets.mainwindow;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.bytearray;
17 import qt.core.coreevent;
18 import qt.core.flags;
19 import qt.core.list;
20 import qt.core.namespace;
21 import qt.core.point;
22 import qt.core.size;
23 import qt.core.string;
24 import qt.helpers;
25 import qt.widgets.dockwidget;
26 import qt.widgets.menu;
27 import qt.widgets.menubar;
28 import qt.widgets.statusbar;
29 import qt.widgets.tabwidget;
30 import qt.widgets.toolbar;
31 import qt.widgets.widget;
32 version(QT_NO_CONTEXTMENU){}else
33     import qt.gui.event;
34 
35 /+ #if QT_CONFIG(tabwidget)
36 #endif
37 
38 QT_REQUIRE_CONFIG(mainwindow); +/
39 
40 
41 extern(C++, class) struct QMainWindowPrivate;
42 
43 /// Binding for C++ class [QMainWindow](https://doc.qt.io/qt-6/qmainwindow.html).
44 class /+ Q_WIDGETS_EXPORT +/ QMainWindow : QWidget
45 {
46     mixin(Q_OBJECT);
47 
48     /+ Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize)
49     Q_PROPERTY(Qt::ToolButtonStyle toolButtonStyle READ toolButtonStyle WRITE setToolButtonStyle)
50 #if QT_CONFIG(dockwidget)
51     Q_PROPERTY(bool animated READ isAnimated WRITE setAnimated)
52 #if QT_CONFIG(tabbar)
53     Q_PROPERTY(bool documentMode READ documentMode WRITE setDocumentMode)
54 #endif // QT_CONFIG(tabbar)
55 #if QT_CONFIG(tabwidget)
56     Q_PROPERTY(QTabWidget::TabShape tabShape READ tabShape WRITE setTabShape)
57 #endif // QT_CONFIG(tabwidget)
58     Q_PROPERTY(bool dockNestingEnabled READ isDockNestingEnabled WRITE setDockNestingEnabled)
59 #endif // QT_CONFIG(dockwidget)
60     Q_PROPERTY(DockOptions dockOptions READ dockOptions WRITE setDockOptions)
61 #if QT_CONFIG(toolbar)
62     Q_PROPERTY(bool unifiedTitleAndToolBarOnMac READ unifiedTitleAndToolBarOnMac
63                WRITE setUnifiedTitleAndToolBarOnMac)
64 #endif +/
65 
66 public:
67     enum DockOption {
68         AnimatedDocks = 0x01,
69         AllowNestedDocks = 0x02,
70         AllowTabbedDocks = 0x04,
71         ForceTabbedDocks = 0x08,  // implies AllowTabbedDocks, !AllowNestedDocks
72         VerticalTabs = 0x10,      // implies AllowTabbedDocks
73         GroupedDragging = 0x20    // implies AllowTabbedDocks
74     }
75     /+ Q_ENUM(DockOption) +/
76     /+ Q_DECLARE_FLAGS(DockOptions, DockOption) +/
77 alias DockOptions = QFlags!(DockOption);    /+ Q_FLAG(DockOptions) +/
78 
79     /+ explicit +/this(QWidget parent = null, /+ Qt:: +/qt.core.namespace.WindowFlags flags = /+ Qt:: +/qt.core.namespace.WindowFlags());
80     ~this();
81 
82     final QSize iconSize() const;
83     final void setIconSize(ref const(QSize) iconSize);
84 
85     final /+ Qt:: +/qt.core.namespace.ToolButtonStyle toolButtonStyle() const;
86     final void setToolButtonStyle(/+ Qt:: +/qt.core.namespace.ToolButtonStyle toolButtonStyle);
87 
88 /+ #if QT_CONFIG(dockwidget) +/
89     final bool isAnimated() const;
90     final bool isDockNestingEnabled() const;
91 /+ #endif
92 
93 #if QT_CONFIG(tabbar) +/
94     final bool documentMode() const;
95     final void setDocumentMode(bool enabled);
96 /+ #endif
97 
98 #if QT_CONFIG(tabwidget) +/
99     final QTabWidget.TabShape tabShape() const;
100     final void setTabShape(QTabWidget.TabShape tabShape);
101     final QTabWidget.TabPosition tabPosition(/+ Qt:: +/qt.core.namespace.DockWidgetArea area) const;
102     final void setTabPosition(/+ Qt:: +/qt.core.namespace.DockWidgetAreas areas, QTabWidget.TabPosition tabPosition);
103 /+ #endif +/ // QT_CONFIG(tabwidget)
104 
105     final void setDockOptions(DockOptions options);
106     final DockOptions dockOptions() const;
107 
108     final bool isSeparator(ref const(QPoint) pos) const;
109 
110 /+ #if QT_CONFIG(menubar) +/
111     final QMenuBar menuBar() const;
112     final void setMenuBar(QMenuBar menubar);
113 
114     final QWidget  menuWidget() const;
115     final void setMenuWidget(QWidget menubar);
116 /+ #endif
117 
118 #if QT_CONFIG(statusbar) +/
119     final QStatusBar statusBar() const;
120     final void setStatusBar(QStatusBar statusbar);
121 /+ #endif +/
122 
123     final QWidget centralWidget() const;
124     final void setCentralWidget(QWidget widget);
125 
126     final QWidget takeCentralWidget();
127 
128 /+ #if QT_CONFIG(dockwidget) +/
129     final void setCorner(/+ Qt:: +/qt.core.namespace.Corner corner, /+ Qt:: +/qt.core.namespace.DockWidgetArea area);
130     final /+ Qt:: +/qt.core.namespace.DockWidgetArea corner(/+ Qt:: +/qt.core.namespace.Corner corner) const;
131 /+ #endif
132 
133 #if QT_CONFIG(toolbar) +/
134     final void addToolBarBreak(/+ Qt:: +/qt.core.namespace.ToolBarArea area = /+ Qt:: +/qt.core.namespace.ToolBarArea.TopToolBarArea);
135     final void insertToolBarBreak(QToolBar before);
136 
137     final void addToolBar(/+ Qt:: +/qt.core.namespace.ToolBarArea area, QToolBar toolbar);
138     final void addToolBar(QToolBar toolbar);
139     final QToolBar addToolBar(ref const(QString) title);
140     final void insertToolBar(QToolBar before, QToolBar toolbar);
141     final void removeToolBar(QToolBar toolbar);
142     final void removeToolBarBreak(QToolBar before);
143 
144     final bool unifiedTitleAndToolBarOnMac() const;
145 
146     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
147     final /+ Qt:: +/qt.core.namespace.ToolBarArea toolBarArea(const(QToolBar) toolbar) const;
148     }));
149     final bool toolBarBreak(QToolBar toolbar) const;
150 /+ #endif // QT_CONFIG(toolbar)
151 
152 #if QT_CONFIG(dockwidget) +/
153     final void addDockWidget(/+ Qt:: +/qt.core.namespace.DockWidgetArea area, QDockWidget dockwidget);
154     final void addDockWidget(/+ Qt:: +/qt.core.namespace.DockWidgetArea area, QDockWidget dockwidget,
155                            /+ Qt:: +/qt.core.namespace.Orientation orientation);
156     final void splitDockWidget(QDockWidget after, QDockWidget dockwidget,
157                              /+ Qt:: +/qt.core.namespace.Orientation orientation);
158 /+ #if QT_CONFIG(tabbar) +/
159     final void tabifyDockWidget(QDockWidget first, QDockWidget second);
160     final QList!(QDockWidget) tabifiedDockWidgets(QDockWidget dockwidget) const;
161 /+ #endif +/
162     final void removeDockWidget(QDockWidget dockwidget);
163     final bool restoreDockWidget(QDockWidget dockwidget);
164 
165     final /+ Qt:: +/qt.core.namespace.DockWidgetArea dockWidgetArea(QDockWidget dockwidget) const;
166 
167     final void resizeDocks(ref const(QList!(QDockWidget)) docks,
168                          ref const(QList!(int)) sizes, /+ Qt:: +/qt.core.namespace.Orientation orientation);
169 /+ #endif +/ // QT_CONFIG(dockwidget)
170 
171     final QByteArray saveState(int version_ = 0) const;
172     final bool restoreState(ref const(QByteArray) state, int version_ = 0);
173 
174 /+ #if QT_CONFIG(menu) +/
175     /+ virtual +/ QMenu createPopupMenu();
176 /+ #endif +/
177 
178 public /+ Q_SLOTS +/:
179 /+ #if QT_CONFIG(dockwidget) +/
180     @QSlot final void setAnimated(bool enabled);
181     @QSlot final void setDockNestingEnabled(bool enabled);
182 /+ #endif
183 #if QT_CONFIG(toolbar) +/
184     @QSlot final void setUnifiedTitleAndToolBarOnMac(bool set);
185 /+ #endif +/
186 
187 /+ Q_SIGNALS +/public:
188     @QSignal final void iconSizeChanged(ref const(QSize) iconSize);
189     @QSignal final void toolButtonStyleChanged(/+ Qt:: +/qt.core.namespace.ToolButtonStyle toolButtonStyle);
190 /+ #if QT_CONFIG(dockwidget) +/
191     @QSignal final void tabifiedDockWidgetActivated(QDockWidget dockWidget);
192 /+ #endif +/
193 
194 protected:
195     version(QT_NO_CONTEXTMENU){}else
196     {
197         override void contextMenuEvent(QContextMenuEvent event);
198     }
199     override bool event(QEvent event);
200 
201 private:
202     /+ Q_DECLARE_PRIVATE(QMainWindow) +/
203     /+ Q_DISABLE_COPY(QMainWindow) +/
204     mixin(CREATE_CONVENIENCE_WRAPPERS);
205 }
206 /+pragma(inline, true) QFlags!(QMainWindow.DockOptions.enum_type) operator |(QMainWindow.DockOptions.enum_type f1, QMainWindow.DockOptions.enum_type f2)/+noexcept+/{return QFlags!(QMainWindow.DockOptions.enum_type)(f1)|f2;}+/
207 /+pragma(inline, true) QFlags!(QMainWindow.DockOptions.enum_type) operator |(QMainWindow.DockOptions.enum_type f1, QFlags!(QMainWindow.DockOptions.enum_type) f2)/+noexcept+/{return f2|f1;}+/
208 /+pragma(inline, true) QFlags!(QMainWindow.DockOptions.enum_type) operator &(QMainWindow.DockOptions.enum_type f1, QMainWindow.DockOptions.enum_type f2)/+noexcept+/{return QFlags!(QMainWindow.DockOptions.enum_type)(f1)&f2;}+/
209 /+pragma(inline, true) QFlags!(QMainWindow.DockOptions.enum_type) operator &(QMainWindow.DockOptions.enum_type f1, QFlags!(QMainWindow.DockOptions.enum_type) f2)/+noexcept+/{return f2&f1;}+/
210 /+pragma(inline, true) void operator +(QMainWindow.DockOptions.enum_type f1, QMainWindow.DockOptions.enum_type f2)/+noexcept+/;+/
211 /+pragma(inline, true) void operator +(QMainWindow.DockOptions.enum_type f1, QFlags!(QMainWindow.DockOptions.enum_type) f2)/+noexcept+/;+/
212 /+pragma(inline, true) void operator +(int f1, QFlags!(QMainWindow.DockOptions.enum_type) f2)/+noexcept+/;+/
213 /+pragma(inline, true) void operator -(QMainWindow.DockOptions.enum_type f1, QMainWindow.DockOptions.enum_type f2)/+noexcept+/;+/
214 /+pragma(inline, true) void operator -(QMainWindow.DockOptions.enum_type f1, QFlags!(QMainWindow.DockOptions.enum_type) f2)/+noexcept+/;+/
215 /+pragma(inline, true) void operator -(int f1, QFlags!(QMainWindow.DockOptions.enum_type) f2)/+noexcept+/;+/
216 /+pragma(inline, true) QIncompatibleFlag operator |(QMainWindow.DockOptions.enum_type f1, int f2)/+noexcept+/{return QIncompatibleFlag(int(f1)|f2);}+/
217 /+pragma(inline, true) void operator +(int f1, QMainWindow.DockOptions.enum_type f2)/+noexcept+/;+/
218 /+pragma(inline, true) void operator +(QMainWindow.DockOptions.enum_type f1, int f2)/+noexcept+/;+/
219 /+pragma(inline, true) void operator -(int f1, QMainWindow.DockOptions.enum_type f2)/+noexcept+/;+/
220 /+pragma(inline, true) void operator -(QMainWindow.DockOptions.enum_type f1, int f2)/+noexcept+/;+/
221 
222 /+ Q_DECLARE_OPERATORS_FOR_FLAGS(QMainWindow::DockOptions) +/