/**************************************************************** * * RetroShare is distributed under the following license: * * Copyright (C) 2006, crypton * * This program 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 * of the License, or (at your option) any later version. * * This program is distributed 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 this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. ****************************************************************/ #include #include "gui/settings/rsharesettings.h" #include "StyleDialog.h" #include "gui/style/RSStyle.h" /** Default constructor */ StyleDialog::StyleDialog(RSStyle &style, QWidget *parent) : QDialog(parent, Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint) { /* Invoke Qt Designer generated QObject setup routine */ ui.setupUi(this); ui.headerFrame->setHeaderImage(QPixmap(":/images/library.png")); ui.headerFrame->setHeaderText(tr("Define Style")); /* Load window postion */ QByteArray geometry = Settings->valueFromGroup("StyleDialog", "Geometry", QByteArray()).toByteArray(); if (geometry.isEmpty() == false) { restoreGeometry(geometry); } connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(accept())); connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(reject())); connect(ui.color1Button, SIGNAL(clicked()), this, SLOT(chooseColor())); connect(ui.color2Button, SIGNAL(clicked()), this, SLOT(chooseColor())); /* Initialize style combobox */ ui.styleComboBox->addItem(tr("None"), RSStyle::STYLETYPE_NONE); ui.styleComboBox->addItem(tr("Solid"), RSStyle::STYLETYPE_SOLID); ui.styleComboBox->addItem(tr("Gradient"), RSStyle::STYLETYPE_GRADIENT); ui.styleComboBox->setCurrentIndex(style.styleType); connect(ui.styleComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(showButtons())); /* Add pushbuttons and labels */ pushButtons.append(ui.color1Button); pushButtons.append(ui.color2Button); labels.append(ui.color1Label); labels.append(ui.color2Label); /* Set pushbuttons visible */ showButtons(); /* Init colors */ for (int i = 0; i < pushButtons.size(); i++) { if (i < style.colors.size()) { colors[pushButtons[i]] = style.colors[i]; } else { colors[pushButtons[i]] = Qt::white; } } drawButtons(); drawPreview(); } /** Destructor. */ StyleDialog::~StyleDialog() { /* Save window postion */ Settings->setValueToGroup("StyleDialog", "Geometry", saveGeometry()); } int StyleDialog::neededColors() { return RSStyle::neededColors((RSStyle::StyleType) ui.styleComboBox->itemData(ui.styleComboBox->currentIndex()).toInt()); } void StyleDialog::getStyle(RSStyle &style) { style.styleType = (RSStyle::StyleType) ui.styleComboBox->itemData(ui.styleComboBox->currentIndex()).toInt(); style.colors.clear(); int count = qMin(neededColors(), pushButtons.size()); for (int i = 0; i < count; i++) { style.colors.append(colors[pushButtons[i]]); } } void StyleDialog::showButtons() { int count = neededColors(); for (int i = 0; i < pushButtons.size(); i++) { pushButtons[i]->setVisible(i < count); labels[i]->setVisible(i < count); } drawPreview(); } void StyleDialog::drawButtons() { QPixmap pxm(16,14); QMap::iterator it; for (it = colors.begin(); it != colors.end(); it++) { pxm.fill(it.value()); it.key()->setIcon(pxm); } } void StyleDialog::drawPreview() { RSStyle style; getStyle(style); QString widgetSheet; QString styleSheet = style.getStyleSheet(); if (styleSheet.isEmpty() == false) { widgetSheet = QString(".QWidget{%1}").arg(styleSheet); } ui.previewWidget->setStyleSheet(widgetSheet); } void StyleDialog::chooseColor() { QPushButton *button = dynamic_cast(sender()); if (button == NULL) { return; } QColor color = QColorDialog::getColor(colors[button]); if (color.isValid()) { colors[button] = color; drawButtons(); drawPreview(); } }