diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2017-12-26 14:16:00 +0100 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2017-12-26 14:16:00 +0100 |
commit | 12e81eb57b0da49dbcd2f823dbf156ee24a802f2 (patch) | |
tree | bb15985f9d284a838adcdefd91a5861c78eed08d /lib/settings/settingsdialog.cpp | |
parent | Updated pre-commit hook (diff) | |
download | smolbote-12e81eb57b0da49dbcd2f823dbf156ee24a802f2.tar.xz |
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
Diffstat (limited to 'lib/settings/settingsdialog.cpp')
-rw-r--r-- | lib/settings/settingsdialog.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
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 <QScrollArea> #include <QFormLayout> #include <QHBoxLayout> #include <QLineEdit> #include <QToolButton> #include <QGroupBox> -inline QHBoxLayout *createEntry(const QString &value, QWidget *widget); +inline QHBoxLayout *createEntry(Configuration *config, const std::string &path, QWidget *widget); SettingsDialog::SettingsDialog(std::shared_ptr<Configuration> &settings, QWidget *parent) : QDialog(parent), @@ -24,8 +25,10 @@ SettingsDialog::SettingsDialog(std::shared_ptr<Configuration> &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<Configuration> &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<std::string>((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<Configuration> &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<std::string>((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<Configuration> &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<std::string>(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<std::string>(path.c_str()).value())); + }); + QObject::connect(lineEdit, &QLineEdit::editingFinished, [config, path, lineEdit]() { + config->setValue<std::string>(path, lineEdit->text().toStdString()); + }); + QHBoxLayout *hBox = new QHBoxLayout(); hBox->addWidget(lineEdit); hBox->addWidget(resetButton); |