#!/usr/bin/env python

#############################################################################
##
## Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
##
## This file is part of the example classes of the Qt Toolkit.
##
## This file may be used under the terms of the GNU General Public
## License version 2.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 GNU
## General Public Licensing requirements will be met:
## http://www.trolltech.com/products/qt/opensource.html
##
## If you are unsure which license is appropriate for your use, please
## review the following information:
## http://www.trolltech.com/products/qt/licensing.html or contact the
## sales department at sales@trolltech.com.
##
## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
##
#############################################################################

import sys
from PyQt4 import QtCore, QtGui


class WidgetGallery(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        
        self.originalPalette = QtGui.QApplication.palette()

        styleComboBox = QtGui.QComboBox()
        styleComboBox.addItems(QtGui.QStyleFactory.keys())
    
        styleLabel = QtGui.QLabel(self.tr("&Style:"))
        styleLabel.setBuddy(styleComboBox)
    
        self.useStylePaletteCheckBox = QtGui.QCheckBox(self.tr("&Use style's standard palette"))
        self.useStylePaletteCheckBox.setChecked(True)
    
        disableWidgetsCheckBox = QtGui.QCheckBox(self.tr("&Disable widgets"))
    
        self.createTopLeftGroupBox()
        self.createTopRightGroupBox()
        self.createBottomLeftTabWidget()
        self.createBottomRightGroupBox()
        self.createProgressBar()
    
        self.connect(styleComboBox, QtCore.SIGNAL("activated(const QString &)"), self.changeStyle)
        self.connect(self.useStylePaletteCheckBox, QtCore.SIGNAL("toggled(bool)"), self.changePalette)
        self.connect(disableWidgetsCheckBox, QtCore.SIGNAL("toggled(bool)"), self.topLeftGroupBox, QtCore.SLOT("setDisabled(bool)"))
        self.connect(disableWidgetsCheckBox, QtCore.SIGNAL("toggled(bool)"), self.topRightGroupBox, QtCore.SLOT("setDisabled(bool)"))
        self.connect(disableWidgetsCheckBox, QtCore.SIGNAL("toggled(bool)"), self.bottomLeftTabWidget, QtCore.SLOT("setDisabled(bool)"))
        self.connect(disableWidgetsCheckBox, QtCore.SIGNAL("toggled(bool)"), self.bottomRightGroupBox, QtCore.SLOT("setDisabled(bool)"))
    
        topLayout = QtGui.QHBoxLayout()
        topLayout.addWidget(styleLabel)
        topLayout.addWidget(styleComboBox)
        topLayout.addStretch(1)
        topLayout.addWidget(self.useStylePaletteCheckBox)
        topLayout.addWidget(disableWidgetsCheckBox)
    
        mainLayout = QtGui.QGridLayout()
        mainLayout.addLayout(topLayout, 0, 0, 1, 2)
        mainLayout.addWidget(self.topLeftGroupBox, 1, 0)
        mainLayout.addWidget(self.topRightGroupBox, 1, 1)
        mainLayout.addWidget(self.bottomLeftTabWidget, 2, 0)
        mainLayout.addWidget(self.bottomRightGroupBox, 2, 1)
        mainLayout.addWidget(self.progressBar, 3, 0, 1, 2)
        mainLayout.setRowStretch(1, 1)
        mainLayout.setRowStretch(2, 1)
        mainLayout.setColumnStretch(0, 1)
        mainLayout.setColumnStretch(1, 1)
        self.setLayout(mainLayout)

        self.setWindowTitle(self.tr("Styles"))
        self.changeStyle("Windows")
        
    def changeStyle(self, styleName):
        QtGui.QApplication.setStyle(QtGui.QStyleFactory.create(styleName))
        self.changePalette()
    
    def changePalette(self):
        if (self.useStylePaletteCheckBox.isChecked()):
            QtGui.QApplication.setPalette(QtGui.QApplication.style().standardPalette())
        else:
            QtGui.QApplication.setPalette(self.originalPalette)
    
    def advanceProgressBar(self):
        curVal = self.progressBar.value()
        maxVal = self.progressBar.maximum()
        self.progressBar.setValue(curVal + (maxVal - curVal) / 100)
    
    def createTopLeftGroupBox(self):
        self.topLeftGroupBox = QtGui.QGroupBox(self.tr("Group 1"))
    
        radioButton1 = QtGui.QRadioButton(self.tr("Radio button 1"))
        radioButton2 = QtGui.QRadioButton(self.tr("Radio button 2"))
        radioButton3 = QtGui.QRadioButton(self.tr("Radio button 3"))
        radioButton1.setChecked(True)
    
        checkBox = QtGui.QCheckBox(self.tr("Tri-state check box"))
        checkBox.setTristate(True)
        checkBox.setCheckState(QtCore.Qt.PartiallyChecked)
    
        layout = QtGui.QVBoxLayout()
        layout.addWidget(radioButton1)
        layout.addWidget(radioButton2)
        layout.addWidget(radioButton3)
        layout.addWidget(checkBox)
        layout.addStretch(1)
        self.topLeftGroupBox.setLayout(layout)    
    
    def createTopRightGroupBox(self):
        self.topRightGroupBox = QtGui.QGroupBox(self.tr("Group 2"))
    
        defaultPushButton = QtGui.QPushButton(self.tr("Default Push Button"))
        defaultPushButton.setDefault(True)
    
        togglePushButton = QtGui.QPushButton(self.tr("Toggle Push Button"))
        togglePushButton.setCheckable(True)
        togglePushButton.setChecked(True)
    
        flatPushButton = QtGui.QPushButton(self.tr("Flat Push Button"))
        flatPushButton.setFlat(True)
    
        layout = QtGui.QVBoxLayout()
        layout.addWidget(defaultPushButton)
        layout.addWidget(togglePushButton)
        layout.addWidget(flatPushButton)
        layout.addStretch(1)
        self.topRightGroupBox.setLayout(layout)

    def createBottomLeftTabWidget(self):
        self.bottomLeftTabWidget = QtGui.QTabWidget()
        self.bottomLeftTabWidget.setSizePolicy(QtGui.QSizePolicy.Preferred,
                                               QtGui.QSizePolicy.Ignored)

        tab1 = QtGui.QWidget()
        tableWidget = QtGui.QTableWidget(10, 10)
    
        tab1hbox = QtGui.QHBoxLayout()
        tab1hbox.setMargin(5)
        tab1hbox.addWidget(tableWidget)
        tab1.setLayout(tab1hbox)
    
        tab2 = QtGui.QWidget()
        textEdit = QtGui.QTextEdit()
    
        textEdit.setPlainText(self.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"))

        tab2hbox = QtGui.QHBoxLayout()
        tab2hbox.setMargin(5)
        tab2hbox.addWidget(textEdit)
        tab2.setLayout(tab2hbox)
    
        self.bottomLeftTabWidget.addTab(tab1, self.tr("&Table"))
        self.bottomLeftTabWidget.addTab(tab2, self.tr("Text &Edit"))
    
    def createBottomRightGroupBox(self):
        self.bottomRightGroupBox = QtGui.QGroupBox(self.tr("Group 3"))
        self.bottomRightGroupBox.setCheckable(True)
        self.bottomRightGroupBox.setChecked(True)
    
        lineEdit = QtGui.QLineEdit("s3cRe7")
        lineEdit.setEchoMode(QtGui.QLineEdit.Password)
    
        spinBox = QtGui.QSpinBox(self.bottomRightGroupBox)
        spinBox.setValue(50)
    
        dateTimeEdit = QtGui.QDateTimeEdit(self.bottomRightGroupBox)
        dateTimeEdit.setDateTime(QtCore.QDateTime.currentDateTime())
    
        slider = QtGui.QSlider(QtCore.Qt.Horizontal, self.bottomRightGroupBox)
        slider.setValue(40)
    
        scrollBar = QtGui.QScrollBar(QtCore.Qt.Horizontal, self.bottomRightGroupBox)
        scrollBar.setValue(60)
    
        dial = QtGui.QDial(self.bottomRightGroupBox)
        dial.setValue(30)
        dial.setNotchesVisible(True)
    
        layout = QtGui.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)
        self.bottomRightGroupBox.setLayout(layout)
    
    def createProgressBar(self):
        self.progressBar = QtGui.QProgressBar()
        self.progressBar.setRange(0, 10000)
        self.progressBar.setValue(0)
    
        timer = QtCore.QTimer(self)
        self.connect(timer, QtCore.SIGNAL("timeout()"), self.advanceProgressBar)
        timer.start(1000)


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    gallery = WidgetGallery()
    gallery.show()
    sys.exit(app.exec_()) 
