diff options
Diffstat (limited to 'plugins/ConfigurationEditor/forms')
-rw-r--r-- | plugins/ConfigurationEditor/forms/settingsdialog.cpp | 101 | ||||
-rw-r--r-- | plugins/ConfigurationEditor/forms/settingsdialog.h | 35 |
2 files changed, 136 insertions, 0 deletions
diff --git a/plugins/ConfigurationEditor/forms/settingsdialog.cpp b/plugins/ConfigurationEditor/forms/settingsdialog.cpp new file mode 100644 index 0000000..ebc054e --- /dev/null +++ b/plugins/ConfigurationEditor/forms/settingsdialog.cpp @@ -0,0 +1,101 @@ +/* + * This file is part of smolbote. It's copyrighted by the contributors recorded + * in the version control history of the file, available from its original + * location: https://neueland.iserlohn-fortress.net/smolbote.hg + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#include "settingsdialog.h" +#include <QApplication> +#include <QFile> +#include <QMenuBar> +#include <QStatusBar> +#include <QToolButton> +#include <QVBoxLayout> +#include <QFileDialog> +#include <configuration.h> + +SettingsDialog::SettingsDialog(Configuration *config, QWidget *parent) + : QDialog(parent) +{ + resize(800, 600); + Q_CHECK_PTR(config); + + // main menu +// settingsMenu.setTitle(tr("Settings")); + +// auto *saveAction = settingsMenu.addAction(tr("Save")); +// saveAction->setShortcut(QKeySequence::Save); + +// auto *saveAsAction = settingsMenu.addAction(tr("Save As")); +// saveAsAction->setShortcut(QKeySequence::SaveAs); + +// settingsMenu.addAction(tr("Quit"), qApp, &QApplication::quit, QKeySequence::Quit); + +// menuBar()->addMenu(&settingsMenu); + + auto *layout = new QVBoxLayout(this); + layout->addWidget(&treeWidget); + treeWidget.setColumnCount(2); + treeWidget.setHeaderLabels({ tr("setting"), tr("value") }); + treeWidget.setEditTriggers(QTreeWidget::NoEditTriggers); + //connect(&treeWidget, &QTreeWidget::itemDoubleClicked, this, &SettingsDialog::editItem); + + for(const auto &option : config->options()) { + auto *item = new QTreeWidgetItem(&treeWidget); + item->setText(0, QString::fromStdString(option->long_name())); + item->setText(1, QString::fromStdString(config->value<std::string>(option->long_name().c_str()).value_or(std::string()))); + item->setFlags(item->flags() | Qt::ItemIsEditable); + } + + treeWidget.resizeColumnToContents(0); + + // connect signals +// connect(saveAction, &QAction::triggered, this, [this]() { +// write(configPath); +// statusBar()->showMessage(tr("Configuration saved to: ") + configPath, 3000); +// }); + +// connect(saveAsAction, &QAction::triggered, this, [this]() { +// QString path = QFileDialog::getSaveFileName(this, tr("Save Configuration"), configPath, tr("smolbote config (smolbote.cfg)")); +// if(!path.isEmpty()) { +// write(path); +// statusBar()->showMessage(tr("Configuration saved to: ") + path, 3000); +// } +// }); +} + +SettingsDialog::~SettingsDialog() +{ +// if(unsavedChanges) +// write(configPath); +} + +//void SettingsDialog::editItem(QTreeWidgetItem *item, int column) +//{ +// if(column == 1) { +// treeWidget.editItem(item, column); +// unsavedChanges = true; + +// if(!windowTitle().endsWith('*')) { +// setWindowTitle(windowTitle() + '*'); +// } +// } +//} + +//void SettingsDialog::write(const QString &path) +//{ +// QFile output(path); +// output.open(QIODevice::WriteOnly); + +// for(int i = 0; i < treeWidget.topLevelItemCount(); ++i) { +// auto *item = treeWidget.topLevelItem(i); +// output.write(QString(item->text(0) + " = " + item->text(1) + "\n").toUtf8()); +// } + +// output.close(); + +// unsavedChanges = false; +// setWindowTitle(configPath); +//} diff --git a/plugins/ConfigurationEditor/forms/settingsdialog.h b/plugins/ConfigurationEditor/forms/settingsdialog.h new file mode 100644 index 0000000..ed9e02d --- /dev/null +++ b/plugins/ConfigurationEditor/forms/settingsdialog.h @@ -0,0 +1,35 @@ +/* + * This file is part of smolbote. It's copyrighted by the contributors recorded + * in the version control history of the file, available from its original + * location: https://neueland.iserlohn-fortress.net/smolbote.hg + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#ifndef SMOLBOTE_SETTINGSDIALOG_H +#define SMOLBOTE_SETTINGSDIALOG_H + +#include <QDialog> +#include <QTreeWidget> + +class Configuration; +class SettingsDialog : public QDialog +{ + Q_OBJECT + +public: + explicit SettingsDialog(Configuration *config, QWidget *parent = nullptr); + ~SettingsDialog() override; + + QString configPath; + +public slots: +// void editItem(QTreeWidgetItem *item, int column); +// void write(const QString &path); + +private: + QTreeWidget treeWidget; + bool unsavedChanges = false; +}; + +#endif // SMOLBOTE_SETTINGSDIALOG_H |