vertical knob option exists
parent
0f3da1f094
commit
a3be1bded0
3
notes
3
notes
|
@ -32,8 +32,7 @@ parameters {
|
|||
|
||||
TODO {
|
||||
settings dialog {
|
||||
actual window
|
||||
menu action to open (single instance)
|
||||
about-license info
|
||||
}
|
||||
|
||||
ping-pong for delay
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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() {
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue