diff options
Diffstat (limited to 'lib/settings/settingsdialog.cpp')
-rw-r--r-- | lib/settings/settingsdialog.cpp | 92 |
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; +} |