KnobGadget: filter cutoff preset, boilerplate reduction macro :D

master
zetaPRIME 2022-03-20 04:49:19 -04:00
parent 0008997fe7
commit 79b1d9239f
4 changed files with 17 additions and 8 deletions

2
notes
View File

@ -40,7 +40,7 @@ TODO {
}
}
filter cutoff preset for knobgadget
- filter cutoff preset for knobgadget
revert-to-saved menu action

View File

@ -134,7 +134,7 @@ void SVF::onGadgetCreated() {
return qs("?");
};
(new KnobGadget(l))->bind(frequency)->setLabel(qs("Freq"))->setRange(0.0, 16000.0, 25.0, KnobGadget::NoStep, 1.0)->setDefault(6400.0);
KnobGadget::autoCutoff(l, frequency);
(new KnobGadget(l))->bind(resonance)->setLabel(qs("Res"))->setTextFunc(KnobGadget::textPercent)->setRange(0.0, 1.0, 0.01)->setDefault(0.0);
(new KnobGadget(l))->bind(mode)->setLabel(qs("Mode"))->setTextFunc(modetxt)->setRange(0, Notch, 1, KnobGadget::BigStep)->setDefault(0);
}

View File

@ -207,6 +207,7 @@ void KnobGadget::contextMenuEvent(QGraphicsSceneContextMenuEvent* e) {
QString KnobGadget::textPercent(double d) { return qs("%1%").arg(d*100); }
QString KnobGadget::textOffset(double d) { return (d > 0 ? qs("+%1") : qs("%1")).arg(d); }
QString KnobGadget::textFrequency(double d) { return qs("%1Hz").arg(d); }
QString KnobGadget::textGain(double d) { return (d > 0 ? qs("+%1dB") : qs("%1dB")).arg(d); }
QString KnobGadget::textBalance(double d) { return (d > 0 ? qs("+%1%") : qs("%1%")).arg(d*100); }

View File

@ -87,17 +87,25 @@ namespace Xybrid::UI {
static QString textPercent(double);
static QString textOffset(double);
static QString textFrequency(double);
static QString textGain(double);
static QString textBalance(double);
static void autoCreate(LayoutGadget*, NodeLib::ADSR&);
// common presets
static inline KnobGadget* autoGain(QGraphicsItem* p) { return (new KnobGadget(p))->setRange(-60, 12, .1)->setLabel("Gain")->setTextFunc(KnobGadget::textGain); }
template<typename T> static inline KnobGadget* autoGain(QGraphicsItem* p, T& v) { return autoGain(p)->bind(v); }
static inline KnobGadget* autoBalance(QGraphicsItem* p) { return (new KnobGadget(p))->setRange(-1.0, 1.0, .01)->setLabel("Balance")->setTextFunc(KnobGadget::textBalance); }
template<typename T> static inline KnobGadget* autoBalance(QGraphicsItem* p, T& v) { return autoBalance(p)->bind(v); }
};
// macro to vastly reduce boilerplate
#define preset(NAME) \
template<typename T> static inline KnobGadget* auto##NAME (QGraphicsItem* p, T& v) { return auto##NAME (p)->bind(v); } \
static inline KnobGadget* auto##NAME (QGraphicsItem* p)
// common presets
preset(Gain) { return (new KnobGadget(p))->setRange(-60, 12, .1)->setLabel("Gain")->setTextFunc(KnobGadget::textGain); }
preset(Balance) { return (new KnobGadget(p))->setRange(-1.0, 1.0, .01)->setLabel("Balance")->setTextFunc(KnobGadget::textBalance); }
preset(Cutoff) { return (new KnobGadget(p))->setRange(0, 16000, 10, NoStep, 1)->setLabel("Cutoff")->setTextFunc(KnobGadget::textFrequency); }
};
}
// keep this local
#undef preset