aboutsummaryrefslogtreecommitdiff
path: root/lib/settings/settingsdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/settings/settingsdialog.cpp')
-rw-r--r--lib/settings/settingsdialog.cpp25
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);