From a7ece838f1998e1a615971ed23b4d50a3475f186 Mon Sep 17 00:00:00 2001 From: Zithia Satazaki Date: Tue, 29 Mar 2022 17:36:10 -0400 Subject: [PATCH] invert scrollwheel option (for knobs etc.); some magic to make config less annoying --- notes | 9 +--- xybrid/config/defaults.cpp | 1 + xybrid/config/uiconfig.h | 3 ++ xybrid/fileops-config.cpp | 76 +++++++++++++++++--------------- xybrid/settingsdialog.cpp | 3 +- xybrid/settingsdialog.ui | 9 +++- xybrid/ui/gadgets/knobgadget.cpp | 1 + 7 files changed, 58 insertions(+), 44 deletions(-) diff --git a/notes b/notes index 46101db..7bcd271 100644 --- a/notes +++ b/notes @@ -36,16 +36,11 @@ TODO { } more ui options for laptop stuff { - invert scrollwheel (knobs) + - invert scrollwheel (knobs) maybe scroll sensitivity } - - fix space on note or port column (previewing) generating an undo action - - make space preview on port column - - fix strut not working except to overwrite another param - - - add negate function to param columns - - multi select negate + add common oscillators to a nodelib header revert-to-saved menu action diff --git a/xybrid/config/defaults.cpp b/xybrid/config/defaults.cpp index 3f1a264..3713e9c 100644 --- a/xybrid/config/defaults.cpp +++ b/xybrid/config/defaults.cpp @@ -18,6 +18,7 @@ int AudioConfig::renderSampleRate = 48000; // UIConfig defaults bool UIConfig::verticalKnobs = false; +bool UIConfig::invertScrollWheel = false; // instantiate color scheme ColorScheme Xybrid::Config::colorScheme; diff --git a/xybrid/config/uiconfig.h b/xybrid/config/uiconfig.h index 8850fa1..410df39 100644 --- a/xybrid/config/uiconfig.h +++ b/xybrid/config/uiconfig.h @@ -4,5 +4,8 @@ namespace Xybrid::Config { namespace UIConfig { /// Determines if KnobGadgets turn with vertical mouse movement instead of horizontal. extern bool verticalKnobs; + + /// Controls if scroll wheel function is inverted for knobs, etc. + extern bool invertScrollWheel; } } diff --git a/xybrid/fileops-config.cpp b/xybrid/fileops-config.cpp index 2fda85c..e6a57b2 100644 --- a/xybrid/fileops-config.cpp +++ b/xybrid/fileops-config.cpp @@ -32,12 +32,28 @@ namespace FileOps = Xybrid::FileOps; using namespace Xybrid::Config; namespace { // utilities + struct _MapSaver { + QCborMap& root; + QString name; + QCborMap map; + + _MapSaver(QCborMap& root, const QString& name) : root(root), name(name) { } + ~_MapSaver() { + root[name] = map; + } + inline auto operator[](const QString& s) { return map[s]; } + }; + inline void load(QCborValueRef m, QString& v) { v = m.toString(v); } inline void load(QCborValueRef m, bool& v) { v = m.toBool(v); } inline void load(QCborValueRef m, int& v) { v = static_cast(m.toInteger(v)); } } -#define section(NAME) if (auto NAME = root[qs(#NAME)].toMap(); !NAME.isEmpty()) +#define lsection(NAME) if (auto _sec = root[qs(#NAME)].toMap(); !_sec.isEmpty()) +#define lvar(NS, NAME) load(_sec[qs(#NAME)], NS::NAME) + +#define ssection(NAME) if (_MapSaver _sec(root, qs(#NAME)) ; true) +#define svar(NS, NAME) _sec[qs(#NAME)] = NS::NAME void FileOps::loadConfig() { QFile file(Config::Directories::configFile); @@ -46,21 +62,22 @@ void FileOps::loadConfig() { auto root = QCborValue::fromCbor(read).toMap(); file.close(); - section(directories) { - load(directories[qs("projects")], Directories::projects); - load(directories[qs("presets")], Directories::presets); + lsection(directories) { + lvar(Directories, projects); + lvar(Directories, presets); } - section(ui) { - load(ui[qs("verticalKnobs")], UIConfig::verticalKnobs); + lsection(ui) { + lvar(UIConfig, verticalKnobs); + lvar(UIConfig, invertScrollWheel); } - section(audio) { - load(audio[qs("playbackSampleRate")], AudioConfig::playbackSampleRate); - load(audio[qs("playbackBufferMs")], AudioConfig::playbackBufferMs); - load(audio[qs("previewSampleRate")], AudioConfig::previewSampleRate); - load(audio[qs("previewBufferMs")], AudioConfig::previewBufferMs); - load(audio[qs("renderSampleRate")], AudioConfig::renderSampleRate); + lsection(audio) { + lvar(AudioConfig, playbackSampleRate); + lvar(AudioConfig, playbackBufferMs); + lvar(AudioConfig, previewSampleRate); + lvar(AudioConfig, previewBufferMs); + lvar(AudioConfig, renderSampleRate); } } @@ -79,33 +96,22 @@ void FileOps::saveConfig() { QCborMap root; - { - QCborMap dirs; - - dirs[qs("projects")] = Directories::projects; - dirs[qs("presets")] = Directories::presets; - - root[qs("directories")] = dirs; + ssection(directories) { + svar(Directories, projects); + svar(Directories, presets); } - { - QCborMap ui; - - ui[qs("verticalKnobs")] = UIConfig::verticalKnobs; - - root[qs("ui")] = ui; + ssection(ui) { + svar(UIConfig, verticalKnobs); + svar(UIConfig, invertScrollWheel); } - { - QCborMap audio; - - audio[qs("playbackSampleRate")] = AudioConfig::playbackSampleRate; - audio[qs("playbackBufferMs")] = AudioConfig::playbackBufferMs; - audio[qs("previewSampleRate")] = AudioConfig::previewSampleRate; - audio[qs("previewBufferMs")] = AudioConfig::previewBufferMs; - audio[qs("renderSampleRate")] = AudioConfig::renderSampleRate; - - root[qs("audio")] = audio; + ssection(audio) { + svar(AudioConfig, playbackSampleRate); + svar(AudioConfig, playbackBufferMs); + svar(AudioConfig, previewSampleRate); + svar(AudioConfig, previewBufferMs); + svar(AudioConfig, renderSampleRate); } // write out diff --git a/xybrid/settingsdialog.cpp b/xybrid/settingsdialog.cpp index fec8853..8a21c55 100644 --- a/xybrid/settingsdialog.cpp +++ b/xybrid/settingsdialog.cpp @@ -83,7 +83,8 @@ SettingsDialog::SettingsDialog(QWidget *parent) : bind(ui->renderSampleRate, AudioConfig::renderSampleRate, sampleRates); // UI page - bind(ui->checkVerticalKnobs, UIConfig::verticalKnobs); + bind(ui->verticalKnobs, UIConfig::verticalKnobs); + bind(ui->invertScrollWheel, UIConfig::invertScrollWheel); } SettingsDialog::~SettingsDialog() { diff --git a/xybrid/settingsdialog.ui b/xybrid/settingsdialog.ui index 31fe4e0..fa608a7 100644 --- a/xybrid/settingsdialog.ui +++ b/xybrid/settingsdialog.ui @@ -230,12 +230,19 @@ 4 - + Knobs scroll vertically + + + + Invert scroll wheel for knobs, sliders, etc. + + + diff --git a/xybrid/ui/gadgets/knobgadget.cpp b/xybrid/ui/gadgets/knobgadget.cpp index 7298931..1ecf9be 100644 --- a/xybrid/ui/gadgets/knobgadget.cpp +++ b/xybrid/ui/gadgets/knobgadget.cpp @@ -190,6 +190,7 @@ void KnobGadget::wheelEvent(QGraphicsSceneWheelEvent* e) { wAcc += e->delta(); auto d = accumulate(wAcc, 120); if (d == 0) return; // don't need to update anything if incomplete accumulation + if (UIConfig::invertScrollWheel) d *= -1; auto mod = e->modifiers(); if (highlighted) { // wheel while dragging