File indexing completed on 2024-04-28 04:05:21

0001 /*
0002     SPDX-FileCopyrightText: 2015 Jakob Gruber <jakob.gruber@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "settingswindow.h"
0008 #include "ui_settingswindow.h"
0009 
0010 #include <assert.h>
0011 #include <KLocalizedString>
0012 #include <QColorDialog>
0013 #include <QFileDialog>
0014 
0015 static inline QString toStylesheet(const QString &color)
0016 {
0017     return QStringLiteral("QLabel { color : %1 }").arg(color);
0018 }
0019 
0020 SettingsWindow::SettingsWindow(QWidget *parent) :
0021     QDialog(parent),
0022     ui(new Ui::SettingsWindow)
0023 {
0024     ui->setupUi(this);
0025 
0026     restoreSettings();
0027 
0028     connect(ui->bgToolButton, &QToolButton::clicked, this, &SettingsWindow::bgToolButtonClicked);
0029     connect(ui->fontColorSolvedPushButton, &QPushButton::clicked, this, &SettingsWindow::selectSolvedColor);
0030     connect(ui->fontColorUnsolvedPushButton, &QPushButton::clicked, this, &SettingsWindow::selectUnsolvedColor);
0031     connect(ui->bgCustomRadioButton, &QRadioButton::toggled, ui->bgToolButton, &QToolButton::setEnabled);
0032 }
0033 
0034 SettingsWindow::~SettingsWindow()
0035 {
0036     delete ui;
0037 }
0038 
0039 void SettingsWindow::selectSolvedColor()
0040 {
0041     QColor color(m_font_color_solved);
0042     color = QColorDialog::getColor(color, this);
0043     if (!color.isValid()) {
0044         return;
0045     }
0046     m_font_color_solved = color.name();
0047     ui->fontColorSolvedLabel->setStyleSheet(toStylesheet(m_font_color_solved));
0048 }
0049 
0050 void SettingsWindow::selectUnsolvedColor()
0051 {
0052     QColor color(m_font_color_unsolved);
0053     color = QColorDialog::getColor(color, this);
0054     if (!color.isValid()) {
0055         return;
0056     }
0057     m_font_color_unsolved = color.name();
0058     ui->fontColorUnsolvedLabel->setStyleSheet(toStylesheet(m_font_color_unsolved));
0059 }
0060 
0061 void SettingsWindow::bgToolButtonClicked()
0062 {
0063     QString fileName = QFileDialog::getOpenFileName(this, i18n("Select Background"), QString(),
0064                                                     i18n("Image Files (*.png *.jpg)"));
0065 
0066     if (fileName.isNull()) {
0067         return;
0068     }
0069 
0070     ui->bgLineEdit->setText(fileName);
0071 }
0072 
0073 void SettingsWindow::restoreSettings() {
0074     ui->heightSpinBox->setValue(Settings::instance()->height());
0075     ui->widthSpinBox->setValue(Settings::instance()->width());
0076     ui->densitySlider->setValue(Settings::instance()->boxDensity() * 100.0);
0077     ui->preventMistakesCheckBox->setChecked(Settings::instance()->preventMistakes());
0078     ui->bgCustomRadioButton->setChecked(Settings::instance()->customBgEnabled());
0079     ui->bgToolButton->setEnabled(Settings::instance()->customBgEnabled());
0080     ui->bgLineEdit->setText(Settings::instance()->customBgPath());
0081     m_font_color_solved = Settings::instance()->fontColorSolved();
0082     m_font_color_unsolved = Settings::instance()->fontColorUnsolved();
0083     ui->fontColorUnsolvedLabel->setStyleSheet(toStylesheet(m_font_color_unsolved));
0084     ui->fontColorSolvedLabel->setStyleSheet(toStylesheet(m_font_color_solved));
0085 }
0086 
0087 void SettingsWindow::saveSettings() {
0088     Settings::instance()->setHeight(ui->heightSpinBox->value());
0089     Settings::instance()->setWidth(ui->widthSpinBox->value());
0090     Settings::instance()->setBoxDensity(ui->densitySlider->value() / 100.0);
0091     Settings::instance()->setPreventMistakes(ui->preventMistakesCheckBox->isChecked());
0092     Settings::instance()->setCustomBgEnabled(ui->bgCustomRadioButton->isChecked());
0093     Settings::instance()->setCustomBgPath(ui->bgLineEdit->text());
0094     Settings::instance()->setFontColorSolved(m_font_color_solved);
0095     Settings::instance()->setFontColorUnsolved(m_font_color_unsolved);
0096 
0097     Settings::instance()->sync();
0098 }
0099 
0100 void SettingsWindow::accept() {
0101     saveSettings();
0102     QDialog::accept();
0103 }
0104 
0105 #include "moc_settingswindow.cpp"