From 12e81eb57b0da49dbcd2f823dbf156ee24a802f2 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Tue, 26 Dec 2017 14:16:00 +0100 Subject: SettingsDialog patches - Added scrollbar, so items are now properly viewable on all sizes - Reset button now works - Editing values causes a crash - Filter path is now in filter.path instead of browser.filterPath --- lib/settings/configuration.cpp | 7 +++++++ lib/settings/configuration.h | 2 ++ lib/settings/settingsdialog.cpp | 25 ++++++++++++++++++------- 3 files changed, 27 insertions(+), 7 deletions(-) (limited to 'lib') diff --git a/lib/settings/configuration.cpp b/lib/settings/configuration.cpp index d91ae97..34d50db 100644 --- a/lib/settings/configuration.cpp +++ b/lib/settings/configuration.cpp @@ -95,6 +95,13 @@ std::vector Configuration::childrenGroups(const char* name) return groupNames; } +void Configuration::resetValue(const char *path) +{ + if(m_userCfg->exists(path)) { + m_userCfg->getRoot().remove(path); + } +} + template std::optional Configuration::value(const char* path) const { diff --git a/lib/settings/configuration.h b/lib/settings/configuration.h index 49f92d6..1909eb8 100644 --- a/lib/settings/configuration.h +++ b/lib/settings/configuration.h @@ -32,6 +32,8 @@ public: std::vector childrenSettings(const char *name = ""); std::vector childrenGroups(const char *name = ""); + void resetValue(const char* path); + template std::optional value(const char* path) const; diff --git a/lib/settings/settingsdialog.cpp b/lib/settings/settingsdialog.cpp index 2b11416..6de3894 100644 --- a/lib/settings/settingsdialog.cpp +++ b/lib/settings/settingsdialog.cpp @@ -9,13 +9,14 @@ #include "settingsdialog.h" #include "ui_settingsdialog.h" #include "configuration.h" +#include #include #include #include #include #include -inline QHBoxLayout *createEntry(const QString &value, QWidget *widget); +inline QHBoxLayout *createEntry(Configuration *config, const std::string &path, QWidget *widget); SettingsDialog::SettingsDialog(std::shared_ptr &settings, QWidget *parent) : QDialog(parent), @@ -24,8 +25,10 @@ SettingsDialog::SettingsDialog(std::shared_ptr &settings, QWidget ui->setupUi(this); for(const std::string &group : settings->childrenGroups("")) { - QWidget *widget = widgetForGroup(settings, group, this); - ui->tabWidget->addTab(widget, QString::fromStdString(group)); + QScrollArea *area = new QScrollArea(this); + area->setWidgetResizable(true); + area->setWidget(widgetForGroup(settings, group, this)); + ui->tabWidget->addTab(area, QString::fromStdString(group)); } } @@ -43,7 +46,7 @@ QWidget *widgetForGroup(std::shared_ptr &settings, const std::str // add entry for every key QFormLayout *form = new QFormLayout(); for(const std::string &key : settings->childrenSettings(group.c_str())) { - QHBoxLayout *hBox = createEntry(QString::fromStdString(settings->value((group + '.' + key).c_str()).value()), widget); + QHBoxLayout *hBox = createEntry(settings.get(), group + '.' + key, widget); form->addRow(parent->tr(key.c_str()), hBox); } layout->addLayout(form); @@ -57,7 +60,7 @@ QWidget *widgetForGroup(std::shared_ptr &settings, const std::str const std::string groupPath = group + '.' + childGroup; for(const std::string &key : settings->childrenSettings(groupPath.c_str())) { - QHBoxLayout *hBox = createEntry(QString::fromStdString(settings->value((groupPath + '.' + key).c_str()).value()), groupBox); + QHBoxLayout *hBox = createEntry(settings.get(), groupPath + '.' + key, groupBox); boxForm->addRow(parent->tr(key.c_str()), hBox); } } @@ -65,13 +68,21 @@ QWidget *widgetForGroup(std::shared_ptr &settings, const std::str return widget; } -inline QHBoxLayout *createEntry(const QString &value, QWidget *widget) +inline QHBoxLayout *createEntry(Configuration* config, const std::string &path, QWidget *widget) { QLineEdit *lineEdit = new QLineEdit(widget); - lineEdit->setText(value); + lineEdit->setText(QString::fromStdString(config->value(path.c_str()).value())); QToolButton *resetButton = new QToolButton(widget); resetButton->setIcon(widget->style()->standardIcon(QStyle::SP_DialogResetButton)); + QObject::connect(resetButton, &QToolButton::clicked, [config, path, lineEdit]() { + config->resetValue(path.c_str()); + lineEdit->setText(QString::fromStdString(config->value(path.c_str()).value())); + }); + QObject::connect(lineEdit, &QLineEdit::editingFinished, [config, path, lineEdit]() { + config->setValue(path, lineEdit->text().toStdString()); + }); + QHBoxLayout *hBox = new QHBoxLayout(); hBox->addWidget(lineEdit); hBox->addWidget(resetButton); -- cgit v1.2.1