1 #include <QPalette>
2 #include <QColorDialog>
3 #include <QSettings>
4 #include "lthemeengine.h"
5 #include "paletteeditdialog.h"
6 #include "ui_paletteeditdialog.h"
7 
PaletteEditDialog(const QPalette & palette,QStyle * currentStyle,QWidget * parent)8 PaletteEditDialog::PaletteEditDialog(const QPalette &palette, QStyle *currentStyle, QWidget *parent) : QDialog(parent), m_ui(new Ui::PaletteEditDialog){
9   m_currentStyle = currentStyle;
10   m_ui->setupUi(this);
11   m_ui->tableWidget->setColumnCount(3);
12   m_ui->tableWidget->setRowCount(QPalette::NColorRoles);
13   m_ui->tableWidget->verticalHeader()->setDefaultSectionSize(fontMetrics().lineSpacing() + 10);
14   m_ui->tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
15   m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
16   QStringList labels;
17   labels << tr("Active") << tr("Inactive") << tr("Disabled");
18   m_ui->tableWidget->setHorizontalHeaderLabels(labels);
19   setPalette(palette);
20   QSettings settings(lthemeengine::configFile(), QSettings::IniFormat);
21   restoreGeometry(settings.value("PaletteEditor/geometry").toByteArray());
22 }
23 
~PaletteEditDialog()24 PaletteEditDialog::~PaletteEditDialog(){
25   delete m_ui;
26 }
27 
selectedPalette() const28 QPalette PaletteEditDialog::selectedPalette() const{
29   QPalette palette;
30   for(int i = 0; i < QPalette::NColorRoles; i++){
31     palette.setBrush(QPalette::Active, QPalette::ColorRole(i), m_ui->tableWidget->item(i,0)->background().color());
32     palette.setBrush(QPalette::Inactive, QPalette::ColorRole(i), m_ui->tableWidget->item(i,1)->background().color());
33     palette.setBrush(QPalette::Disabled, QPalette::ColorRole(i), m_ui->tableWidget->item(i,2)->background().color());
34     }
35   return palette;
36 }
37 
setPalette(const QPalette & palette)38 void PaletteEditDialog::setPalette(const QPalette &palette){
39   for(int i = 0; i < QPalette::NColorRoles; i++){
40     if(!m_ui->tableWidget->item(i,0)){ m_ui->tableWidget->setItem(i, 0, new QTableWidgetItem()); }
41     if(!m_ui->tableWidget->item(i,1)){ m_ui->tableWidget->setItem(i, 1, new QTableWidgetItem()); }
42     if(!m_ui->tableWidget->item(i,2)){ m_ui->tableWidget->setItem(i, 2, new QTableWidgetItem()); }
43     m_ui->tableWidget->item(i,0)->setBackground(QBrush(palette.color(QPalette::Active, QPalette::ColorRole(i))));
44     m_ui->tableWidget->item(i,1)->setBackground(QBrush(palette.color(QPalette::Inactive, QPalette::ColorRole(i))));
45     m_ui->tableWidget->item(i,2)->setBackground(QBrush(palette.color(QPalette::Disabled, QPalette::ColorRole(i))));
46     }
47   QStringList labels;
48   labels << tr("Window text") << tr("Button background") << tr("Bright") << tr("Less bright") << tr("Dark") << tr("Less dark") << tr("Normal text") << tr("Bright text") << tr("Button text") << tr("Normal background") << tr("Window") << tr("Shadow") << tr("Highlight") << tr("Highlighted text")  << tr("Link")  << tr("Visited link") << tr("Alternate background") << tr("Default") << tr("Tooltip background")  << tr("Tooltip text") << tr("Placeholder text");
49   m_ui->tableWidget->setVerticalHeaderLabels(labels);
50 }
51 
hideEvent(QHideEvent *)52 void PaletteEditDialog::hideEvent(QHideEvent *){
53   QSettings settings(lthemeengine::configFile(), QSettings::IniFormat);
54   settings.setValue("PaletteEditor/geometry", saveGeometry());
55 }
56 
on_tableWidget_itemClicked(QTableWidgetItem * item)57 void PaletteEditDialog::on_tableWidget_itemClicked(QTableWidgetItem *item){
58   QColor color = QColorDialog::getColor(item->background().color(), this, tr("Select Color"));
59   if(color.isValid()){
60     item->setBackground(QBrush(color));
61     emit paletteChanged(selectedPalette());
62     }
63 }
64 
on_resetPaletteButton_clicked()65 void PaletteEditDialog::on_resetPaletteButton_clicked(){
66   setPalette(m_currentStyle->standardPalette());
67   emit paletteChanged(selectedPalette());
68 }
69 
on_buildInactiveButton_clicked()70 void PaletteEditDialog::on_buildInactiveButton_clicked(){
71   QPalette palette = selectedPalette();
72   for(int i = 0; i < QPalette::NColorRoles; i++){
73     palette.setColor(QPalette::Inactive, QPalette::ColorRole(i),
74     palette.color(QPalette::Active, QPalette::ColorRole(i)));
75     }
76   setPalette(palette);
77   emit paletteChanged(selectedPalette());
78 }
79 
on_buildDisabledButton_clicked()80 void PaletteEditDialog::on_buildDisabledButton_clicked(){
81   QPalette palette = selectedPalette();
82   for(int i = 0; i < QPalette::NColorRoles; i++){
83     palette.setColor(QPalette::Disabled, QPalette::ColorRole(i),
84     palette.color(QPalette::Active, QPalette::ColorRole(i)));
85     }
86   palette.setColor(QPalette::Disabled, QPalette::ButtonText, Qt::darkGray);
87   palette.setColor(QPalette::Disabled, QPalette::WindowText, Qt::darkGray);
88   palette.setColor(QPalette::Disabled, QPalette::Text, Qt::darkGray);
89   palette.setColor(QPalette::Disabled, QPalette::HighlightedText, Qt::darkGray);
90   setPalette(palette);
91   emit paletteChanged(selectedPalette());
92 }
93