/* * 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 #include #include 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 §ion) { 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); }