mirror of
https://github.com/Lurkki14/tuxclocker.git
synced 2025-02-25 18:55:24 -06:00
load assignable settings from profile on startup
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
#include <QString>
|
||||
#include <QTreeView>
|
||||
#include <QVector>
|
||||
#include <DeviceModelDelegate.hpp>
|
||||
#include <Globals.hpp>
|
||||
#include <Tree.hpp>
|
||||
#include <Utils.hpp>
|
||||
@@ -30,6 +31,7 @@ Q_DECLARE_METATYPE(TCDBus::FlatTreeNode<TCDBus::DeviceNode>)
|
||||
DeviceModel *Globals::g_deviceModel;
|
||||
QStackedWidget *Globals::g_mainStack;
|
||||
QWidget *Globals::g_deviceBrowser;
|
||||
SettingsData Globals::g_settingsData;
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
|
||||
qDBusRegisterMetaType<TCDBus::DeviceNode>();
|
||||
@@ -69,7 +71,9 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
|
||||
Globals::g_deviceBrowser = browser;
|
||||
Globals::g_deviceModel = model;
|
||||
Globals::g_mainStack = stack;
|
||||
Globals::g_settingsData = Settings::readSettings();
|
||||
|
||||
Utils::setModelAssignableSettings(*model, Globals::g_settingsData.assignableSettings);
|
||||
Utils::writeAssignableDefaults(*model);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include <AssignableProxy.hpp>
|
||||
#include <DeviceModel.hpp>
|
||||
#include <DeviceModelDelegate.hpp>
|
||||
#include <functional>
|
||||
#include <QDebug>
|
||||
#include <QSettings>
|
||||
@@ -45,6 +46,48 @@ void traverseModel(
|
||||
}
|
||||
}
|
||||
|
||||
std::optional<QModelIndex> fromAssignablePath(DeviceModel &model, NodePath path) {
|
||||
QModelIndex assIndex{};
|
||||
// Find index from assignable path
|
||||
auto cb = [&](auto model, auto index, int row) -> std::optional<QModelIndex> {
|
||||
auto ifaceIndex = model->index(row, DeviceModel::InterfaceColumn, index);
|
||||
auto assProxyV = ifaceIndex.data(DeviceModel::AssignableProxyRole);
|
||||
|
||||
if (assProxyV.isValid()) {
|
||||
auto assProxy = qvariant_cast<AssignableProxy *>(assProxyV);
|
||||
if (assProxy->dbusPath() == path) {
|
||||
assIndex = ifaceIndex;
|
||||
return std::nullopt;
|
||||
}
|
||||
}
|
||||
return model->index(row, DeviceModel::NameColumn, index);
|
||||
};
|
||||
traverseModel(cb, &model);
|
||||
|
||||
if (!assIndex.isValid()) {
|
||||
qWarning("Couldn't find assignable with path %s from model!", qPrintable(path));
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
return assIndex;
|
||||
}
|
||||
|
||||
// Write profile's assignable settings to model
|
||||
void setModelAssignableSettings(DeviceModel &model, QVector<AssignableSetting> settings) {
|
||||
QVector<AssignableDefaultData> assSettings;
|
||||
|
||||
for (auto &setting : settings) {
|
||||
auto index = fromAssignablePath(model, setting.assignablePath);
|
||||
if (index.has_value())
|
||||
assSettings.append(AssignableDefaultData{
|
||||
.index = index.value(),
|
||||
.defaultValue = setting.value,
|
||||
});
|
||||
}
|
||||
// TODO: misleading name when used here!
|
||||
DeviceModelDelegate::setAssignableDefaults(&model, assSettings);
|
||||
}
|
||||
|
||||
void writeAssignableDefaults(DeviceModel &model) {
|
||||
ModelTraverseCallback cb = [](QAbstractItemModel *model, QModelIndex index, int row) {
|
||||
auto ifaceIndex = model->index(row, DeviceModel::InterfaceColumn, index);
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include <DeviceModel.hpp>
|
||||
|
||||
class AssignableSetting;
|
||||
class SettingsData;
|
||||
|
||||
namespace Utils {
|
||||
@@ -18,5 +19,6 @@ void traverseModel(
|
||||
const ModelTraverseCallback &, QAbstractItemModel *, const QModelIndex &parent = QModelIndex());
|
||||
void writeAssignableDefaults(DeviceModel &model);
|
||||
void writeAssignableSetting(SettingsData, QVariant value, NodePath assignablePath);
|
||||
void setModelAssignableSettings(DeviceModel &model, QVector<AssignableSetting>);
|
||||
|
||||
} // namespace Utils
|
||||
|
||||
@@ -178,6 +178,7 @@ QStandardItem *DeviceModel::createAssignable(
|
||||
|
||||
if (success) {
|
||||
// Write successfully changed value to settings
|
||||
// TODO: parametrization won't be saved here
|
||||
Utils::writeAssignableSetting(
|
||||
Globals::g_settingsData, proxy->targetValue(), proxy->dbusPath());
|
||||
}
|
||||
|
||||
@@ -26,6 +26,8 @@ public:
|
||||
QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
|
||||
bool editorEvent(QEvent *, QAbstractItemModel *, const QStyleOptionViewItem &,
|
||||
const QModelIndex &) override;
|
||||
|
||||
static void setAssignableDefaults(QAbstractItemModel *, QVector<AssignableDefaultData>);
|
||||
protected:
|
||||
void paint(QPainter *painter, const QStyleOptionViewItem &option,
|
||||
const QModelIndex &index) const override;
|
||||
@@ -39,7 +41,6 @@ private:
|
||||
bool subtreeHasAssignableDefaults(QAbstractItemModel *, const QModelIndex &);
|
||||
QVector<AssignableDefaultData> subtreeAssignableDefaults(
|
||||
QAbstractItemModel *, const QModelIndex &);
|
||||
static void setAssignableDefaults(QAbstractItemModel *, QVector<AssignableDefaultData>);
|
||||
|
||||
FunctionEditor *m_functionEditor;
|
||||
QAction *m_parametrize;
|
||||
|
||||
@@ -9,8 +9,6 @@
|
||||
#include <QSettings>
|
||||
#include <Utils.hpp>
|
||||
|
||||
SettingsData Globals::g_settingsData;
|
||||
|
||||
Settings::Settings(QWidget *parent) : QWidget(parent) {
|
||||
qRegisterMetaTypeStreamOperators<QVector<QString>>("QVector<QString>>");
|
||||
|
||||
@@ -141,6 +139,7 @@ void Settings::writeSettings(SettingsData data) {
|
||||
}
|
||||
|
||||
SettingsData Settings::readSettings() {
|
||||
qRegisterMetaTypeStreamOperators<QVector<QString>>("QVector<QString>>");
|
||||
QSettings s{"tuxclocker"};
|
||||
|
||||
std::optional<QString> profile;
|
||||
|
||||
Reference in New Issue
Block a user