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

View File

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

View File

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