vertical knob option exists

master
zetaPRIME 2022-03-19 00:58:45 -04:00
parent 0f3da1f094
commit a3be1bded0
5 changed files with 117 additions and 19 deletions

3
notes
View File

@ -32,8 +32,7 @@ parameters {
TODO {
settings dialog {
actual window
menu action to open (single instance)
about-license info
}
ping-pong for delay

View File

@ -3,6 +3,7 @@
#include "uisocket.h"
#include "config/uistate.h"
#include "config/uiconfig.h"
#include <QDebug>
@ -29,6 +30,11 @@ namespace FileOps = Xybrid::FileOps;
using namespace Xybrid::Config;
namespace { // utilities
inline void load(QCborValueRef m, QString& v) { v = m.toString(v); }
inline void load(QCborValueRef m, bool& v) { v = m.toBool(v); }
}
void FileOps::loadConfig() {
QFile file(Config::Directories::configFile);
if (file.open(QFile::ReadOnly)) { // file exists! read in
@ -37,19 +43,23 @@ void FileOps::loadConfig() {
file.close();
if (auto dirs = root[qs("directories")].toMap(); !dirs.isEmpty()) {
if (auto s = dirs[qs("projects")].toString(); !s.isNull()) Config::Directories::projects = s;
if (auto s = dirs[qs("presets")].toString(); !s.isNull()) Config::Directories::presets = s;
load(dirs[qs("projects")], Directories::projects);
load(dirs[qs("presets")], Directories::presets);
}
if (auto ui = root[qs("ui")].toMap(); !ui.isEmpty()) {
load(ui[qs("verticalKnobs")], UIConfig::verticalKnobs);
}
}
// make sure directories exist
if (auto d = QDir(Config::Directories::projects); !d.exists()) d.mkpath(".");
if (auto d = QDir(Config::Directories::presets); !d.exists()) d.mkpath(".");
if (auto d = QDir(Directories::projects); !d.exists()) d.mkpath(".");
if (auto d = QDir(Directories::presets); !d.exists()) d.mkpath(".");
}
void FileOps::saveConfig() {
QFileInfo fi(Config::Directories::configFile);
QFileInfo fi(Directories::configFile);
fi.dir().mkpath("."); // make sure directory exists
QFile file(fi.filePath());
@ -60,12 +70,20 @@ void FileOps::saveConfig() {
{
QCborMap dirs;
dirs[qs("projects")] = Config::Directories::projects;
dirs[qs("presets")] = Config::Directories::presets;
dirs[qs("projects")] = Directories::projects;
dirs[qs("presets")] = Directories::presets;
root[qs("directories")] = dirs;
}
{
QCborMap ui;
ui[qs("verticalKnobs")] = UIConfig::verticalKnobs;
root[qs("ui")] = ui;
}
// write out
QCborStreamWriter w(&file);
root.toCborValue().toCbor(w);
@ -73,7 +91,7 @@ void FileOps::saveConfig() {
}
void FileOps::loadUIState() {
QFile file(Config::Directories::stateFile);
QFile file(Directories::stateFile);
if (file.open(QFile::ReadOnly)) { // file exists! read in
QCborStreamReader read(&file);
auto root = QCborValue::fromCbor(read).toMap();
@ -88,7 +106,7 @@ void FileOps::loadUIState() {
}
void FileOps::saveUIState() {
QFileInfo fi(Config::Directories::stateFile);
QFileInfo fi(Directories::stateFile);
fi.dir().mkpath("."); // make sure directory exists
QFile file(fi.filePath());

View File

@ -3,14 +3,37 @@
using namespace Xybrid;
#include <QDialogButtonBox>
#include <QPushButton>
#include "fileops.h"
#include "config/uiconfig.h"
using namespace Xybrid::Config;
SettingsDialog* SettingsDialog::instance = nullptr;
namespace {
std::vector<std::function<void()>>* bnd;
void bind(QCheckBox* o, bool& v) {
o->setChecked(v);
bnd->push_back([o, &v] {
v = o->isChecked();
});
}
}
SettingsDialog::SettingsDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::SettingsDialog) {
ui->setupUi(this);
connect(ui->buttonBox->button(QDialogButtonBox::Apply), &QPushButton::clicked, this, &SettingsDialog::apply);
instance = this;
bnd = &this->binds;
bind(ui->checkVerticalKnobs, UIConfig::verticalKnobs);
}
SettingsDialog::~SettingsDialog() {
@ -18,8 +41,15 @@ SettingsDialog::~SettingsDialog() {
delete ui;
}
void SettingsDialog::closeEvent(QCloseEvent *) {
void SettingsDialog::apply() {
for (auto& f : binds) f();
FileOps::saveConfig();
}
void SettingsDialog::reject() {
QDialog::reject();
if (instance == this) instance = nullptr;
deleteLater();
}
void SettingsDialog::tryOpen() {
@ -33,3 +63,4 @@ void SettingsDialog::tryOpen() {
}

View File

@ -2,6 +2,8 @@
#include <QDialog>
#include <functional>
namespace Ui {
class SettingsDialog;
}
@ -10,16 +12,21 @@ namespace Xybrid {
class SettingsDialog : public QDialog {
Q_OBJECT
std::vector<std::function<void()>> binds;
public:
static SettingsDialog* instance;
explicit SettingsDialog(QWidget *parent = nullptr);
~SettingsDialog() override;
void closeEvent(QCloseEvent*) override;
static void tryOpen();
public slots:
void apply();
void reject() override;
private:
Ui::SettingsDialog *ui;
};

View File

@ -32,16 +32,59 @@
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>1</number>
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<widget class="QWidget" name="tabUI">
<property name="minimumSize">
<size>
<width>642</width>
<height>0</height>
</size>
</property>
<attribute name="title">
<string>Tab 1</string>
<string>UI</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>4</number>
</property>
<property name="leftMargin">
<number>4</number>
</property>
<property name="topMargin">
<number>4</number>
</property>
<property name="rightMargin">
<number>4</number>
</property>
<property name="bottomMargin">
<number>4</number>
</property>
<item>
<widget class="QCheckBox" name="checkVerticalKnobs">
<property name="text">
<string>Knobs scroll vertically</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2">
<widget class="QWidget" name="tabAbout">
<attribute name="title">
<string>Tab 2</string>
<string>About</string>
</attribute>
</widget>
</widget>