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.cpp92
1 files changed, 92 insertions, 0 deletions
diff --git a/lib/settings/settingsdialog.cpp b/lib/settings/settingsdialog.cpp
new file mode 100644
index 0000000..18e8dd2
--- /dev/null
+++ b/lib/settings/settingsdialog.cpp
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ **
+ ** nyamp: yet another media player
+ ** Copyright (C) 2017 Aqua-sama
+ **
+ ** This program is free software: you can redistribute it and/or modify
+ ** it under the terms of the GNU General Public License as published by
+ ** the Free Software Foundation, either version 3 of the License, or
+ ** (at your option) any later version.
+ **
+ ** This program is distributed in the hope that it will be useful,
+ ** but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ ** GNU General Public License for more details.
+ **
+ ** You should have received a copy of the GNU General Public License
+ ** along with this program. If not, see <http://www.gnu.org/licenses/>.
+ **
+ ******************************************************************************/
+
+#include "settingsdialog.h"
+#include "ui_settingsdialog.h"
+#include "configuration.h"
+#include <QFormLayout>
+#include <QHBoxLayout>
+#include <QLineEdit>
+#include <QToolButton>
+#include <QGroupBox>
+
+inline QHBoxLayout *createEntry(const QString &value, QWidget *widget);
+
+SettingsDialog::SettingsDialog(std::shared_ptr<Configuration> &settings, QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::SettingsDialog)
+{
+ ui->setupUi(this);
+
+ for(const std::string &group : settings->childrenGroups("")) {
+ QWidget *widget = widgetForGroup(settings, group, this);
+ ui->tabWidget->addTab(widget, QString::fromStdString(group));
+ }
+}
+
+SettingsDialog::~SettingsDialog()
+{
+ delete ui;
+}
+
+QWidget *widgetForGroup(std::shared_ptr<Configuration> &settings, const std::string &group, QWidget *parent)
+{
+ QWidget *widget = new QWidget(parent);
+ QVBoxLayout *layout = new QVBoxLayout(widget);
+ widget->setLayout(layout);
+
+ // add entry for every key
+ QFormLayout *form = new QFormLayout(widget);
+ 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);
+ form->addRow(parent->tr(key.c_str()), hBox);
+ }
+ layout->addLayout(form);
+
+ // TODO: iterate through groups
+ for(const std::string &childGroup : settings->childrenGroups(group.c_str())) {
+ QGroupBox *groupBox = new QGroupBox(QString::fromStdString(childGroup), widget);
+ layout->addWidget(groupBox);
+ QFormLayout *boxForm = new QFormLayout(groupBox);
+ groupBox->setLayout(boxForm);
+
+ 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);
+ boxForm->addRow(parent->tr(key.c_str()), hBox);
+ }
+ }
+
+ return widget;
+}
+
+inline QHBoxLayout *createEntry(const QString &value, QWidget *widget)
+{
+ QLineEdit *lineEdit = new QLineEdit(widget);
+ lineEdit->setText(value);
+ QToolButton *resetButton = new QToolButton(widget);
+ resetButton->setIcon(widget->style()->standardIcon(QStyle::SP_DialogResetButton));
+
+ QHBoxLayout *hBox = new QHBoxLayout();
+ hBox->addWidget(lineEdit);
+ hBox->addWidget(resetButton);
+
+ return hBox;
+}