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 {
|
||||
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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<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() {
|
||||
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
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -230,12 +230,19 @@
|
|||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkVerticalKnobs">
|
||||
<widget class="QCheckBox" name="verticalKnobs">
|
||||
<property name="text">
|
||||
<string>Knobs scroll vertically</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="invertScrollWheel">
|
||||
<property name="text">
|
||||
<string>Invert scroll wheel for knobs, sliders, etc.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue