aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFelix (xq) Queißner <git@mq32.de>2020-06-09 10:33:30 +0200
committerFelix (xq) Queißner <git@mq32.de>2020-06-09 10:33:30 +0200
commit976522e19566eaa30bd5cc4fe55730dd8a777bf8 (patch)
treeeaac7a967a4715473921c6d8c80997c8945220d7 /src
parent7f858ec4237670fb93e44c197834c9adf52b7e9d (diff)
downloadkristall-976522e19566eaa30bd5cc4fe55730dd8a777bf8.tar.gz
Adds internal preset handling. Still missing import/export.
Diffstat (limited to 'src')
-rw-r--r--src/documentstyle.cpp8
-rw-r--r--src/mainwindow.cpp10
-rw-r--r--src/settingsdialog.cpp92
-rw-r--r--src/settingsdialog.hpp6
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