changeset 156:37cf6fd1ee85

add styles example, still buggs
author mandel
date Tue, 16 Jun 2009 21:28:16 +0000
parents 875d313c2778
children 7c3067c2b803
files examples/widgets/styles/CMakeLists.txt examples/widgets/styles/build.bat examples/widgets/styles/build.sh examples/widgets/styles/images/woodbackground.png examples/widgets/styles/images/woodbutton.png examples/widgets/styles/main.d examples/widgets/styles/norwegianwoodstyle.d examples/widgets/styles/styles.qrc examples/widgets/styles/widgetgallery.d
diffstat 9 files changed, 663 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/widgets/styles/CMakeLists.txt	Tue Jun 16 21:28:16 2009 +0000
@@ -0,0 +1,1 @@
+build_example(calculator main.d widgetgallery.d norwegianwoodstyle.d qrc_styles.d RESOURCES styles.qrc)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/widgets/styles/build.bat	Tue Jun 16 21:28:16 2009 +0000
@@ -0,0 +1,2 @@
+..\..\..\tools\drcc\drcc styles.qrc > qrc_styles.d
+dmd -I..\..\..\ main.d widgetgallery.d norwegianwoodstyle.d qrc_styles.d ..\..\..\lib\libqtdgui.lib ..\..\..\lib\libqtdcore.lib
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/widgets/styles/build.sh	Tue Jun 16 21:28:16 2009 +0000
@@ -0,0 +1,4 @@
+#! /bin/bash
+
+../../../tools/drcc/drcc styles.qrc > qrc_styles.d
+dmd main.d widgetgallery.d norwegianwoodstyle.d qrc_styles.d -I../../../ -I../../../qt/d1 -L-L../../../lib -L-lqtdgui -L-lqtdcore -L-lQtCore -L-lQtGui -ofstyles
Binary file examples/widgets/styles/images/woodbackground.png has changed
Binary file examples/widgets/styles/images/woodbutton.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/widgets/styles/main.d	Tue Jun 16 21:28:16 2009 +0000
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+module main;
+
+
+import qt.gui.QApplication;
+
+import widgetgallery;
+
+
+int main(string[] args)
+{
+	scope app = new QApplication(args);
+	scope gallery = new WidgetGallery;
+	gallery.show();
+	return app.exec();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/widgets/styles/norwegianwoodstyle.d	Tue Jun 16 21:28:16 2009 +0000
@@ -0,0 +1,282 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+module norwegianwoodstyle;
+
+
+import qt.gui.QMotifStyle;
+import qt.gui.QPalette;
+import qt.gui.QPainterPath;
+import qt.gui.QPushButton;
+import qt.gui.QComboBox;
+
+
+class NorwegianWoodStyle : public QMotifStyle
+{
+public:
+
+	this() {}
+
+	void polish(QPalette palette)
+	{
+		auto brown = new QColor(212, 140, 95);
+		auto beige = new QColor(236, 182, 120);
+		auto slightlyOpaqueBlack = new QColor(0, 0, 0, 63);
+
+		auto backgroundImage = new QPixmap(":/images/woodbackground.png");
+		auto buttonImage = new QPixmap(":/images/woodbutton.png");
+		QPixmap midImage = buttonImage;
+
+		auto painter = new QPainter;
+		painter.begin(midImage);
+		painter.setPen(Qt.NoPen);
+		painter.fillRect(midImage.rect(), slightlyOpaqueBlack);
+		painter.end();
+
+		palette = new QPalette(brown);
+
+		palette.setBrush(QPalette.BrightText, new QBrush(QColor.White));
+		palette.setBrush(QPalette.Base, new QBrush(beige));
+		palette.setBrush(QPalette.Highlight, new QBrush(QColor.DarkGreen));
+		setTexture(palette, QPalette.Button, buttonImage);
+		setTexture(palette, QPalette.Mid, midImage);
+		setTexture(palette, QPalette.Window, backgroundImage);
+
+		QBrush brush = palette.brush(QPalette.Window); //.background();
+		brush.setColor(brush.color().darker());
+
+		palette.setBrush(QPalette.Disabled, QPalette.WindowText, brush);
+		palette.setBrush(QPalette.Disabled, QPalette.Text, brush);
+		palette.setBrush(QPalette.Disabled, QPalette.ButtonText, brush);
+		palette.setBrush(QPalette.Disabled, QPalette.Base, brush);
+		palette.setBrush(QPalette.Disabled, QPalette.Button, brush);
+		palette.setBrush(QPalette.Disabled, QPalette.Mid, brush);
+	}
+
+	void polish(QWidget widget)
+	{
+		if (cast(QPushButton) widget || cast(QComboBox) widget)
+			widget.setAttribute(Qt.WA_Hover, true);
+	}
+
+	void unpolish(QWidget widget)
+	{
+		if (cast(QPushButton) widget || cast(QComboBox) widget)
+			widget.setAttribute(Qt.WA_Hover, false);
+	}
+
+	int pixelMetric(PixelMetric metric, QStyleOption option, QWidget widget)
+	{
+		switch (metric) {
+			case PM_ComboBoxFrameWidth:
+				return 8;
+			case PM_ScrollBarExtent:
+				return QMotifStyle.pixelMetric(metric, option, widget) + 4;
+			default:
+				return QMotifStyle.pixelMetric(metric, option, widget);
+		}
+	}
+
+	int styleHint(StyleHint hint, QStyleOption option, QWidget widget, QStyleHintReturn returnData)
+	{
+		switch (hint) {
+			case SH_DitherDisabledText:
+				return cast(int) false;
+			case SH_EtchDisabledText:
+				return cast(int) true;
+			default:
+				return QMotifStyle.styleHint(hint, option, widget, returnData);
+		}
+	}
+
+	void drawPrimitive(PrimitiveElement element, QStyleOption option, QPainter painter, QWidget widget)
+	{
+		switch (element) {
+			case PE_PanelButtonCommand:
+			{
+				int delta = (option.state & State_MouseOver) ? 64 : 0;
+				auto slightlyOpaqueBlack = new QColor(0, 0, 0, 63);
+				auto semiTransparentWhite = new QColor(255, 255, 255, 127 + delta);
+				auto semiTransparentBlack = new QColor(0, 0, 0, 127 - delta);
+
+				int x, y, width, height;
+				option.rect.getRect(&x, &y, &width, &height);
+
+				QPainterPath roundRect = roundRectPath(option.rect);
+				int radius = qMin(width, height) / 2;
+
+				QBrush brush;
+				bool darker;
+
+				QStyleOptionButton buttonOption = cast(QStyleOptionButton) option;
+				if (buttonOption && (buttonOption.features & QStyleOptionButton.Flat)) {
+					brush = option.palette.brush(QPalette.Window); //background();
+					darker = cast(bool) (option.state & (State_Sunken | State_On));
+				} else {
+					if (option.state & (State_Sunken | State_On)) {
+						brush = option.palette.mid();
+						darker = !(option.state & State_Sunken);
+					} else {
+						brush = option.palette.button();
+						darker = false;
+					}
+				}
+
+				painter.save();
+				painter.setRenderHint(QPainter.Antialiasing, true);
+				painter.fillPath(roundRect, brush);
+				if (darker)
+					painter.fillPath(roundRect, new QBrush(slightlyOpaqueBlack));
+
+				int penWidth;
+
+				if (radius < 10)
+					penWidth = 3;
+				else if (radius < 20)
+					penWidth = 5;
+				else
+					penWidth = 7;
+
+				auto topPen = new QPen(semiTransparentWhite);
+				auto bottomPen = new QPen(semiTransparentBlack);
+
+				topPen.setWidth(penWidth);
+				bottomPen.setWidth(penWidth);
+
+				if (option.state & (State_Sunken | State_On))
+					qSwap(topPen, bottomPen);
+
+				int x1 = x;
+				int x2 = x + radius;
+				int x3 = x + width - radius;
+				int x4 = x + width;
+
+				if (option.direction == Qt.RightToLeft) {
+					qSwap(x1, x4);
+					qSwap(x2, x3);
+				}
+
+				auto topHalf = new QPolygon();
+				topHalf.append(QPoint(x1, y));
+				topHalf.append(QPoint(x4, y));
+				topHalf.append(QPoint(x3, y + radius));
+				topHalf.append(QPoint(x2, y + height - radius));
+				topHalf.append(QPoint(x1, y + height));
+
+				painter.setClipPath(roundRect);
+				painter.setClipRegion(new QRegion(topHalf), Qt.IntersectClip);
+				painter.setPen(topPen);
+				painter.drawPath(roundRect);
+
+				QPolygon bottomHalf = topHalf;
+				bottomHalf.replace(0, QPoint(x4, y + height));
+
+				painter.setClipPath(roundRect);
+				painter.setClipRegion(new QRegion(bottomHalf), Qt.IntersectClip);
+				painter.setPen(bottomPen);
+				painter.drawPath(roundRect);
+
+				painter.setPen(option.palette.brush(QPalette.WindowText).color());
+				painter.setClipping(false);
+				painter.drawPath(roundRect);
+
+				painter.restore();
+			}
+				break;
+			default:
+				QMotifStyle.drawPrimitive(element, option, painter, widget);
+		}
+	}
+
+	void drawControl(ControlElement element, QStyleOption option, QPainter painter, QWidget widget)
+	{
+		switch (element) {
+			case CE_PushButtonLabel:
+			{
+				QStyleOptionButton myButtonOption;
+				QStyleOptionButton buttonOption = cast(QStyleOptionButton) option;
+				if (buttonOption) {
+					myButtonOption = buttonOption;
+					if (myButtonOption.palette.currentColorGroup() != QPalette.Disabled) {
+						if (myButtonOption.state & (State_Sunken | State_On)) {
+							myButtonOption.palette.setBrush(QPalette.ButtonText,
+							myButtonOption.palette.brightText());
+						}
+					}
+				}
+				QMotifStyle.drawControl(element, myButtonOption, painter, widget);
+				}
+				break;
+			default:
+				QMotifStyle.drawControl(element, option, painter, widget);
+		}
+	}
+
+private:
+
+	static void setTexture(QPalette palette, QPalette.ColorRole role, QPixmap pixmap)
+	{
+		for (int i = 0; i < QPalette.NColorGroups; ++i) {
+			QColor color = palette.brush(cast(QPalette.ColorGroup) i, role).color();
+			palette.setBrush(cast(QPalette.ColorGroup) i, role, new QBrush(color, pixmap));
+		}
+	}
+	
+	static QPainterPath roundRectPath(QRect rect)
+	{
+		int radius = qMin(rect.width(), rect.height()) / 2;
+		int diam = 2 * radius;
+
+		int x1, y1, x2, y2;
+		rect.getCoords(&x1, &y1, &x2, &y2);
+
+		auto path = new QPainterPath;
+		path.moveTo(x2, y1 + radius);
+		path.arcTo(QRectF(x2 - diam, y1, diam, diam), 0.0, +90.0);
+		path.lineTo(x1 + radius, y1);
+		path.arcTo(QRectF(x1, y1, diam, diam), 90.0, +90.0);
+		path.lineTo(x1, y2 - radius);
+		path.arcTo(QRectF(x1, y2 - diam, diam, diam), 180.0, +90.0);
+		path.lineTo(x1 + radius, y2);
+		path.arcTo(QRectF(x2 - diam, y2 - diam, diam, diam), 270.0, +90.0);
+		path.closeSubpath();
+		return path;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/widgets/styles/styles.qrc	Tue Jun 16 21:28:16 2009 +0000
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>images/woodbutton.png</file>
+    <file>images/woodbackground.png</file>
+</qresource>
+</RCC>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/widgets/styles/widgetgallery.d	Tue Jun 16 21:28:16 2009 +0000
@@ -0,0 +1,313 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+module widgetgallery;
+
+
+import qt.gui.QDialog;
+import qt.gui.QCheckBox;
+import qt.gui.QComboBox;
+import qt.gui.QDateTimeEdit;
+import qt.gui.QDial;
+import qt.gui.QGroupBox;
+import qt.gui.QLabel;
+import qt.gui.QLineEdit;
+import qt.gui.QProgressBar;
+import qt.gui.QPushButton;
+import qt.gui.QRadioButton;
+import qt.gui.QScrollBar;
+import qt.gui.QSlider;
+import qt.gui.QSpinBox;
+import qt.gui.QTabWidget;
+import qt.gui.QTableWidget;
+import qt.gui.QTextEdit;
+import qt.gui.QStyleFactory;
+import qt.gui.QHBoxLayout;
+import qt.gui.QGridLayout;
+import qt.gui.QVBoxLayout;
+import qt.core.QTimer;
+
+import norwegianwoodstyle;
+
+
+class WidgetGallery : public QDialog
+{
+public:
+
+	this(QWidget parent = null)
+	{
+		super(parent);
+		originalPalette = QApplication.palette();
+
+		styleComboBox = new QComboBox;
+		styleComboBox.addItem("NorwegianWood");
+		styleComboBox.addItems(QStyleFactory.keys());
+
+		styleLabel = new QLabel(tr("&Style:"));
+		styleLabel.setBuddy(styleComboBox);
+
+		useStylePaletteCheckBox = new QCheckBox(tr("&Use style's standard palette"));
+		useStylePaletteCheckBox.setChecked(true);
+
+		disableWidgetsCheckBox = new QCheckBox(tr("&Disable widgets"));
+
+		createTopLeftGroupBox();
+		createTopRightGroupBox();
+		createBottomLeftTabWidget();
+		createBottomRightGroupBox();
+		createProgressBar();
+
+		styleComboBox.activated.connect(&this.changeStyle);
+		useStylePaletteCheckBox.toggled.connect(&this.changePalette);
+		disableWidgetsCheckBox.toggled.connect(&topLeftGroupBox.setDisabled);
+		disableWidgetsCheckBox.toggled.connect(&topRightGroupBox.setDisabled);
+		disableWidgetsCheckBox.toggled.connect(&bottomLeftTabWidget.setDisabled);
+		disableWidgetsCheckBox.toggled.connect(&bottomRightGroupBox.setDisabled);
+
+		QHBoxLayout topLayout = new QHBoxLayout;
+
+		topLayout.addWidget(styleLabel);
+		topLayout.addWidget(styleComboBox);
+		topLayout.addStretch(1);
+		topLayout.addWidget(useStylePaletteCheckBox);
+		topLayout.addWidget(disableWidgetsCheckBox);
+
+		QGridLayout mainLayout = new QGridLayout;
+		mainLayout.addLayout(topLayout, 0, 0, 1, 2);
+		mainLayout.addWidget(topLeftGroupBox, 1, 0);
+		mainLayout.addWidget(topRightGroupBox, 1, 1);
+		mainLayout.addWidget(bottomLeftTabWidget, 2, 0);
+		mainLayout.addWidget(bottomRightGroupBox, 2, 1);
+		mainLayout.addWidget(progressBar, 3, 0, 1, 2);
+		mainLayout.setRowStretch(1, 1);
+		mainLayout.setRowStretch(2, 1);
+		mainLayout.setColumnStretch(0, 1);
+		mainLayout.setColumnStretch(1, 1);
+		setLayout(mainLayout);
+
+		setWindowTitle(tr("Styles"));
+		changeStyle("NorwegianWood");
+	}
+
+	private:
+
+	void changeStyle(string styleName)
+	{
+		if (styleName == "NorwegianWood") {
+			QApplication.setStyle(new NorwegianWoodStyle);
+		} else {
+			QApplication.setStyle(QStyleFactory.create(styleName));
+		}
+		changePalette();
+	}
+
+	void changePalette()
+	{
+		if (useStylePaletteCheckBox.isChecked())
+			QApplication.setPalette(QApplication.style().standardPalette());
+		else
+			QApplication.setPalette(originalPalette);
+	}
+
+	void advanceProgressBar()
+	{
+		int curVal = progressBar.value();
+		int maxVal = progressBar.maximum();
+		progressBar.setValue(curVal + (maxVal - curVal) / 100);
+	}
+
+private:
+
+	void createTopLeftGroupBox()
+	{
+		topLeftGroupBox = new QGroupBox(tr("Group 1"));
+
+		radioButton1 = new QRadioButton(tr("Radio button 1"));
+		radioButton2 = new QRadioButton(tr("Radio button 2"));
+		radioButton3 = new QRadioButton(tr("Radio button 3"));
+		radioButton1.setChecked(true);
+
+		checkBox = new QCheckBox(tr("Tri-state check box"));
+		checkBox.setTristate(true);
+		checkBox.setCheckState(Qt.PartiallyChecked);
+
+		QVBoxLayout layout = new QVBoxLayout;
+		layout.addWidget(radioButton1);
+		layout.addWidget(radioButton2);
+		layout.addWidget(radioButton3);
+		layout.addWidget(checkBox);
+		layout.addStretch(1);
+		topLeftGroupBox.setLayout(layout);
+	}
+
+	void createTopRightGroupBox()
+	{
+		topRightGroupBox = new QGroupBox(tr("Group 2"));
+
+		defaultPushButton = new QPushButton(tr("Default Push Button"));
+		defaultPushButton.setDefault(true);
+
+		togglePushButton = new QPushButton(tr("Toggle Push Button"));
+		togglePushButton.setCheckable(true);
+		togglePushButton.setChecked(true);
+
+		flatPushButton = new QPushButton(tr("Flat Push Button"));
+		flatPushButton.setFlat(true);
+
+		QVBoxLayout layout = new QVBoxLayout;
+		layout.addWidget(defaultPushButton);
+		layout.addWidget(togglePushButton);
+		layout.addWidget(flatPushButton);
+		layout.addStretch(1);
+		topRightGroupBox.setLayout(layout);
+	}
+
+	void createBottomLeftTabWidget()
+	{
+		bottomLeftTabWidget = new QTabWidget;
+		bottomLeftTabWidget.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Ignored);
+
+		QWidget tab1 = new QWidget;
+		tableWidget = new QTableWidget(10, 10);
+
+		QHBoxLayout tab1hbox = new QHBoxLayout;
+		tab1hbox.setMargin(5);
+		tab1hbox.addWidget(tableWidget);
+		tab1.setLayout(tab1hbox);
+
+		QWidget tab2 = new QWidget;
+		textEdit = new QTextEdit;
+
+		textEdit.setPlainText(tr("Twinkle, twinkle, little star,\n"
+		      "How I wonder what you are.\n"
+		      "Up above the world so high,\n"
+		      "Like a diamond in the sky.\n"
+		      "Twinkle, twinkle, little star,\n"
+		      "How I wonder what you are!\n"));
+
+		QHBoxLayout tab2hbox = new QHBoxLayout;
+		tab2hbox.setMargin(5);
+		tab2hbox.addWidget(textEdit);
+		tab2.setLayout(tab2hbox);
+
+		bottomLeftTabWidget.addTab(tab1, tr("&Table"));
+		bottomLeftTabWidget.addTab(tab2, tr("Text &Edit"));
+	}
+
+	void createBottomRightGroupBox()
+	{
+		bottomRightGroupBox = new QGroupBox(tr("Group 3"));
+		bottomRightGroupBox.setCheckable(true);
+		bottomRightGroupBox.setChecked(true);
+
+		lineEdit = new QLineEdit("s3cRe7");
+		lineEdit.setEchoMode(QLineEdit.Password);
+
+		spinBox = new QSpinBox(bottomRightGroupBox);
+		spinBox.setValue(50);
+
+		dateTimeEdit = new QDateTimeEdit(bottomRightGroupBox);
+		dateTimeEdit.setDateTime(QDateTime.currentDateTime());
+
+		slider = new QSlider(Qt.Horizontal, bottomRightGroupBox);
+		slider.setValue(40);
+
+		scrollBar = new QScrollBar(Qt.Horizontal, bottomRightGroupBox);
+		scrollBar.setValue(60);
+
+		dial = new QDial(bottomRightGroupBox);
+		dial.setValue(30);
+		dial.setNotchesVisible(true);
+
+		QGridLayout layout = new QGridLayout;
+		layout.addWidget(lineEdit, 0, 0, 1, 2);
+		layout.addWidget(spinBox, 1, 0, 1, 2);
+		layout.addWidget(dateTimeEdit, 2, 0, 1, 2);
+		layout.addWidget(slider, 3, 0);
+		layout.addWidget(scrollBar, 4, 0);
+		layout.addWidget(dial, 3, 1, 2, 1);
+		layout.setRowStretch(5, 1);
+		bottomRightGroupBox.setLayout(layout);
+	}
+
+	void createProgressBar()
+	{
+		progressBar = new QProgressBar;
+		progressBar.setRange(0, 10000);
+		progressBar.setValue(0);
+
+		QTimer timer = new QTimer(this);
+		timer.timeout.connect(&this.advanceProgressBar);
+		timer.start(1000);
+	}
+
+
+	QPalette originalPalette;
+
+	QLabel styleLabel;
+	QComboBox styleComboBox;
+	QCheckBox useStylePaletteCheckBox;
+	QCheckBox disableWidgetsCheckBox;
+
+	QGroupBox topLeftGroupBox;
+	QRadioButton radioButton1;
+	QRadioButton radioButton2;
+	QRadioButton radioButton3;
+	QCheckBox checkBox;
+
+	QGroupBox topRightGroupBox;
+	QPushButton defaultPushButton;
+	QPushButton togglePushButton;
+	QPushButton flatPushButton;
+
+	QTabWidget bottomLeftTabWidget;
+	QTableWidget tableWidget;
+	QTextEdit textEdit;
+
+	QGroupBox bottomRightGroupBox;
+	QLineEdit lineEdit;
+	QSpinBox spinBox;
+	QDateTimeEdit dateTimeEdit;
+	QSlider slider;
+	QScrollBar scrollBar;
+	QDial dial;
+
+	QProgressBar progressBar;
+}