apply desired assignable settings when changing profile

This commit is contained in:
Jussi Kuokkanen 2023-09-15 18:37:50 +03:00
parent 560453bacf
commit 9005399b74
3 changed files with 44 additions and 14 deletions

View File

@ -8,6 +8,7 @@
#include <QToolButton>
#include <QVariant>
#include <Settings.hpp>
#include <Utils.hpp>
using namespace mpark::patterns;
using namespace TuxClocker::Device;
@ -59,8 +60,11 @@ DeviceBrowser::DeviceBrowser(DeviceModel &model, QWidget *parent)
connect(m_settings, &Settings::cancelled,
[=] { Globals::g_mainStack->setCurrentWidget(this); });
connect(m_settings, &Settings::settingsSaved,
[=](auto) { Globals::g_mainStack->setCurrentWidget(this); });
connect(m_settings, &Settings::settingsSaved, [=](auto data) {
Globals::g_mainStack->setCurrentWidget(this);
Utils::setModelAssignableSettings(
*Globals::g_deviceModel, data.assignableSettings);
});
}
Globals::g_mainStack->setCurrentWidget(m_settings);
});

View File

@ -62,7 +62,6 @@ Settings::Settings(QWidget *parent) : QWidget(parent) {
auto saveButton = new QPushButton{"Save", this};
connect(saveButton, &QPushButton::released, this, [=] {
// TODO: read assignableSettings from disk
auto settingsData = fromUIState();
writeSettings(fromUIState());
@ -117,9 +116,15 @@ SettingsData Settings::fromUIState() {
};
Utils::traverseModel(cb, m_profileView->model());
// Read assignableSettings for wanted profile
QVector<AssignableSetting> assSettings;
if (currentProfile.has_value())
assSettings = readAssignableSettings(currentProfile.value());
return SettingsData{
.autoApplyProfile = m_autoLoad->isChecked(),
.currentProfile = currentProfile,
.assignableSettings = assSettings,
.profiles = profiles,
};
}
@ -138,6 +143,35 @@ void Settings::writeSettings(SettingsData data) {
settings.setValue("currentProfile", data.currentProfile.value());
}
SettingsData Settings::setAssignableSetting(SettingsData data, AssignableSetting setting) {
// Check if there is exising setting for path
for (auto &assSetting : data.assignableSettings) {
if (assSetting.assignablePath == setting.assignablePath) {
assSetting.value = setting.value;
return data;
}
}
data.assignableSettings.append(setting);
return data;
}
QVector<AssignableSetting> Settings::readAssignableSettings(QString profile) {
QVector<AssignableSetting> retval;
QSettings s{"tuxclocker"};
s.beginGroup(QString{"profiles/%1"}.arg(profile));
auto keys = s.allKeys();
for (auto &key : keys) {
AssignableSetting setting{
.assignablePath = Utils::fromSettingsPath(key),
.value = s.value(key),
};
retval.append(setting);
}
s.endGroup();
return retval;
}
SettingsData Settings::readSettings() {
qRegisterMetaTypeStreamOperators<QVector<QString>>("QVector<QString>>");
QSettings s{"tuxclocker"};
@ -149,17 +183,7 @@ SettingsData Settings::readSettings() {
auto profileStr = s.value("currentProfile").toString();
profile = profileStr;
// Read possible assignable settings
s.beginGroup(QString{"profiles/%1"}.arg(profileStr));
auto keys = s.allKeys();
for (auto &key : keys) {
AssignableSetting setting{
.assignablePath = Utils::fromSettingsPath(key),
.value = s.value(key),
};
assignableSettings.append(setting);
}
s.endGroup();
assignableSettings = readAssignableSettings(profileStr);
} else
profile = std::nullopt;

View File

@ -26,10 +26,12 @@ public:
explicit Settings(QWidget *parent = nullptr);
static SettingsData readSettings();
static SettingsData setAssignableSetting(SettingsData, AssignableSetting);
signals:
void cancelled();
void settingsSaved(SettingsData);
private:
static QVector<AssignableSetting> readAssignableSettings(QString profile);
SettingsData fromUIState();
void writeSettings(SettingsData);
void setUIState(SettingsData);