// This is the SIP interface definition for QStyle and QStyleOption.
//
// Copyright (c) 2003
// 	Riverbank Computing Limited <info@riverbankcomputing.co.uk>
// 
// This file is part of PyQt.
// 
// This copy of PyQt is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2, or (at your option) any later
// version.
// 
// PyQt is supplied in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
// details.
// 
// You should have received a copy of the GNU General Public License along with
// PyQt; see the file LICENSE.  If not, write to the Free Software Foundation,
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 
%ExportedDoc
<Sect2><Title>QStyle (Qt v2+)</Title>
<FuncSynopsis>
	<FuncDef>virtual void <Function>getButtonShift</Function></FuncDef>
	<ParamDef>int &<Parameter>x</Parameter></ParamDef>
	<ParamDef>int &<Parameter>y</Parameter></ParamDef>
</FuncSynopsis>
<Para>
This takes no parameters and returns a tuple of the <Literal>x</Literal> and
<Literal>y</Literal> values.  (Qt v2)
</Para>

<FuncSynopsis>
	<FuncDef>virtual void <Function>scrollBarMetrics</Function></FuncDef>
	<ParamDef>const QScrollBar *<Parameter>b</Parameter></ParamDef>
	<ParamDef>int &<Parameter>sliderMin</Parameter></ParamDef>
	<ParamDef>int &<Parameter>sliderMax</Parameter></ParamDef>
	<ParamDef>int &<Parameter>sliderLength</Parameter></ParamDef>
	<ParamDef>int &<Parameter>buttonDim</Parameter></ParamDef>
</FuncSynopsis>
<Para>
Thus takes only the <Literal>b</Literal> parameter and returns a tuple of the
<Literal>sliderMin</Literal>, <Literal>sliderMax</Literal>,
<Literal>sliderLength</Literal> and <Literal>buttonDim</Literal> values.
(Qt v2)
</Para>

<FuncSynopsis>
	<FuncDef>virtual void <Function>tabbarMetrics</Function></FuncDef>
	<ParamDef>const QTabBar *<Parameter>t</Parameter></ParamDef>
	<ParamDef>int &<Parameter>hframe</Parameter></ParamDef>
	<ParamDef>int &<Parameter>vframe</Parameter></ParamDef>
	<ParamDef>int &<Parameter>overlap</Parameter></ParamDef>
</FuncSynopsis>
<Para>
This takes only the <Literal>t</Literal> parameter and returns a tuple of the
<Literal>hframe</Literal>, <Literal>vframe</Literal> and
<Literal>overlap</Literal> values.  (Qt v2)
</Para>
</Sect2>

<Sect2><Title>QStyleOption (Qt v3+)</Title>
<Para>
<Literal>QStyleOption</Literal> is fully implemented.
</Para>
</Sect2>
%End
 
 
%If (Qt_3_0_0 -)

class QStyleOption
{
%HeaderCode
#include <qstyle.h>
%End

public:
	enum StyleOptionDefault {
		Default
	};
 
	QStyleOption(StyleOptionDefault = Default);
 
	QStyleOption(int,int);
	QStyleOption(int,int,int,int);
	QStyleOption(QMenuItem *);
	QStyleOption(QMenuItem *,int);
	QStyleOption(QMenuItem *,int,int);
	QStyleOption(const QColor &);
	QStyleOption(QTab *);
	QStyleOption(QListViewItem *);
%If (Qt_3_1_0 -)
	QStyleOption(QCheckListItem *);
%End
	QStyleOption(Qt::ArrowType);
%If (Qt_3_1_0 -)
	QStyleOption(const QRect &);
	QStyleOption(QWidget *);
%End
 
	bool isDefault() const;
 
	int lineWidth() const;
	int midLineWidth() const;
	int frameShape() const;
	int frameShadow() const;
 
	QMenuItem* menuItem() const;
	int maxIconWidth() const;
	int tabWidth() const;
 
	const QColor& color() const;
 
	QTab *tab() const;
 
%If (Qt_3_1_0 -)
	QCheckListItem *checkListItem() const;
%End
	QListViewItem *listViewItem() const;
 
	Qt::ArrowType arrowType() const;
%If (Qt_3_1_0 -)
	QRect rect() const;
	QWidget *widget() const;
%End
};

%End


%If (Qt_3_0_0 -)
//	Not yet defined in Qt v3Beta5.
class QStyleHintReturn;
%End


%If (Qt_2_00 -)

class QStyle : QObject
{
%HeaderCode
#include <qstyle.h>
%End

public:
%If (Qt_3_0_0 -)
	QStyle();
%End

%If (- Qt_3_0_0)
	GUIStyle guiStyle() const;
%End

	virtual void polish(QWidget *);
	virtual void unPolish(QWidget *);

	virtual void polish(QApplication *);
	virtual void unPolish(QApplication *);

	virtual void polish(QPalette &);

%If (Qt_3_0_0 -)
	virtual void polishPopupMenu(QPopupMenu *) = 0;
%End

%If (- Qt_3_0_0)
	virtual QRect itemRect(QPainter *,int,int,int,int,int,bool,
			       const QPixmap *,const QString &,int = -1);

	virtual void drawItem(QPainter *,int,int,int,int,int,
			      const QColorGroup &,bool,const QPixmap *,
			      const QString &,int = -1,const QColor * = 0);
%End
%If (Qt_3_0_0 -)
	virtual QRect itemRect(QPainter *,const QRect &,int,bool,
			       const QPixmap *,const QString &,int = -1) const;
 
	virtual void drawItem(QPainter *,const QRect &,int,const QColorGroup &,
			      bool,const QPixmap *,const QString &,int = -1,
			      const QColor * = 0) const;
%End

%If (- Qt_3_0_0)
	virtual void drawSeparator(QPainter *,int,int,int,int,
				   const QColorGroup &,bool = 1,int = 1,
				   int = 0);
	virtual void drawRect(QPainter *,int,int,int,int,const QColor &,
			      int = 1,const QBrush * = 0);
	virtual void drawRectStrong(QPainter *,int,int,int,int,
				    const QColorGroup &,bool = 0,int = 1,
				    int = 0,const QBrush * = 0);
	virtual void drawButton(QPainter *,int,int,int,int,const QColorGroup &,
				bool = 0,const QBrush * = 0) = 0;
	virtual QRect buttonRect(int,int,int,int);
	virtual void drawButtonMask(QPainter *,int,int,int,int);
	virtual void drawBevelButton(QPainter *,int,int,int,int,
				     const QColorGroup &,bool = 0,
				     const QBrush * = 0) = 0;
%If (Qt_2_1_0 -)
	QRect bevelButtonRect(int,int,int,int);
%End
	virtual void drawToolButton(QPainter *,int,int,int,int,
				    const QColorGroup &,bool = 0,
				    const QBrush * = 0);
%If (Qt_2_1_0 -)
	void drawToolButton(QToolButton *,QPainter *);
	QRect toolButtonRect(int,int,int,int);
%End
	virtual void drawPanel(QPainter *,int,int,int,int,const QColorGroup &,
			       bool = 0,int = 1,const QBrush * = 0);
	virtual void drawPopupPanel(QPainter *,int,int,int,int,
				    const QColorGroup &,int = 2,
				    const QBrush * = 0);
	virtual void drawArrow(QPainter *,Qt::ArrowType,bool,int,int,int,int,
			       const QColorGroup &,bool,const QBrush * = 0) = 0;
	virtual QSize exclusiveIndicatorSize() const = 0;
	virtual void drawExclusiveIndicator(QPainter *,int,int,int,int,
					    const QColorGroup &,bool,bool = 0,
					    bool = 1) = 0;
	virtual void drawExclusiveIndicatorMask(QPainter *,int,int,int,int,
						bool);
	virtual QSize indicatorSize() const = 0;
	virtual void drawIndicator(QPainter *,int,int,int,int,
				   const QColorGroup &,int,bool = 0,
				   bool = 1) = 0;
	virtual void drawIndicatorMask(QPainter *,int,int,int,int,int);
	virtual void drawFocusRect(QPainter *,const QRect &,const QColorGroup &,
				   const QColor * = 0,bool = 0) = 0;
	virtual void drawComboButton(QPainter *,int,int,int,int,
				     const QColorGroup &,bool = 0,bool = 0,
				     bool = 1,const QBrush * = 0) = 0;
	virtual QRect comboButtonRect(int,int,int,int) = 0;
	virtual QRect comboButtonFocusRect(int,int,int,int) = 0;
	virtual void drawComboButtonMask(QPainter *,int,int,int,int) = 0;
	virtual void drawPushButton(QPushButton *,QPainter *) = 0;
	virtual void drawPushButtonLabel(QPushButton *,QPainter *) = 0;

%If (Qt_2_1_0 -)
	QRect pushButtonContentsRect(QPushButton *);
	int menuButtonIndicatorWidth(int);
%End

	virtual void getButtonShift(int &,int &) = 0;
%MemberCode
		// The Python interface returns a tuple.

		QStyle *ptr;

		if (sipParseArgs(&sipArgsParsed,sipArgs,"m",sipThisObj,sipClass_QStyle,&ptr))
		{
			int x, y;

			Py_BEGIN_ALLOW_THREADS
			ptr -> getButtonShift(x,y);
			Py_END_ALLOW_THREADS

			return Py_BuildValue("(ii)",x,y);
		}
%End
%VirtualCode
#if SIP_MAJOR_NR >= 4
		// The Python interface returns a tuple.
 
		int &a0 = va_arg(sipva,int &);
		int &a1 = va_arg(sipva,int &);

		va_end(sipva);

		PyObject *pyArgs = Py_BuildValue("(O)",sipSelf);

		if (pyArgs != NULL)
		{ 
			PyObject *pyRes = PyEval_CallObject(sipMethod,pyArgs);
 
			Py_DECREF(pyArgs);
 
			if (pyRes != NULL)
			{
				int rc;
 
				rc = PyArg_ParseTuple(pyRes,"ii",&a0,&a1);
 
				Py_DECREF(pyRes);
 
				if (rc)
					return 0;
 
				sipBadVirtualResultType(sipClassName,sipMethodName);
			}
		}
#else
		// The Python interface returns a tuple.
 
		PyObject *pyArgs, *pyRes;
 
		if ((pyArgs = Py_BuildValue("(O)",sipThis -> sipSelf)) == NULL)
			goto reperr;
 
		pyRes = sipEvalMethod(&pymc -> pyMethod,pyArgs);
 
		Py_DECREF(pyArgs);
 
		if (pyRes != NULL)
		{
			int rc;
 
			rc = PyArg_ParseTuple(pyRes,"ii",&a0,&a1);
 
			Py_DECREF(pyRes);
 
			if (rc)
				goto releaseLock;
 
			sipBadVirtualResultType(sipName_QStyle,sipName_getButtonShift);
		}
 
reperr:
		PyErr_Print();
 
releaseLock:
		SIP_UNBLOCK_THREADS
#endif
%End

	virtual int defaultFrameWidth() const = 0;

	virtual void tabbarMetrics(const QTabBar *,int &,int &,int &) = 0;
%MemberCode
		// The Python interface returns a tuple.

		const QTabBar *a0;
		QStyle *ptr;

		if (sipParseArgs(&sipArgsParsed,sipArgs,"mJ0",sipThisObj,sipClass_QStyle,&ptr,sipClass_QTabBar,&a0))
		{
			int hframe, vframe, overlap;

			Py_BEGIN_ALLOW_THREADS
			ptr -> tabbarMetrics(a0,hframe,vframe,overlap);
			Py_END_ALLOW_THREADS

			return Py_BuildValue("(iii)",hframe,vframe,overlap);
		}
%End
%VirtualCode
#if SIP_MAJOR_NR >= 4
		// The Python interface returns a tuple.

		PyObject *a0 = sipMapCppToSelfSubClass(va_arg(sipva,void *),sipClass_QTabBar);
		int &a1 = va_arg(sipva,int &);
		int &a2 = va_arg(sipva,int &);
		int &a3 = va_arg(sipva,int &);

		va_end(sipva);
 
		PyObject *pyArgs = Py_BuildValue("(ON)",sipSelf,a0);

		if (pyArgs != NULL)
		{ 
			PyObject *pyRes = PyEval_CallObject(sipMethod,pyArgs);
 
			Py_DECREF(pyArgs);
 
			if (pyRes != NULL)
			{
				int rc;
 
				rc = PyArg_ParseTuple(pyRes,"iii",&a1,&a2,&a3);
 
				Py_DECREF(pyRes);
 
				if (rc)
					return 0;
 
				sipBadVirtualResultType(sipClassName,sipMethodName);
			}
		}
#else
		// The Python interface returns a tuple.
 
		PyObject *pyArgs, *pyRes;

		if ((pyArgs = Py_BuildValue("(ON)",sipThis -> sipSelf,sipMapCppToSelfSubClass(a0,sipClass_QTabBar))) == NULL)
			goto reperr;
 
		pyRes = sipEvalMethod(&pymc -> pyMethod,pyArgs);
 
		Py_DECREF(pyArgs);
 
		if (pyRes != NULL)
		{
			int rc;
 
			rc = PyArg_ParseTuple(pyRes,"iii",&a1,&a2,&a3);
 
			Py_DECREF(pyRes);
 
			if (rc)
				goto releaseLock;
 
			sipBadVirtualResultType(sipName_QStyle,sipName_tabbarMetrics);
		}
 
reperr:
		PyErr_Print();
 
releaseLock:
		SIP_UNBLOCK_THREADS
#endif
%End

	virtual void drawTab(QPainter *,const QTabBar *,QTab *,bool) = 0;
	virtual void drawTabMask(QPainter *,const QTabBar* ,QTab* ,bool) = 0;

	enum ScrollControl
	{
		AddLine = 0x1,
		SubLine = 0x2,
		AddPage = 0x4,
		SubPage = 0x8,
		First = 0x10,
		Last = 0x20,
		Slider = 0x40,
		NoScroll = 0x80
	};

	virtual void scrollBarMetrics(const QScrollBar *,int &,int &,int &,
				      int &) = 0;
%MemberCode
		// The Python interface returns a tuple.

		const QScrollBar *a0;
		QStyle *ptr;

		if (sipParseArgs(&sipArgsParsed,sipArgs,"mJ0",sipThisObj,sipClass_QStyle,&ptr,sipClass_QScrollBar,&a0))
		{
			int sliderMin, sliderMax, sliderLength, buttonDim;

			Py_BEGIN_ALLOW_THREADS
			ptr -> scrollBarMetrics(a0,sliderMin,sliderMax,sliderLength,buttonDim);
			Py_END_ALLOW_THREADS

			return Py_BuildValue("(iiii)",sliderMin,sliderMax,sliderLength,buttonDim);
		}
%End
%VirtualCode
#if SIP_MAJOR_NR >= 4
		// The Python interface returns a tuple.

		PyObject *a0 = sipMapCppToSelfSubClass(va_arg(sipva,void *),sipClass_QScrollBar);
		int &a1 = va_arg(sipva,int &);
		int &a2 = va_arg(sipva,int &);
		int &a3 = va_arg(sipva,int &);
		int &a4 = va_arg(sipva,int &);

		va_end(sipva);
 
		PyObject *pyArgs = Py_BuildValue("(ON)",sipSelf,a0);

		if (pyArgs != NULL)
		{ 
			PyObject *pyRes = PyEval_CallObject(sipMethod,pyArgs);
 
			Py_DECREF(pyArgs);
 
			if (pyRes != NULL)
			{
				int rc;
 
				rc = PyArg_ParseTuple(pyRes,"iiii",&a1,&a2,&a3,&a4);
 
				Py_DECREF(pyRes);
 
				if (rc)
					return 0;
 
				sipBadVirtualResultType(sipClassName,sipMethodName);
			}
		}
#else
		// The Python interface returns a tuple.
 
		PyObject *pyArgs, *pyRes;

		if ((pyArgs = Py_BuildValue("(ON)",sipThis -> sipSelf,sipMapCppToSelfSubClass(a0,sipClass_QScrollBar))) == NULL)
			goto reperr;
 
		pyRes = sipEvalMethod(&pymc -> pyMethod,pyArgs);
 
		Py_DECREF(pyArgs);
 
		if (pyRes != NULL)
		{
			int rc;
 
			rc = PyArg_ParseTuple(pyRes,"iiii",&a1,&a2,&a3,&a4);
 
			Py_DECREF(pyRes);
 
			if (rc)
				goto releaseLock;
 
			sipBadVirtualResultType(sipName_QStyle,sipName_scrollBarMetrics);
		}
 
reperr:
		PyErr_Print();
 
releaseLock:
		SIP_UNBLOCK_THREADS
#endif
%End

	virtual void drawScrollBarControls(QPainter *,const QScrollBar *,int,
					   uint,uint) = 0;
	virtual ScrollControl scrollBarPointOver(const QScrollBar *,int,
						 const QPoint &) = 0;
	virtual int sliderLength() const = 0;
	virtual void drawSlider(QPainter *,int,int,int,int,const QColorGroup &,
				Orientation,bool,bool) = 0;
	virtual void drawSliderMask(QPainter *,int,int,int,int,Orientation,
				    bool,bool) = 0;
	virtual void drawSliderGroove(QPainter *,int,int,int,int,
				      const QColorGroup &,QCOORD,
				      Orientation) = 0;
	virtual void drawSliderGrooveMask(QPainter *,int,int,int,int,QCOORD,
					  Orientation) = 0;
	virtual int maximumSliderDragDistance() const = 0;
	virtual int splitterWidth() const = 0;
	virtual void drawSplitter(QPainter *,int,int,int,int,
				  const QColorGroup &,Orientation) = 0;
	virtual void drawCheckMark(QPainter *,int,int,int,int,
				   const QColorGroup &,bool,bool) = 0;
	virtual void polishPopupMenu(QPopupMenu *) = 0;
	virtual int extraPopupMenuItemWidth(bool,int,QMenuItem *,
					    const QFontMetrics &) = 0;
	virtual int popupSubmenuIndicatorWidth(const QFontMetrics &) = 0;
	virtual int popupMenuItemHeight(bool,QMenuItem *,
					const QFontMetrics &) = 0;
	virtual void drawPopupMenuItem(QPainter *,bool,int,int,QMenuItem *,
				       const QPalette &,bool, bool,int,int,int,
				       int) = 0;
%If (Qt_2_2_0 -)
	virtual void drawMenuBarItem(QPainter *,int,int,int,int,QMenuItem *,
				     QColorGroup &,bool,bool);
%End
%If (Qt_2_1_0 -)
	QSize scrollBarExtent();
	int buttonDefaultIndicatorWidth() const;
%If (Qt_2_2_0 -)
	int buttonMargin() const;
	int toolBarHandleExtent() const;
	int sliderThickness() const;
%End
	int toolBarHandleExtend() const;
	void drawToolBarHandle(QPainter *,const QRect &,Qt::Orientation,bool,
			       const QColorGroup &,bool = 0);
%End

%End

%If (Qt_3_0_0 -)
	enum PrimitiveElement {
		PE_ButtonCommand,
		PE_ButtonDefault,
		PE_ButtonBevel,
		PE_ButtonTool,
		PE_ButtonDropDown,

		PE_FocusRect,

		PE_ArrowUp,
		PE_ArrowDown,
		PE_ArrowRight,
		PE_ArrowLeft,

		PE_SpinWidgetUp,
		PE_SpinWidgetDown,
		PE_SpinWidgetPlus,
		PE_SpinWidgetMinus,

		PE_Indicator,
		PE_IndicatorMask,
		PE_ExclusiveIndicator,
		PE_ExclusiveIndicatorMask,

		PE_DockWindowHandle,
		PE_DockWindowSeparator,
		PE_DockWindowResizeHandle,

		PE_Splitter,

		PE_Panel,
		PE_PanelPopup,
		PE_PanelMenuBar,
		PE_PanelDockWindow,

		PE_TabBarBase,

		PE_HeaderSection,
		PE_HeaderArrow,
		PE_StatusBarSection,

		PE_GroupBoxFrame,

		PE_Separator,

		PE_SizeGrip,

		PE_CheckMark,

		PE_ScrollBarAddLine,
		PE_ScrollBarSubLine,
		PE_ScrollBarAddPage,
		PE_ScrollBarSubPage,
		PE_ScrollBarSlider,
		PE_ScrollBarFirst,
		PE_ScrollBarLast,

		PE_ProgressBarChunk,

%If (Qt_3_0_1 -)
		PE_PanelLineEdit,
		PE_PanelTabWidget,

		PE_WindowFrame,
%End
%If (Qt_3_1_0 -)
		PE_CheckListController,
		PE_CheckListIndicator,
		PE_CheckListExclusiveIndicator,

		PE_PanelGroupBox,
%End
%If (Qt_3_0_4 - Qt_3_0_5)
		PE_PopupMenuScroller,
%End

		PE_CustomBase
	};

	enum StyleFlags {
		Style_Default,
		Style_Enabled,
		Style_Raised,
		Style_Sunken,
		Style_Off,
		Style_NoChange,
		Style_On,
		Style_Down,
		Style_Horizontal,
		Style_HasFocus,
		Style_Top,
		Style_Bottom,
		Style_FocusAtBorder,
		Style_AutoRaise,
		Style_MouseOver,
		Style_Up,
		Style_Selected,
		Style_Active,
		Style_ButtonDefault
	};

	typedef uint SFlags;

	virtual void drawPrimitive(PrimitiveElement,QPainter *,const QRect &,
				   const QColorGroup &,SFlags = Style_Default,
				   const QStyleOption & = QStyleOption()) const = 0;

	enum ControlElement {
		CE_PushButton,
		CE_PushButtonLabel,

		CE_CheckBox,
		CE_CheckBoxLabel,

		CE_RadioButton,
		CE_RadioButtonLabel,

		CE_TabBarTab,
		CE_TabBarLabel,

		CE_ProgressBarGroove,
		CE_ProgressBarContents,
		CE_ProgressBarLabel,

		CE_PopupMenuItem,
		CE_MenuBarItem,

		CE_ToolButtonLabel,
%If (Qt_3_1_0 -)
		CE_MenuBarEmptyArea,
%End
%If (Qt_3_0_5 -)
		CE_PopupMenuScroller,
%End
%If (Qt_3_1_0 -)
		CE_DockWindowEmptyArea,
%End

		CE_CustomBase
	};

	virtual void drawControl(ControlElement,QPainter *,const QWidget *,
				 const QRect &,const QColorGroup &,
				 SFlags = Style_Default,
				 const QStyleOption & = QStyleOption()) const = 0;
	virtual void drawControlMask(ControlElement,QPainter *,const QWidget *,
				     const QRect &,
				     const QStyleOption & = QStyleOption()) const = 0;

	enum SubRect {
		SR_PushButtonContents,
		SR_PushButtonFocusRect,

		SR_CheckBoxIndicator,
		SR_CheckBoxContents,
		SR_CheckBoxFocusRect,

		SR_RadioButtonIndicator,
		SR_RadioButtonContents,
		SR_RadioButtonFocusRect,

		SR_ComboBoxFocusRect,

		SR_SliderFocusRect,

		SR_DockWindowHandleRect,

		SR_ProgressBarGroove,
		SR_ProgressBarContents,
		SR_ProgressBarLabel,

		SR_ToolButtonContents,

		SR_CustomBase
	};

	virtual QRect subRect(SubRect,const QWidget *) const = 0;

	enum ComplexControl{
		CC_SpinWidget,
		CC_ComboBox,
		CC_ScrollBar,
		CC_Slider,
		CC_ToolButton,
		CC_TitleBar,
		CC_ListView,

		CC_CustomBase
	};

	enum SubControl {
		SC_None,

		SC_ScrollBarAddLine,
		SC_ScrollBarSubLine,
		SC_ScrollBarAddPage,
		SC_ScrollBarSubPage,
		SC_ScrollBarFirst,
		SC_ScrollBarLast,
		SC_ScrollBarSlider,
		SC_ScrollBarGroove,

		SC_SpinWidgetUp,
		SC_SpinWidgetDown,
		SC_SpinWidgetFrame,
		SC_SpinWidgetEditField,
		SC_SpinWidgetButtonField,

		SC_ComboBoxFrame,
		SC_ComboBoxEditField,
		SC_ComboBoxArrow,
%If (Qt_3_1_0 -)
		SC_ComboBoxListBoxPopup,
%End

		SC_SliderGroove,
		SC_SliderHandle,
		SC_SliderTickmarks,

		SC_ToolButton,
		SC_ToolButtonMenu,

		SC_TitleBarLabel,
		SC_TitleBarSysMenu,
		SC_TitleBarMinButton,
		SC_TitleBarMaxButton,
		SC_TitleBarCloseButton,
		SC_TitleBarNormalButton,
		SC_TitleBarShadeButton,
		SC_TitleBarUnshadeButton,

		SC_ListView,
		SC_ListViewBranch,
		SC_ListViewExpand,

		SC_All
	};

	typedef uint SCFlags;

	virtual void drawComplexControl(ComplexControl,QPainter *,
					const QWidget *,const QRect &,
					const QColorGroup &,
					SFlags = Style_Default,
					SCFlags = SC_All,SCFlags = SC_None,
					const QStyleOption & = QStyleOption()) const = 0;
	virtual void drawComplexControlMask(ComplexControl,QPainter *,
					    const QWidget *,const QRect &,
					    const QStyleOption & = QStyleOption()) const = 0;

	virtual QRect querySubControlMetrics(ComplexControl,
					     const QWidget *,SubControl,
					     const QStyleOption & = QStyleOption()) const = 0;
	virtual SubControl querySubControl(ComplexControl,const QWidget *,
					   const QPoint &,
					   const QStyleOption & = QStyleOption()) const = 0;

	enum PixelMetric {
		PM_ButtonMargin,
		PM_ButtonDefaultIndicator,
		PM_MenuButtonIndicator,
		PM_ButtonShiftHorizontal,
		PM_ButtonShiftVertical,

		PM_DefaultFrameWidth,
		PM_SpinBoxFrameWidth,

		PM_MaximumDragDistance,

		PM_ScrollBarExtent,
		PM_ScrollBarSliderMin,

		PM_SliderThickness,
		PM_SliderControlThickness,
		PM_SliderLength,
		PM_SliderTickmarkOffset,
		PM_SliderSpaceAvailable,

		PM_DockWindowSeparatorExtent,
		PM_DockWindowHandleExtent,
		PM_DockWindowFrameWidth,

		PM_MenuBarFrameWidth,

		PM_TabBarTabOverlap,
		PM_TabBarTabHSpace,
		PM_TabBarTabVSpace,
		PM_TabBarBaseHeight,
		PM_TabBarBaseOverlap,

		PM_ProgressBarChunkWidth,

		PM_SplitterWidth,
		PM_TitleBarHeight,

		PM_IndicatorWidth,
		PM_IndicatorHeight,
		PM_ExclusiveIndicatorWidth,
		PM_ExclusiveIndicatorHeight,
%If (Qt_3_0_4 -)
		PM_PopupMenuScrollerHeight,
%End
%If (Qt_3_1_0 -)
		PM_CheckListButtonSize,
%End

		PM_CustomBase
	};

	virtual int pixelMetric(PixelMetric,const QWidget * = 0) const = 0;

	enum ContentsType {
		CT_PushButton,
		CT_CheckBox,
		CT_RadioButton,
		CT_ToolButton,
		CT_ComboBox,
		CT_Splitter,
		CT_DockWindow,
		CT_ProgressBar,
		CT_PopupMenuItem,
%If (Qt_3_1_0 -)
		CT_TabBarTab,
		CT_Slider,
		CT_Header,
		CT_LineEdit,
		CT_MenuBar,
		CT_SpinBox,
%End

		CT_CustomBase
	};

	virtual QSize sizeFromContents(ContentsType,const QWidget *,
				       const QSize &,
				       const QStyleOption & = QStyleOption()) const = 0;

	enum StyleHint {
		SH_EtchDisabledText,

		SH_GUIStyle,

		SH_ScrollBar_BackgroundMode,
		SH_ScrollBar_MiddleClickAbsolutePosition,
		SH_ScrollBar_ScrollWhenPointerLeavesControl,

		SH_TabBar_SelectMouseType,

		SH_TabBar_Alignment,

		SH_Header_ArrowAlignment,

		SH_Slider_SnapToValue,

		SH_Slider_SloppyKeyEvents,

		SH_ProgressDialog_CenterCancelButton,

		SH_ProgressDialog_TextLabelAlignment,

		SH_PrintDialog_RightAlignButtons,

		SH_MainWindow_SpaceBelowMenuBar,

		SH_FontDialog_SelectAssociatedText,

		SH_PopupMenu_AllowActiveAndDisabled,

		SH_PopupMenu_SpaceActivatesItem,

		SH_PopupMenu_SubMenuPopupDelay,

		SH_ScrollView_FrameOnlyAroundContents,

		SH_MenuBar_AltKeyNavigation,

		SH_ComboBox_ListMouseTracking,

		SH_PopupMenu_MouseTracking,

		SH_MenuBar_MouseTracking,

		SH_ItemView_ChangeHighlightOnFocus,

		SH_Widget_ShareActivation,

		SH_Workspace_FillSpaceOnMaximize,

		SH_ComboBox_Popup,

%If (Qt_3_0_1 -)
		SH_TitleBar_NoBorder,

		SH_ScrollBar_StopMouseOverSlider,
%End

%If (Qt_3_0_2 -)
		SH_BlinkCursorWhenTextSelected,

		SH_RichText_FullWidthSelection,
%End

%If (Qt_3_0_4 -)
		SH_PopupMenu_Scrollable,
%End

%If (Qt_3_1_0 -)
		SH_GroupBox_TextLabelVerticalAlignment,

		SH_GroupBox_TextLabelColor,

		SH_PopupMenu_SloppySubMenus,
%End

		SH_CustomBase
	};

	virtual int styleHint(StyleHint,const QWidget * = 0,
			      const QStyleOption & = QStyleOption(),
			      QStyleHintReturn * = 0) const = 0;

	enum StylePixmap {
		SP_TitleBarMinButton,
		SP_TitleBarMaxButton,
		SP_TitleBarCloseButton,
		SP_TitleBarNormalButton,
		SP_TitleBarShadeButton,
		SP_TitleBarUnshadeButton,
		SP_DockWindowCloseButton,
		SP_MessageBoxInformation,
		SP_MessageBoxWarning,
		SP_MessageBoxCritical,

		SP_CustomBase
	};

	virtual QPixmap stylePixmap(StylePixmap,const QWidget * = 0,
				    const QStyleOption & = QStyleOption()) const = 0;

	static QRect visualRect(const QRect &,const QWidget *);

	static QRect visualRect(const QRect &,const QRect &);
%End

protected:
%If (Qt_2_1_0 - Qt_3_0_0)
	void setScrollBarExtent(int,int = -1);
	void setButtonDefaultIndicatorWidth(int);
%End

private:
%If (- Qt_3_0_0)
	QStyle();
	QStyle(GUIStyle);
%End
%If (Qt_2_1_0 -)
	QStyle(const QStyle &);
%End
};

%End
