summaryrefslogtreecommitdiffstats
path: root/src/kernel/qstyle.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/qstyle.h')
-rw-r--r--src/kernel/qstyle.h412
1 files changed, 392 insertions, 20 deletions
diff --git a/src/kernel/qstyle.h b/src/kernel/qstyle.h
index 64152ed..bb2efbc 100644
--- a/src/kernel/qstyle.h
+++ b/src/kernel/qstyle.h
@@ -42,6 +42,11 @@
#ifndef QT_H
#include "qobject.h"
+#include "qpixmap.h"
+#include "qcolor.h"
+#include "qiconset.h"
+#include "qtabbar.h"
+#include "qtoolbutton.h"
#endif // QT_H
@@ -58,26 +63,26 @@ class QStyleOption {
public:
enum StyleOptionDefault { Default };
- QStyleOption(StyleOptionDefault=Default) : def(TRUE) {}
+ QStyleOption(StyleOptionDefault=Default) : def(TRUE), tb(NULL) {}
// Note: we don't use default arguments since that is unnecessary
// initialization.
QStyleOption(int in1) :
- def(FALSE), i1(in1) {}
+ def(FALSE), tb(NULL), i1(in1) {}
QStyleOption(int in1, int in2) :
- def(FALSE), i1(in1), i2(in2) {}
+ def(FALSE), tb(NULL), i1(in1), i2(in2) {}
QStyleOption(int in1, int in2, int in3, int in4) :
- def(FALSE), i1(in1), i2(in2), i3(in3), i4(in4) {}
- QStyleOption(QMenuItem* m) : def(FALSE), mi(m) {}
- QStyleOption(QMenuItem* m, int in1) : def(FALSE), mi(m), i1(in1) {}
- QStyleOption(QMenuItem* m, int in1, int in2) : def(FALSE), mi(m), i1(in1), i2(in2) {}
- QStyleOption(const QColor& c) : def(FALSE), cl(&c) {}
+ def(FALSE), tb(NULL), i1(in1), i2(in2), i3(in3), i4(in4) {}
+ QStyleOption(QMenuItem* m) : def(FALSE), mi(m), tb(NULL) {}
+ QStyleOption(QMenuItem* m, int in1) : def(FALSE), mi(m), tb(NULL), i1(in1) {}
+ QStyleOption(QMenuItem* m, int in1, int in2) : def(FALSE), mi(m), tb(NULL), i1(in1), i2(in2) {}
+ QStyleOption(const QColor& c) : def(FALSE), tb(NULL), cl(&c) {}
QStyleOption(QTab* t) : def(FALSE), tb(t) {}
- QStyleOption(QListViewItem* i) : def(FALSE), li(i) {}
- QStyleOption(QCheckListItem* i) : def(FALSE), cli(i) {}
- QStyleOption(Qt::ArrowType a) : def(FALSE), i1((int)a) {}
- QStyleOption(const QRect& r) : def(FALSE), i1(r.x()), i2(r.y()), i3(r.width()),i4(r.height()){}
- QStyleOption(QWidget *w) : def(FALSE), p1((void*)w) {}
+ QStyleOption(QListViewItem* i) : def(FALSE), tb(NULL), li(i) {}
+ QStyleOption(QCheckListItem* i) : def(FALSE), tb(NULL), cli(i) {}
+ QStyleOption(Qt::ArrowType a) : def(FALSE), tb(NULL), i1((int)a) {}
+ QStyleOption(const QRect& r) : def(FALSE), tb(NULL), i1(r.x()), i2(r.y()), i3(r.width()),i4(r.height()){}
+ QStyleOption(QWidget *w) : def(FALSE), tb(NULL), p1((void*)w) {}
bool isDefault() const { return def; }
@@ -121,6 +126,138 @@ private:
class QStyleHintReturn; // not defined yet
+typedef QMap<Q_UINT32, QSize> DialogButtonSizeMap;
+typedef QMap<Q_INT32, Q_INT32> TabIdentifierIndexMap;
+
+class QStyleControlElementPopupMenuData {
+ public:
+ //
+};
+
+class QStyleControlElementTabBarData {
+ public:
+ int tabCount;
+ QTabBar::Shape shape;
+ TabIdentifierIndexMap identIndexMap;
+};
+
+class QStyleControlElementListViewData {
+ public:
+ bool rootDecorated;
+ int itemMargin;
+};
+
+class QStyleControlElementSpinWidgetData {
+ public:
+ Q_UINT32 buttonSymbols;
+ QRect upRect;
+ QRect downRect;
+ bool upEnabled;
+ bool downEnabled;
+};
+
+class QStyleControlElementTitleBarData {
+ public:
+ bool hasWindow;
+ bool usesActiveColor;
+ int windowState;
+ QString visibleText;
+};
+
+class QStyleControlElementDockWidgetData {
+ public:
+ bool hasDockArea;
+ bool closeEnabled;
+ Qt::Orientation areaOrientation;
+};
+
+class QStyleControlElementGenericWidgetData {
+ public:
+ QStringList widgetObjectTypes;
+ bool allDataPopulated;
+ Qt::WFlags wflags;
+ QPixmap bgPixmap;
+ QBrush bgBrush;
+ QColor bgColor;
+ QPoint bgOffset;
+ Qt::BackgroundMode backgroundMode;
+ QColor fgColor;
+ QColorGroup colorGroup;
+ QRect geometry;
+ QRect rect;
+ QPoint pos;
+ QPixmap icon;
+ QPalette palette;
+ QFont font;
+};
+
+class QStyleControlElementData {
+ public:
+ QStringList widgetObjectTypes;
+ bool allDataPopulated;
+ Qt::WFlags wflags;
+ QPixmap bgPixmap;
+ QBrush bgBrush;
+ QColor bgColor;
+ QPoint bgOffset;
+ Qt::BackgroundMode backgroundMode;
+ QPixmap fgPixmap;
+ QColor fgColor;
+ QColorGroup colorGroup;
+ QRect geometry;
+ QRect rect;
+ QPoint pos;
+ QPixmap icon;
+ QIconSet iconSet;
+ QString text;
+ Qt::Orientation orientation;
+ QColor activeItemPaletteBgColor;
+ QPalette palette;
+ int totalSteps;
+ int currentStep;
+ Q_UINT32 tickMarkSetting;
+ int tickInterval;
+ int minSteps;
+ int maxSteps;
+ int startStep;
+ int pageStep;
+ int lineStep;
+ int dlgVisibleButtons;
+ DialogButtonSizeMap dlgVisibleSizeHints;
+ QString progressText;
+ QString textLabel;
+ QFont font;
+ int percentageVisible;
+ QStyleControlElementDockWidgetData dwData;
+ QToolButton::TextPosition toolButtonTextPosition;
+ int popupDelay;
+ QStyleControlElementTitleBarData titleBarData;
+ QStyleControlElementSpinWidgetData spinWidgetData;
+ QStyleControlElementGenericWidgetData parentWidgetData;
+ QStyleControlElementGenericWidgetData viewportData;
+ QStyleControlElementListViewData listViewData;
+ QStyleControlElementTabBarData tabBarData;
+ Q_UINT32 comboBoxLineEditFlags;
+ Q_UINT32 frameStyle;
+ QRect sliderRect;
+};
+
+class QStyleWidgetActionRequestData {
+ public:
+ QStyleWidgetActionRequestData();
+ QStyleWidgetActionRequestData(int metric1, int metric2=0);
+ QStyleWidgetActionRequestData(QPalette palette);
+ QStyleWidgetActionRequestData(QFont font);
+ QStyleWidgetActionRequestData(QRect rect);
+ ~QStyleWidgetActionRequestData();
+ public:
+ int metric1;
+ int metric2;
+ QPalette palette;
+ QFont font;
+ QRect rect;
+};
+
class Q_EXPORT QStyle: public QObject
{
Q_OBJECT
@@ -129,14 +266,64 @@ public:
QStyle();
virtual ~QStyle();
+ enum ControlElementFlags {
+ CEF_None = 0x00000000,
+ CEF_IsDefault = 0x00000001,
+ CEF_AutoDefault = 0x00000002,
+ CEF_IsActive = 0x00000004,
+ CEF_IsDown = 0x00000008,
+ CEF_IsOn = 0x00000010,
+ CEF_IsEnabled = 0x00000020,
+ CEF_BiState = 0x00000040,
+ CEF_HasFocus = 0x00000080,
+ CEF_IsMenuWidget = 0x00000100,
+ CEF_IsContainerEmpty = 0x00000200,
+ CEF_CenterIndicator = 0x00000400,
+ CEF_IndicatorFollowsStyle = 0x00000800,
+ CEF_UsesTextLabel = 0x00001000,
+ CEF_UsesBigPixmap = 0x00002000,
+ CEF_UseGenericParameters = 0x00004000,
+ CEF_HasParentWidget = 0x00008000,
+ CEF_HasPopupMenu = 0x00010000,
+ CEF_IsCheckable = 0x00020000,
+ CEF_HasFocusProxy = 0x00040000,
+ CEF_IsEditable = 0x00080000,
+ CEF_IsFlat = 0x00100000,
+ CEF_IsActiveWindow = 0x00200000,
+ CEF_IsTopLevel = 0x00400000,
+ CEF_IsVisible = 0x00800000,
+ };
+
// New QStyle API - most of these should probably be pure virtual
+ // Old API
+ // DEPRECATED
virtual void polish( QWidget * );
+
+ // New API
+ virtual void polish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void * );
+
+ // Old API
+ // DEPRECATED
virtual void unPolish( QWidget * );
+ // New API
+ virtual void unPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void * );
+
+ // Old API
+ // DEPRECATED
virtual void polish( QApplication * );
+
+ // New API
+ virtual void applicationPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void * );
+
+ // Old API
+ // DEPRECATED
virtual void unPolish( QApplication * );
+ // New API
+ virtual void applicationUnPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void * );
+
virtual void polish( QPalette & );
virtual void polishPopupMenu( QPopupMenu* ) = 0;
@@ -151,7 +338,6 @@ public:
const QPixmap *pixmap, const QString &text,
int len = -1, const QColor *penColor = 0 ) const;
-
enum PrimitiveElement {
PE_ButtonCommand,
PE_ButtonDefault,
@@ -252,8 +438,20 @@ public:
};
typedef uint SFlags;
+ // Old API
+ // DEPRECATED
+ virtual void drawPrimitive( PrimitiveElement pe,
+ QPainter *p,
+ const QRect &r,
+ const QColorGroup &cg,
+ SFlags flags = Style_Default,
+ const QStyleOption& = QStyleOption::Default ) const = 0;
+
+ // New API
virtual void drawPrimitive( PrimitiveElement pe,
QPainter *p,
+ QStyleControlElementData ceData,
+ ControlElementFlags elementFlags,
const QRect &r,
const QColorGroup &cg,
SFlags flags = Style_Default,
@@ -294,6 +492,8 @@ public:
CE_CustomBase = 0xf0000000
};
+ // Old API
+ // DEPRECATED
virtual void drawControl( ControlElement element,
QPainter *p,
const QWidget *widget,
@@ -301,12 +501,35 @@ public:
const QColorGroup &cg,
SFlags how = Style_Default,
const QStyleOption& = QStyleOption::Default ) const = 0;
+
+ // New API
+ virtual void drawControl( ControlElement element,
+ QPainter *p,
+ QStyleControlElementData ceData,
+ ControlElementFlags elementFlags,
+ const QRect &r,
+ const QColorGroup &cg,
+ SFlags how = Style_Default,
+ const QStyleOption& = QStyleOption::Default,
+ const QWidget *widget = 0 /* compat, will likely go away */ ) const = 0;
+
+ // Old API
+ // DEPRECATED
virtual void drawControlMask( ControlElement element,
QPainter *p,
const QWidget *widget,
const QRect &r,
const QStyleOption& = QStyleOption::Default ) const = 0;
+ // New API
+ virtual void drawControlMask( ControlElement element,
+ QPainter *p,
+ QStyleControlElementData ceData,
+ ControlElementFlags elementFlags,
+ const QRect &r,
+ const QStyleOption& = QStyleOption::Default,
+ const QWidget *widget = 0 /* compat, will likely go away */ ) const = 0;
+
enum SubRect {
SR_PushButtonContents,
SR_PushButtonFocusRect,
@@ -347,8 +570,13 @@ public:
SR_CustomBase = 0xf0000000
};
+ // Old API
+ // DEPRECATED
virtual QRect subRect( SubRect r, const QWidget *widget ) const = 0;
+ // New API
+ virtual QRect subRect( SubRect r, const QStyleControlElementData ceData, const ControlElementFlags elementFlags, const QWidget *widget ) const = 0;
+
enum ComplexControl{
CC_SpinWidget,
@@ -411,6 +639,8 @@ public:
typedef uint SCFlags;
+ // Old API
+ // DEPRECATED
virtual void drawComplexControl( ComplexControl control,
QPainter *p,
const QWidget *widget,
@@ -424,21 +654,70 @@ public:
#endif
SCFlags subActive = SC_None,
const QStyleOption& = QStyleOption::Default ) const = 0;
+
+ virtual void drawComplexControl( ComplexControl control,
+ QPainter *p,
+ QStyleControlElementData ceData,
+ ControlElementFlags elementFlags,
+ const QRect &r,
+ const QColorGroup &cg,
+ SFlags how = Style_Default,
+#ifdef Q_QDOC
+ SCFlags sub = SC_All,
+#else
+ SCFlags sub = (uint)SC_All,
+#endif
+ SCFlags subActive = SC_None,
+ const QStyleOption& = QStyleOption::Default,
+ const QWidget *widget = 0 ) const = 0;
+
+ // Old API
+ // DEPRECATED
virtual void drawComplexControlMask( ComplexControl control,
QPainter *p,
const QWidget *widget,
const QRect &r,
const QStyleOption& = QStyleOption::Default ) const = 0;
+ // New API
+ virtual void drawComplexControlMask( ComplexControl control,
+ QPainter *p,
+ const QStyleControlElementData ceData,
+ const ControlElementFlags elementFlags,
+ const QRect &r,
+ const QStyleOption& = QStyleOption::Default,
+ const QWidget *widget = 0 ) const = 0;
+
+ // Old API
+ // DEPRECATED
virtual QRect querySubControlMetrics( ComplexControl control,
const QWidget *widget,
SubControl sc,
const QStyleOption& = QStyleOption::Default ) const = 0;
+
+ // New API
+ virtual QRect querySubControlMetrics( ComplexControl control,
+ QStyleControlElementData ceData,
+ ControlElementFlags elementFlags,
+ SubControl sc,
+ const QStyleOption& = QStyleOption::Default,
+ const QWidget *widget = 0 ) const = 0;
+
+ // Old API
+ // DEPRECATED
virtual SubControl querySubControl( ComplexControl control,
const QWidget *widget,
const QPoint &pos,
const QStyleOption& = QStyleOption::Default ) const = 0;
+ // New API
+ virtual SubControl querySubControl( ComplexControl control,
+ QStyleControlElementData ceData,
+ ControlElementFlags elementFlags,
+ const QPoint &pos,
+ const QStyleOption& = QStyleOption::Default,
+ const QWidget *widget = 0 ) const = 0;
+
enum PixelMetric {
PM_ButtonMargin,
@@ -508,7 +787,15 @@ public:
PM_CustomBase = 0xf0000000
};
+ // Old API
+ // DEPRECATED
+ virtual int pixelMetric( PixelMetric metric,
+ const QWidget *widget = 0 ) const = 0;
+
+ // New API
virtual int pixelMetric( PixelMetric metric,
+ QStyleControlElementData ceData,
+ ControlElementFlags elementFlags,
const QWidget *widget = 0 ) const = 0;
@@ -536,11 +823,20 @@ public:
CT_CustomBase = 0xf0000000
};
+ // Old API
+ // DEPRECATED
virtual QSize sizeFromContents( ContentsType contents,
const QWidget *widget,
const QSize &contentsSize,
const QStyleOption& = QStyleOption::Default ) const = 0;
+ virtual QSize sizeFromContents( ContentsType contents,
+ QStyleControlElementData ceData,
+ ControlElementFlags elementFlags,
+ const QSize &contentsSize,
+ const QStyleOption& = QStyleOption::Default,
+ const QWidget *widget = 0 ) const = 0;
+
enum StyleHint {
// ...
// the general hints
@@ -683,16 +979,30 @@ public:
// when the mouse is over the button
SH_ToolButton_Uses3D,
+ // bool - hide underlined accelerators uless Alt key is currently down
+ SH_HideUnderlineAcceleratorWhenAltUp,
+
// do not add any values below/greater than this
SH_CustomBase = 0xf0000000
};
+ // Old API
+ // DEPRECATED
virtual int styleHint( StyleHint stylehint,
const QWidget *widget = 0,
const QStyleOption& = QStyleOption::Default,
QStyleHintReturn* returnData = 0
) const = 0;
+ // New API
+ virtual int styleHint( StyleHint stylehint,
+ QStyleControlElementData ceData,
+ ControlElementFlags elementFlags,
+ const QStyleOption& = QStyleOption::Default,
+ QStyleHintReturn* returnData = 0,
+ const QWidget *widget = 0
+ ) const = 0;
+
enum StylePixmap {
SP_TitleBarMinButton,
@@ -711,39 +1021,86 @@ public:
SP_CustomBase = 0xf0000000
};
+ // Old API
+ // DEPRECATED
virtual QPixmap stylePixmap( StylePixmap stylepixmap,
const QWidget *widget = 0,
const QStyleOption& = QStyleOption::Default ) const = 0;
+ virtual QPixmap stylePixmap( StylePixmap stylepixmap,
+ QStyleControlElementData ceData,
+ ControlElementFlags elementFlags,
+ const QStyleOption& = QStyleOption::Default,
+ const QWidget *widget = 0 ) const = 0;
+
+ // Old API
+ // DEPRECATED
static QRect visualRect( const QRect &logical, const QWidget *w );
+ // New API
+ static QRect visualRect( const QRect &logical, const QStyleControlElementData ceData, const ControlElementFlags elementFlags );
+
static QRect visualRect( const QRect &logical, const QRect &bounding );
+ // Object event handling API
+ typedef QMap<void*, QStyle*> ObjectEventSourceToHandlerMap;
+ typedef QMap<void*, QStyleControlElementData> ObjectEventSourceDataToHandlerMap;
+ typedef QMap<void*, ControlElementFlags> ObjectEventSourceFlagsToHandlerMap;
+ typedef bool (*EventHandlerInstallationHook)(QStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, QStyle* handler);
+ typedef bool (*EventHandlerRemovalHook)(QStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, QStyle* handler);
+ void installObjectEventHandler( QStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, QStyle* handler );
+ void removeObjectEventHandler( QStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, QStyle* handler );
+ void setEventHandlerInstallationHook( EventHandlerInstallationHook );
+ void setEventHandlerRemovalHook( EventHandlerRemovalHook hook );
+ virtual bool objectEventHandler( QStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, QEvent *e );
+
+ enum WidgetActionRequest {
+ WAR_Repaint,
+ WAR_RepaintRect,
+ WAR_EnableMouseTracking,
+ WAR_DisableMouseTracking,
+ WAR_FrameSetStyle,
+ WAR_FrameSetLineWidth,
+ WAR_SetLayoutMargin,
+ WAR_SetPalette,
+ WAR_SetBackgroundMode,
+ WAR_SetFont,
+ WAR_RepaintAllAccelerators
+ };
+ typedef bool (*WidgetActionRequestHook)(QStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, WidgetActionRequest request, QStyleWidgetActionRequestData requestData);
+ void setWidgetActionRequestHook( WidgetActionRequestHook );
+ virtual bool widgetActionRequest( QStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, WidgetActionRequest request, QStyleWidgetActionRequestData requestData = QStyleWidgetActionRequestData() );
// Old 2.x QStyle API
#ifndef QT_NO_COMPAT
int defaultFrameWidth() const
{
- return pixelMetric( PM_DefaultFrameWidth );
+ return pixelMetric( PM_DefaultFrameWidth, QStyleControlElementData(), CEF_None );
}
void tabbarMetrics( const QWidget* t,
int& hf, int& vf, int& ov ) const
{
- hf = pixelMetric( PM_TabBarTabHSpace, t );
- vf = pixelMetric( PM_TabBarTabVSpace, t );
- ov = pixelMetric( PM_TabBarBaseOverlap, t );
+ hf = pixelMetric( PM_TabBarTabHSpace, QStyleControlElementData(), CEF_None, t );
+ vf = pixelMetric( PM_TabBarTabVSpace, QStyleControlElementData(), CEF_None, t );
+ ov = pixelMetric( PM_TabBarBaseOverlap, QStyleControlElementData(), CEF_None, t );
}
QSize scrollBarExtent() const
{
- return QSize(pixelMetric(PM_ScrollBarExtent),
- pixelMetric(PM_ScrollBarExtent));
+ return QSize(pixelMetric(PM_ScrollBarExtent, QStyleControlElementData(), CEF_None),
+ pixelMetric(PM_ScrollBarExtent, QStyleControlElementData(), CEF_None));
}
#endif
+public:
+ virtual bool eventFilter( QObject *, QEvent * );
+ bool acceleratorsShown() const;
+
+protected:
+ void acceleratorKeypressEventMonitor( QObject *, QEvent * );
private:
QStylePrivate * d;
@@ -752,7 +1109,22 @@ private:
QStyle( const QStyle & );
QStyle& operator=( const QStyle & );
#endif
+
+ EventHandlerInstallationHook m_eventHandlerInstallationHook;
+ EventHandlerRemovalHook m_eventHandlerRemovalHook;
+ WidgetActionRequestHook m_widgetActionRequestHook;
+ ObjectEventSourceToHandlerMap m_objectEventSourceToHandlerMap;
+ ObjectEventSourceDataToHandlerMap m_objectEventSourceDataToHandlerMap;
+ ObjectEventSourceFlagsToHandlerMap m_objectEventSourceFlagsToHandlerMap;
+ bool conditionalAcceleratorsEnabled;
};
+inline QStyle::ControlElementFlags operator|(const QStyle::ControlElementFlags a, const QStyle::ControlElementFlags b) { return static_cast<QStyle::ControlElementFlags>(static_cast<int>(a) | static_cast<int>(b)); }
+// inline QStyle::ControlElementFlags operator|=(QStyle::ControlElementFlags &a, const QStyle::ControlElementFlags b) { a = static_cast<QStyle::ControlElementFlags>(static_cast<int>(a) | static_cast<int>(b)); return a; }
+
+Q_EXPORT QStyleControlElementData populateControlElementDataFromWidget(const QWidget* widget, const QStyleOption& opt, bool populateReliantFields=true);
+Q_EXPORT QStyle::ControlElementFlags getControlElementFlagsForObject(const QObject* object, QStringList objectTypeList, const QStyleOption& opt, bool populateReliantFields=true);
+Q_EXPORT QStringList getObjectTypeListForObject(const QObject* object);
+
#endif // QT_NO_STYLE
#endif // QSTYLE_H