diff options
| author | Felix (xq) Queißner <git@mq32.de> | 2020-06-09 10:33:30 +0200 |
|---|---|---|
| committer | Felix (xq) Queißner <git@mq32.de> | 2020-06-09 10:33:30 +0200 |
| commit | 976522e19566eaa30bd5cc4fe55730dd8a777bf8 (patch) | |
| tree | eaac7a967a4715473921c6d8c80997c8945220d7 /src | |
| parent | 7f858ec4237670fb93e44c197834c9adf52b7e9d (diff) | |
| download | kristall-976522e19566eaa30bd5cc4fe55730dd8a777bf8.tar.gz | |
Adds internal preset handling. Still missing import/export.
Diffstat (limited to 'src')
| -rw-r--r-- | src/documentstyle.cpp | 8 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 10 | ||||
| -rw-r--r-- | src/settingsdialog.cpp | 92 | ||||
| -rw-r--r-- | src/settingsdialog.hpp | 6 |
4 files changed, 95 insertions, 21 deletions
diff --git a/src/documentstyle.cpp b/src/documentstyle.cpp index 369e827..50a4168 100644 --- a/src/documentstyle.cpp +++ b/src/documentstyle.cpp @@ -154,8 +154,6 @@ DocumentStyle::DocumentStyle() : theme(Fixed), bool DocumentStyle::save(QSettings &settings) const { - settings.beginGroup("Theme"); - settings.setValue("standard_font", standard_font.toString()); settings.setValue("h1_font", h1_font.toString()); settings.setValue("h2_font", h2_font.toString()); @@ -178,15 +176,11 @@ bool DocumentStyle::save(QSettings &settings) const settings.setValue("margins", margin); settings.setValue("theme", int(theme)); - - settings.endGroup(); return true; } bool DocumentStyle::load(QSettings &settings) { - settings.beginGroup("Theme"); - if(settings.contains("standard_color")) { standard_font.fromString(settings.value("standard_font").toString()); @@ -212,8 +206,6 @@ bool DocumentStyle::load(QSettings &settings) margin = settings.value("margins").toDouble(); theme = Theme(settings.value("theme").toInt()); } - - settings.endGroup(); return true; } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index c1361dd..f735b2a 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -31,9 +31,12 @@ MainWindow::MainWindow(QApplication * app, QWidget *parent) : this->statusBar()->addPermanentWidget(this->load_time); this->favourites.load(global_settings); - this->current_style.load(global_settings); this->protocols.load(global_settings); + global_settings.beginGroup("Theme"); + this->current_style.load(global_settings); + global_settings.endGroup(); + ui->favourites_view->setModel(&favourites); this->ui->outline_window->setVisible(false); @@ -135,9 +138,12 @@ void MainWindow::setUrlPreview(const QUrl &url) void MainWindow::saveSettings() { this->favourites.save(global_settings); - this->current_style.save(global_settings); this->protocols.save(global_settings); + global_settings.beginGroup("Theme"); + this->current_style.save(global_settings); + global_settings.endGroup(); + { global_settings.beginGroup("Window State"); diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp index 6512db6..69c7280 100644 --- a/src/settingsdialog.cpp +++ b/src/settingsdialog.cpp @@ -5,6 +5,7 @@ #include <QStyle> #include <QSettings> #include <QInputDialog> +#include <QMessageBox> #include "kristall.hpp" @@ -48,19 +49,35 @@ SettingsDialog::SettingsDialog(QWidget *parent) : this->ui->texthl_off->setChecked(true); } -// settings.beginGroup("Themes"); -// int items = settings.beginReadArray("Themes"); + int items = global_settings.beginReadArray("Themes"); -// this->ui->presets->clear(); -// for(int i = 0; i < items; i++) -// { -// settings.setArrayIndex(i); -// this->ui->presets->addItem(settings.value("name").toString(), QVariant::fromValue(i)); -// } + this->predefined_styles.clear(); + for(int i = 0; i < items; i++) + { + global_settings.setArrayIndex(i); + + QString name = global_settings.value("name").toString(); + + DocumentStyle style; + style.load(global_settings); + + this->predefined_styles.insert(name, style); + } -// settings.endArray(); + global_settings.endArray(); + + this->ui->presets->clear(); + for(auto const & style_name : this->predefined_styles.keys()) + { + this->ui->presets->addItem(style_name); + } + + if(items > 0) { + on_presets_currentIndexChanged(0); + } else { + this->on_presets_currentIndexChanged(-1); + } - this->on_presets_currentIndexChanged(-1); } SettingsDialog::~SettingsDialog() @@ -368,17 +385,70 @@ void SettingsDialog::on_preset_new_clicked() if(dlg.exec() != QInputDialog::Accepted) return; - QString name = dlg.textValue(); + bool override = false; + if(this->predefined_styles.contains(name)) + { + auto response = QMessageBox::question(this, "Kristall", QString("A style with the name '%1' already exists! Replace?").arg(name)); + if(response != QMessageBox::Yes) + return; + override = true; + } + this->predefined_styles.insert(name, this->current_style); + if(not override) + { + this->ui->presets->addItem(name); + } +} +void SettingsDialog::on_preset_save_clicked() +{ + QString name = this->ui->presets->currentText(); + if(name.isEmpty()) + return; + + auto response = QMessageBox::question(this, "Kristall", QString("Do you want to override the style '%1'?").arg(name)); + if(response != QMessageBox::Yes) + return; + + this->predefined_styles.insert(name, this->current_style); +} + + +void SettingsDialog::on_preset_load_clicked() +{ + QString name = this->ui->presets->currentText(); + if(name.isEmpty()) + return; + + auto response = QMessageBox::question(this, "Kristall", QString("Do you want to load the style '%1'?\r\nThis will discard all currently set up values!").arg(name)); + if(response != QMessageBox::Yes) + return; + + this->setGeminiStyle(this->predefined_styles.value(name)); } + void SettingsDialog::on_SettingsDialog_accepted() { global_settings.setValue("gophermap_display", this->ui->gophermap_text->isChecked() ? "text" : "rendered"); global_settings.setValue("text_display", this->ui->fancypants_off->isChecked() ? "plain" : "fancy"); global_settings.setValue("text_decoration", this->ui->texthl_on->isChecked()); + + global_settings.beginWriteArray("Themes", this->predefined_styles.size()); + + int index = 0; + for(auto const & style_name : this->predefined_styles.keys()) + { + global_settings.setArrayIndex(index); + + global_settings.setValue("name", style_name); + this->predefined_styles.value(style_name).save(global_settings); + + index += 1; + } + global_settings.endArray(); } diff --git a/src/settingsdialog.hpp b/src/settingsdialog.hpp index 640cea9..c3350d5 100644 --- a/src/settingsdialog.hpp +++ b/src/settingsdialog.hpp @@ -81,6 +81,10 @@ private slots: void on_quote_change_color_clicked(); + void on_preset_save_clicked(); + + void on_preset_load_clicked(); + private: void reloadStylePreview(); @@ -93,6 +97,8 @@ private: DocumentStyle current_style; std::unique_ptr<QTextDocument> preview_document; + + QMap<QString, DocumentStyle> predefined_styles; }; #endif // SETTINGSDIALOG_HPP |
