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