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.style;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.flags;
17 import qt.core.namespace;
18 import qt.core.object;
19 import qt.core.point;
20 import qt.core.rect;
21 import qt.core.size;
22 import qt.core.string;
23 import qt.gui.fontmetrics;
24 import qt.gui.icon;
25 import qt.gui.painter;
26 import qt.gui.palette;
27 import qt.gui.pixmap;
28 import qt.helpers;
29 import qt.widgets.application;
30 import qt.widgets.sizepolicy;
31 import qt.widgets.styleoption;
32 import qt.widgets.widget;
33 
34 /+ class QDebug; +/
35 extern(C++, class) struct QTab;
36 extern(C++, class) struct QStylePrivate;
37 
38 /// Binding for C++ class [QStyle](https://doc.qt.io/qt-6/qstyle.html).
39 abstract class /+ Q_WIDGETS_EXPORT +/ QStyle : QObject
40 {
41     mixin(Q_OBJECT);
42     /+ Q_DECLARE_PRIVATE(QStyle) +/
43 
44 protected:
45     mixin(changeItaniumMangling(q{mangleConstructorBaseObject}, q{
46     this(ref QStylePrivate dd);
47     }));
48 
49 public:
50     mixin(changeItaniumMangling(q{mangleConstructorBaseObject}, q{
51     this();
52     }));
53     /+ virtual +/~this();
54 
55     final QString name() const;
56 
57     /+ virtual +/ void polish(QWidget widget);
58     /+ virtual +/ void unpolish(QWidget widget);
59 
60     /+ virtual +/ void polish(QApplication application);
61     /+ virtual +/ void unpolish(QApplication application);
62 
63     /+ virtual +/ void polish(ref QPalette palette);
64 
65     /+ virtual +/ QRect itemTextRect(ref const(QFontMetrics) fm, ref const(QRect) r,
66                                int flags, bool enabled,
67                                ref const(QString) text) const;
68 
69     /+ virtual +/ QRect itemPixmapRect(ref const(QRect) r, int flags, ref const(QPixmap) pixmap) const;
70 
71     /+ virtual +/ void drawItemText(QPainter* painter, ref const(QRect) rect,
72                                   int flags, ref const(QPalette) pal, bool enabled,
73                                   ref const(QString) text, QPalette.ColorRole textRole = QPalette.ColorRole.NoRole) const;
74 
75     /+ virtual +/ void drawItemPixmap(QPainter* painter, ref const(QRect) rect,
76                                     int alignment, ref const(QPixmap) pixmap) const;
77 
78     /+ virtual +/ QPalette standardPalette() const;
79 
80     mixin("enum StateFlag {"
81         ~ q{
82             State_None =                0x00000000,
83             State_Enabled =             0x00000001,
84             State_Raised =              0x00000002,
85             State_Sunken =              0x00000004,
86             State_Off =                 0x00000008,
87             State_NoChange =            0x00000010,
88             State_On =                  0x00000020,
89             State_DownArrow =           0x00000040,
90             State_Horizontal =          0x00000080,
91             State_HasFocus =            0x00000100,
92             State_Top =                 0x00000200,
93             State_Bottom =              0x00000400,
94             State_FocusAtBorder =       0x00000800,
95             State_AutoRaise =           0x00001000,
96             State_MouseOver =           0x00002000,
97             State_UpArrow =             0x00004000,
98             State_Selected =            0x00008000,
99             State_Active =              0x00010000,
100             State_Window =              0x00020000,
101             State_Open =                0x00040000,
102             State_Children =            0x00080000,
103             State_Item =                0x00100000,
104             State_Sibling =             0x00200000,
105             State_Editing =             0x00400000,
106             State_KeyboardFocusChange = 0x00800000,
107         }
108         ~ (versionIsSet!("QT_KEYPAD_NAVIGATION") ? q{
109     /+ #ifdef QT_KEYPAD_NAVIGATION +/
110             State_HasEditFocus =        0x01000000,
111         }:"")
112         ~ q{
113     /+ #endif +/
114             State_ReadOnly =            0x02000000,
115             State_Small =               0x04000000,
116             State_Mini =                0x08000000
117         }
118         ~ "}"
119     );
120     /+ Q_ENUM(StateFlag) +/
121     /+ Q_DECLARE_FLAGS(State, StateFlag) +/
122 alias State = QFlags!(StateFlag);
123 
124     enum PrimitiveElement {
125         PE_Frame,
126         PE_FrameDefaultButton,
127         PE_FrameDockWidget,
128         PE_FrameFocusRect,
129         PE_FrameGroupBox,
130         PE_FrameLineEdit,
131         PE_FrameMenu,
132         PE_FrameStatusBarItem,
133         PE_FrameTabWidget,
134         PE_FrameWindow,
135         PE_FrameButtonBevel,
136         PE_FrameButtonTool,
137         PE_FrameTabBarBase,
138 
139         PE_PanelButtonCommand,
140         PE_PanelButtonBevel,
141         PE_PanelButtonTool,
142         PE_PanelMenuBar,
143         PE_PanelToolBar,
144         PE_PanelLineEdit,
145 
146         PE_IndicatorArrowDown,
147         PE_IndicatorArrowLeft,
148         PE_IndicatorArrowRight,
149         PE_IndicatorArrowUp,
150         PE_IndicatorBranch,
151         PE_IndicatorButtonDropDown,
152         PE_IndicatorItemViewItemCheck,
153         PE_IndicatorCheckBox,
154         PE_IndicatorDockWidgetResizeHandle,
155         PE_IndicatorHeaderArrow,
156         PE_IndicatorMenuCheckMark,
157         PE_IndicatorProgressChunk,
158         PE_IndicatorRadioButton,
159         PE_IndicatorSpinDown,
160         PE_IndicatorSpinMinus,
161         PE_IndicatorSpinPlus,
162         PE_IndicatorSpinUp,
163         PE_IndicatorToolBarHandle,
164         PE_IndicatorToolBarSeparator,
165         PE_PanelTipLabel,
166         PE_IndicatorTabTear,
167         PE_IndicatorTabTearLeft = PrimitiveElement.PE_IndicatorTabTear,
168         PE_PanelScrollAreaCorner,
169 
170         PE_Widget,
171 
172         PE_IndicatorColumnViewArrow,
173         PE_IndicatorItemViewItemDrop,
174 
175         PE_PanelItemViewItem,
176         PE_PanelItemViewRow,
177 
178         PE_PanelStatusBar,
179 
180         PE_IndicatorTabClose,
181         PE_PanelMenu,
182 
183         PE_IndicatorTabTearRight,
184 
185         // do not add any values below/greater this
186         PE_CustomBase = 0xf000000
187     }
188     /+ Q_ENUM(PrimitiveElement) +/
189 
190     /+ virtual +/ abstract void drawPrimitive(PrimitiveElement pe, const(QStyleOption)* opt, QPainter* p,
191                                    const(QWidget) w = null) const;
192     enum ControlElement {
193         CE_PushButton,
194         CE_PushButtonBevel,
195         CE_PushButtonLabel,
196 
197         CE_CheckBox,
198         CE_CheckBoxLabel,
199 
200         CE_RadioButton,
201         CE_RadioButtonLabel,
202 
203         CE_TabBarTab,
204         CE_TabBarTabShape,
205         CE_TabBarTabLabel,
206 
207         CE_ProgressBar,
208         CE_ProgressBarGroove,
209         CE_ProgressBarContents,
210         CE_ProgressBarLabel,
211 
212         CE_MenuItem,
213         CE_MenuScroller,
214         CE_MenuVMargin,
215         CE_MenuHMargin,
216         CE_MenuTearoff,
217         CE_MenuEmptyArea,
218 
219         CE_MenuBarItem,
220         CE_MenuBarEmptyArea,
221 
222         CE_ToolButtonLabel,
223 
224         CE_Header,
225         CE_HeaderSection,
226         CE_HeaderLabel,
227 
228         CE_ToolBoxTab,
229         CE_SizeGrip,
230         CE_Splitter,
231         CE_RubberBand,
232         CE_DockWidgetTitle,
233 
234         CE_ScrollBarAddLine,
235         CE_ScrollBarSubLine,
236         CE_ScrollBarAddPage,
237         CE_ScrollBarSubPage,
238         CE_ScrollBarSlider,
239         CE_ScrollBarFirst,
240         CE_ScrollBarLast,
241 
242         CE_FocusFrame,
243         CE_ComboBoxLabel,
244 
245         CE_ToolBar,
246         CE_ToolBoxTabShape,
247         CE_ToolBoxTabLabel,
248         CE_HeaderEmptyArea,
249 
250         CE_ColumnViewGrip,
251 
252         CE_ItemViewItem,
253 
254         CE_ShapedFrame,
255 
256         // do not add any values below/greater than this
257         CE_CustomBase = 0xf0000000
258     }
259     /+ Q_ENUM(ControlElement) +/
260 
261     /+ virtual +/ abstract void drawControl(ControlElement element, const(QStyleOption)* opt, QPainter* p,
262                                  const(QWidget) w = null) const;
263 
264     enum SubElement {
265         SE_PushButtonContents,
266         SE_PushButtonFocusRect,
267 
268         SE_CheckBoxIndicator,
269         SE_CheckBoxContents,
270         SE_CheckBoxFocusRect,
271         SE_CheckBoxClickRect,
272 
273         SE_RadioButtonIndicator,
274         SE_RadioButtonContents,
275         SE_RadioButtonFocusRect,
276         SE_RadioButtonClickRect,
277 
278         SE_ComboBoxFocusRect,
279 
280         SE_SliderFocusRect,
281 
282         SE_ProgressBarGroove,
283         SE_ProgressBarContents,
284         SE_ProgressBarLabel,
285 
286         SE_ToolBoxTabContents,
287 
288         SE_HeaderLabel,
289         SE_HeaderArrow,
290 
291         SE_TabWidgetTabBar,
292         SE_TabWidgetTabPane,
293         SE_TabWidgetTabContents,
294         SE_TabWidgetLeftCorner,
295         SE_TabWidgetRightCorner,
296 
297         SE_ItemViewItemCheckIndicator,
298         SE_TabBarTearIndicator,
299         SE_TabBarTearIndicatorLeft = SubElement.SE_TabBarTearIndicator,
300 
301         SE_TreeViewDisclosureItem,
302 
303         SE_LineEditContents,
304         SE_FrameContents,
305 
306         SE_DockWidgetCloseButton,
307         SE_DockWidgetFloatButton,
308         SE_DockWidgetTitleBarText,
309         SE_DockWidgetIcon,
310 
311         SE_CheckBoxLayoutItem,
312         SE_ComboBoxLayoutItem,
313         SE_DateTimeEditLayoutItem,
314         SE_LabelLayoutItem,
315         SE_ProgressBarLayoutItem,
316         SE_PushButtonLayoutItem,
317         SE_RadioButtonLayoutItem,
318         SE_SliderLayoutItem,
319         SE_SpinBoxLayoutItem,
320         SE_ToolButtonLayoutItem,
321 
322         SE_FrameLayoutItem,
323         SE_GroupBoxLayoutItem,
324         SE_TabWidgetLayoutItem,
325 
326         SE_ItemViewItemDecoration,
327         SE_ItemViewItemText,
328         SE_ItemViewItemFocusRect,
329 
330         SE_TabBarTabLeftButton,
331         SE_TabBarTabRightButton,
332         SE_TabBarTabText,
333 
334         SE_ShapedFrameContents,
335 
336         SE_ToolBarHandle,
337 
338         SE_TabBarScrollLeftButton,
339         SE_TabBarScrollRightButton,
340         SE_TabBarTearIndicatorRight,
341 
342         SE_PushButtonBevel,
343 
344         // do not add any values below/greater than this
345         SE_CustomBase = 0xf0000000
346     }
347     /+ Q_ENUM(SubElement) +/
348 
349     /+ virtual +/ abstract QRect subElementRect(SubElement subElement, const(QStyleOption)* option,
350                                      const(QWidget) widget = null) const;
351 
352 
353     enum ComplexControl {
354         CC_SpinBox,
355         CC_ComboBox,
356         CC_ScrollBar,
357         CC_Slider,
358         CC_ToolButton,
359         CC_TitleBar,
360         CC_Dial,
361         CC_GroupBox,
362         CC_MdiControls,
363 
364         // do not add any values below/greater than this
365         CC_CustomBase = 0xf0000000
366     }
367     /+ Q_ENUM(ComplexControl) +/
368 
369     enum SubControl {
370         SC_None =                  0x00000000,
371 
372         SC_ScrollBarAddLine =      0x00000001,
373         SC_ScrollBarSubLine =      0x00000002,
374         SC_ScrollBarAddPage =      0x00000004,
375         SC_ScrollBarSubPage =      0x00000008,
376         SC_ScrollBarFirst =        0x00000010,
377         SC_ScrollBarLast =         0x00000020,
378         SC_ScrollBarSlider =       0x00000040,
379         SC_ScrollBarGroove =       0x00000080,
380 
381         SC_SpinBoxUp =             0x00000001,
382         SC_SpinBoxDown =           0x00000002,
383         SC_SpinBoxFrame =          0x00000004,
384         SC_SpinBoxEditField =      0x00000008,
385 
386         SC_ComboBoxFrame =         0x00000001,
387         SC_ComboBoxEditField =     0x00000002,
388         SC_ComboBoxArrow =         0x00000004,
389         SC_ComboBoxListBoxPopup =  0x00000008,
390 
391         SC_SliderGroove =          0x00000001,
392         SC_SliderHandle =          0x00000002,
393         SC_SliderTickmarks =       0x00000004,
394 
395         SC_ToolButton =            0x00000001,
396         SC_ToolButtonMenu =        0x00000002,
397 
398         SC_TitleBarSysMenu =       0x00000001,
399         SC_TitleBarMinButton =     0x00000002,
400         SC_TitleBarMaxButton =     0x00000004,
401         SC_TitleBarCloseButton =   0x00000008,
402         SC_TitleBarNormalButton =  0x00000010,
403         SC_TitleBarShadeButton =   0x00000020,
404         SC_TitleBarUnshadeButton = 0x00000040,
405         SC_TitleBarContextHelpButton = 0x00000080,
406         SC_TitleBarLabel =         0x00000100,
407 
408         SC_DialGroove =            0x00000001,
409         SC_DialHandle =            0x00000002,
410         SC_DialTickmarks =         0x00000004,
411 
412         SC_GroupBoxCheckBox =      0x00000001,
413         SC_GroupBoxLabel =         0x00000002,
414         SC_GroupBoxContents =      0x00000004,
415         SC_GroupBoxFrame =         0x00000008,
416 
417         SC_MdiMinButton     =      0x00000001,
418         SC_MdiNormalButton  =      0x00000002,
419         SC_MdiCloseButton   =      0x00000004,
420 
421         SC_CustomBase =            0xf0000000,
422         SC_All =                   0xffffffff
423     }
424     /+ Q_ENUM(SubControl) +/
425     /+ Q_DECLARE_FLAGS(SubControls, SubControl) +/
426 alias SubControls = QFlags!(SubControl);
427 
428     /+ virtual +/ abstract void drawComplexControl(ComplexControl cc, const(QStyleOptionComplex)* opt, QPainter* p,
429                                         const(QWidget) widget = null) const;
430     /+ virtual +/ abstract SubControl hitTestComplexControl(ComplexControl cc, const(QStyleOptionComplex)* opt,
431                                                  ref const(QPoint) pt, const(QWidget) widget = null) const;
432     /+ virtual +/ abstract QRect subControlRect(ComplexControl cc, const(QStyleOptionComplex)* opt,
433                                      SubControl sc, const(QWidget) widget = null) const;
434 
435     enum PixelMetric {
436         PM_ButtonMargin,
437         PM_ButtonDefaultIndicator,
438         PM_MenuButtonIndicator,
439         PM_ButtonShiftHorizontal,
440         PM_ButtonShiftVertical,
441 
442         PM_DefaultFrameWidth,
443         PM_SpinBoxFrameWidth,
444         PM_ComboBoxFrameWidth,
445 
446         PM_MaximumDragDistance,
447 
448         PM_ScrollBarExtent,
449         PM_ScrollBarSliderMin,
450 
451         PM_SliderThickness,             // total slider thickness
452         PM_SliderControlThickness,      // thickness of the business part
453         PM_SliderLength,                // total length of slider
454         PM_SliderTickmarkOffset,        //
455         PM_SliderSpaceAvailable,        // available space for slider to move
456 
457         PM_DockWidgetSeparatorExtent,
458         PM_DockWidgetHandleExtent,
459         PM_DockWidgetFrameWidth,
460 
461         PM_TabBarTabOverlap,
462         PM_TabBarTabHSpace,
463         PM_TabBarTabVSpace,
464         PM_TabBarBaseHeight,
465         PM_TabBarBaseOverlap,
466 
467         PM_ProgressBarChunkWidth,
468 
469         PM_SplitterWidth,
470         PM_TitleBarHeight,
471 
472         PM_MenuScrollerHeight,
473         PM_MenuHMargin,
474         PM_MenuVMargin,
475         PM_MenuPanelWidth,
476         PM_MenuTearoffHeight,
477         PM_MenuDesktopFrameWidth,
478 
479         PM_MenuBarPanelWidth,
480         PM_MenuBarItemSpacing,
481         PM_MenuBarVMargin,
482         PM_MenuBarHMargin,
483 
484         PM_IndicatorWidth,
485         PM_IndicatorHeight,
486         PM_ExclusiveIndicatorWidth,
487         PM_ExclusiveIndicatorHeight,
488 
489         PM_DialogButtonsSeparator,
490         PM_DialogButtonsButtonWidth,
491         PM_DialogButtonsButtonHeight,
492 
493         PM_MdiSubWindowFrameWidth,
494         PM_MdiSubWindowMinimizedWidth,
495 
496         PM_HeaderMargin,
497         PM_HeaderMarkSize,
498         PM_HeaderGripMargin,
499         PM_TabBarTabShiftHorizontal,
500         PM_TabBarTabShiftVertical,
501         PM_TabBarScrollButtonWidth,
502 
503         PM_ToolBarFrameWidth,
504         PM_ToolBarHandleExtent,
505         PM_ToolBarItemSpacing,
506         PM_ToolBarItemMargin,
507         PM_ToolBarSeparatorExtent,
508         PM_ToolBarExtensionExtent,
509 
510         PM_SpinBoxSliderHeight,
511 
512         PM_ToolBarIconSize,
513         PM_ListViewIconSize,
514         PM_IconViewIconSize,
515         PM_SmallIconSize,
516         PM_LargeIconSize,
517 
518         PM_FocusFrameVMargin,
519         PM_FocusFrameHMargin,
520 
521         PM_ToolTipLabelFrameWidth,
522         PM_CheckBoxLabelSpacing,
523         PM_TabBarIconSize,
524         PM_SizeGripSize,
525         PM_DockWidgetTitleMargin,
526         PM_MessageBoxIconSize,
527         PM_ButtonIconSize,
528 
529         PM_DockWidgetTitleBarButtonMargin,
530 
531         PM_RadioButtonLabelSpacing,
532         PM_LayoutLeftMargin,
533         PM_LayoutTopMargin,
534         PM_LayoutRightMargin,
535         PM_LayoutBottomMargin,
536         PM_LayoutHorizontalSpacing,
537         PM_LayoutVerticalSpacing,
538         PM_TabBar_ScrollButtonOverlap,
539 
540         PM_TextCursorWidth,
541 
542         PM_TabCloseIndicatorWidth,
543         PM_TabCloseIndicatorHeight,
544 
545         PM_ScrollView_ScrollBarSpacing,
546         PM_ScrollView_ScrollBarOverlap,
547         PM_SubMenuOverlap,
548         PM_TreeViewIndentation,
549 
550         PM_HeaderDefaultSectionSizeHorizontal,
551         PM_HeaderDefaultSectionSizeVertical,
552 
553         PM_TitleBarButtonIconSize,
554         PM_TitleBarButtonSize,
555 
556         PM_LineEditIconSize,
557 
558         // do not add any values below/greater than this
559         PM_CustomBase = 0xf0000000
560     }
561     /+ Q_ENUM(PixelMetric) +/
562 
563     /+ virtual +/ abstract int pixelMetric(PixelMetric metric, const(QStyleOption)* option = null,
564                                 const(QWidget) widget = null) const;
565 
566     enum ContentsType {
567         CT_PushButton,
568         CT_CheckBox,
569         CT_RadioButton,
570         CT_ToolButton,
571         CT_ComboBox,
572         CT_Splitter,
573         CT_ProgressBar,
574         CT_MenuItem,
575         CT_MenuBarItem,
576         CT_MenuBar,
577         CT_Menu,
578         CT_TabBarTab,
579         CT_Slider,
580         CT_ScrollBar,
581         CT_LineEdit,
582         CT_SpinBox,
583         CT_SizeGrip,
584         CT_TabWidget,
585         CT_DialogButtons,
586         CT_HeaderSection,
587         CT_GroupBox,
588         CT_MdiControls,
589         CT_ItemViewItem,
590         // do not add any values below/greater than this
591         CT_CustomBase = 0xf0000000
592     }
593     /+ Q_ENUM(ContentsType) +/
594 
595     /+ virtual +/ abstract QSize sizeFromContents(ContentsType ct, const(QStyleOption)* opt,
596                                        ref const(QSize) contentsSize, const(QWidget) w = null) const;
597 
598     enum RequestSoftwareInputPanel {
599         RSIP_OnMouseClickAndAlreadyFocused,
600         RSIP_OnMouseClick
601     }
602     /+ Q_ENUM(RequestSoftwareInputPanel) +/
603 
604     enum StyleHint {
605         SH_EtchDisabledText,
606         SH_DitherDisabledText,
607         SH_ScrollBar_MiddleClickAbsolutePosition,
608         SH_ScrollBar_ScrollWhenPointerLeavesControl,
609         SH_TabBar_SelectMouseType,
610         SH_TabBar_Alignment,
611         SH_Header_ArrowAlignment,
612         SH_Slider_SnapToValue,
613         SH_Slider_SloppyKeyEvents,
614         SH_ProgressDialog_CenterCancelButton,
615         SH_ProgressDialog_TextLabelAlignment,
616         SH_PrintDialog_RightAlignButtons,
617         SH_MainWindow_SpaceBelowMenuBar,
618         SH_FontDialog_SelectAssociatedText,
619         SH_Menu_AllowActiveAndDisabled,
620         SH_Menu_SpaceActivatesItem,
621         SH_Menu_SubMenuPopupDelay,
622         SH_ScrollView_FrameOnlyAroundContents,
623         SH_MenuBar_AltKeyNavigation,
624         SH_ComboBox_ListMouseTracking,
625         SH_Menu_MouseTracking,
626         SH_MenuBar_MouseTracking,
627         SH_ItemView_ChangeHighlightOnFocus,
628         SH_Widget_ShareActivation,
629         SH_Workspace_FillSpaceOnMaximize,
630         SH_ComboBox_Popup,
631         SH_TitleBar_NoBorder,
632         SH_Slider_StopMouseOverSlider,
633         SH_BlinkCursorWhenTextSelected,
634         SH_RichText_FullWidthSelection,
635         SH_Menu_Scrollable,
636         SH_GroupBox_TextLabelVerticalAlignment,
637         SH_GroupBox_TextLabelColor,
638         SH_Menu_SloppySubMenus,
639         SH_Table_GridLineColor,
640         SH_LineEdit_PasswordCharacter,
641         SH_DialogButtons_DefaultButton,
642         SH_ToolBox_SelectedPageTitleBold,
643         SH_TabBar_PreferNoArrows,
644         SH_ScrollBar_LeftClickAbsolutePosition,
645         SH_ListViewExpand_SelectMouseType,
646         SH_UnderlineShortcut,
647         SH_SpinBox_AnimateButton,
648         SH_SpinBox_KeyPressAutoRepeatRate,
649         SH_SpinBox_ClickAutoRepeatRate,
650         SH_Menu_FillScreenWithScroll,
651         SH_ToolTipLabel_Opacity,
652         SH_DrawMenuBarSeparator,
653         SH_TitleBar_ModifyNotification,
654         SH_Button_FocusPolicy,
655         SH_MessageBox_UseBorderForButtonSpacing,
656         SH_TitleBar_AutoRaise,
657         SH_ToolButton_PopupDelay,
658         SH_FocusFrame_Mask,
659         SH_RubberBand_Mask,
660         SH_WindowFrame_Mask,
661         SH_SpinControls_DisableOnBounds,
662         SH_Dial_BackgroundRole,
663         SH_ComboBox_LayoutDirection,
664         SH_ItemView_EllipsisLocation,
665         SH_ItemView_ShowDecorationSelected,
666         SH_ItemView_ActivateItemOnSingleClick,
667         SH_ScrollBar_ContextMenu,
668         SH_ScrollBar_RollBetweenButtons,
669         SH_Slider_AbsoluteSetButtons,
670         SH_Slider_PageSetButtons,
671         SH_Menu_KeyboardSearch,
672         SH_TabBar_ElideMode,
673         SH_DialogButtonLayout,
674         SH_ComboBox_PopupFrameStyle,
675         SH_MessageBox_TextInteractionFlags,
676         SH_DialogButtonBox_ButtonsHaveIcons,
677         SH_MessageBox_CenterButtons,
678         SH_Menu_SelectionWrap,
679         SH_ItemView_MovementWithoutUpdatingSelection,
680         SH_ToolTip_Mask,
681         SH_FocusFrame_AboveWidget,
682         SH_TextControl_FocusIndicatorTextCharFormat,
683         SH_WizardStyle,
684         SH_ItemView_ArrowKeysNavigateIntoChildren,
685         SH_Menu_Mask,
686         SH_Menu_FlashTriggeredItem,
687         SH_Menu_FadeOutOnHide,
688         SH_SpinBox_ClickAutoRepeatThreshold,
689         SH_ItemView_PaintAlternatingRowColorsForEmptyArea,
690         SH_FormLayoutWrapPolicy,
691         SH_TabWidget_DefaultTabPosition,
692         SH_ToolBar_Movable,
693         SH_FormLayoutFieldGrowthPolicy,
694         SH_FormLayoutFormAlignment,
695         SH_FormLayoutLabelAlignment,
696         SH_ItemView_DrawDelegateFrame,
697         SH_TabBar_CloseButtonPosition,
698         SH_DockWidget_ButtonsHaveFrame,
699         SH_ToolButtonStyle,
700         SH_RequestSoftwareInputPanel,
701         SH_ScrollBar_Transient,
702         SH_Menu_SupportsSections,
703         SH_ToolTip_WakeUpDelay,
704         SH_ToolTip_FallAsleepDelay,
705         SH_Widget_Animate,
706         SH_Splitter_OpaqueResize,
707         // Whether we should use a native popup.
708         // Only supported for non-editable combo boxes on Mac OS X so far.
709         SH_ComboBox_UseNativePopup,
710         SH_LineEdit_PasswordMaskDelay,
711         SH_TabBar_ChangeCurrentDelay,
712         SH_Menu_SubMenuUniDirection,
713         SH_Menu_SubMenuUniDirectionFailCount,
714         SH_Menu_SubMenuSloppySelectOtherActions,
715         SH_Menu_SubMenuSloppyCloseTimeout,
716         SH_Menu_SubMenuResetWhenReenteringParent,
717         SH_Menu_SubMenuDontStartSloppyOnLeave,
718         SH_ItemView_ScrollMode,
719         SH_TitleBar_ShowToolTipsOnButtons,
720         SH_Widget_Animation_Duration,
721         SH_ComboBox_AllowWheelScrolling,
722         SH_SpinBox_ButtonsInsideFrame,
723         SH_SpinBox_StepModifier,
724         SH_TabBar_AllowWheelScrolling,
725         // Add new style hint values here
726 
727         SH_CustomBase = 0xf0000000
728     }
729     /+ Q_ENUM(StyleHint) +/
730 
731     /+ virtual +/ abstract int styleHint(StyleHint stylehint, const(QStyleOption)* opt = null,
732                               const(QWidget) widget = null, QStyleHintReturn* returnData = null) const;
733 
734     enum StandardPixmap {
735         SP_TitleBarMenuButton,
736         SP_TitleBarMinButton,
737         SP_TitleBarMaxButton,
738         SP_TitleBarCloseButton,
739         SP_TitleBarNormalButton,
740         SP_TitleBarShadeButton,
741         SP_TitleBarUnshadeButton,
742         SP_TitleBarContextHelpButton,
743         SP_DockWidgetCloseButton,
744         SP_MessageBoxInformation,
745         SP_MessageBoxWarning,
746         SP_MessageBoxCritical,
747         SP_MessageBoxQuestion,
748         SP_DesktopIcon,
749         SP_TrashIcon,
750         SP_ComputerIcon,
751         SP_DriveFDIcon,
752         SP_DriveHDIcon,
753         SP_DriveCDIcon,
754         SP_DriveDVDIcon,
755         SP_DriveNetIcon,
756         SP_DirOpenIcon,
757         SP_DirClosedIcon,
758         SP_DirLinkIcon,
759         SP_DirLinkOpenIcon,
760         SP_FileIcon,
761         SP_FileLinkIcon,
762         SP_ToolBarHorizontalExtensionButton,
763         SP_ToolBarVerticalExtensionButton,
764         SP_FileDialogStart,
765         SP_FileDialogEnd,
766         SP_FileDialogToParent,
767         SP_FileDialogNewFolder,
768         SP_FileDialogDetailedView,
769         SP_FileDialogInfoView,
770         SP_FileDialogContentsView,
771         SP_FileDialogListView,
772         SP_FileDialogBack,
773         SP_DirIcon,
774         SP_DialogOkButton,
775         SP_DialogCancelButton,
776         SP_DialogHelpButton,
777         SP_DialogOpenButton,
778         SP_DialogSaveButton,
779         SP_DialogCloseButton,
780         SP_DialogApplyButton,
781         SP_DialogResetButton,
782         SP_DialogDiscardButton,
783         SP_DialogYesButton,
784         SP_DialogNoButton,
785         SP_ArrowUp,
786         SP_ArrowDown,
787         SP_ArrowLeft,
788         SP_ArrowRight,
789         SP_ArrowBack,
790         SP_ArrowForward,
791         SP_DirHomeIcon,
792         SP_CommandLink,
793         SP_VistaShield,
794         SP_BrowserReload,
795         SP_BrowserStop,
796         SP_MediaPlay,
797         SP_MediaStop,
798         SP_MediaPause,
799         SP_MediaSkipForward,
800         SP_MediaSkipBackward,
801         SP_MediaSeekForward,
802         SP_MediaSeekBackward,
803         SP_MediaVolume,
804         SP_MediaVolumeMuted,
805         SP_LineEditClearButton,
806         SP_DialogYesToAllButton,
807         SP_DialogNoToAllButton,
808         SP_DialogSaveAllButton,
809         SP_DialogAbortButton,
810         SP_DialogRetryButton,
811         SP_DialogIgnoreButton,
812         SP_RestoreDefaultsButton,
813         // do not add any values below/greater than this
814         SP_CustomBase = 0xf0000000
815     }
816     /+ Q_ENUM(StandardPixmap) +/
817 
818     /+ virtual +/ abstract QPixmap standardPixmap(StandardPixmap standardPixmap, const(QStyleOption)* opt = null,
819                                        const(QWidget) widget = null) const;
820 
821     /+ virtual +/ abstract QIcon standardIcon(StandardPixmap standardIcon, const(QStyleOption)* option = null,
822                                    const(QWidget) widget = null) const;
823 
824     /+ virtual +/ abstract QPixmap generatedIconPixmap(QIcon.Mode iconMode, ref const(QPixmap) pixmap,
825                                             const(QStyleOption)* opt) const;
826 
827     static QRect visualRect(/+ Qt:: +/qt.core.namespace.LayoutDirection direction, ref const(QRect) boundingRect,
828                                 ref const(QRect) logicalRect);
829     static QPoint visualPos(/+ Qt:: +/qt.core.namespace.LayoutDirection direction, ref const(QRect) boundingRect,
830                                 ref const(QPoint) logicalPos);
831     static int sliderPositionFromValue(int min, int max, int val, int space,
832                                            bool upsideDown = false);
833     static int sliderValueFromPosition(int min, int max, int pos, int space,
834                                            bool upsideDown = false);
835     static /+ Qt:: +/qt.core.namespace.Alignment visualAlignment(/+ Qt:: +/qt.core.namespace.LayoutDirection direction, /+ Qt:: +/qt.core.namespace.Alignment alignment);
836     static QRect alignedRect(/+ Qt:: +/qt.core.namespace.LayoutDirection direction, /+ Qt:: +/qt.core.namespace.Alignment alignment,
837                                  ref const(QSize) size, ref const(QRect) rectangle);
838 
839     /+ virtual +/ abstract int layoutSpacing(QSizePolicy.ControlType control1,
840                                   QSizePolicy.ControlType control2, /+ Qt:: +/qt.core.namespace.Orientation orientation,
841                                   const(QStyleOption)* option = null, const(QWidget) widget = null) const;
842     final int combinedLayoutSpacing(QSizePolicy.ControlTypes controls1,
843                                   QSizePolicy.ControlTypes controls2, /+ Qt:: +/qt.core.namespace.Orientation orientation,
844                                   QStyleOption* option = null, QWidget widget = null) const;
845 
846     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
847     final const(QStyle)  proxy() const;
848     }));
849 
850 private:
851     final void setName(ref const(QString) name);
852 
853 private:
854     /+ Q_DISABLE_COPY(QStyle) +/
855     /+ friend class QWidget; +/
856     /+ friend class QWidgetPrivate; +/
857     /+ friend class QApplication; +/
858     /+ friend class QProxyStyle; +/
859     /+ friend class QProxyStylePrivate; +/
860     /+ friend class QStyleFactory; +/
861     final void setProxy(QStyle style);
862     mixin(CREATE_CONVENIENCE_WRAPPERS);
863 }
864 /+pragma(inline, true) QFlags!(QStyle.State.enum_type) operator |(QStyle.State.enum_type f1, QStyle.State.enum_type f2)/+noexcept+/{return QFlags!(QStyle.State.enum_type)(f1)|f2;}+/
865 /+pragma(inline, true) QFlags!(QStyle.State.enum_type) operator |(QStyle.State.enum_type f1, QFlags!(QStyle.State.enum_type) f2)/+noexcept+/{return f2|f1;}+/
866 /+pragma(inline, true) QFlags!(QStyle.State.enum_type) operator &(QStyle.State.enum_type f1, QStyle.State.enum_type f2)/+noexcept+/{return QFlags!(QStyle.State.enum_type)(f1)&f2;}+/
867 /+pragma(inline, true) QFlags!(QStyle.State.enum_type) operator &(QStyle.State.enum_type f1, QFlags!(QStyle.State.enum_type) f2)/+noexcept+/{return f2&f1;}+/
868 /+pragma(inline, true) void operator +(QStyle.State.enum_type f1, QStyle.State.enum_type f2)/+noexcept+/;+/
869 /+pragma(inline, true) void operator +(QStyle.State.enum_type f1, QFlags!(QStyle.State.enum_type) f2)/+noexcept+/;+/
870 /+pragma(inline, true) void operator +(int f1, QFlags!(QStyle.State.enum_type) f2)/+noexcept+/;+/
871 /+pragma(inline, true) void operator -(QStyle.State.enum_type f1, QStyle.State.enum_type f2)/+noexcept+/;+/
872 /+pragma(inline, true) void operator -(QStyle.State.enum_type f1, QFlags!(QStyle.State.enum_type) f2)/+noexcept+/;+/
873 /+pragma(inline, true) void operator -(int f1, QFlags!(QStyle.State.enum_type) f2)/+noexcept+/;+/
874 /+pragma(inline, true) QIncompatibleFlag operator |(QStyle.State.enum_type f1, int f2)/+noexcept+/{return QIncompatibleFlag(int(f1)|f2);}+/
875 /+pragma(inline, true) void operator +(int f1, QStyle.State.enum_type f2)/+noexcept+/;+/
876 /+pragma(inline, true) void operator +(QStyle.State.enum_type f1, int f2)/+noexcept+/;+/
877 /+pragma(inline, true) void operator -(int f1, QStyle.State.enum_type f2)/+noexcept+/;+/
878 /+pragma(inline, true) void operator -(QStyle.State.enum_type f1, int f2)/+noexcept+/;+/
879 
880 /+ Q_DECLARE_OPERATORS_FOR_FLAGS(QStyle::State) +/
881 /+pragma(inline, true) QFlags!(QStyle.SubControls.enum_type) operator |(QStyle.SubControls.enum_type f1, QStyle.SubControls.enum_type f2)/+noexcept+/{return QFlags!(QStyle.SubControls.enum_type)(f1)|f2;}+/
882 /+pragma(inline, true) QFlags!(QStyle.SubControls.enum_type) operator |(QStyle.SubControls.enum_type f1, QFlags!(QStyle.SubControls.enum_type) f2)/+noexcept+/{return f2|f1;}+/
883 /+pragma(inline, true) QFlags!(QStyle.SubControls.enum_type) operator &(QStyle.SubControls.enum_type f1, QStyle.SubControls.enum_type f2)/+noexcept+/{return QFlags!(QStyle.SubControls.enum_type)(f1)&f2;}+/
884 /+pragma(inline, true) QFlags!(QStyle.SubControls.enum_type) operator &(QStyle.SubControls.enum_type f1, QFlags!(QStyle.SubControls.enum_type) f2)/+noexcept+/{return f2&f1;}+/
885 /+pragma(inline, true) void operator +(QStyle.SubControls.enum_type f1, QStyle.SubControls.enum_type f2)/+noexcept+/;+/
886 /+pragma(inline, true) void operator +(QStyle.SubControls.enum_type f1, QFlags!(QStyle.SubControls.enum_type) f2)/+noexcept+/;+/
887 /+pragma(inline, true) void operator +(int f1, QFlags!(QStyle.SubControls.enum_type) f2)/+noexcept+/;+/
888 /+pragma(inline, true) void operator -(QStyle.SubControls.enum_type f1, QStyle.SubControls.enum_type f2)/+noexcept+/;+/
889 /+pragma(inline, true) void operator -(QStyle.SubControls.enum_type f1, QFlags!(QStyle.SubControls.enum_type) f2)/+noexcept+/;+/
890 /+pragma(inline, true) void operator -(int f1, QFlags!(QStyle.SubControls.enum_type) f2)/+noexcept+/;+/
891 /+pragma(inline, true) QIncompatibleFlag operator |(QStyle.SubControls.enum_type f1, int f2)/+noexcept+/{return QIncompatibleFlag(int(f1)|f2);}+/
892 /+pragma(inline, true) void operator +(int f1, QStyle.SubControls.enum_type f2)/+noexcept+/;+/
893 /+pragma(inline, true) void operator +(QStyle.SubControls.enum_type f1, int f2)/+noexcept+/;+/
894 /+pragma(inline, true) void operator -(int f1, QStyle.SubControls.enum_type f2)/+noexcept+/;+/
895 /+pragma(inline, true) void operator -(QStyle.SubControls.enum_type f1, int f2)/+noexcept+/;+/
896 /+ Q_DECLARE_OPERATORS_FOR_FLAGS(QStyle::SubControls) +/