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.widget;
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.global;
20 import qt.core.list;
21 import qt.core.locale;
22 import qt.core.margins;
23 import qt.core.namespace;
24 import qt.core.object;
25 import qt.core.point;
26 import qt.core.rect;
27 import qt.core.size;
28 import qt.core.string;
29 import qt.core.variant;
30 import qt.gui.bitmap;
31 import qt.gui.event;
32 import qt.gui.font;
33 import qt.gui.fontinfo;
34 import qt.gui.fontmetrics;
35 import qt.gui.icon;
36 import qt.gui.paintdevice;
37 import qt.gui.paintengine;
38 import qt.gui.painter;
39 import qt.gui.palette;
40 import qt.gui.pixmap;
41 import qt.gui.region;
42 import qt.gui.screen;
43 import qt.gui.windowdefs;
44 import qt.helpers;
45 import qt.widgets.layout;
46 import qt.widgets.sizepolicy;
47 import qt.widgets.style;
48 version(QT_NO_ACTION){}else
49     import qt.gui.action;
50 version(QT_NO_CURSOR){}else
51     import qt.gui.cursor;
52 version(QT_NO_SHORTCUT){}else
53     import qt.gui.keysequence;
54 
55 
56 alias QWidgetList = QList!(QWidget);
57 /+ #if QT_CONFIG(shortcut)
58 #endif
59 
60 #ifdef QT_INCLUDE_COMPAT
61 #endif +/
62 
63 
64 
65 extern(C++, class) struct QBackingStore;
66 extern(C++, class) struct QPlatformWindow;
67 extern(C++, class) struct QGraphicsProxyWidget;
68 extern(C++, class) struct QGraphicsEffect;
69 extern(C++, class) struct QRasterWindowSurface;
70 extern(C++, class) struct QUnifiedToolbarSurface;
71 /+ #ifndef QT_NO_DEBUG_STREAM
72 class QDebug;
73 #endif +/
74 
75 extern(C++, class) struct QWidgetData
76 {
77 public:
78     WId winid;
79     uint widget_attributes;
80     /+ Qt:: +/qt.core.namespace.WindowFlags window_flags;
81     /+ uint window_state : 4; +/
82     uint bitfieldData_window_state;
83     final uint window_state() const
84     {
85         return (bitfieldData_window_state >> 0) & 0xf;
86     }
87     final uint window_state(uint value)
88     {
89         bitfieldData_window_state = (bitfieldData_window_state & ~0xf) | ((value & 0xf) << 0);
90         return value;
91     }
92     /+ uint focus_policy : 4; +/
93     final uint focus_policy() const
94     {
95         return (bitfieldData_window_state >> 4) & 0xf;
96     }
97     final uint focus_policy(uint value)
98     {
99         bitfieldData_window_state = (bitfieldData_window_state & ~0xf0) | ((value & 0xf) << 4);
100         return value;
101     }
102     /+ uint sizehint_forced :1; +/
103     final uint sizehint_forced() const
104     {
105         return (bitfieldData_window_state >> 8) & 0x1;
106     }
107     final uint sizehint_forced(uint value)
108     {
109         bitfieldData_window_state = (bitfieldData_window_state & ~0x100) | ((value & 0x1) << 8);
110         return value;
111     }
112     /+ uint is_closing :1; +/
113     final uint is_closing() const
114     {
115         return (bitfieldData_window_state >> 9) & 0x1;
116     }
117     final uint is_closing(uint value)
118     {
119         bitfieldData_window_state = (bitfieldData_window_state & ~0x200) | ((value & 0x1) << 9);
120         return value;
121     }
122     /+ uint in_show : 1; +/
123     final uint in_show() const
124     {
125         return (bitfieldData_window_state >> 10) & 0x1;
126     }
127     final uint in_show(uint value)
128     {
129         bitfieldData_window_state = (bitfieldData_window_state & ~0x400) | ((value & 0x1) << 10);
130         return value;
131     }
132     /+ uint in_set_window_state : 1; +/
133     final uint in_set_window_state() const
134     {
135         return (bitfieldData_window_state >> 11) & 0x1;
136     }
137     final uint in_set_window_state(uint value)
138     {
139         bitfieldData_window_state = (bitfieldData_window_state & ~0x800) | ((value & 0x1) << 11);
140         return value;
141     }
142     /+ mutable uint fstrut_dirty : 1; +/
143     final uint fstrut_dirty() const
144     {
145         return (bitfieldData_window_state >> 12) & 0x1;
146     }
147     final uint fstrut_dirty(uint value)
148     {
149         bitfieldData_window_state = (bitfieldData_window_state & ~0x1000) | ((value & 0x1) << 12);
150         return value;
151     }
152     /+ uint context_menu_policy : 3; +/
153     final uint context_menu_policy() const
154     {
155         return (bitfieldData_window_state >> 13) & 0x7;
156     }
157     final uint context_menu_policy(uint value)
158     {
159         bitfieldData_window_state = (bitfieldData_window_state & ~0xe000) | ((value & 0x7) << 13);
160         return value;
161     }
162     /+ uint window_modality : 2; +/
163     final uint window_modality() const
164     {
165         return (bitfieldData_window_state >> 16) & 0x3;
166     }
167     final uint window_modality(uint value)
168     {
169         bitfieldData_window_state = (bitfieldData_window_state & ~0x30000) | ((value & 0x3) << 16);
170         return value;
171     }
172     /+ uint in_destructor : 1; +/
173     final uint in_destructor() const
174     {
175         return (bitfieldData_window_state >> 18) & 0x1;
176     }
177     final uint in_destructor(uint value)
178     {
179         bitfieldData_window_state = (bitfieldData_window_state & ~0x40000) | ((value & 0x1) << 18);
180         return value;
181     }
182     /+ uint unused : 13; +/
183     final uint unused() const
184     {
185         return (bitfieldData_window_state >> 19) & 0x1fff;
186     }
187     final uint unused(uint value)
188     {
189         bitfieldData_window_state = (bitfieldData_window_state & ~0xfff80000) | ((value & 0x1fff) << 19);
190         return value;
191     }
192     QRect crect;
193     /+ mutable +/ QPalette pal;
194     QFont fnt;
195     QRect wrect;
196 }
197 
198 extern(C++, class) struct QWidgetPrivate;
199 
200 /// Binding for C++ class [QWidget](https://doc.qt.io/qt-6/qwidget.html).
201 class /+ Q_WIDGETS_EXPORT +/ QWidget : QObject, QPaintDeviceInterface
202 {
203     import qt.core.namespace;
204     QPaintDeviceFakeInheritance baseQPaintDeviceInterface;
205 
206     mixin(Q_OBJECT);
207     /+ Q_DECLARE_PRIVATE(QWidget) +/
208 
209     /+ Q_PROPERTY(bool modal READ isModal)
210     Q_PROPERTY(Qt::WindowModality windowModality READ windowModality WRITE setWindowModality)
211     Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
212     Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry)
213     Q_PROPERTY(QRect frameGeometry READ frameGeometry)
214     Q_PROPERTY(QRect normalGeometry READ normalGeometry)
215     Q_PROPERTY(int x READ x)
216     Q_PROPERTY(int y READ y)
217     Q_PROPERTY(QPoint pos READ pos WRITE move DESIGNABLE false STORED false)
218     Q_PROPERTY(QSize frameSize READ frameSize)
219     Q_PROPERTY(QSize size READ size WRITE resize DESIGNABLE false STORED false)
220     Q_PROPERTY(int width READ width)
221     Q_PROPERTY(int height READ height)
222     Q_PROPERTY(QRect rect READ rect)
223     Q_PROPERTY(QRect childrenRect READ childrenRect)
224     Q_PROPERTY(QRegion childrenRegion READ childrenRegion)
225     Q_PROPERTY(QSizePolicy sizePolicy READ sizePolicy WRITE setSizePolicy)
226     Q_PROPERTY(QSize minimumSize READ minimumSize WRITE setMinimumSize)
227     Q_PROPERTY(QSize maximumSize READ maximumSize WRITE setMaximumSize)
228     Q_PROPERTY(int minimumWidth READ minimumWidth WRITE setMinimumWidth STORED false
229                DESIGNABLE false)
230     Q_PROPERTY(int minimumHeight READ minimumHeight WRITE setMinimumHeight STORED false
231                DESIGNABLE false)
232     Q_PROPERTY(int maximumWidth READ maximumWidth WRITE setMaximumWidth STORED false
233                DESIGNABLE false)
234     Q_PROPERTY(int maximumHeight READ maximumHeight WRITE setMaximumHeight STORED false
235                DESIGNABLE false)
236     Q_PROPERTY(QSize sizeIncrement READ sizeIncrement WRITE setSizeIncrement)
237     Q_PROPERTY(QSize baseSize READ baseSize WRITE setBaseSize)
238     Q_PROPERTY(QPalette palette READ palette WRITE setPalette)
239     Q_PROPERTY(QFont font READ font WRITE setFont)
240 #ifndef QT_NO_CURSOR
241     Q_PROPERTY(QCursor cursor READ cursor WRITE setCursor RESET unsetCursor)
242 #endif
243     Q_PROPERTY(bool mouseTracking READ hasMouseTracking WRITE setMouseTracking)
244     Q_PROPERTY(bool tabletTracking READ hasTabletTracking WRITE setTabletTracking)
245     Q_PROPERTY(bool isActiveWindow READ isActiveWindow)
246     Q_PROPERTY(Qt::FocusPolicy focusPolicy READ focusPolicy WRITE setFocusPolicy)
247     Q_PROPERTY(bool focus READ hasFocus)
248     Q_PROPERTY(Qt::ContextMenuPolicy contextMenuPolicy READ contextMenuPolicy WRITE setContextMenuPolicy)
249     Q_PROPERTY(bool updatesEnabled READ updatesEnabled WRITE setUpdatesEnabled DESIGNABLE false)
250     Q_PROPERTY(bool visible READ isVisible WRITE setVisible DESIGNABLE false)
251     Q_PROPERTY(bool minimized READ isMinimized)
252     Q_PROPERTY(bool maximized READ isMaximized)
253     Q_PROPERTY(bool fullScreen READ isFullScreen)
254     Q_PROPERTY(QSize sizeHint READ sizeHint)
255     Q_PROPERTY(QSize minimumSizeHint READ minimumSizeHint)
256     Q_PROPERTY(bool acceptDrops READ acceptDrops WRITE setAcceptDrops)
257     Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle NOTIFY windowTitleChanged)
258     Q_PROPERTY(QIcon windowIcon READ windowIcon WRITE setWindowIcon NOTIFY windowIconChanged)
259     Q_PROPERTY(QString windowIconText READ windowIconText WRITE setWindowIconText NOTIFY windowIconTextChanged) // deprecated
260     Q_PROPERTY(double windowOpacity READ windowOpacity WRITE setWindowOpacity)
261     Q_PROPERTY(bool windowModified READ isWindowModified WRITE setWindowModified)
262 #if QT_CONFIG(tooltip)
263     Q_PROPERTY(QString toolTip READ toolTip WRITE setToolTip)
264     Q_PROPERTY(int toolTipDuration READ toolTipDuration WRITE setToolTipDuration)
265 #endif
266 #if QT_CONFIG(statustip)
267     Q_PROPERTY(QString statusTip READ statusTip WRITE setStatusTip)
268 #endif
269 #if QT_CONFIG(whatsthis)
270     Q_PROPERTY(QString whatsThis READ whatsThis WRITE setWhatsThis)
271 #endif
272 #ifndef QT_NO_ACCESSIBILITY
273     Q_PROPERTY(QString accessibleName READ accessibleName WRITE setAccessibleName)
274     Q_PROPERTY(QString accessibleDescription READ accessibleDescription WRITE setAccessibleDescription)
275 #endif
276     Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection RESET unsetLayoutDirection)
277     QDOC_PROPERTY(Qt::WindowFlags windowFlags READ windowFlags WRITE setWindowFlags)
278     Q_PROPERTY(bool autoFillBackground READ autoFillBackground WRITE setAutoFillBackground)
279 #ifndef QT_NO_STYLE_STYLESHEET
280     Q_PROPERTY(QString styleSheet READ styleSheet WRITE setStyleSheet)
281 #endif
282     Q_PROPERTY(QLocale locale READ locale WRITE setLocale RESET unsetLocale)
283     Q_PROPERTY(QString windowFilePath READ windowFilePath WRITE setWindowFilePath)
284     Q_PROPERTY(Qt::InputMethodHints inputMethodHints READ inputMethodHints WRITE setInputMethodHints) +/
285 
286 public:
287     enum RenderFlag {
288         DrawWindowBackground = 0x1,
289         DrawChildren = 0x2,
290         IgnoreMask = 0x4
291     }
292     /+ Q_DECLARE_FLAGS(RenderFlags, RenderFlag) +/
293 alias RenderFlags = QFlags!(RenderFlag);
294     /+ explicit +/this(QWidget parent = null, /+ Qt:: +/qt.core.namespace.WindowFlags f = /+ Qt:: +/qt.core.namespace.WindowFlags());
295     ~this();
296 
297     override int devType() const;
298 
299     final WId winId() const;
300     final void createWinId(); // internal, going away
301     pragma(inline, true) final WId internalWinId() const { return data.winid; }
302     final WId effectiveWinId() const;
303 
304     // GUI style setting
305     final QStyle style() const;
306     final void setStyle(QStyle );
307     // Widget types and states
308 
309 /+ #if QT_DEPRECATED_SINCE(6, 1) +/
310     /+ QT_DEPRECATED_VERSION_X_6_1("Use isWindow()") +/
311         pragma(inline, true) final bool isTopLevel() const
312     { return (cast(bool)(windowType() & /+ Qt:: +/qt.core.namespace.WindowType.Window)); }
313 /+ #endif +/
314     pragma(inline, true) final bool isWindow() const
315     { return (cast(bool)(windowType() & /+ Qt:: +/qt.core.namespace.WindowType.Window)); }
316 
317     pragma(inline, true) final bool isModal() const
318     { return data.window_modality != /+ Qt:: +/qt.core.namespace.WindowModality.NonModal; }
319     final /+ Qt:: +/qt.core.namespace.WindowModality windowModality() const;
320     final void setWindowModality(/+ Qt:: +/qt.core.namespace.WindowModality windowModality);
321 
322     pragma(inline, true) final bool isEnabled() const
323     { return !testAttribute(/+ Qt:: +/qt.core.namespace.WidgetAttribute.WA_Disabled); }
324     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
325     final bool isEnabledTo(const(QWidget) ) const;
326     }));
327 
328 public /+ Q_SLOTS +/:
329     @QSlot final void setEnabled(bool);
330     @QSlot final void setDisabled(bool);
331     @QSlot final void setWindowModified(bool);
332 
333     // Widget coordinates
334 
335 public:
336     final QRect frameGeometry() const;
337     pragma(inline, true) final ref const(QRect) geometry() const
338     { return data.crect; }
339     final QRect normalGeometry() const;
340 
341     final int x() const;
342     final int y() const;
343     final QPoint pos() const;
344     final QSize frameSize() const;
345     pragma(inline, true) final QSize size() const
346     { return data.crect.size(); }
347     pragma(inline, true) final int width() const
348     { return data.crect.width(); }
349     pragma(inline, true) final int height() const
350     { return data.crect.height(); }
351     pragma(inline, true) final QRect rect() const
352     { return QRect(0,0,data.crect.width(),data.crect.height()); }
353     final QRect childrenRect() const;
354     final QRegion childrenRegion() const;
355 
356     final QSize minimumSize() const;
357     final QSize maximumSize() const;
358     pragma(inline, true) final int minimumWidth() const
359     { return minimumSize().width(); }
360     pragma(inline, true) final int minimumHeight() const
361     { return minimumSize().height(); }
362     pragma(inline, true) final int maximumWidth() const
363     { return maximumSize().width(); }
364     pragma(inline, true) final int maximumHeight() const
365     { return maximumSize().height(); }
366     pragma(inline, true) final void setMinimumSize(ref const(QSize) s)
367     { setMinimumSize(s.width(),s.height()); }
368     final void setMinimumSize(int minw, int minh);
369     pragma(inline, true) final void setMaximumSize(ref const(QSize) s)
370     { setMaximumSize(s.width(),s.height()); }
371     final void setMaximumSize(int maxw, int maxh);
372     final void setMinimumWidth(int minw);
373     final void setMinimumHeight(int minh);
374     final void setMaximumWidth(int maxw);
375     final void setMaximumHeight(int maxh);
376 
377 /+ #ifdef Q_QDOC
378     void setupUi(QWidget *widget);
379 #endif +/
380 
381     final QSize sizeIncrement() const;
382     pragma(inline, true) final void setSizeIncrement(ref const(QSize) s)
383     { setSizeIncrement(s.width(),s.height()); }
384     final void setSizeIncrement(int w, int h);
385     final QSize baseSize() const;
386     pragma(inline, true) final void setBaseSize(ref const(QSize) s)
387     { setBaseSize(s.width(),s.height()); }
388     final void setBaseSize(int basew, int baseh);
389 
390     final void setFixedSize(ref const(QSize) );
391     final void setFixedSize(int w, int h);
392     final void setFixedWidth(int w);
393     final void setFixedHeight(int h);
394 
395     // Widget coordinate mapping
396 
397     final QPointF mapToGlobal(ref const(QPointF) ) const;
398     final QPoint mapToGlobal(ref const(QPoint) ) const;
399     final QPointF mapFromGlobal(ref const(QPointF) ) const;
400     final QPoint mapFromGlobal(ref const(QPoint) ) const;
401     final QPointF mapToParent(ref const(QPointF) ) const;
402     final QPoint mapToParent(ref const(QPoint) ) const;
403     final QPointF mapFromParent(ref const(QPointF) ) const;
404     final QPoint mapFromParent(ref const(QPoint) ) const;
405     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
406     final QPointF mapTo(const(QWidget) , ref const(QPointF) ) const;
407     }));
408     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
409     final QPoint mapTo(const(QWidget) , ref const(QPoint) ) const;
410     }));
411     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
412     final QPointF mapFrom(const(QWidget) , ref const(QPointF) ) const;
413     }));
414     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
415     final QPoint mapFrom(const(QWidget) , ref const(QPoint) ) const;
416     }));
417 
418     final QWidget window() const;
419     final QWidget nativeParentWidget() const;
420     pragma(inline, true) final QWidget topLevelWidget() const { return window(); }
421 
422     // Widget appearance functions
423     final ref const(QPalette) palette() const;
424     final void setPalette(ref const(QPalette) );
425 
426     final void setBackgroundRole(QPalette.ColorRole);
427     final QPalette.ColorRole backgroundRole() const;
428 
429     final void setForegroundRole(QPalette.ColorRole);
430     final QPalette.ColorRole foregroundRole() const;
431 
432     pragma(inline, true) final ref const(QFont) font() const
433     { return data.fnt; }
434     final void setFont(ref const(QFont) );
435     pragma(inline, true) final QFontMetrics fontMetrics() const
436     { auto tmp = data.fnt; return QFontMetrics(tmp); }
437     pragma(inline, true) final QFontInfo fontInfo() const
438     { auto tmp = data.fnt; return QFontInfo(tmp); }
439 
440     version(QT_NO_CURSOR){}else
441     {
442         final QCursor cursor() const;
443         final void setCursor(ref const(QCursor) );
444         final void unsetCursor();
445     }
446 
447     pragma(inline, true) final void setMouseTracking(bool enable)
448     { setAttribute(/+ Qt:: +/qt.core.namespace.WidgetAttribute.WA_MouseTracking, enable); }
449     pragma(inline, true) final bool hasMouseTracking() const
450     { return testAttribute(/+ Qt:: +/qt.core.namespace.WidgetAttribute.WA_MouseTracking); }
451     pragma(inline, true) final bool underMouse() const
452     { return testAttribute(/+ Qt:: +/qt.core.namespace.WidgetAttribute.WA_UnderMouse); }
453 
454     pragma(inline, true) final void setTabletTracking(bool enable)
455     { setAttribute(/+ Qt:: +/qt.core.namespace.WidgetAttribute.WA_TabletTracking, enable); }
456     pragma(inline, true) final bool hasTabletTracking() const
457     { return testAttribute(/+ Qt:: +/qt.core.namespace.WidgetAttribute.WA_TabletTracking); }
458 
459     final void setMask(ref const(QBitmap) );
460     final void setMask(ref const(QRegion) );
461     final QRegion mask() const;
462     final void clearMask();
463 
464     final void render(QPaintDevice target, ref const(QPoint) targetOffset = globalInitVar!QPoint,
465                     ref const(QRegion) sourceRegion = globalInitVar!QRegion,
466                     RenderFlags renderFlags = RenderFlags(RenderFlag.DrawWindowBackground | RenderFlag.DrawChildren));
467 
468     final void render(QPainter* painter, ref const(QPoint) targetOffset = globalInitVar!QPoint,
469                     ref const(QRegion) sourceRegion = globalInitVar!QRegion,
470                     RenderFlags renderFlags = RenderFlags(RenderFlag.DrawWindowBackground | RenderFlag.DrawChildren));
471 
472     @QInvokable final QPixmap grab(ref const(QRect) rectangle /+ = QRect(QPoint(0, 0), QSize(-1, -1)) +/);
473 
474 /+ #if QT_CONFIG(graphicseffect) +/
475     final QGraphicsEffect* graphicsEffect() const;
476     final void setGraphicsEffect(QGraphicsEffect* effect);
477 /+ #endif // QT_CONFIG(graphicseffect)
478 
479 #ifndef QT_NO_GESTURES +/
480     version(QT_NO_GESTURES){}else
481     {
482         final void grabGesture(/+ Qt:: +/qt.core.namespace.GestureType type, /+ Qt:: +/qt.core.namespace.GestureFlags flags = /+ Qt:: +/qt.core.namespace.GestureFlags());
483         final void ungrabGesture(/+ Qt:: +/qt.core.namespace.GestureType type);
484     }
485 /+ #endif +/
486 
487 public /+ Q_SLOTS +/:
488     @QSlot final void setWindowTitle(ref const(QString) );
489     version(QT_NO_STYLE_STYLESHEET){}else
490     {
491         @QSlot final void setStyleSheet(ref const(QString) styleSheet);
492     }
493 public:
494     version(QT_NO_STYLE_STYLESHEET){}else
495     {
496         final QString styleSheet() const;
497     }
498     final QString windowTitle() const;
499     final void setWindowIcon(ref const(QIcon) icon);
500     final QIcon windowIcon() const;
501     final void setWindowIconText(ref const(QString) );
502     final QString windowIconText() const;
503     final void setWindowRole(ref const(QString) );
504     final QString windowRole() const;
505     final void setWindowFilePath(ref const(QString) filePath);
506     final QString windowFilePath() const;
507 
508     final void setWindowOpacity(qreal level);
509     final qreal windowOpacity() const;
510 
511     final bool isWindowModified() const;
512 /+ #if QT_CONFIG(tooltip) +/
513     final void setToolTip(ref const(QString) );
514     final QString toolTip() const;
515     final void setToolTipDuration(int msec);
516     final int toolTipDuration() const;
517 /+ #endif
518 #if QT_CONFIG(statustip) +/
519     final void setStatusTip(ref const(QString) );
520     final QString statusTip() const;
521 /+ #endif
522 #if QT_CONFIG(whatsthis) +/
523     final void setWhatsThis(ref const(QString) );
524     final QString whatsThis() const;
525 /+ #endif
526 #ifndef QT_NO_ACCESSIBILITY +/
527     version(QT_NO_ACCESSIBILITY){}else
528     {
529         final QString accessibleName() const;
530         final void setAccessibleName(ref const(QString) name);
531         final QString accessibleDescription() const;
532         final void setAccessibleDescription(ref const(QString) description);
533     }
534 /+ #endif +/
535 
536     final void setLayoutDirection(/+ Qt:: +/qt.core.namespace.LayoutDirection direction);
537     final /+ Qt:: +/qt.core.namespace.LayoutDirection layoutDirection() const;
538     final void unsetLayoutDirection();
539 
540     final void setLocale(ref const(QLocale) locale);
541     final QLocale locale() const;
542     final void unsetLocale();
543 
544     pragma(inline, true) final bool isRightToLeft() const { return layoutDirection() == /+ Qt:: +/qt.core.namespace.LayoutDirection.RightToLeft; }
545     pragma(inline, true) final bool isLeftToRight() const { return layoutDirection() == /+ Qt:: +/qt.core.namespace.LayoutDirection.LeftToRight; }
546 
547 public /+ Q_SLOTS +/:
548     pragma(inline, true) @QSlot final void setFocus() { setFocus(/+ Qt:: +/qt.core.namespace.FocusReason.OtherFocusReason); }
549 
550 public:
551     final bool isActiveWindow() const;
552     final void activateWindow();
553     final void clearFocus();
554 
555     final void setFocus(/+ Qt:: +/qt.core.namespace.FocusReason reason);
556     final /+ Qt:: +/qt.core.namespace.FocusPolicy focusPolicy() const;
557     final void setFocusPolicy(/+ Qt:: +/qt.core.namespace.FocusPolicy policy);
558     final bool hasFocus() const;
559     static void setTabOrder(QWidget , QWidget );
560     final void setFocusProxy(QWidget );
561     final QWidget focusProxy() const;
562     final /+ Qt:: +/qt.core.namespace.ContextMenuPolicy contextMenuPolicy() const;
563     final void setContextMenuPolicy(/+ Qt:: +/qt.core.namespace.ContextMenuPolicy policy);
564 
565     // Grab functions
566     final void grabMouse();
567     version(QT_NO_CURSOR){}else
568     {
569         final void grabMouse(ref const(QCursor) );
570     }
571     final void releaseMouse();
572     final void grabKeyboard();
573     final void releaseKeyboard();
574     version(QT_NO_SHORTCUT){}else
575     {
576         final int grabShortcut(ref const(QKeySequence) key, /+ Qt:: +/qt.core.namespace.ShortcutContext context = /+ Qt:: +/qt.core.namespace.ShortcutContext.WindowShortcut);
577         final void releaseShortcut(int id);
578         final void setShortcutEnabled(int id, bool enable = true);
579         final void setShortcutAutoRepeat(int id, bool enable = true);
580     }
581     static QWidget mouseGrabber();
582     static QWidget keyboardGrabber();
583 
584     // Update/refresh functions
585     pragma(inline, true) final bool updatesEnabled() const
586     { return !testAttribute(/+ Qt:: +/qt.core.namespace.WidgetAttribute.WA_UpdatesDisabled); }
587     final void setUpdatesEnabled(bool enable);
588 
589 /+ #if QT_CONFIG(graphicsview) +/
590     final QGraphicsProxyWidget* graphicsProxyWidget() const;
591 /+ #endif +/
592 
593 public /+ Q_SLOTS +/:
594     @QSlot final void update();
595     @QSlot final void repaint();
596 
597 public:
598     pragma(inline, true) final void update(int ax, int ay, int aw, int ah)
599     { auto tmp = QRect(ax, ay, aw, ah); update(tmp); }
600     final void update(ref const(QRect));
601     final void update(ref const(QRegion));
602 
603     final void repaint(int x, int y, int w, int h);
604     final void repaint(ref const(QRect) );
605     final void repaint(ref const(QRegion) );
606 
607 public /+ Q_SLOTS +/:
608     // Widget management functions
609 
610     /+ virtual +/ @QSlot void setVisible(bool visible);
611     @QSlot final void setHidden(bool hidden);
612     @QSlot final void show();
613     @QSlot final void hide();
614 
615     @QSlot final void showMinimized();
616     @QSlot final void showMaximized();
617     @QSlot final void showFullScreen();
618     @QSlot final void showNormal();
619 
620     @QSlot final bool close();
621     @QSlot final void raise();
622     @QSlot final void lower();
623 
624 public:
625     final void stackUnder(QWidget);
626     pragma(inline, true) final void move(int ax, int ay)
627     { auto tmp = QPoint(ax, ay); move(tmp); }
628     final void move(ref const(QPoint) );
629     pragma(inline, true) final void resize(int w, int h)
630     { auto tmp = QSize(w, h); resize(tmp); }
631     final void resize(ref const(QSize) );
632     pragma(inline, true) final void setGeometry(int ax, int ay, int aw, int ah)
633     { auto tmp = QRect(ax, ay, aw, ah); setGeometry(tmp); }
634     final void setGeometry(ref const(QRect) );
635     final QByteArray saveGeometry() const;
636     final bool restoreGeometry(ref const(QByteArray) geometry);
637     final void adjustSize();
638     pragma(inline, true) final bool isVisible() const
639     { return testAttribute(/+ Qt:: +/qt.core.namespace.WidgetAttribute.WA_WState_Visible); }
640     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
641     final bool isVisibleTo(const(QWidget) ) const;
642     }));
643     pragma(inline, true) final bool isHidden() const
644     { return testAttribute(/+ Qt:: +/qt.core.namespace.WidgetAttribute.WA_WState_Hidden); }
645 
646     final bool isMinimized() const;
647     final bool isMaximized() const;
648     final bool isFullScreen() const;
649 
650     final /+ Qt:: +/qt.core.namespace.WindowStates windowState() const;
651     final void setWindowState(/+ Qt:: +/qt.core.namespace.WindowStates state);
652     final void overrideWindowState(/+ Qt:: +/qt.core.namespace.WindowStates state);
653 
654     /+ virtual +/ QSize sizeHint() const;
655     /+ virtual +/ QSize minimumSizeHint() const;
656 
657     final QSizePolicy sizePolicy() const;
658     final void setSizePolicy(QSizePolicy);
659 /+    pragma(inline, true) final void setSizePolicy(QSizePolicy.Policy hor, QSizePolicy.Policy ver)
660     { setSizePolicy(QSizePolicy(hor, ver)); }
661 +/
662     /+ virtual +/ int heightForWidth(int) const;
663     /+ virtual +/ bool hasHeightForWidth() const;
664 
665     final QRegion visibleRegion() const;
666 
667     final void setContentsMargins(int left, int top, int right, int bottom);
668     final void setContentsMargins(ref const(QMargins) margins);
669     final QMargins contentsMargins() const;
670 
671     final QRect contentsRect() const;
672 
673 public:
674     final QLayout layout() const;
675     final void setLayout(QLayout );
676     final void updateGeometry();
677 
678     final void setParent(QWidget parent);
679     final void setParent(QWidget parent, /+ Qt:: +/qt.core.namespace.WindowFlags f);
680 
681     final void scroll(int dx, int dy);
682     final void scroll(int dx, int dy, ref const(QRect));
683 
684     // Misc. functions
685 
686     final QWidget focusWidget() const;
687     final QWidget nextInFocusChain() const;
688     final QWidget previousInFocusChain() const;
689 
690     // drag and drop
691     final bool acceptDrops() const;
692     final void setAcceptDrops(bool on);
693 
694     version(QT_NO_ACTION){}else
695     {
696         //actions
697         final void addAction(QAction action);
698         final void addActions(ref const(QList!(QAction)) actions);
699         final void insertActions(QAction before, ref const(QList!(QAction)) actions);
700         final void insertAction(QAction before, QAction action);
701         final void removeAction(QAction action);
702         final QList!(QAction) actions() const;
703     }
704 
705     pragma(inline, true) final QWidget parentWidget() const
706     { return static_cast!(QWidget)(QObject.parent()); }
707 
708     final void setWindowFlags(/+ Qt:: +/qt.core.namespace.WindowFlags type);
709     pragma(inline, true) final /+ Qt:: +/qt.core.namespace.WindowFlags windowFlags() const
710     { return data.window_flags; }
711     final void setWindowFlag(/+ Qt:: +/qt.core.namespace.WindowType, bool on = true);
712     final void overrideWindowFlags(/+ Qt:: +/qt.core.namespace.WindowFlags type);
713 
714     pragma(inline, true) final /+ Qt:: +/qt.core.namespace.WindowType windowType() const
715     { return static_cast!(/+ Qt:: +/qt.core.namespace.WindowType)(int((data.window_flags & /+ Qt:: +/qt.core.namespace.WindowType.WindowType_Mask))); }
716 
717     /+ static QWidget *find(WId); +/
718     pragma(inline, true) final QWidget childAt(int ax, int ay) const
719     { auto tmp = QPoint(ax, ay); return childAt(tmp); }
720     final QWidget childAt(ref const(QPoint) p) const;
721 
722     final void setAttribute(/+ Qt:: +/qt.core.namespace.WidgetAttribute, bool on = true);
723     pragma(inline, true) final bool testAttribute(/+ Qt:: +/qt.core.namespace.WidgetAttribute attribute) const
724     {
725         if (attribute < cast(int)(8*uint.sizeof))
726             return (data.widget_attributes & (1<<attribute)) != 0;
727         return testAttribute_helper(attribute);
728     }
729 
730     override QPaintEngine paintEngine() const;
731 
732     final void ensurePolished() const;
733 
734     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
735     final bool isAncestorOf(const(QWidget) child) const;
736     }));
737 
738     version(QT_KEYPAD_NAVIGATION)
739     {
740         final bool hasEditFocus() const;
741         final void setEditFocus(bool on);
742     }
743 
744     final bool autoFillBackground() const;
745     final void setAutoFillBackground(bool enabled);
746 
747     final QBackingStore* backingStore() const;
748 
749     final QWindow* windowHandle() const;
750     final QScreen screen() const;
751     final void setScreen(QScreen );
752 
753     static QWidget createWindowContainer(QWindow* window, QWidget parent=null, /+ Qt:: +/qt.core.namespace.WindowFlags flags=/+ Qt:: +/qt.core.namespace.WindowFlags());
754 
755 /+ Q_SIGNALS +/public:
756     @QSignal final void windowTitleChanged(ref const(QString) title);
757     @QSignal final void windowIconChanged(ref const(QIcon) icon);
758     @QSignal final void windowIconTextChanged(ref const(QString) iconText);
759     @QSignal final void customContextMenuRequested(ref const(QPoint) pos);
760 
761 protected:
762     // Event handlers
763     override bool event(QEvent event);
764     /+ virtual +/ void mousePressEvent(QMouseEvent event);
765     /+ virtual +/ void mouseReleaseEvent(QMouseEvent event);
766     /+ virtual +/ void mouseDoubleClickEvent(QMouseEvent event);
767     /+ virtual +/ void mouseMoveEvent(QMouseEvent event);
768 /+ #if QT_CONFIG(wheelevent) +/
769     /+ virtual +/ void wheelEvent(QWheelEvent event);
770 /+ #endif +/
771     /+ virtual +/ void keyPressEvent(QKeyEvent event);
772     /+ virtual +/ void keyReleaseEvent(QKeyEvent event);
773     /+ virtual +/ void focusInEvent(QFocusEvent event);
774     /+ virtual +/ void focusOutEvent(QFocusEvent event);
775     /+ virtual +/ void enterEvent(QEnterEvent event);
776     /+ virtual +/ void leaveEvent(QEvent event);
777     /+ virtual +/ void paintEvent(QPaintEvent event);
778     /+ virtual +/ void moveEvent(QMoveEvent event);
779     /+ virtual +/ void resizeEvent(QResizeEvent event);
780     /+ virtual +/ void closeEvent(QCloseEvent event);
781 /+ #ifndef QT_NO_CONTEXTMENU +/
782     version(QT_NO_CONTEXTMENU){}else
783     {
784         /+ virtual +/ void contextMenuEvent(QContextMenuEvent event);
785     }
786 /+ #endif
787 #if QT_CONFIG(tabletevent) +/
788     /+ virtual +/ void tabletEvent(QTabletEvent event);
789 /+ #endif
790 #ifndef QT_NO_ACTION +/
791     version(QT_NO_ACTION){}else
792     {
793         /+ virtual +/ void actionEvent(QActionEvent event);
794     }
795 /+ #endif
796 
797 #if QT_CONFIG(draganddrop) +/
798     /+ virtual +/ void dragEnterEvent(QDragEnterEvent event);
799     /+ virtual +/ void dragMoveEvent(QDragMoveEvent event);
800     /+ virtual +/ void dragLeaveEvent(QDragLeaveEvent event);
801     /+ virtual +/ void dropEvent(QDropEvent event);
802 /+ #endif +/
803 
804     /+ virtual +/ void showEvent(QShowEvent event);
805     /+ virtual +/ void hideEvent(QHideEvent event);
806 
807     /+ virtual +/ bool nativeEvent(ref const(QByteArray) eventType, void* message, qintptr* result);
808 
809     // Misc. protected functions
810     /+ virtual +/ void changeEvent(QEvent );
811 
812     override int metric(PaintDeviceMetric) const;
813     override void initPainter(QPainter* painter) const;
814     override QPaintDevice redirected(QPoint* offset) const;
815     override QPainter* sharedPainter() const;
816 
817     /+ virtual +/ void inputMethodEvent(QInputMethodEvent );
818 public:
819     /+ virtual +/ QVariant inputMethodQuery(/+ Qt:: +/qt.core.namespace.InputMethodQuery) const;
820 
821     final /+ Qt:: +/qt.core.namespace.InputMethodHints inputMethodHints() const;
822     final void setInputMethodHints(/+ Qt:: +/qt.core.namespace.InputMethodHints hints);
823 
824 protected /+ Q_SLOTS +/:
825     @QSlot final void updateMicroFocus(/+ Qt:: +/qt.core.namespace.InputMethodQuery query = /+ Qt:: +/qt.core.namespace.InputMethodQuery.ImQueryAll);
826 protected:
827 
828     /+ void create(WId = 0, bool initializeWindow = true,
829                          bool destroyOldWindow = true); +/
830     final void destroy(bool destroyWindow = true,
831                      bool destroySubWindows = true);
832 
833     /+ friend class QDataWidgetMapperPrivate; +/ // for access to focusNextPrevChild
834     /+ virtual +/ bool focusNextPrevChild(bool next);
835     pragma(inline, true) final bool focusNextChild() { return focusNextPrevChild(true); }
836     pragma(inline, true) final bool focusPreviousChild() { return focusNextPrevChild(false); }
837 
838 protected:
839     this(ref QWidgetPrivate d, QWidget parent, /+ Qt:: +/qt.core.namespace.WindowFlags f);
840 private:
841     final void setBackingStore(QBackingStore* store);
842 
843     final bool testAttribute_helper(/+ Qt:: +/qt.core.namespace.WidgetAttribute) const;
844 
845     final QLayout takeLayout();
846 
847     /+ friend class QBackingStoreDevice; +/
848     /+ friend class QWidgetRepaintManager; +/
849     /+ friend class QApplication; +/
850     /+ friend class QApplicationPrivate; +/
851     /+ friend class QGuiApplication; +/
852     /+ friend class QGuiApplicationPrivate; +/
853     /+ friend class QBaseApplication; +/
854     /+ friend class QPainter; +/
855     /+ friend class QPainterPrivate; +/
856     /+ friend class QPixmap; +/ // for QPixmap::fill()
857     /+ friend class QFontMetrics; +/
858     /+ friend class QFontInfo; +/
859     /+ friend class QLayout; +/
860     /+ friend class QWidgetItem; +/
861     /+ friend class QWidgetItemV2; +/
862     /+ friend class QX11PaintEngine; +/
863     /+ friend class QWin32PaintEngine; +/
864     /+ friend class QShortcutPrivate; +/
865     /+ friend class QWindowSurface; +/
866     /+ friend class QGraphicsProxyWidget; +/
867     /+ friend class QGraphicsProxyWidgetPrivate; +/
868     /+ friend class QStyleSheetStyle; +/
869     /+ friend struct QWidgetExceptionCleaner; +/
870     /+ friend class QWidgetWindow; +/
871     /+ friend class QAccessibleWidget; +/
872     /+ friend class QAccessibleTable; +/
873     /+ friend class QAccessibleTabButton; +/
874     version(QT_NO_GESTURES){}else
875     {
876         /+ friend class QGestureManager; +/
877         /+ friend class QWinNativePanGestureRecognizer; +/
878     }
879     /+ friend class QWidgetEffectSourcePrivate; +/
880 
881     static if((versionIsSet!("OSX") || versionIsSet!("iOS") || versionIsSet!("TVOS") || versionIsSet!("WatchOS")))
882     {
883         /+ friend bool qt_mac_is_metal(const QWidget *w); +/
884     }
885     /+ friend Q_WIDGETS_EXPORT QWidgetData *qt_qwidget_data(QWidget *widget); +/
886     /+ friend Q_WIDGETS_EXPORT QWidgetPrivate *qt_widget_private(QWidget *widget); +/
887 
888 private:
889     /+ Q_DISABLE_COPY(QWidget) +/
890     /+ Q_PRIVATE_SLOT(d_func(), void _q_showIfNotHidden())
891     Q_PRIVATE_SLOT(d_func(), QWindow *_q_closestWindowHandle()) +/
892 
893     QWidgetData* data;
894     mixin(CREATE_CONVENIENCE_WRAPPERS);
895 }
896 /+pragma(inline, true) QFlags!(QWidget.RenderFlags.enum_type) operator |(QWidget.RenderFlags.enum_type f1, QWidget.RenderFlags.enum_type f2)/+noexcept+/{return QFlags!(QWidget.RenderFlags.enum_type)(f1)|f2;}+/
897 /+pragma(inline, true) QFlags!(QWidget.RenderFlags.enum_type) operator |(QWidget.RenderFlags.enum_type f1, QFlags!(QWidget.RenderFlags.enum_type) f2)/+noexcept+/{return f2|f1;}+/
898 /+pragma(inline, true) QFlags!(QWidget.RenderFlags.enum_type) operator &(QWidget.RenderFlags.enum_type f1, QWidget.RenderFlags.enum_type f2)/+noexcept+/{return QFlags!(QWidget.RenderFlags.enum_type)(f1)&f2;}+/
899 /+pragma(inline, true) QFlags!(QWidget.RenderFlags.enum_type) operator &(QWidget.RenderFlags.enum_type f1, QFlags!(QWidget.RenderFlags.enum_type) f2)/+noexcept+/{return f2&f1;}+/
900 /+pragma(inline, true) void operator +(QWidget.RenderFlags.enum_type f1, QWidget.RenderFlags.enum_type f2)/+noexcept+/;+/
901 /+pragma(inline, true) void operator +(QWidget.RenderFlags.enum_type f1, QFlags!(QWidget.RenderFlags.enum_type) f2)/+noexcept+/;+/
902 /+pragma(inline, true) void operator +(int f1, QFlags!(QWidget.RenderFlags.enum_type) f2)/+noexcept+/;+/
903 /+pragma(inline, true) void operator -(QWidget.RenderFlags.enum_type f1, QWidget.RenderFlags.enum_type f2)/+noexcept+/;+/
904 /+pragma(inline, true) void operator -(QWidget.RenderFlags.enum_type f1, QFlags!(QWidget.RenderFlags.enum_type) f2)/+noexcept+/;+/
905 /+pragma(inline, true) void operator -(int f1, QFlags!(QWidget.RenderFlags.enum_type) f2)/+noexcept+/;+/
906 /+pragma(inline, true) QIncompatibleFlag operator |(QWidget.RenderFlags.enum_type f1, int f2)/+noexcept+/{return QIncompatibleFlag(int(f1)|f2);}+/
907 /+pragma(inline, true) void operator +(int f1, QWidget.RenderFlags.enum_type f2)/+noexcept+/;+/
908 /+pragma(inline, true) void operator +(QWidget.RenderFlags.enum_type f1, int f2)/+noexcept+/;+/
909 /+pragma(inline, true) void operator -(int f1, QWidget.RenderFlags.enum_type f2)/+noexcept+/;+/
910 /+pragma(inline, true) void operator -(QWidget.RenderFlags.enum_type f1, int f2)/+noexcept+/;+/
911 
912 /+ Q_DECLARE_OPERATORS_FOR_FLAGS(QWidget::RenderFlags)
913 #ifndef Q_QDOC
914 template <> inline QWidget *qobject_cast<QWidget*>(QObject *o)
915 {
916     if (!o || !o->isWidgetType()) return nullptr;
917     return static_cast<QWidget*>(o);
918 }
919 template <> inline const QWidget *qobject_cast<const QWidget*>(const QObject *o)
920 {
921     if (!o || !o->isWidgetType()) return nullptr;
922     return static_cast<const QWidget*>(o);
923 }
924 #endif // !Q_QDOC
925 
926 #if QT_DEPRECATED_SINCE(6, 1)
927 #endif
928 
929 
930 #define QWIDGETSIZE_MAX ((1<<24)-1)
931 
932 #ifndef QT_NO_DEBUG_STREAM
933 Q_WIDGETS_EXPORT QDebug operator<<(QDebug, const QWidget *);
934 #endif +/
935