/******************************************************************************* ** ** 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; }