mirror of
https://github.com/Lurkki14/tuxclocker.git
synced 2024-11-25 01:30:18 -06:00
save assignable value when using profile
Not used yet. Currently works only for single values, not parametrization.
This commit is contained in:
parent
6ac81e1f13
commit
6717404a07
@ -1,5 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <Settings.hpp>
|
||||||
|
|
||||||
class DeviceModel;
|
class DeviceModel;
|
||||||
class QStackedWidget;
|
class QStackedWidget;
|
||||||
class QWidget;
|
class QWidget;
|
||||||
@ -11,5 +13,7 @@ namespace Globals {
|
|||||||
extern DeviceModel *g_deviceModel;
|
extern DeviceModel *g_deviceModel;
|
||||||
extern QStackedWidget *g_mainStack;
|
extern QStackedWidget *g_mainStack;
|
||||||
extern QWidget *g_deviceBrowser;
|
extern QWidget *g_deviceBrowser;
|
||||||
|
// When applying successfully, we need to know which profile to save changes to
|
||||||
|
extern SettingsData g_settingsData;
|
||||||
|
|
||||||
} // namespace Globals
|
} // namespace Globals
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
#include <Settings.hpp>
|
||||||
|
|
||||||
namespace Utils {
|
namespace Utils {
|
||||||
|
|
||||||
@ -77,4 +78,15 @@ void writeAssignableDefaults(DeviceModel &model) {
|
|||||||
traverseModel(cb, &model);
|
traverseModel(cb, &model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void writeAssignableSetting(SettingsData data, QVariant value, NodePath assignablePath) {
|
||||||
|
if (!data.currentProfile.has_value())
|
||||||
|
return;
|
||||||
|
|
||||||
|
QSettings settings{"tuxclocker"};
|
||||||
|
auto profile = data.currentProfile.value();
|
||||||
|
settings.beginGroup("profiles");
|
||||||
|
settings.beginGroup(profile);
|
||||||
|
settings.setValue(toSettingsPath(assignablePath), value);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Utils
|
} // namespace Utils
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
#include <DeviceModel.hpp>
|
#include <DeviceModel.hpp>
|
||||||
|
|
||||||
|
class SettingsData;
|
||||||
|
|
||||||
namespace Utils {
|
namespace Utils {
|
||||||
|
|
||||||
using ModelTraverseCallback =
|
using ModelTraverseCallback =
|
||||||
@ -15,5 +17,6 @@ QString toSettingsPath(NodePath);
|
|||||||
void traverseModel(
|
void traverseModel(
|
||||||
const ModelTraverseCallback &, QAbstractItemModel *, const QModelIndex &parent = QModelIndex());
|
const ModelTraverseCallback &, QAbstractItemModel *, const QModelIndex &parent = QModelIndex());
|
||||||
void writeAssignableDefaults(DeviceModel &model);
|
void writeAssignableDefaults(DeviceModel &model);
|
||||||
|
void writeAssignableSetting(SettingsData, QVariant value, NodePath assignablePath);
|
||||||
|
|
||||||
} // namespace Utils
|
} // namespace Utils
|
||||||
|
@ -20,7 +20,9 @@ public:
|
|||||||
void apply();
|
void apply();
|
||||||
// Stop connection and clear current connection
|
// Stop connection and clear current connection
|
||||||
void stopConnection();
|
void stopConnection();
|
||||||
|
// TODO: rename to setTargetValue for congruency
|
||||||
void setValue(QVariant v) { m_value = v; }
|
void setValue(QVariant v) { m_value = v; }
|
||||||
|
QVariant targetValue() { return m_value; }
|
||||||
std::optional<TC::Device::AssignmentArgument> currentValue();
|
std::optional<TC::Device::AssignmentArgument> currentValue();
|
||||||
QString dbusPath();
|
QString dbusPath();
|
||||||
signals:
|
signals:
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
#include "AssignableProxy.hpp"
|
#include "AssignableProxy.hpp"
|
||||||
#include "DynamicReadableProxy.hpp"
|
#include "DynamicReadableProxy.hpp"
|
||||||
#include <fplus/fplus.hpp>
|
#include <fplus/fplus.hpp>
|
||||||
|
#include <Globals.hpp>
|
||||||
|
#include <Utils.hpp>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QDBusReply>
|
#include <QDBusReply>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
@ -172,8 +174,16 @@ QStandardItem *DeviceModel::createAssignable(
|
|||||||
connect(proxy, &AssignableProxy::applied, [=](auto err) {
|
connect(proxy, &AssignableProxy::applied, [=](auto err) {
|
||||||
ifaceItem->applyTargetText();
|
ifaceItem->applyTargetText();
|
||||||
|
|
||||||
|
bool success = !err.has_value();
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
// Write successfully changed value to settings
|
||||||
|
Utils::writeAssignableSetting(
|
||||||
|
Globals::g_settingsData, proxy->targetValue(), proxy->dbusPath());
|
||||||
|
}
|
||||||
|
|
||||||
// Fade out result color
|
// Fade out result color
|
||||||
auto startColor = (err.has_value()) ? errorColor() : successColor();
|
auto startColor = !success ? errorColor() : successColor();
|
||||||
auto anim = new QVariantAnimation;
|
auto anim = new QVariantAnimation;
|
||||||
anim->setDuration(fadeOutTime());
|
anim->setDuration(fadeOutTime());
|
||||||
anim->setStartValue(startColor);
|
anim->setStartValue(startColor);
|
||||||
|
@ -58,6 +58,9 @@ 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,
|
||||||
|
[=](auto) { Globals::g_mainStack->setCurrentWidget(this); });
|
||||||
}
|
}
|
||||||
Globals::g_mainStack->setCurrentWidget(m_settings);
|
Globals::g_mainStack->setCurrentWidget(m_settings);
|
||||||
});
|
});
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
#include "Settings.hpp"
|
#include "Settings.hpp"
|
||||||
|
|
||||||
|
#include <Globals.hpp>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include <QGridLayout>
|
#include <QGridLayout>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QListWidget>
|
#include <QListWidget>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
|
#include <QSettings>
|
||||||
|
|
||||||
|
SettingsData Globals::g_settingsData;
|
||||||
|
|
||||||
Settings::Settings(QWidget *parent) : QWidget(parent) {
|
Settings::Settings(QWidget *parent) : QWidget(parent) {
|
||||||
auto layout = new QGridLayout{this};
|
auto layout = new QGridLayout{this};
|
||||||
@ -18,15 +22,15 @@ Settings::Settings(QWidget *parent) : QWidget(parent) {
|
|||||||
label->setFont(biggerPoint);
|
label->setFont(biggerPoint);
|
||||||
label->setText("Settings");
|
label->setText("Settings");
|
||||||
|
|
||||||
auto autoLoadCheck = new QCheckBox{"Apply profile settings automatically", this};
|
m_autoLoad = new QCheckBox{"Apply profile settings automatically", this};
|
||||||
|
|
||||||
auto profileCheck = new QCheckBox{"Use profile", this};
|
auto profileCheck = new QCheckBox{"Use profile", this};
|
||||||
|
|
||||||
// TODO: add delegate to make deleting a little nicer
|
// TODO: add delegate to make deleting a little nicer
|
||||||
auto profileView = new QListWidget{this};
|
m_profileView = new QListWidget{this};
|
||||||
auto triggers = QAbstractItemView::SelectedClicked | QAbstractItemView::EditKeyPressed;
|
auto triggers = QAbstractItemView::SelectedClicked | QAbstractItemView::EditKeyPressed;
|
||||||
profileView->setEditTriggers(triggers);
|
m_profileView->setEditTriggers(triggers);
|
||||||
profileView->setEnabled(false);
|
m_profileView->setEnabled(false);
|
||||||
|
|
||||||
auto addButton = new QPushButton{"Add profile"};
|
auto addButton = new QPushButton{"Add profile"};
|
||||||
addButton->setEnabled(false);
|
addButton->setEnabled(false);
|
||||||
@ -36,17 +40,17 @@ Settings::Settings(QWidget *parent) : QWidget(parent) {
|
|||||||
connect(addButton, &QPushButton::released, [=] {
|
connect(addButton, &QPushButton::released, [=] {
|
||||||
auto item = new QListWidgetItem{"Unnamed"};
|
auto item = new QListWidgetItem{"Unnamed"};
|
||||||
item->setFlags(item->flags() | Qt::ItemIsEditable);
|
item->setFlags(item->flags() | Qt::ItemIsEditable);
|
||||||
profileView->addItem(item);
|
m_profileView->addItem(item);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(removeButton, &QPushButton::released,
|
connect(removeButton, &QPushButton::released,
|
||||||
[=] { profileView->model()->removeRow(profileView->currentRow()); });
|
[=] { m_profileView->model()->removeRow(m_profileView->currentRow()); });
|
||||||
|
|
||||||
connect(profileCheck, &QCheckBox::stateChanged, [=](auto state) {
|
connect(profileCheck, &QCheckBox::stateChanged, [=](auto state) {
|
||||||
bool enable = (state == Qt::Unchecked) ? false : true;
|
bool enable = (state == Qt::Unchecked) ? false : true;
|
||||||
|
|
||||||
addButton->setEnabled(enable);
|
addButton->setEnabled(enable);
|
||||||
profileView->setEnabled(enable);
|
m_profileView->setEnabled(enable);
|
||||||
});
|
});
|
||||||
|
|
||||||
auto cancelButton = new QPushButton{"Cancel", this};
|
auto cancelButton = new QPushButton{"Cancel", this};
|
||||||
@ -55,10 +59,20 @@ Settings::Settings(QWidget *parent) : QWidget(parent) {
|
|||||||
|
|
||||||
auto saveButton = new QPushButton{"Save", this};
|
auto saveButton = new QPushButton{"Save", this};
|
||||||
|
|
||||||
|
connect(saveButton, &QPushButton::released, this, [=] {
|
||||||
|
// TODO: read assignableSettings from disk
|
||||||
|
auto settingsData = fromUIState();
|
||||||
|
writeSettings(fromUIState());
|
||||||
|
|
||||||
|
Globals::g_settingsData = settingsData;
|
||||||
|
|
||||||
|
emit settingsSaved(settingsData);
|
||||||
|
});
|
||||||
|
|
||||||
layout->addWidget(label, 0, 0, 1, 1, Qt::AlignLeft | Qt::AlignTop);
|
layout->addWidget(label, 0, 0, 1, 1, Qt::AlignLeft | Qt::AlignTop);
|
||||||
layout->addWidget(autoLoadCheck, 1, 0, 1, 1, Qt::AlignLeft);
|
layout->addWidget(m_autoLoad, 1, 0, 1, 1, Qt::AlignLeft);
|
||||||
layout->addWidget(profileCheck, 2, 0, 1, 1, Qt::AlignLeft);
|
layout->addWidget(profileCheck, 2, 0, 1, 1, Qt::AlignLeft);
|
||||||
layout->addWidget(profileView, 2, 1, 1, 2);
|
layout->addWidget(m_profileView, 2, 1, 1, 2);
|
||||||
layout->addWidget(addButton, 3, 1);
|
layout->addWidget(addButton, 3, 1);
|
||||||
layout->addWidget(removeButton, 3, 2);
|
layout->addWidget(removeButton, 3, 2);
|
||||||
layout->addWidget(cancelButton, 4, 0, 1, 1, Qt::AlignBottom);
|
layout->addWidget(cancelButton, 4, 0, 1, 1, Qt::AlignBottom);
|
||||||
@ -66,3 +80,29 @@ Settings::Settings(QWidget *parent) : QWidget(parent) {
|
|||||||
|
|
||||||
this->setLayout(layout);
|
this->setLayout(layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SettingsData Settings::fromUIState() {
|
||||||
|
std::optional<QString> currentProfile = std::nullopt;
|
||||||
|
|
||||||
|
auto data = m_profileView->currentItem()->data(Qt::DisplayRole);
|
||||||
|
if (data.isValid())
|
||||||
|
currentProfile = data.toString();
|
||||||
|
|
||||||
|
return SettingsData{
|
||||||
|
.autoApplyProfile = m_autoLoad->isChecked(),
|
||||||
|
.currentProfile = currentProfile,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void Settings::writeSettings(SettingsData data) {
|
||||||
|
bool usingProfile = data.currentProfile.has_value() ? true : false;
|
||||||
|
|
||||||
|
QSettings settings{"tuxclocker"};
|
||||||
|
settings.beginGroup("general");
|
||||||
|
|
||||||
|
settings.setValue("autoApplyProfile", data.autoApplyProfile);
|
||||||
|
settings.setValue("usingProfile", usingProfile);
|
||||||
|
|
||||||
|
if (usingProfile)
|
||||||
|
settings.setValue("currentProfile", data.currentProfile.value());
|
||||||
|
}
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
#include <QVariant>
|
#include <QVariant>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
|
class QCheckBox;
|
||||||
|
class QListWidget;
|
||||||
|
|
||||||
// TODO: duplicate definition
|
// TODO: duplicate definition
|
||||||
struct AssignableSetting {
|
struct AssignableSetting {
|
||||||
QString assignablePath;
|
QString assignablePath;
|
||||||
@ -21,6 +24,14 @@ public:
|
|||||||
explicit Settings(QWidget *parent = nullptr);
|
explicit Settings(QWidget *parent = nullptr);
|
||||||
signals:
|
signals:
|
||||||
void cancelled();
|
void cancelled();
|
||||||
|
void settingsSaved(SettingsData);
|
||||||
private:
|
private:
|
||||||
|
SettingsData fromUIState();
|
||||||
|
void writeSettings(SettingsData);
|
||||||
|
|
||||||
|
QCheckBox *m_autoLoad;
|
||||||
|
QCheckBox *m_useProfile;
|
||||||
|
QListWidget *m_profileView;
|
||||||
|
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user