From 6cf244277a5ba8434b85d2b9a861ceed1c6dfb88 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Mon, 11 Dec 2017 21:57:25 +0100 Subject: Autogenerating settings dialog --- lib/settings/settingsdialog.cpp | 92 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 lib/settings/settingsdialog.cpp (limited to 'lib/settings/settingsdialog.cpp') 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 . + ** + ******************************************************************************/ + +#include "settingsdialog.h" +#include "ui_settingsdialog.h" +#include "configuration.h" +#include +#include +#include +#include +#include + +inline QHBoxLayout *createEntry(const QString &value, QWidget *widget); + +SettingsDialog::SettingsDialog(std::shared_ptr &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 &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((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((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; +} -- cgit v1.2.1