diff options
Diffstat (limited to 'src/qtconfig/paletteeditoradvanced.cpp')
-rw-r--r-- | src/qtconfig/paletteeditoradvanced.cpp | 401 |
1 files changed, 401 insertions, 0 deletions
diff --git a/src/qtconfig/paletteeditoradvanced.cpp b/src/qtconfig/paletteeditoradvanced.cpp new file mode 100644 index 000000000..4797ead93 --- /dev/null +++ b/src/qtconfig/paletteeditoradvanced.cpp @@ -0,0 +1,401 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** 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.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "ui_paletteeditoradvanced.h" +#include "paletteeditoradvanced.h" +#include "colorbutton.h" + +QT_BEGIN_NAMESPACE + +PaletteEditorAdvanced::PaletteEditorAdvanced(QWidget *parent) + : QDialog(parent), ui(new Ui::PaletteEditorAdvanced), selectedPalette(0) +{ + ui->setupUi(this); + + // create a ColorButton's + buttonCentral = new ColorButton(ui->groupCentral); + buttonCentral->setToolTip(tr("Choose a color")); + buttonCentral->setWhatsThis(tr("Choose a color for the selected central color role.")); + ui->layoutCentral->addWidget(buttonCentral); + ui->labelCentral->setBuddy(buttonCentral); + + buttonEffect = new ColorButton(ui->groupEffect); + buttonEffect->setToolTip(tr("Choose a color")); + buttonEffect->setWhatsThis(tr("Choose a color for the selected effect color role.")); + buttonEffect->setEnabled(false); + ui->layoutEffect->addWidget(buttonEffect); + ui->labelEffect->setBuddy(buttonEffect); + + // signals and slots connections + connect(ui->paletteCombo, SIGNAL(activated(int)), SLOT(paletteSelected(int))); + connect(ui->comboCentral, SIGNAL(activated(int)), SLOT(onCentral(int))); + connect(buttonCentral, SIGNAL(clicked()), SLOT(onChooseCentralColor())); + connect(buttonEffect, SIGNAL(clicked()), SLOT(onChooseEffectColor())); + connect(ui->comboEffect, SIGNAL(activated(int)), SLOT(onEffect(int))); + connect(ui->checkBuildEffect, SIGNAL(toggled(bool)), SLOT(onToggleBuildEffects(bool))); + connect(ui->checkBuildEffect, SIGNAL(toggled(bool)), buttonEffect, SLOT(setDisabled(bool))); + connect(ui->checkBuildInactive, SIGNAL(toggled(bool)), SLOT(onToggleBuildInactive(bool))); + connect(ui->checkBuildDisabled, SIGNAL(toggled(bool)), SLOT(onToggleBuildDisabled(bool))); + + onToggleBuildEffects(true); + + editPalette = QApplication::palette(); +} + +PaletteEditorAdvanced::~PaletteEditorAdvanced() +{ + delete ui; +} + +void PaletteEditorAdvanced::onToggleBuildInactive(bool v) +{ + if (selectedPalette == 1) { + ui->groupCentral->setDisabled(v); + ui->groupEffect->setDisabled(v); + } + + if (v) { + build(QPalette::Inactive); + updateColorButtons(); + } +} + +void PaletteEditorAdvanced::onToggleBuildDisabled(bool v) +{ + if (selectedPalette == 2) { + ui->groupCentral->setDisabled(v); + ui->groupEffect->setDisabled(v); + } + + if (v) { + build(QPalette::Disabled); + updateColorButtons(); + } +} + +void PaletteEditorAdvanced::paletteSelected(int p) +{ + selectedPalette = p; + + if(p == 1) { // inactive + ui->groupCentral->setDisabled(ui->checkBuildInactive->isChecked()); + ui->groupEffect->setDisabled(ui->checkBuildInactive->isChecked()); + } else if (p == 2) { // disabled + ui->groupCentral->setDisabled(ui->checkBuildDisabled->isChecked()); + ui->groupEffect->setDisabled(ui->checkBuildDisabled->isChecked()); + } else { + ui->groupCentral->setEnabled(true); + ui->groupEffect->setEnabled(true); + } + updateColorButtons(); +} + +void PaletteEditorAdvanced::onChooseCentralColor() +{ + QPalette::ColorGroup group = groupFromIndex(selectedPalette); + editPalette.setColor(group, centralFromIndex(ui->comboCentral->currentIndex()), + buttonCentral->color()); + + buildEffect(group); + if (group == QPalette::Active) { + if(ui->checkBuildInactive->isChecked()) + build(QPalette::Inactive); + if(ui->checkBuildDisabled->isChecked()) + build(QPalette::Disabled); + } + + updateColorButtons(); +} + +void PaletteEditorAdvanced::onChooseEffectColor() +{ + QPalette::ColorGroup group = groupFromIndex(selectedPalette); + editPalette.setColor(group, effectFromIndex(ui->comboEffect->currentIndex()), + buttonEffect->color()); + + if (group == QPalette::Active) { + if(ui->checkBuildInactive->isChecked()) + build(QPalette::Inactive); + if(ui->checkBuildDisabled->isChecked()) + build(QPalette::Disabled); + } + + updateColorButtons(); +} + +void PaletteEditorAdvanced::onToggleBuildEffects(bool on) +{ + if (on) { + for (int i = 0; i < QPalette::NColorGroups; i++) + buildEffect(QPalette::ColorGroup(i)); + } +} + +QPalette::ColorGroup PaletteEditorAdvanced::groupFromIndex(int item) +{ + switch (item) { + case 0: + default: + return QPalette::Active; + case 1: + return QPalette::Inactive; + case 2: + return QPalette::Disabled; + } +} + +QPalette::ColorRole PaletteEditorAdvanced::centralFromIndex(int item) +{ + switch (item) { + case 0: + return QPalette::Window; + case 1: + return QPalette::WindowText; + case 2: + return QPalette::Base; + case 3: + return QPalette::AlternateBase; + case 4: + return QPalette::ToolTipBase; + case 5: + return QPalette::ToolTipText; + case 6: + return QPalette::Text; + case 7: + return QPalette::Button; + case 8: + return QPalette::ButtonText; + case 9: + return QPalette::BrightText; + case 10: + return QPalette::Highlight; + case 11: + return QPalette::HighlightedText; + case 12: + return QPalette::Link; + case 13: + return QPalette::LinkVisited; + default: + return QPalette::NoRole; + } +} + +QPalette::ColorRole PaletteEditorAdvanced::effectFromIndex(int item) +{ + switch (item) { + case 0: + return QPalette::Light; + case 1: + return QPalette::Midlight; + case 2: + return QPalette::Mid; + case 3: + return QPalette::Dark; + case 4: + return QPalette::Shadow; + default: + return QPalette::NoRole; + } +} + +void PaletteEditorAdvanced::onCentral(int item) +{ + QColor c = editPalette.color(groupFromIndex(selectedPalette), centralFromIndex(item)); + buttonCentral->setColor(c); +} + +void PaletteEditorAdvanced::onEffect(int item) +{ + QColor c = editPalette.color(groupFromIndex(selectedPalette), effectFromIndex(item)); + buttonEffect->setColor(c); +} + +QPalette PaletteEditorAdvanced::buildEffect(QPalette::ColorGroup colorGroup, + const QPalette &basePalette) +{ + QPalette result(basePalette); + + if (colorGroup == QPalette::Active) { + QPalette calculatedPalette(basePalette.color(colorGroup, QPalette::Button), + basePalette.color(colorGroup, QPalette::Window)); + + for (int i = 0; i < 5; i++) { + QPalette::ColorRole effectRole = effectFromIndex(i); + result.setColor(colorGroup, effectRole, + calculatedPalette.color(colorGroup, effectRole)); + } + } else { + QColor btn = basePalette.color(colorGroup, QPalette::Button); + + result.setColor(colorGroup, QPalette::Light, btn.lighter()); + result.setColor(colorGroup, QPalette::Midlight, btn.lighter(115)); + result.setColor(colorGroup, QPalette::Mid, btn.darker(150)); + result.setColor(colorGroup, QPalette::Dark, btn.darker()); + result.setColor(colorGroup, QPalette::Shadow, Qt::black); + } + + return result; +} + +void PaletteEditorAdvanced::buildEffect(QPalette::ColorGroup colorGroup) +{ + editPalette = buildEffect(colorGroup, editPalette); + updateColorButtons(); +} + +void PaletteEditorAdvanced::build(QPalette::ColorGroup colorGroup) +{ + if (colorGroup != QPalette::Active) { + for (int i = 0; i < QPalette::NColorRoles; i++) + editPalette.setColor(colorGroup, QPalette::ColorRole(i), + editPalette.color(QPalette::Active, QPalette::ColorRole(i))); + + if (colorGroup == QPalette::Disabled) { + editPalette.setColor(colorGroup, QPalette::ButtonText, Qt::darkGray); + editPalette.setColor(colorGroup, QPalette::WindowText, Qt::darkGray); + editPalette.setColor(colorGroup, QPalette::Text, Qt::darkGray); + editPalette.setColor(colorGroup, QPalette::HighlightedText, Qt::darkGray); + } + + if (ui->checkBuildEffect->isChecked()) + buildEffect(colorGroup); + else + updateColorButtons(); + } +} + +void PaletteEditorAdvanced::updateColorButtons() +{ + QPalette::ColorGroup colorGroup = groupFromIndex(selectedPalette); + buttonCentral->setColor(editPalette.color(colorGroup, + centralFromIndex(ui->comboCentral->currentIndex()))); + buttonEffect->setColor(editPalette.color(colorGroup, + effectFromIndex(ui->comboEffect->currentIndex()))); +} + +void PaletteEditorAdvanced::setPal(const QPalette &pal) +{ + editPalette = pal; + updateColorButtons(); +} + +QPalette PaletteEditorAdvanced::pal() const +{ + return editPalette; +} + +void PaletteEditorAdvanced::setupBackgroundRole(QPalette::ColorRole role) +{ + int initRole = 0; + + switch (role) { + case QPalette::Window: + initRole = 0; + break; + case QPalette::WindowText: + initRole = 1; + break; + case QPalette::Base: + initRole = 2; + break; + case QPalette::AlternateBase: + initRole = 3; + break; + case QPalette::ToolTipBase: + initRole = 4; + break; + case QPalette::ToolTipText: + initRole = 5; + break; + case QPalette::Text: + initRole = 6; + break; + case QPalette::Button: + initRole = 7; + break; + case QPalette::ButtonText: + initRole = 8; + break; + case QPalette::BrightText: + initRole = 9; + break; + case QPalette::Highlight: + initRole = 10; + break; + case QPalette::HighlightedText: + initRole = 11; + break; + case QPalette::Link: + initRole = 12; + break; + case QPalette::LinkVisited: + initRole = 13; + break; + default: + initRole = -1; + break; + } + + if (initRole != -1) + ui->comboCentral->setCurrentIndex(initRole); +} + +QPalette PaletteEditorAdvanced::getPalette(bool *ok, const QPalette &init, + QPalette::ColorRole backgroundRole, QWidget *parent) +{ + PaletteEditorAdvanced *dlg = new PaletteEditorAdvanced(parent); + dlg->setupBackgroundRole(backgroundRole); + + if (init != QPalette()) + dlg->setPal(init); + int resultCode = dlg->exec(); + + QPalette result = init; + if (resultCode == QDialog::Accepted) + result = dlg->pal(); + + if (ok) + *ok = resultCode; + + delete dlg; + return result; +} + +QT_END_NAMESPACE |