From 6edd9e7a12a3827fb6aac62a88be01085e41e176 Mon Sep 17 00:00:00 2001 From: "Felix (xq) Queißner" Date: Sun, 28 Jun 2020 16:30:52 +0200 Subject: Huge refacoring of the settings stuff. Provides automated migration between old and new configuration file stuff. Themes are now just files in a folder instead of encoded data in the config file. --- src/dialogs/settingsdialog.cpp | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) (limited to 'src/dialogs/settingsdialog.cpp') diff --git a/src/dialogs/settingsdialog.cpp b/src/dialogs/settingsdialog.cpp index ebd1664..980957c 100644 --- a/src/dialogs/settingsdialog.cpp +++ b/src/dialogs/settingsdialog.cpp @@ -36,30 +36,29 @@ SettingsDialog::SettingsDialog(QWidget *parent) : setGeminiStyle(DocumentStyle { }); - int items = global_settings.beginReadArray("Themes"); - this->predefined_styles.clear(); - for(int i = 0; i < items; i++) + for(auto const & fileName : kristall::dirs::styles.entryList()) { - global_settings.setArrayIndex(i); + QSettings style_sheet { + kristall::dirs::styles.absoluteFilePath(fileName), + QSettings::IniFormat + }; - QString name = global_settings.value("name").toString(); + QString name = style_sheet.value("name").toString(); DocumentStyle style; - style.load(global_settings); + style.load(style_sheet); this->predefined_styles.insert(name, style); } - 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) { + if(this->predefined_styles.size() > 0) { on_presets_currentIndexChanged(0); } else { this->on_presets_currentIndexChanged(-1); @@ -461,19 +460,28 @@ void SettingsDialog::on_preset_load_clicked() void SettingsDialog::on_SettingsDialog_accepted() { - global_settings.beginWriteArray("Themes", this->predefined_styles.size()); + QStringList files = kristall::dirs::styles.entryList(); - int index = 0; for(auto const & style_name : this->predefined_styles.keys()) { - global_settings.setArrayIndex(index); + QString fileName = DocumentStyle::createFileNameFromName(style_name, 0); + files.removeAll(fileName); + + QSettings style_sheet { + kristall::dirs::styles.absoluteFilePath(fileName), + QSettings::IniFormat + }; - global_settings.setValue("name", style_name); - this->predefined_styles.value(style_name).save(global_settings); + style_sheet.setValue("name", style_name); + this->predefined_styles.value(style_name).save(style_sheet); - index += 1; + style_sheet.sync(); + } + + for(auto const & fileName : files) + { + kristall::dirs::styles.remove(fileName); } - global_settings.endArray(); } void SettingsDialog::on_preset_import_clicked() -- cgit v1.2.3