1/****************************************************************************
2**
3** Copyright (C) 2020 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtWidgets module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#ifndef QSTYLEOPTION_H
41#define QSTYLEOPTION_H
42
43#include <QtWidgets/qtwidgetsglobal.h>
44#include <QtCore/qlocale.h>
45#include <QtCore/qvariant.h>
46#if QT_CONFIG(spinbox)
47#include <QtWidgets/qabstractspinbox.h>
48#endif
49#include <QtGui/qicon.h>
50#include <QtGui/qtransform.h>
51#if QT_CONFIG(slider)
52#include <QtWidgets/qslider.h>
53#endif
54#include <QtWidgets/qstyle.h>
55#if QT_CONFIG(tabbar)
56#include <QtWidgets/qtabbar.h>
57#endif
58#if QT_CONFIG(tabwidget)
59#include <QtWidgets/qtabwidget.h>
60#endif
61#if QT_CONFIG(rubberband)
62#include <QtWidgets/qrubberband.h>
63#endif
64#include <QtWidgets/qframe.h>
65#if QT_CONFIG(itemviews)
66# include <QtCore/qabstractitemmodel.h>
67#endif
68
69QT_BEGIN_NAMESPACE
70
71
72class QDebug;
73
74class Q_WIDGETS_EXPORT QStyleOption
75{
76public:
77 enum OptionType {
78 SO_Default, SO_FocusRect, SO_Button, SO_Tab, SO_MenuItem,
79 SO_Frame, SO_ProgressBar, SO_ToolBox, SO_Header,
80 SO_DockWidget, SO_ViewItem, SO_TabWidgetFrame,
81 SO_TabBarBase, SO_RubberBand, SO_ToolBar, SO_GraphicsItem,
82
83 SO_Complex = 0xf0000, SO_Slider, SO_SpinBox, SO_ToolButton, SO_ComboBox,
84 SO_TitleBar, SO_GroupBox, SO_SizeGrip,
85
86 SO_CustomBase = 0xf00,
87 SO_ComplexCustomBase = 0xf000000
88 };
89
90 enum StyleOptionType { Type = SO_Default };
91 enum StyleOptionVersion { Version = 1 };
92
93 int version;
94 int type;
95 QStyle::State state;
96 Qt::LayoutDirection direction;
97 QRect rect;
98 QFontMetrics fontMetrics;
99 QPalette palette;
100 QObject *styleObject;
101
102 QStyleOption(int version = QStyleOption::Version, int type = SO_Default);
103 QStyleOption(const QStyleOption &other);
104 ~QStyleOption();
105
106 void initFrom(const QWidget *w);
107 QStyleOption &operator=(const QStyleOption &other);
108};
109
110class Q_WIDGETS_EXPORT QStyleOptionFocusRect : public QStyleOption
111{
112public:
113 enum StyleOptionType { Type = SO_FocusRect };
114 enum StyleOptionVersion { Version = 1 };
115
116 QColor backgroundColor;
117
118 QStyleOptionFocusRect();
119 QStyleOptionFocusRect(const QStyleOptionFocusRect &other) : QStyleOption(Version, Type) { *this = other; }
120 QStyleOptionFocusRect &operator=(const QStyleOptionFocusRect &) = default;
121
122protected:
123 QStyleOptionFocusRect(int version);
124};
125
126class Q_WIDGETS_EXPORT QStyleOptionFrame : public QStyleOption
127{
128public:
129 enum StyleOptionType { Type = SO_Frame };
130 enum StyleOptionVersion { Version = 1 };
131
132 int lineWidth;
133 int midLineWidth;
134 enum FrameFeature {
135 None = 0x00,
136 Flat = 0x01,
137 Rounded = 0x02
138 };
139 Q_DECLARE_FLAGS(FrameFeatures, FrameFeature)
140 FrameFeatures features;
141 QFrame::Shape frameShape;
142
143 QStyleOptionFrame();
144 QStyleOptionFrame(const QStyleOptionFrame &other) : QStyleOption(Version, Type) { *this = other; }
145 QStyleOptionFrame &operator=(const QStyleOptionFrame &) = default;
146
147protected:
148 QStyleOptionFrame(int version);
149};
150
151Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionFrame::FrameFeatures)
152
153#if QT_CONFIG(tabwidget)
154class Q_WIDGETS_EXPORT QStyleOptionTabWidgetFrame : public QStyleOption
155{
156public:
157 enum StyleOptionType { Type = SO_TabWidgetFrame };
158 enum StyleOptionVersion { Version = 1 };
159
160 int lineWidth;
161 int midLineWidth;
162 QTabBar::Shape shape;
163 QSize tabBarSize;
164 QSize rightCornerWidgetSize;
165 QSize leftCornerWidgetSize;
166 QRect tabBarRect;
167 QRect selectedTabRect;
168
169 QStyleOptionTabWidgetFrame();
170 inline QStyleOptionTabWidgetFrame(const QStyleOptionTabWidgetFrame &other)
171 : QStyleOption(Version, Type) { *this = other; }
172 QStyleOptionTabWidgetFrame &operator=(const QStyleOptionTabWidgetFrame &) = default;
173
174protected:
175 QStyleOptionTabWidgetFrame(int version);
176};
177
178#endif // QT_CONFIG(tabwidget)
179
180
181#if QT_CONFIG(tabbar)
182class Q_WIDGETS_EXPORT QStyleOptionTabBarBase : public QStyleOption
183{
184public:
185 enum StyleOptionType { Type = SO_TabBarBase };
186 enum StyleOptionVersion { Version = 1 };
187
188 QTabBar::Shape shape;
189 QRect tabBarRect;
190 QRect selectedTabRect;
191 bool documentMode;
192
193 QStyleOptionTabBarBase();
194 QStyleOptionTabBarBase(const QStyleOptionTabBarBase &other) : QStyleOption(Version, Type) { *this = other; }
195 QStyleOptionTabBarBase &operator=(const QStyleOptionTabBarBase &) = default;
196
197protected:
198 QStyleOptionTabBarBase(int version);
199};
200
201#endif // QT_CONFIG(tabbar)
202
203class Q_WIDGETS_EXPORT QStyleOptionHeader : public QStyleOption
204{
205public:
206 enum StyleOptionType { Type = SO_Header };
207 enum StyleOptionVersion { Version = 1 };
208
209 enum SectionPosition { Beginning, Middle, End, OnlyOneSection };
210 enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected,
211 NextAndPreviousAreSelected };
212 enum SortIndicator { None, SortUp, SortDown };
213
214 int section;
215 QString text;
216 Qt::Alignment textAlignment;
217 QIcon icon;
218 Qt::Alignment iconAlignment;
219 SectionPosition position;
220 SelectedPosition selectedPosition;
221 SortIndicator sortIndicator;
222 Qt::Orientation orientation;
223
224 QStyleOptionHeader();
225 QStyleOptionHeader(const QStyleOptionHeader &other) : QStyleOption(Version, Type) { *this = other; }
226 QStyleOptionHeader &operator=(const QStyleOptionHeader &) = default;
227
228protected:
229 QStyleOptionHeader(int version);
230};
231
232class Q_WIDGETS_EXPORT QStyleOptionButton : public QStyleOption
233{
234public:
235 enum StyleOptionType { Type = SO_Button };
236 enum StyleOptionVersion { Version = 1 };
237
238 enum ButtonFeature { None = 0x00, Flat = 0x01, HasMenu = 0x02, DefaultButton = 0x04,
239 AutoDefaultButton = 0x08, CommandLinkButton = 0x10 };
240 Q_DECLARE_FLAGS(ButtonFeatures, ButtonFeature)
241
242 ButtonFeatures features;
243 QString text;
244 QIcon icon;
245 QSize iconSize;
246
247 QStyleOptionButton();
248 QStyleOptionButton(const QStyleOptionButton &other) : QStyleOption(Version, Type) { *this = other; }
249 QStyleOptionButton &operator=(const QStyleOptionButton &) = default;
250
251protected:
252 QStyleOptionButton(int version);
253};
254
255Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionButton::ButtonFeatures)
256
257#if QT_CONFIG(tabbar)
258class Q_WIDGETS_EXPORT QStyleOptionTab : public QStyleOption
259{
260public:
261 enum StyleOptionType { Type = SO_Tab };
262 enum StyleOptionVersion { Version = 1 };
263
264 enum TabPosition { Beginning, Middle, End, OnlyOneTab };
265 enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected };
266 enum CornerWidget { NoCornerWidgets = 0x00, LeftCornerWidget = 0x01,
267 RightCornerWidget = 0x02 };
268 enum TabFeature { None = 0x00, HasFrame = 0x01 };
269 Q_DECLARE_FLAGS(CornerWidgets, CornerWidget)
270 Q_DECLARE_FLAGS(TabFeatures, TabFeature)
271
272 QTabBar::Shape shape;
273 QString text;
274 QIcon icon;
275 int row;
276 TabPosition position;
277 SelectedPosition selectedPosition;
278 CornerWidgets cornerWidgets;
279 QSize iconSize;
280 bool documentMode;
281 QSize leftButtonSize;
282 QSize rightButtonSize;
283 TabFeatures features;
284 int tabIndex = -1;
285
286 QStyleOptionTab();
287 QStyleOptionTab(const QStyleOptionTab &other) : QStyleOption(Version, Type) { *this = other; }
288 QStyleOptionTab &operator=(const QStyleOptionTab &) = default;
289
290protected:
291 QStyleOptionTab(int version);
292};
293
294Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionTab::CornerWidgets)
295
296#endif // QT_CONFIG(tabbar)
297
298
299#if QT_CONFIG(toolbar)
300
301class Q_WIDGETS_EXPORT QStyleOptionToolBar : public QStyleOption
302{
303public:
304 enum StyleOptionType { Type = SO_ToolBar };
305 enum StyleOptionVersion { Version = 1 };
306 enum ToolBarPosition { Beginning, Middle, End, OnlyOne };
307 enum ToolBarFeature { None = 0x0, Movable = 0x1 };
308 Q_DECLARE_FLAGS(ToolBarFeatures, ToolBarFeature)
309 ToolBarPosition positionOfLine; // The toolbar line position
310 ToolBarPosition positionWithinLine; // The position within a toolbar
311 Qt::ToolBarArea toolBarArea; // The toolbar docking area
312 ToolBarFeatures features;
313 int lineWidth;
314 int midLineWidth;
315 QStyleOptionToolBar();
316 QStyleOptionToolBar(const QStyleOptionToolBar &other) : QStyleOption(Version, Type) { *this = other; }
317 QStyleOptionToolBar &operator=(const QStyleOptionToolBar &) = default;
318
319protected:
320 QStyleOptionToolBar(int version);
321};
322
323Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionToolBar::ToolBarFeatures)
324
325#endif // QT_CONFIG(toolbar)
326
327class Q_WIDGETS_EXPORT QStyleOptionProgressBar : public QStyleOption
328{
329public:
330 enum StyleOptionType { Type = SO_ProgressBar };
331 enum StyleOptionVersion { Version = 1 };
332
333 int minimum;
334 int maximum;
335 int progress;
336 QString text;
337 Qt::Alignment textAlignment;
338 bool textVisible;
339 bool invertedAppearance;
340 bool bottomToTop;
341
342 QStyleOptionProgressBar();
343 QStyleOptionProgressBar(const QStyleOptionProgressBar &other) : QStyleOption(Version, Type) { *this = other; }
344 QStyleOptionProgressBar &operator=(const QStyleOptionProgressBar &) = default;
345
346protected:
347 QStyleOptionProgressBar(int version);
348};
349
350class Q_WIDGETS_EXPORT QStyleOptionMenuItem : public QStyleOption
351{
352public:
353 enum StyleOptionType { Type = SO_MenuItem };
354 enum StyleOptionVersion { Version = 1 };
355
356 enum MenuItemType { Normal, DefaultItem, Separator, SubMenu, Scroller, TearOff, Margin,
357 EmptyArea };
358 enum CheckType { NotCheckable, Exclusive, NonExclusive };
359
360 MenuItemType menuItemType;
361 CheckType checkType;
362 bool checked;
363 bool menuHasCheckableItems;
364 QRect menuRect;
365 QString text;
366 QIcon icon;
367 int maxIconWidth;
368 int reservedShortcutWidth;
369 QFont font;
370
371 QStyleOptionMenuItem();
372 QStyleOptionMenuItem(const QStyleOptionMenuItem &other) : QStyleOption(Version, Type) { *this = other; }
373 QStyleOptionMenuItem &operator=(const QStyleOptionMenuItem &) = default;
374
375protected:
376 QStyleOptionMenuItem(int version);
377};
378
379class Q_WIDGETS_EXPORT QStyleOptionDockWidget : public QStyleOption
380{
381public:
382 enum StyleOptionType { Type = SO_DockWidget };
383 enum StyleOptionVersion { Version = 1 };
384
385 QString title;
386 bool closable;
387 bool movable;
388 bool floatable;
389 bool verticalTitleBar;
390
391 QStyleOptionDockWidget();
392 QStyleOptionDockWidget(const QStyleOptionDockWidget &other) : QStyleOption(Version, Type) { *this = other; }
393 QStyleOptionDockWidget &operator=(const QStyleOptionDockWidget &) = default;
394
395protected:
396 QStyleOptionDockWidget(int version);
397};
398
399#if QT_CONFIG(itemviews)
400
401class Q_WIDGETS_EXPORT QStyleOptionViewItem : public QStyleOption
402{
403public:
404 enum StyleOptionType { Type = SO_ViewItem };
405 enum StyleOptionVersion { Version = 1 };
406
407 enum Position { Left, Right, Top, Bottom };
408
409 Qt::Alignment displayAlignment;
410 Qt::Alignment decorationAlignment;
411 Qt::TextElideMode textElideMode;
412 Position decorationPosition;
413 QSize decorationSize;
414 QFont font;
415 bool showDecorationSelected;
416
417 enum ViewItemFeature {
418 None = 0x00,
419 WrapText = 0x01,
420 Alternate = 0x02,
421 HasCheckIndicator = 0x04,
422 HasDisplay = 0x08,
423 HasDecoration = 0x10
424 };
425 Q_DECLARE_FLAGS(ViewItemFeatures, ViewItemFeature)
426
427 ViewItemFeatures features;
428
429 QLocale locale;
430 const QWidget *widget;
431
432 enum ViewItemPosition { Invalid, Beginning, Middle, End, OnlyOne };
433
434 QModelIndex index;
435 Qt::CheckState checkState;
436 QIcon icon;
437 QString text;
438 ViewItemPosition viewItemPosition;
439 QBrush backgroundBrush;
440
441 QStyleOptionViewItem();
442 QStyleOptionViewItem(const QStyleOptionViewItem &other) : QStyleOption(Version, Type) { *this = other; }
443 QStyleOptionViewItem &operator=(const QStyleOptionViewItem &) = default;
444
445protected:
446 QStyleOptionViewItem(int version);
447};
448
449Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionViewItem::ViewItemFeatures)
450
451#endif // QT_CONFIG(itemviews)
452
453class Q_WIDGETS_EXPORT QStyleOptionToolBox : public QStyleOption
454{
455public:
456 enum StyleOptionType { Type = SO_ToolBox };
457 enum StyleOptionVersion { Version = 1 };
458
459 QString text;
460 QIcon icon;
461
462 enum TabPosition { Beginning, Middle, End, OnlyOneTab };
463 enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected };
464
465 TabPosition position;
466 SelectedPosition selectedPosition;
467
468 QStyleOptionToolBox();
469 QStyleOptionToolBox(const QStyleOptionToolBox &other) : QStyleOption(Version, Type) { *this = other; }
470 QStyleOptionToolBox &operator=(const QStyleOptionToolBox &) = default;
471
472protected:
473 QStyleOptionToolBox(int version);
474};
475
476#if QT_CONFIG(rubberband)
477class Q_WIDGETS_EXPORT QStyleOptionRubberBand : public QStyleOption
478{
479public:
480 enum StyleOptionType { Type = SO_RubberBand };
481 enum StyleOptionVersion { Version = 1 };
482
483 QRubberBand::Shape shape;
484 bool opaque;
485
486 QStyleOptionRubberBand();
487 QStyleOptionRubberBand(const QStyleOptionRubberBand &other) : QStyleOption(Version, Type) { *this = other; }
488 QStyleOptionRubberBand &operator=(const QStyleOptionRubberBand &) = default;
489
490protected:
491 QStyleOptionRubberBand(int version);
492};
493#endif // QT_CONFIG(rubberband)
494
495// -------------------------- Complex style options -------------------------------
496class Q_WIDGETS_EXPORT QStyleOptionComplex : public QStyleOption
497{
498public:
499 enum StyleOptionType { Type = SO_Complex };
500 enum StyleOptionVersion { Version = 1 };
501
502 QStyle::SubControls subControls;
503 QStyle::SubControls activeSubControls;
504
505 QStyleOptionComplex(int version = QStyleOptionComplex::Version, int type = SO_Complex);
506 QStyleOptionComplex(const QStyleOptionComplex &other) : QStyleOption(Version, Type) { *this = other; }
507 QStyleOptionComplex &operator=(const QStyleOptionComplex &) = default;
508};
509
510#if QT_CONFIG(slider)
511class Q_WIDGETS_EXPORT QStyleOptionSlider : public QStyleOptionComplex
512{
513public:
514 enum StyleOptionType { Type = SO_Slider };
515 enum StyleOptionVersion { Version = 1 };
516
517 Qt::Orientation orientation;
518 int minimum;
519 int maximum;
520 QSlider::TickPosition tickPosition;
521 int tickInterval;
522 bool upsideDown;
523 int sliderPosition;
524 int sliderValue;
525 int singleStep;
526 int pageStep;
527 qreal notchTarget;
528 bool dialWrapping;
529 Qt::KeyboardModifiers keyboardModifiers;
530
531 QStyleOptionSlider();
532 QStyleOptionSlider(const QStyleOptionSlider &other) : QStyleOptionComplex(Version, Type) { *this = other; }
533 QStyleOptionSlider &operator=(const QStyleOptionSlider &) = default;
534
535protected:
536 QStyleOptionSlider(int version);
537};
538#endif // QT_CONFIG(slider)
539
540#if QT_CONFIG(spinbox)
541class Q_WIDGETS_EXPORT QStyleOptionSpinBox : public QStyleOptionComplex
542{
543public:
544 enum StyleOptionType { Type = SO_SpinBox };
545 enum StyleOptionVersion { Version = 1 };
546
547 QAbstractSpinBox::ButtonSymbols buttonSymbols;
548 QAbstractSpinBox::StepEnabled stepEnabled;
549 bool frame;
550
551 QStyleOptionSpinBox();
552 QStyleOptionSpinBox(const QStyleOptionSpinBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
553 QStyleOptionSpinBox &operator=(const QStyleOptionSpinBox &) = default;
554
555protected:
556 QStyleOptionSpinBox(int version);
557};
558#endif // QT_CONFIG(spinbox)
559
560class Q_WIDGETS_EXPORT QStyleOptionToolButton : public QStyleOptionComplex
561{
562public:
563 enum StyleOptionType { Type = SO_ToolButton };
564 enum StyleOptionVersion { Version = 1 };
565
566 enum ToolButtonFeature { None = 0x00, Arrow = 0x01, Menu = 0x04, MenuButtonPopup = Menu, PopupDelay = 0x08,
567 HasMenu = 0x10 };
568 Q_DECLARE_FLAGS(ToolButtonFeatures, ToolButtonFeature)
569
570 ToolButtonFeatures features;
571 QIcon icon;
572 QSize iconSize;
573 QString text;
574 Qt::ArrowType arrowType;
575 Qt::ToolButtonStyle toolButtonStyle;
576 QPoint pos;
577 QFont font;
578
579 QStyleOptionToolButton();
580 QStyleOptionToolButton(const QStyleOptionToolButton &other) : QStyleOptionComplex(Version, Type) { *this = other; }
581 QStyleOptionToolButton &operator=(const QStyleOptionToolButton &) = default;
582
583protected:
584 QStyleOptionToolButton(int version);
585};
586
587Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionToolButton::ToolButtonFeatures)
588
589class Q_WIDGETS_EXPORT QStyleOptionComboBox : public QStyleOptionComplex
590{
591public:
592 enum StyleOptionType { Type = SO_ComboBox };
593 enum StyleOptionVersion { Version = 1 };
594
595 bool editable;
596 QRect popupRect;
597 bool frame;
598 QString currentText;
599 QIcon currentIcon;
600 QSize iconSize;
601 Qt::Alignment textAlignment = Qt::AlignLeft | Qt::AlignVCenter;
602
603 QStyleOptionComboBox();
604 QStyleOptionComboBox(const QStyleOptionComboBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
605 QStyleOptionComboBox &operator=(const QStyleOptionComboBox &) = default;
606
607protected:
608 QStyleOptionComboBox(int version);
609};
610
611class Q_WIDGETS_EXPORT QStyleOptionTitleBar : public QStyleOptionComplex
612{
613public:
614 enum StyleOptionType { Type = SO_TitleBar };
615 enum StyleOptionVersion { Version = 1 };
616
617 QString text;
618 QIcon icon;
619 int titleBarState;
620 Qt::WindowFlags titleBarFlags;
621
622 QStyleOptionTitleBar();
623 QStyleOptionTitleBar(const QStyleOptionTitleBar &other) : QStyleOptionComplex(Version, Type) { *this = other; }
624 QStyleOptionTitleBar &operator=(const QStyleOptionTitleBar &) = default;
625
626protected:
627 QStyleOptionTitleBar(int version);
628};
629
630class Q_WIDGETS_EXPORT QStyleOptionGroupBox : public QStyleOptionComplex
631{
632public:
633 enum StyleOptionType { Type = SO_GroupBox };
634 enum StyleOptionVersion { Version = 1 };
635
636 QStyleOptionFrame::FrameFeatures features;
637 QString text;
638 Qt::Alignment textAlignment;
639 QColor textColor;
640 int lineWidth;
641 int midLineWidth;
642
643 QStyleOptionGroupBox();
644 QStyleOptionGroupBox(const QStyleOptionGroupBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
645 QStyleOptionGroupBox &operator=(const QStyleOptionGroupBox &) = default;
646protected:
647 QStyleOptionGroupBox(int version);
648};
649
650class Q_WIDGETS_EXPORT QStyleOptionSizeGrip : public QStyleOptionComplex
651{
652public:
653 enum StyleOptionType { Type = SO_SizeGrip };
654 enum StyleOptionVersion { Version = 1 };
655
656 Qt::Corner corner;
657
658 QStyleOptionSizeGrip();
659 QStyleOptionSizeGrip(const QStyleOptionSizeGrip &other) : QStyleOptionComplex(Version, Type) { *this = other; }
660 QStyleOptionSizeGrip &operator=(const QStyleOptionSizeGrip &) = default;
661protected:
662 QStyleOptionSizeGrip(int version);
663};
664
665class Q_WIDGETS_EXPORT QStyleOptionGraphicsItem : public QStyleOption
666{
667public:
668 enum StyleOptionType { Type = SO_GraphicsItem };
669 enum StyleOptionVersion { Version = 1 };
670
671 QRectF exposedRect;
672
673 QStyleOptionGraphicsItem();
674 QStyleOptionGraphicsItem(const QStyleOptionGraphicsItem &other) : QStyleOption(Version, Type) { *this = other; }
675 QStyleOptionGraphicsItem &operator=(const QStyleOptionGraphicsItem &) = default;
676 static qreal levelOfDetailFromTransform(const QTransform &worldTransform);
677protected:
678 QStyleOptionGraphicsItem(int version);
679};
680
681template <typename T>
682T qstyleoption_cast(const QStyleOption *opt)
683{
684 typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Opt;
685 if (opt && opt->version >= Opt::Version && (opt->type == Opt::Type
686 || int(Opt::Type) == QStyleOption::SO_Default
687 || (int(Opt::Type) == QStyleOption::SO_Complex
688 && opt->type > QStyleOption::SO_Complex)))
689 return static_cast<T>(opt);
690 return nullptr;
691}
692
693template <typename T>
694T qstyleoption_cast(QStyleOption *opt)
695{
696 typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Opt;
697 if (opt && opt->version >= Opt::Version && (opt->type == Opt::Type
698 || int(Opt::Type) == QStyleOption::SO_Default
699 || (int(Opt::Type) == QStyleOption::SO_Complex
700 && opt->type > QStyleOption::SO_Complex)))
701 return static_cast<T>(opt);
702 return nullptr;
703}
704
705// -------------------------- QStyleHintReturn -------------------------------
706class Q_WIDGETS_EXPORT QStyleHintReturn {
707public:
708 enum HintReturnType {
709 SH_Default=0xf000, SH_Mask, SH_Variant
710 };
711
712 enum StyleOptionType { Type = SH_Default };
713 enum StyleOptionVersion { Version = 1 };
714
715 QStyleHintReturn(int version = QStyleOption::Version, int type = SH_Default);
716 ~QStyleHintReturn();
717
718 int version;
719 int type;
720};
721
722class Q_WIDGETS_EXPORT QStyleHintReturnMask : public QStyleHintReturn {
723public:
724 enum StyleOptionType { Type = SH_Mask };
725 enum StyleOptionVersion { Version = 1 };
726
727 QStyleHintReturnMask();
728 ~QStyleHintReturnMask();
729
730 QRegion region;
731};
732
733class Q_WIDGETS_EXPORT QStyleHintReturnVariant : public QStyleHintReturn {
734public:
735 enum StyleOptionType { Type = SH_Variant };
736 enum StyleOptionVersion { Version = 1 };
737
738 QStyleHintReturnVariant();
739 ~QStyleHintReturnVariant();
740
741 QVariant variant;
742};
743
744template <typename T>
745T qstyleoption_cast(const QStyleHintReturn *hint)
746{
747 typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Opt;
748 if (hint && hint->version <= Opt::Version &&
749 (hint->type == Opt::Type || int(Opt::Type) == QStyleHintReturn::SH_Default))
750 return static_cast<T>(hint);
751 return nullptr;
752}
753
754template <typename T>
755T qstyleoption_cast(QStyleHintReturn *hint)
756{
757 typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Opt;
758 if (hint && hint->version <= Opt::Version &&
759 (hint->type == Opt::Type || int(Opt::Type) == QStyleHintReturn::SH_Default))
760 return static_cast<T>(hint);
761 return nullptr;
762}
763
764#if !defined(QT_NO_DEBUG_STREAM)
765Q_WIDGETS_EXPORT QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType);
766Q_WIDGETS_EXPORT QDebug operator<<(QDebug debug, const QStyleOption &option);
767#endif
768
769QT_END_NAMESPACE
770
771#endif // QSTYLEOPTION_H
772