src/gui/styles/qstyleoption.h
changeset 0 1918ee327afb
child 3 41300fa6a67c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/gui/styles/qstyleoption.h	Mon Jan 11 14:00:40 2010 +0000
@@ -0,0 +1,950 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QSTYLEOPTION_H
+#define QSTYLEOPTION_H
+
+#include <QtCore/qvariant.h>
+#include <QtGui/qabstractspinbox.h>
+#include <QtGui/qicon.h>
+#include <QtGui/qmatrix.h>
+#include <QtGui/qslider.h>
+#include <QtGui/qstyle.h>
+#include <QtGui/qtabbar.h>
+#include <QtGui/qtabwidget.h>
+#include <QtGui/qrubberband.h>
+#include <QtGui/qframe.h>
+#ifndef QT_NO_ITEMVIEWS
+#   include <QtCore/qabstractitemmodel.h>
+#endif
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Gui)
+
+class QDebug;
+
+class Q_GUI_EXPORT QStyleOption
+{
+public:
+    enum OptionType {
+                      SO_Default, SO_FocusRect, SO_Button, SO_Tab, SO_MenuItem,
+                      SO_Frame, SO_ProgressBar, SO_ToolBox, SO_Header, SO_Q3DockWindow,
+                      SO_DockWidget, SO_Q3ListViewItem, SO_ViewItem, SO_TabWidgetFrame,
+                      SO_TabBarBase, SO_RubberBand, SO_ToolBar, SO_GraphicsItem,
+
+                      SO_Complex = 0xf0000, SO_Slider, SO_SpinBox, SO_ToolButton, SO_ComboBox,
+                      SO_Q3ListView, SO_TitleBar, SO_GroupBox, SO_SizeGrip,
+
+                      SO_CustomBase = 0xf00,
+                      SO_ComplexCustomBase = 0xf000000
+                    };
+
+    enum StyleOptionType { Type = SO_Default };
+    enum StyleOptionVersion { Version = 1 };
+
+    int version;
+    int type;
+    QStyle::State state;
+    Qt::LayoutDirection direction;
+    QRect rect;
+    QFontMetrics fontMetrics;
+    QPalette palette;
+
+    QStyleOption(int version = QStyleOption::Version, int type = SO_Default);
+    QStyleOption(const QStyleOption &other);
+    ~QStyleOption();
+
+    void init(const QWidget *w);
+    inline void initFrom(const QWidget *w) { init(w); }
+    QStyleOption &operator=(const QStyleOption &other);
+};
+
+class Q_GUI_EXPORT QStyleOptionFocusRect : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_FocusRect };
+    enum StyleOptionVersion { Version = 1 };
+
+    QColor backgroundColor;
+
+    QStyleOptionFocusRect();
+    QStyleOptionFocusRect(const QStyleOptionFocusRect &other) : QStyleOption(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionFocusRect(int version);
+};
+
+class Q_GUI_EXPORT QStyleOptionFrame : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_Frame };
+    enum StyleOptionVersion { Version = 1 };
+
+    int lineWidth;
+    int midLineWidth;
+
+    QStyleOptionFrame();
+    QStyleOptionFrame(const QStyleOptionFrame &other) : QStyleOption(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionFrame(int version);
+};
+
+class Q_GUI_EXPORT QStyleOptionFrameV2 : public QStyleOptionFrame
+{
+public:
+    enum StyleOptionVersion { Version = 2 };
+    enum FrameFeature {
+        None = 0x00,
+        Flat = 0x01
+    };
+    Q_DECLARE_FLAGS(FrameFeatures, FrameFeature)
+    FrameFeatures features;
+
+    QStyleOptionFrameV2();
+    QStyleOptionFrameV2(const QStyleOptionFrameV2 &other) : QStyleOptionFrame(Version) { *this = other; }
+    QStyleOptionFrameV2(const QStyleOptionFrame &other);
+    QStyleOptionFrameV2 &operator=(const QStyleOptionFrame &other);
+
+protected:
+    QStyleOptionFrameV2(int version);
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionFrameV2::FrameFeatures)
+
+
+class Q_GUI_EXPORT QStyleOptionFrameV3 : public QStyleOptionFrameV2
+{
+public:
+    enum StyleOptionVersion { Version = 3 };
+    QFrame::Shape frameShape : 4;
+    uint unused : 28;
+
+    QStyleOptionFrameV3();
+    QStyleOptionFrameV3(const QStyleOptionFrameV3 &other) : QStyleOptionFrameV2(Version) { *this = other; }
+    QStyleOptionFrameV3(const QStyleOptionFrame &other);
+    QStyleOptionFrameV3 &operator=(const QStyleOptionFrame &other);
+
+protected:
+    QStyleOptionFrameV3(int version);
+};
+
+
+#ifndef QT_NO_TABWIDGET
+class Q_GUI_EXPORT QStyleOptionTabWidgetFrame : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_TabWidgetFrame };
+    enum StyleOptionVersion { Version = 1 };
+
+    int lineWidth;
+    int midLineWidth;
+    QTabBar::Shape shape;
+    QSize tabBarSize;
+    QSize rightCornerWidgetSize;
+    QSize leftCornerWidgetSize;
+
+    QStyleOptionTabWidgetFrame();
+    inline QStyleOptionTabWidgetFrame(const QStyleOptionTabWidgetFrame &other)
+        : QStyleOption(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionTabWidgetFrame(int version);
+};
+#endif
+
+#ifndef QT_NO_TABBAR
+class Q_GUI_EXPORT QStyleOptionTabBarBase : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_TabBarBase };
+    enum StyleOptionVersion { Version = 1 };
+
+    QTabBar::Shape shape;
+    QRect tabBarRect;
+    QRect selectedTabRect;
+
+    QStyleOptionTabBarBase();
+    QStyleOptionTabBarBase(const QStyleOptionTabBarBase &other) : QStyleOption(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionTabBarBase(int version);
+};
+
+class Q_GUI_EXPORT QStyleOptionTabBarBaseV2 : public QStyleOptionTabBarBase
+{
+public:
+    enum StyleOptionVersion { Version = 2 };
+    bool documentMode;
+    QStyleOptionTabBarBaseV2();
+    QStyleOptionTabBarBaseV2(const QStyleOptionTabBarBaseV2 &other) : QStyleOptionTabBarBase(Version) { *this = other; }
+    QStyleOptionTabBarBaseV2(const QStyleOptionTabBarBase &other);
+    QStyleOptionTabBarBaseV2 &operator=(const QStyleOptionTabBarBase &other);
+
+protected:
+    QStyleOptionTabBarBaseV2(int version);
+};
+
+#endif
+
+class Q_GUI_EXPORT QStyleOptionHeader : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_Header };
+    enum StyleOptionVersion { Version = 1 };
+
+    enum SectionPosition { Beginning, Middle, End, OnlyOneSection };
+    enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected,
+                            NextAndPreviousAreSelected };
+    enum SortIndicator { None, SortUp, SortDown };
+
+    int section;
+    QString text;
+    Qt::Alignment textAlignment;
+    QIcon icon;
+    Qt::Alignment iconAlignment;
+    SectionPosition position;
+    SelectedPosition selectedPosition;
+    SortIndicator sortIndicator;
+    Qt::Orientation orientation;
+
+    QStyleOptionHeader();
+    QStyleOptionHeader(const QStyleOptionHeader &other) : QStyleOption(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionHeader(int version);
+};
+
+class Q_GUI_EXPORT QStyleOptionButton : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_Button };
+    enum StyleOptionVersion { Version = 1 };
+
+    enum ButtonFeature { None = 0x00, Flat = 0x01, HasMenu = 0x02, DefaultButton = 0x04,
+                         AutoDefaultButton = 0x08, CommandLinkButton = 0x10  };
+    Q_DECLARE_FLAGS(ButtonFeatures, ButtonFeature)
+
+    ButtonFeatures features;
+    QString text;
+    QIcon icon;
+    QSize iconSize;
+
+    QStyleOptionButton();
+    QStyleOptionButton(const QStyleOptionButton &other) : QStyleOption(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionButton(int version);
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionButton::ButtonFeatures)
+
+#ifndef QT_NO_TABBAR
+class Q_GUI_EXPORT QStyleOptionTab : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_Tab };
+    enum StyleOptionVersion { Version = 1 };
+
+    enum TabPosition { Beginning, Middle, End, OnlyOneTab };
+    enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected };
+    enum CornerWidget { NoCornerWidgets = 0x00, LeftCornerWidget = 0x01,
+                        RightCornerWidget = 0x02 };
+    Q_DECLARE_FLAGS(CornerWidgets, CornerWidget)
+
+    QTabBar::Shape shape;
+    QString text;
+    QIcon icon;
+    int row;
+    TabPosition position;
+    SelectedPosition selectedPosition;
+    CornerWidgets cornerWidgets;
+
+    QStyleOptionTab();
+    QStyleOptionTab(const QStyleOptionTab &other) : QStyleOption(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionTab(int version);
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionTab::CornerWidgets)
+
+class Q_GUI_EXPORT QStyleOptionTabV2 : public QStyleOptionTab
+{
+public:
+    enum StyleOptionVersion { Version = 2 };
+    QSize iconSize;
+    QStyleOptionTabV2();
+    QStyleOptionTabV2(const QStyleOptionTabV2 &other) : QStyleOptionTab(Version) { *this = other; }
+    QStyleOptionTabV2(const QStyleOptionTab &other);
+    QStyleOptionTabV2 &operator=(const QStyleOptionTab &other);
+
+protected:
+    QStyleOptionTabV2(int version);
+};
+
+class Q_GUI_EXPORT QStyleOptionTabV3 : public QStyleOptionTabV2
+{
+public:
+    enum StyleOptionVersion { Version = 3 };
+    bool documentMode;
+    QSize leftButtonSize;
+    QSize rightButtonSize;
+    QStyleOptionTabV3();
+    QStyleOptionTabV3(const QStyleOptionTabV3 &other) : QStyleOptionTabV2(Version) { *this = other; }
+    QStyleOptionTabV3(const QStyleOptionTabV2 &other) : QStyleOptionTabV2(Version) { *this = other; }
+    QStyleOptionTabV3(const QStyleOptionTab &other);
+    QStyleOptionTabV3 &operator=(const QStyleOptionTab &other);
+
+protected:
+    QStyleOptionTabV3(int version);
+};
+
+#endif
+
+
+#ifndef QT_NO_TOOLBAR
+
+class Q_GUI_EXPORT QStyleOptionToolBar : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_ToolBar };
+    enum StyleOptionVersion { Version = 1 };
+    enum ToolBarPosition { Beginning, Middle, End, OnlyOne };
+    enum ToolBarFeature { None = 0x0, Movable = 0x1 };
+    Q_DECLARE_FLAGS(ToolBarFeatures, ToolBarFeature)
+    ToolBarPosition positionOfLine; // The toolbar line position
+    ToolBarPosition positionWithinLine; // The position within a toolbar
+    Qt::ToolBarArea toolBarArea; // The toolbar docking area
+    ToolBarFeatures features;
+    int lineWidth;
+    int midLineWidth;
+    QStyleOptionToolBar();
+    QStyleOptionToolBar(const QStyleOptionToolBar &other) : QStyleOption(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionToolBar(int version);
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionToolBar::ToolBarFeatures)
+
+#endif
+
+
+
+class Q_GUI_EXPORT QStyleOptionProgressBar : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_ProgressBar };
+    enum StyleOptionVersion { Version = 1 };
+
+    int minimum;
+    int maximum;
+    int progress;
+    QString text;
+    Qt::Alignment textAlignment;
+    bool textVisible;
+
+    QStyleOptionProgressBar();
+    QStyleOptionProgressBar(const QStyleOptionProgressBar &other) : QStyleOption(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionProgressBar(int version);
+};
+
+// Adds style info for vertical progress bars
+class Q_GUI_EXPORT QStyleOptionProgressBarV2 : public QStyleOptionProgressBar
+{
+public:
+    enum StyleOptionType { Type = SO_ProgressBar };
+    enum StyleOptionVersion { Version = 2 };
+    Qt::Orientation orientation;
+    bool invertedAppearance;
+    bool bottomToTop;
+
+    QStyleOptionProgressBarV2();
+    QStyleOptionProgressBarV2(const QStyleOptionProgressBar &other);
+    QStyleOptionProgressBarV2(const QStyleOptionProgressBarV2 &other);
+    QStyleOptionProgressBarV2 &operator=(const QStyleOptionProgressBar &other);
+
+protected:
+    QStyleOptionProgressBarV2(int version);
+};
+
+class Q_GUI_EXPORT QStyleOptionMenuItem : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_MenuItem };
+    enum StyleOptionVersion { Version = 1 };
+
+    enum MenuItemType { Normal, DefaultItem, Separator, SubMenu, Scroller, TearOff, Margin,
+                        EmptyArea };
+    enum CheckType { NotCheckable, Exclusive, NonExclusive };
+
+    MenuItemType menuItemType;
+    CheckType checkType;
+    bool checked;
+    bool menuHasCheckableItems;
+    QRect menuRect;
+    QString text;
+    QIcon icon;
+    int maxIconWidth;
+    int tabWidth;
+    QFont font;
+
+    QStyleOptionMenuItem();
+    QStyleOptionMenuItem(const QStyleOptionMenuItem &other) : QStyleOption(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionMenuItem(int version);
+};
+
+class Q_GUI_EXPORT QStyleOptionQ3ListViewItem : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_Q3ListViewItem };
+    enum StyleOptionVersion { Version = 1 };
+
+    enum Q3ListViewItemFeature { None = 0x00, Expandable = 0x01, MultiLine = 0x02, Visible = 0x04,
+                                 ParentControl = 0x08 };
+    Q_DECLARE_FLAGS(Q3ListViewItemFeatures, Q3ListViewItemFeature)
+
+    Q3ListViewItemFeatures features;
+    int height;
+    int totalHeight;
+    int itemY;
+    int childCount;
+
+    QStyleOptionQ3ListViewItem();
+    QStyleOptionQ3ListViewItem(const QStyleOptionQ3ListViewItem &other) : QStyleOption(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionQ3ListViewItem(int version);
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionQ3ListViewItem::Q3ListViewItemFeatures)
+
+class Q_GUI_EXPORT QStyleOptionQ3DockWindow : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_Q3DockWindow };
+    enum StyleOptionVersion { Version = 1 };
+
+    bool docked;
+    bool closeEnabled;
+
+    QStyleOptionQ3DockWindow();
+    QStyleOptionQ3DockWindow(const QStyleOptionQ3DockWindow &other) : QStyleOption(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionQ3DockWindow(int version);
+};
+
+class Q_GUI_EXPORT QStyleOptionDockWidget : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_DockWidget };
+    enum StyleOptionVersion { Version = 1 };
+
+    QString title;
+    bool closable;
+    bool movable;
+    bool floatable;
+
+    QStyleOptionDockWidget();
+    QStyleOptionDockWidget(const QStyleOptionDockWidget &other) : QStyleOption(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionDockWidget(int version);
+};
+
+class Q_GUI_EXPORT QStyleOptionDockWidgetV2 : public QStyleOptionDockWidget
+{
+public:
+    enum StyleOptionVersion { Version = 2 };
+
+    bool verticalTitleBar;
+
+    QStyleOptionDockWidgetV2();
+    QStyleOptionDockWidgetV2(const QStyleOptionDockWidgetV2 &other)
+        : QStyleOptionDockWidget(Version) { *this = other; }
+    QStyleOptionDockWidgetV2(const QStyleOptionDockWidget &other);
+    QStyleOptionDockWidgetV2 &operator = (const QStyleOptionDockWidget &other);
+
+protected:
+    QStyleOptionDockWidgetV2(int version);
+};
+
+class Q_GUI_EXPORT QStyleOptionViewItem : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_ViewItem };
+    enum StyleOptionVersion { Version = 1 };
+
+    enum Position { Left, Right, Top, Bottom };
+
+    Qt::Alignment displayAlignment;
+    Qt::Alignment decorationAlignment;
+    Qt::TextElideMode textElideMode;
+    Position decorationPosition;
+    QSize decorationSize;
+    QFont font;
+    bool showDecorationSelected;
+
+    QStyleOptionViewItem();
+    QStyleOptionViewItem(const QStyleOptionViewItem &other) : QStyleOption(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionViewItem(int version);
+};
+
+class Q_GUI_EXPORT QStyleOptionViewItemV2 : public QStyleOptionViewItem
+{
+public:
+    enum StyleOptionVersion { Version = 2 };
+
+    enum ViewItemFeature {
+        None = 0x00,
+        WrapText = 0x01,
+        Alternate = 0x02,
+        HasCheckIndicator = 0x04,
+        HasDisplay = 0x08,
+        HasDecoration = 0x10
+    };
+    Q_DECLARE_FLAGS(ViewItemFeatures, ViewItemFeature)
+
+    ViewItemFeatures features;
+
+    QStyleOptionViewItemV2();
+    QStyleOptionViewItemV2(const QStyleOptionViewItemV2 &other) : QStyleOptionViewItem(Version) { *this = other; }
+    QStyleOptionViewItemV2(const QStyleOptionViewItem &other);
+    QStyleOptionViewItemV2 &operator=(const QStyleOptionViewItem &other);
+
+protected:
+    QStyleOptionViewItemV2(int version);
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionViewItemV2::ViewItemFeatures)
+
+class Q_GUI_EXPORT QStyleOptionViewItemV3 : public QStyleOptionViewItemV2
+{
+public:
+    enum StyleOptionVersion { Version = 3 };
+
+    QLocale locale;
+    const QWidget *widget;
+
+    QStyleOptionViewItemV3();
+    QStyleOptionViewItemV3(const QStyleOptionViewItemV3 &other)
+        : QStyleOptionViewItemV2(Version) { *this = other; }
+    QStyleOptionViewItemV3(const QStyleOptionViewItem &other);
+    QStyleOptionViewItemV3 &operator = (const QStyleOptionViewItem &other);
+
+protected:
+    QStyleOptionViewItemV3(int version);
+};
+
+#ifndef QT_NO_ITEMVIEWS
+class Q_GUI_EXPORT QStyleOptionViewItemV4 : public QStyleOptionViewItemV3
+{
+public:
+    enum StyleOptionVersion { Version = 4 };
+    enum ViewItemPosition { Invalid, Beginning, Middle, End, OnlyOne };
+
+    QModelIndex index;
+    Qt::CheckState checkState;
+    QIcon icon;
+    QString text;
+    ViewItemPosition viewItemPosition;
+    QBrush backgroundBrush;
+
+    QStyleOptionViewItemV4();
+    QStyleOptionViewItemV4(const QStyleOptionViewItemV4 &other)
+        : QStyleOptionViewItemV3(Version) { *this = other; }
+    QStyleOptionViewItemV4(const QStyleOptionViewItem &other);
+    QStyleOptionViewItemV4 &operator = (const QStyleOptionViewItem &other);
+
+protected:
+    QStyleOptionViewItemV4(int version);
+};
+#endif
+
+class Q_GUI_EXPORT QStyleOptionToolBox : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_ToolBox };
+    enum StyleOptionVersion { Version = 1 };
+
+    QString text;
+    QIcon icon;
+
+    QStyleOptionToolBox();
+    QStyleOptionToolBox(const QStyleOptionToolBox &other) : QStyleOption(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionToolBox(int version);
+};
+
+class Q_GUI_EXPORT QStyleOptionToolBoxV2 : public QStyleOptionToolBox
+{
+public:
+    enum StyleOptionVersion { Version = 2 };
+    enum TabPosition { Beginning, Middle, End, OnlyOneTab };
+    enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected };
+
+    TabPosition position;
+    SelectedPosition selectedPosition;
+
+    QStyleOptionToolBoxV2();
+    QStyleOptionToolBoxV2(const QStyleOptionToolBoxV2 &other) : QStyleOptionToolBox(Version) { *this = other; }
+    QStyleOptionToolBoxV2(const QStyleOptionToolBox &other);
+    QStyleOptionToolBoxV2 &operator=(const QStyleOptionToolBox &other);
+
+protected:
+    QStyleOptionToolBoxV2(int version);
+};
+
+#ifndef QT_NO_RUBBERBAND
+class Q_GUI_EXPORT QStyleOptionRubberBand : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_RubberBand };
+    enum StyleOptionVersion { Version = 1 };
+
+    QRubberBand::Shape shape;
+    bool opaque;
+
+    QStyleOptionRubberBand();
+    QStyleOptionRubberBand(const QStyleOptionRubberBand &other) : QStyleOption(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionRubberBand(int version);
+};
+#endif // QT_NO_RUBBERBAND
+
+// -------------------------- Complex style options -------------------------------
+class Q_GUI_EXPORT QStyleOptionComplex : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_Complex };
+    enum StyleOptionVersion { Version = 1 };
+
+    QStyle::SubControls subControls;
+    QStyle::SubControls activeSubControls;
+
+    QStyleOptionComplex(int version = QStyleOptionComplex::Version, int type = SO_Complex);
+    QStyleOptionComplex(const QStyleOptionComplex &other) : QStyleOption(Version, Type) { *this = other; }
+};
+
+#ifndef QT_NO_SLIDER
+class Q_GUI_EXPORT QStyleOptionSlider : public QStyleOptionComplex
+{
+public:
+    enum StyleOptionType { Type = SO_Slider };
+    enum StyleOptionVersion { Version = 1 };
+
+    Qt::Orientation orientation;
+    int minimum;
+    int maximum;
+    QSlider::TickPosition tickPosition;
+    int tickInterval;
+    bool upsideDown;
+    int sliderPosition;
+    int sliderValue;
+    int singleStep;
+    int pageStep;
+    qreal notchTarget;
+    bool dialWrapping;
+
+    QStyleOptionSlider();
+    QStyleOptionSlider(const QStyleOptionSlider &other) : QStyleOptionComplex(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionSlider(int version);
+};
+#endif // QT_NO_SLIDER
+
+#ifndef QT_NO_SPINBOX
+class Q_GUI_EXPORT QStyleOptionSpinBox : public QStyleOptionComplex
+{
+public:
+    enum StyleOptionType { Type = SO_SpinBox };
+    enum StyleOptionVersion { Version = 1 };
+
+    QAbstractSpinBox::ButtonSymbols buttonSymbols;
+    QAbstractSpinBox::StepEnabled stepEnabled;
+    bool frame;
+
+    QStyleOptionSpinBox();
+    QStyleOptionSpinBox(const QStyleOptionSpinBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionSpinBox(int version);
+};
+#endif // QT_NO_SPINBOX
+
+class Q_GUI_EXPORT QStyleOptionQ3ListView : public QStyleOptionComplex
+{
+public:
+    enum StyleOptionType { Type = SO_Q3ListView };
+    enum StyleOptionVersion { Version = 1 };
+
+    QList<QStyleOptionQ3ListViewItem> items;
+    QPalette viewportPalette;
+    QPalette::ColorRole viewportBGRole;
+    int sortColumn;
+    int itemMargin;
+    int treeStepSize;
+    bool rootIsDecorated;
+
+    QStyleOptionQ3ListView();
+    QStyleOptionQ3ListView(const QStyleOptionQ3ListView &other) : QStyleOptionComplex(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionQ3ListView(int version);
+};
+
+class Q_GUI_EXPORT QStyleOptionToolButton : public QStyleOptionComplex
+{
+public:
+    enum StyleOptionType { Type = SO_ToolButton };
+    enum StyleOptionVersion { Version = 1 };
+
+    enum ToolButtonFeature { None = 0x00, Arrow = 0x01, Menu = 0x04, MenuButtonPopup = Menu, PopupDelay = 0x08,
+                             HasMenu = 0x10 };
+    Q_DECLARE_FLAGS(ToolButtonFeatures, ToolButtonFeature)
+
+    ToolButtonFeatures features;
+    QIcon icon;
+    QSize iconSize;
+    QString text;
+    Qt::ArrowType arrowType;
+    Qt::ToolButtonStyle toolButtonStyle;
+    QPoint pos;
+    QFont font;
+
+    QStyleOptionToolButton();
+    QStyleOptionToolButton(const QStyleOptionToolButton &other) : QStyleOptionComplex(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionToolButton(int version);
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionToolButton::ToolButtonFeatures)
+
+class Q_GUI_EXPORT QStyleOptionComboBox : public QStyleOptionComplex
+{
+public:
+    enum StyleOptionType { Type = SO_ComboBox };
+    enum StyleOptionVersion { Version = 1 };
+
+    bool editable;
+    QRect popupRect;
+    bool frame;
+    QString currentText;
+    QIcon currentIcon;
+    QSize iconSize;
+
+    QStyleOptionComboBox();
+    QStyleOptionComboBox(const QStyleOptionComboBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionComboBox(int version);
+};
+
+class Q_GUI_EXPORT QStyleOptionTitleBar : public QStyleOptionComplex
+{
+public:
+    enum StyleOptionType { Type = SO_TitleBar };
+    enum StyleOptionVersion { Version = 1 };
+
+    QString text;
+    QIcon icon;
+    int titleBarState;
+    Qt::WindowFlags titleBarFlags;
+
+    QStyleOptionTitleBar();
+    QStyleOptionTitleBar(const QStyleOptionTitleBar &other) : QStyleOptionComplex(Version, Type) { *this = other; }
+
+protected:
+    QStyleOptionTitleBar(int version);
+};
+
+class Q_GUI_EXPORT QStyleOptionGroupBox : public QStyleOptionComplex
+{
+public:
+    enum StyleOptionType { Type = SO_GroupBox };
+    enum StyleOptionVersion { Version = 1 };
+
+    QStyleOptionFrameV2::FrameFeatures features;
+    QString text;
+    Qt::Alignment textAlignment;
+    QColor textColor;
+    int lineWidth;
+    int midLineWidth;
+
+    QStyleOptionGroupBox();
+    QStyleOptionGroupBox(const QStyleOptionGroupBox &other) : QStyleOptionComplex(Version, Type) { *this = other; }
+protected:
+    QStyleOptionGroupBox(int version);
+};
+
+class Q_GUI_EXPORT QStyleOptionSizeGrip : public QStyleOptionComplex
+{
+public:
+    enum StyleOptionType { Type = SO_SizeGrip };
+    enum StyleOptionVersion { Version = 1 };
+
+    Qt::Corner corner;
+
+    QStyleOptionSizeGrip();
+    QStyleOptionSizeGrip(const QStyleOptionSizeGrip &other) : QStyleOptionComplex(Version, Type) { *this = other; }
+protected:
+    QStyleOptionSizeGrip(int version);
+};
+
+class Q_GUI_EXPORT QStyleOptionGraphicsItem : public QStyleOption
+{
+public:
+    enum StyleOptionType { Type = SO_GraphicsItem };
+    enum StyleOptionVersion { Version = 1 };
+
+    QRectF exposedRect;
+    QMatrix matrix;
+    qreal levelOfDetail;
+
+    QStyleOptionGraphicsItem();
+    QStyleOptionGraphicsItem(const QStyleOptionGraphicsItem &other) : QStyleOption(Version, Type) { *this = other; }
+    static qreal levelOfDetailFromTransform(const QTransform &worldTransform);
+protected:
+    QStyleOptionGraphicsItem(int version);
+};
+
+template <typename T>
+T qstyleoption_cast(const QStyleOption *opt)
+{
+    if (opt && opt->version >= static_cast<T>(0)->Version && (opt->type == static_cast<T>(0)->Type
+        || int(static_cast<T>(0)->Type) == QStyleOption::SO_Default
+        || (int(static_cast<T>(0)->Type) == QStyleOption::SO_Complex
+            && opt->type > QStyleOption::SO_Complex)))
+        return static_cast<T>(opt);
+    return 0;
+}
+
+template <typename T>
+T qstyleoption_cast(QStyleOption *opt)
+{
+    if (opt && opt->version >= static_cast<T>(0)->Version && (opt->type == static_cast<T>(0)->Type
+        || int(static_cast<T>(0)->Type) == QStyleOption::SO_Default
+        || (int(static_cast<T>(0)->Type) == QStyleOption::SO_Complex
+            && opt->type > QStyleOption::SO_Complex)))
+        return static_cast<T>(opt);
+    return 0;
+}
+
+// -------------------------- QStyleHintReturn -------------------------------
+class Q_GUI_EXPORT QStyleHintReturn {
+public:
+    enum HintReturnType {
+        SH_Default=0xf000, SH_Mask, SH_Variant
+    };
+
+    enum StyleOptionType { Type = SH_Default };
+    enum StyleOptionVersion { Version = 1 };
+
+    QStyleHintReturn(int version = QStyleOption::Version, int type = SH_Default);
+    ~QStyleHintReturn();
+
+    int version;
+    int type;
+};
+
+class Q_GUI_EXPORT QStyleHintReturnMask : public QStyleHintReturn {
+public:
+    enum StyleOptionType { Type = SH_Mask };
+    enum StyleOptionVersion { Version = 1 };
+
+    QStyleHintReturnMask();
+
+    QRegion region;
+};
+
+class Q_GUI_EXPORT QStyleHintReturnVariant : public QStyleHintReturn {
+public:
+    enum StyleOptionType { Type = SH_Variant };
+    enum StyleOptionVersion { Version = 1 };
+
+    QStyleHintReturnVariant();
+
+    QVariant variant;
+};
+
+template <typename T>
+T qstyleoption_cast(const QStyleHintReturn *hint)
+{
+    if (hint && hint->version <= static_cast<T>(0)->Version &&
+        (hint->type == static_cast<T>(0)->Type || int(static_cast<T>(0)->Type) == QStyleHintReturn::SH_Default))
+        return static_cast<T>(hint);
+    return 0;
+}
+
+template <typename T>
+T qstyleoption_cast(QStyleHintReturn *hint)
+{
+    if (hint && hint->version <= static_cast<T>(0)->Version &&
+        (hint->type == static_cast<T>(0)->Type || int(static_cast<T>(0)->Type) == QStyleHintReturn::SH_Default))
+        return static_cast<T>(hint);
+    return 0;
+}
+
+#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_NO_DEBUG)
+Q_GUI_EXPORT QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType);
+Q_GUI_EXPORT QDebug operator<<(QDebug debug, const QStyleOption &option);
+#endif
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QSTYLEOPTION_H