aboutsummaryrefslogtreecommitdiff
path: root/plugins/ProfileEditor/forms/settingstable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/ProfileEditor/forms/settingstable.cpp')
-rw-r--r--plugins/ProfileEditor/forms/settingstable.cpp90
1 files changed, 90 insertions, 0 deletions
diff --git a/plugins/ProfileEditor/forms/settingstable.cpp b/plugins/ProfileEditor/forms/settingstable.cpp
new file mode 100644
index 0000000..6cfe144
--- /dev/null
+++ b/plugins/ProfileEditor/forms/settingstable.cpp
@@ -0,0 +1,90 @@
+/*
+ * 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/cgit/smolbote
+ *
+ * SPDX-License-Identifier: GPL-3.0
+ */
+
+#include "settingstable.h"
+#include <QResizeEvent>
+#include <QSettings>
+#include <QToolButton>
+
+SettingsTable::SettingsTable(QWidget *parent)
+ : QTableWidget(parent)
+{
+ QObject::connect(this, &QTableWidget::currentCellChanged, [this](int currentRow, int currentColumn, int /*previousRow*/, int /*previousColumn*/) {
+ if(currentColumn == 0) {
+ const auto key = item(currentRow, currentColumn)->text();
+ m_selectedKey = key;
+ }
+ });
+
+ addBtn = new QToolButton(this);
+ addBtn->setText("Add");
+ removeBtn = new QToolButton(this);
+ removeBtn->setText("Remove");
+}
+
+void SettingsTable::connect(QSettings *settings, const QString &section)
+{
+ settings->beginGroup(section);
+ if(settings != nullptr) {
+ const auto keys = settings->childKeys();
+ setRowCount(keys.count());
+ for(int i = 0; i < keys.count(); ++i) {
+ setItem(i, 0, new QTableWidgetItem(keys[i]));
+ setItem(i, 1, new QTableWidgetItem(settings->value(keys[i]).toString()));
+ }
+ }
+ settings->endGroup();
+
+ QObject::connect(addBtn, &QToolButton::clicked, [this]() {
+ const auto row = rowCount();
+ setRowCount(row + 1);
+ setItem(row, 0, new QTableWidgetItem("key"));
+ setItem(row, 1, new QTableWidgetItem("value"));
+ });
+
+ QObject::connect(removeBtn, &QToolButton::clicked, [this, settings, section]() {
+ settings->beginGroup(section);
+
+ const int row = currentRow();
+ const auto key = item(row, 0)->text();
+
+ removeRow(row);
+ qDebug("remove key: %s", qUtf8Printable(key));
+ settings->remove(key);
+
+ settings->endGroup();
+ });
+
+ QObject::connect(this, &QTableWidget::cellChanged, [this, settings, section](int row, int column) {
+ // no value has been created yet
+ if(item(row, 1) == nullptr) {
+ return;
+ }
+
+ settings->beginGroup(section);
+
+ if(column == 0) {
+ qDebug("remove old key: %s", qUtf8Printable(m_selectedKey));
+ settings->remove(m_selectedKey);
+ }
+
+ const auto key = item(row, 0)->text();
+ const auto val = item(row, 1)->text();
+ qDebug("set: [%s]=[%s]", qUtf8Printable(key), qUtf8Printable(val));
+ settings->setValue(key, val);
+
+ settings->endGroup();
+ });
+}
+
+void SettingsTable::resizeEvent(QResizeEvent *event)
+{
+ QTableWidget::resizeEvent(event);
+ addBtn->move(width() - addBtn->width() - removeBtn->width(), 0);
+ removeBtn->move(width() - removeBtn->width(), 0);
+}