invert scrollwheel option (for knobs etc.); some magic to make config less annoying
parent
ab811c363c
commit
a7ece838f1
9
notes
9
notes
|
@ -36,16 +36,11 @@ TODO {
|
||||||
}
|
}
|
||||||
|
|
||||||
more ui options for laptop stuff {
|
more ui options for laptop stuff {
|
||||||
invert scrollwheel (knobs)
|
- invert scrollwheel (knobs)
|
||||||
maybe scroll sensitivity
|
maybe scroll sensitivity
|
||||||
}
|
}
|
||||||
|
|
||||||
- fix space on note or port column (previewing) generating an undo action
|
add common oscillators to a nodelib header
|
||||||
- make space preview on port column
|
|
||||||
- fix strut not working except to overwrite another param
|
|
||||||
|
|
||||||
- add negate function to param columns
|
|
||||||
- multi select negate
|
|
||||||
|
|
||||||
revert-to-saved menu action
|
revert-to-saved menu action
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ int AudioConfig::renderSampleRate = 48000;
|
||||||
|
|
||||||
// UIConfig defaults
|
// UIConfig defaults
|
||||||
bool UIConfig::verticalKnobs = false;
|
bool UIConfig::verticalKnobs = false;
|
||||||
|
bool UIConfig::invertScrollWheel = false;
|
||||||
|
|
||||||
// instantiate color scheme
|
// instantiate color scheme
|
||||||
ColorScheme Xybrid::Config::colorScheme;
|
ColorScheme Xybrid::Config::colorScheme;
|
||||||
|
|
|
@ -4,5 +4,8 @@ namespace Xybrid::Config {
|
||||||
namespace UIConfig {
|
namespace UIConfig {
|
||||||
/// Determines if KnobGadgets turn with vertical mouse movement instead of horizontal.
|
/// Determines if KnobGadgets turn with vertical mouse movement instead of horizontal.
|
||||||
extern bool verticalKnobs;
|
extern bool verticalKnobs;
|
||||||
|
|
||||||
|
/// Controls if scroll wheel function is inverted for knobs, etc.
|
||||||
|
extern bool invertScrollWheel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,12 +32,28 @@ namespace FileOps = Xybrid::FileOps;
|
||||||
using namespace Xybrid::Config;
|
using namespace Xybrid::Config;
|
||||||
|
|
||||||
namespace { // utilities
|
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, QString& v) { v = m.toString(v); }
|
||||||
inline void load(QCborValueRef m, bool& v) { v = m.toBool(v); }
|
inline void load(QCborValueRef m, bool& v) { v = m.toBool(v); }
|
||||||
inline void load(QCborValueRef m, int& v) { v = static_cast<int>(m.toInteger(v)); }
|
inline void load(QCborValueRef m, int& v) { v = static_cast<int>(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() {
|
void FileOps::loadConfig() {
|
||||||
QFile file(Config::Directories::configFile);
|
QFile file(Config::Directories::configFile);
|
||||||
|
@ -46,21 +62,22 @@ void FileOps::loadConfig() {
|
||||||
auto root = QCborValue::fromCbor(read).toMap();
|
auto root = QCborValue::fromCbor(read).toMap();
|
||||||
file.close();
|
file.close();
|
||||||
|
|
||||||
section(directories) {
|
lsection(directories) {
|
||||||
load(directories[qs("projects")], Directories::projects);
|
lvar(Directories, projects);
|
||||||
load(directories[qs("presets")], Directories::presets);
|
lvar(Directories, presets);
|
||||||
}
|
}
|
||||||
|
|
||||||
section(ui) {
|
lsection(ui) {
|
||||||
load(ui[qs("verticalKnobs")], UIConfig::verticalKnobs);
|
lvar(UIConfig, verticalKnobs);
|
||||||
|
lvar(UIConfig, invertScrollWheel);
|
||||||
}
|
}
|
||||||
|
|
||||||
section(audio) {
|
lsection(audio) {
|
||||||
load(audio[qs("playbackSampleRate")], AudioConfig::playbackSampleRate);
|
lvar(AudioConfig, playbackSampleRate);
|
||||||
load(audio[qs("playbackBufferMs")], AudioConfig::playbackBufferMs);
|
lvar(AudioConfig, playbackBufferMs);
|
||||||
load(audio[qs("previewSampleRate")], AudioConfig::previewSampleRate);
|
lvar(AudioConfig, previewSampleRate);
|
||||||
load(audio[qs("previewBufferMs")], AudioConfig::previewBufferMs);
|
lvar(AudioConfig, previewBufferMs);
|
||||||
load(audio[qs("renderSampleRate")], AudioConfig::renderSampleRate);
|
lvar(AudioConfig, renderSampleRate);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -79,33 +96,22 @@ void FileOps::saveConfig() {
|
||||||
|
|
||||||
QCborMap root;
|
QCborMap root;
|
||||||
|
|
||||||
{
|
ssection(directories) {
|
||||||
QCborMap dirs;
|
svar(Directories, projects);
|
||||||
|
svar(Directories, presets);
|
||||||
dirs[qs("projects")] = Directories::projects;
|
|
||||||
dirs[qs("presets")] = Directories::presets;
|
|
||||||
|
|
||||||
root[qs("directories")] = dirs;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
ssection(ui) {
|
||||||
QCborMap ui;
|
svar(UIConfig, verticalKnobs);
|
||||||
|
svar(UIConfig, invertScrollWheel);
|
||||||
ui[qs("verticalKnobs")] = UIConfig::verticalKnobs;
|
|
||||||
|
|
||||||
root[qs("ui")] = ui;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
ssection(audio) {
|
||||||
QCborMap audio;
|
svar(AudioConfig, playbackSampleRate);
|
||||||
|
svar(AudioConfig, playbackBufferMs);
|
||||||
audio[qs("playbackSampleRate")] = AudioConfig::playbackSampleRate;
|
svar(AudioConfig, previewSampleRate);
|
||||||
audio[qs("playbackBufferMs")] = AudioConfig::playbackBufferMs;
|
svar(AudioConfig, previewBufferMs);
|
||||||
audio[qs("previewSampleRate")] = AudioConfig::previewSampleRate;
|
svar(AudioConfig, renderSampleRate);
|
||||||
audio[qs("previewBufferMs")] = AudioConfig::previewBufferMs;
|
|
||||||
audio[qs("renderSampleRate")] = AudioConfig::renderSampleRate;
|
|
||||||
|
|
||||||
root[qs("audio")] = audio;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// write out
|
// write out
|
||||||
|
|
|
@ -83,7 +83,8 @@ SettingsDialog::SettingsDialog(QWidget *parent) :
|
||||||
bind(ui->renderSampleRate, AudioConfig::renderSampleRate, sampleRates);
|
bind(ui->renderSampleRate, AudioConfig::renderSampleRate, sampleRates);
|
||||||
|
|
||||||
// UI page
|
// UI page
|
||||||
bind(ui->checkVerticalKnobs, UIConfig::verticalKnobs);
|
bind(ui->verticalKnobs, UIConfig::verticalKnobs);
|
||||||
|
bind(ui->invertScrollWheel, UIConfig::invertScrollWheel);
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsDialog::~SettingsDialog() {
|
SettingsDialog::~SettingsDialog() {
|
||||||
|
|
|
@ -230,12 +230,19 @@
|
||||||
<number>4</number>
|
<number>4</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="checkVerticalKnobs">
|
<widget class="QCheckBox" name="verticalKnobs">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Knobs scroll vertically</string>
|
<string>Knobs scroll vertically</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="invertScrollWheel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Invert scroll wheel for knobs, sliders, etc.</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="verticalSpacer">
|
<spacer name="verticalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
|
|
@ -190,6 +190,7 @@ void KnobGadget::wheelEvent(QGraphicsSceneWheelEvent* e) {
|
||||||
wAcc += e->delta();
|
wAcc += e->delta();
|
||||||
auto d = accumulate(wAcc, 120);
|
auto d = accumulate(wAcc, 120);
|
||||||
if (d == 0) return; // don't need to update anything if incomplete accumulation
|
if (d == 0) return; // don't need to update anything if incomplete accumulation
|
||||||
|
if (UIConfig::invertScrollWheel) d *= -1;
|
||||||
|
|
||||||
auto mod = e->modifiers();
|
auto mod = e->modifiers();
|
||||||
if (highlighted) { // wheel while dragging
|
if (highlighted) { // wheel while dragging
|
||||||
|
|
Loading…
Reference in New Issue