Browse Source

Add rightText to createCheckMenuItem(), createBoolMenuItem(), and

createBoolPtrMenuItem().
tags/v2.0.0
Andrew Belt 3 years ago
parent
commit
681b76708e
8 changed files with 38 additions and 24 deletions
  1. +20
    -6
      include/helpers.hpp
  2. +6
    -6
      src/app/MenuBar.cpp
  3. +2
    -2
      src/core/AudioInterface.cpp
  4. +1
    -1
      src/core/CV_Gate.cpp
  5. +3
    -3
      src/core/MIDI_CC.cpp
  6. +3
    -3
      src/core/MIDI_CV.cpp
  7. +2
    -2
      src/core/MIDI_Gate.cpp
  8. +1
    -1
      src/core/MIDI_Map.cpp

+ 20
- 6
include/helpers.hpp View File

@@ -239,14 +239,20 @@ Example:
)); ));
*/ */
template <class TMenuItem = ui::MenuItem> template <class TMenuItem = ui::MenuItem>
ui::MenuItem* createCheckMenuItem(std::string text, std::function<bool()> checked, std::function<void()> action, bool disabled = false, bool alwaysConsume = false) {
ui::MenuItem* createCheckMenuItem(std::string text, std::string rightText, std::function<bool()> checked, std::function<void()> action, bool disabled = false, bool alwaysConsume = false) {
struct Item : TMenuItem { struct Item : TMenuItem {
std::string rightTextPrefix;
std::function<bool()> checked; std::function<bool()> checked;
std::function<void()> action; std::function<void()> action;
bool alwaysConsume; bool alwaysConsume;


void step() override { void step() override {
this->rightText = CHECKMARK(checked());
this->rightText = rightTextPrefix;
if (checked()) {
if (!rightTextPrefix.empty())
this->rightText += " ";
this->rightText += CHECKMARK_STRING;
}
TMenuItem::step(); TMenuItem::step();
} }
void onAction(const event::Action& e) override { void onAction(const event::Action& e) override {
@@ -257,6 +263,7 @@ ui::MenuItem* createCheckMenuItem(std::string text, std::function<bool()> checke
}; };


Item* item = createMenuItem<Item>(text); Item* item = createMenuItem<Item>(text);
item->rightTextPrefix = rightText;
item->checked = checked; item->checked = checked;
item->action = action; item->action = action;
item->disabled = disabled; item->disabled = disabled;
@@ -278,14 +285,20 @@ Example:
)); ));
*/ */
template <class TMenuItem = ui::MenuItem> template <class TMenuItem = ui::MenuItem>
ui::MenuItem* createBoolMenuItem(std::string text, std::function<bool()> getter, std::function<void(bool state)> setter, bool disabled = false, bool alwaysConsume = false) {
ui::MenuItem* createBoolMenuItem(std::string text, std::string rightText, std::function<bool()> getter, std::function<void(bool state)> setter, bool disabled = false, bool alwaysConsume = false) {
struct Item : TMenuItem { struct Item : TMenuItem {
std::string rightTextPrefix;
std::function<bool()> getter; std::function<bool()> getter;
std::function<void(size_t)> setter; std::function<void(size_t)> setter;
bool alwaysConsume; bool alwaysConsume;


void step() override { void step() override {
this->rightText = CHECKMARK(getter());
this->rightText = rightTextPrefix;
if (getter()) {
if (!rightTextPrefix.empty())
this->rightText += " ";
this->rightText += CHECKMARK_STRING;
}
TMenuItem::step(); TMenuItem::step();
} }
void onAction(const event::Action& e) override { void onAction(const event::Action& e) override {
@@ -296,6 +309,7 @@ ui::MenuItem* createBoolMenuItem(std::string text, std::function<bool()> getter,
}; };


Item* item = createMenuItem<Item>(text); Item* item = createMenuItem<Item>(text);
item->rightTextPrefix = rightText;
item->getter = getter; item->getter = getter;
item->setter = setter; item->setter = setter;
item->disabled = disabled; item->disabled = disabled;
@@ -310,8 +324,8 @@ Example:
menu->addChild(createBoolPtrMenuItem("Loop", &module->loop)); menu->addChild(createBoolPtrMenuItem("Loop", &module->loop));
*/ */
template <typename T> template <typename T>
ui::MenuItem* createBoolPtrMenuItem(std::string text, T* ptr) {
return createBoolMenuItem(text,
ui::MenuItem* createBoolPtrMenuItem(std::string text, std::string rightText, T* ptr) {
return createBoolMenuItem(text, rightText,
[=]() {return *ptr;}, [=]() {return *ptr;},
[=](T val) {*ptr = val;} [=](T val) {*ptr = val;}
); );


+ 6
- 6
src/app/MenuBar.cpp View File

@@ -383,7 +383,7 @@ struct ViewButton : MenuButton {
menu->cornerFlags = BND_CORNER_TOP; menu->cornerFlags = BND_CORNER_TOP;
menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y));


menu->addChild(createBoolPtrMenuItem("Show tooltips", &settings::tooltips));
menu->addChild(createBoolPtrMenuItem("Show tooltips", "", &settings::tooltips));


ZoomSlider* zoomSlider = new ZoomSlider; ZoomSlider* zoomSlider = new ZoomSlider;
zoomSlider->box.size.x = 250.0; zoomSlider->box.size.x = 250.0;
@@ -409,7 +409,7 @@ struct ViewButton : MenuButton {
menu->addChild(createSubmenuItem("Frame rate", string::f("%.0f Hz", frameRate), [=](ui::Menu* menu) { menu->addChild(createSubmenuItem("Frame rate", string::f("%.0f Hz", frameRate), [=](ui::Menu* menu) {
for (int i = 1; i <= 6; i++) { for (int i = 1; i <= 6; i++) {
double frameRate = APP->window->getMonitorRefreshRate() / i; double frameRate = APP->window->getMonitorRefreshRate() / i;
menu->addChild(createCheckMenuItem(string::f("%.0f Hz", frameRate),
menu->addChild(createCheckMenuItem(string::f("%.0f Hz", frameRate), "",
[=]() {return settings::frameSwapInterval == i;}, [=]() {return settings::frameSwapInterval == i;},
[=]() {settings::frameSwapInterval = i;} [=]() {settings::frameSwapInterval = i;}
)); ));
@@ -426,7 +426,7 @@ struct ViewButton : MenuButton {


menu->addChild(new ui::MenuSeparator); menu->addChild(new ui::MenuSeparator);


menu->addChild(createBoolPtrMenuItem("Hide cursor while dragging", &settings::allowCursorLock));
menu->addChild(createBoolPtrMenuItem("Hide cursor while dragging", "", &settings::allowCursorLock));


static const std::vector<std::string> knobModeLabels = { static const std::vector<std::string> knobModeLabels = {
"Linear", "Linear",
@@ -437,20 +437,20 @@ struct ViewButton : MenuButton {
static const std::vector<int> knobModes = {0, 2, 3}; static const std::vector<int> knobModes = {0, 2, 3};
menu->addChild(createSubmenuItem("Knob mode", knobModeLabels[settings::knobMode], [=](ui::Menu* menu) { menu->addChild(createSubmenuItem("Knob mode", knobModeLabels[settings::knobMode], [=](ui::Menu* menu) {
for (int knobMode : knobModes) { for (int knobMode : knobModes) {
menu->addChild(createCheckMenuItem(knobModeLabels[knobMode],
menu->addChild(createCheckMenuItem(knobModeLabels[knobMode], "",
[=]() {return settings::knobMode == knobMode;}, [=]() {return settings::knobMode == knobMode;},
[=]() {settings::knobMode = (settings::KnobMode) knobMode;} [=]() {settings::knobMode = (settings::KnobMode) knobMode;}
)); ));
} }
})); }));


menu->addChild(createBoolPtrMenuItem("Scroll wheel knob control", &settings::knobScroll));
menu->addChild(createBoolPtrMenuItem("Scroll wheel knob control", "", &settings::knobScroll));


KnobScrollSensitivitySlider* knobScrollSensitivitySlider = new KnobScrollSensitivitySlider; KnobScrollSensitivitySlider* knobScrollSensitivitySlider = new KnobScrollSensitivitySlider;
knobScrollSensitivitySlider->box.size.x = 250.0; knobScrollSensitivitySlider->box.size.x = 250.0;
menu->addChild(knobScrollSensitivitySlider); menu->addChild(knobScrollSensitivitySlider);


menu->addChild(createBoolPtrMenuItem("Lock module positions", &settings::lockModules));
menu->addChild(createBoolPtrMenuItem("Lock module positions", "", &settings::lockModules));
} }
}; };




+ 2
- 2
src/core/AudioInterface.cpp View File

@@ -561,12 +561,12 @@ struct AudioInterfaceWidget : ModuleWidget {


menu->addChild(new MenuSeparator); menu->addChild(new MenuSeparator);


menu->addChild(createCheckMenuItem("Master audio module",
menu->addChild(createCheckMenuItem("Master audio module", "",
[=]() {return module->isMaster();}, [=]() {return module->isMaster();},
[=]() {module->setMaster();} [=]() {module->setMaster();}
)); ));


menu->addChild(createBoolPtrMenuItem("DC blocker", &module->dcFilterEnabled));
menu->addChild(createBoolPtrMenuItem("DC blocker", "", &module->dcFilterEnabled));
} }
}; };




+ 1
- 1
src/core/CV_Gate.cpp View File

@@ -202,7 +202,7 @@ struct CV_GateWidget : ModuleWidget {


menu->addChild(new MenuSeparator); menu->addChild(new MenuSeparator);


menu->addChild(createBoolPtrMenuItem("Velocity mode", &module->velocityMode));
menu->addChild(createBoolPtrMenuItem("Velocity mode", "", &module->velocityMode));


menu->addChild(createMenuItem("Panic", "", menu->addChild(createMenuItem("Panic", "",
[=]() {module->midiOutput.panic();} [=]() {module->midiOutput.panic();}


+ 3
- 3
src/core/MIDI_CC.cpp View File

@@ -251,11 +251,11 @@ struct MIDI_CCWidget : ModuleWidget {


menu->addChild(new MenuSeparator); menu->addChild(new MenuSeparator);


menu->addChild(createBoolPtrMenuItem("Smooth CC", &module->smooth));
menu->addChild(createBoolPtrMenuItem("Smooth CC", "", &module->smooth));


menu->addChild(createBoolPtrMenuItem("MPE mode", &module->mpeMode));
menu->addChild(createBoolPtrMenuItem("MPE mode", "", &module->mpeMode));


menu->addChild(createBoolPtrMenuItem("CC 0-31 controls are 14-bit", &module->lsbMode));
menu->addChild(createBoolPtrMenuItem("CC 0-31 controls are 14-bit", "", &module->lsbMode));
} }
}; };




+ 3
- 3
src/core/MIDI_CV.cpp View File

@@ -506,7 +506,7 @@ struct MIDI_CVWidget : ModuleWidget {


menu->addChild(new MenuSeparator); menu->addChild(new MenuSeparator);


menu->addChild(createBoolPtrMenuItem("Smooth pitch/mod wheel", &module->smooth));
menu->addChild(createBoolPtrMenuItem("Smooth pitch/mod wheel", "", &module->smooth));


static const std::vector<int> clockDivisions = {24 * 4, 24 * 2, 24, 24 / 2, 24 / 4, 24 / 8, 2, 1}; static const std::vector<int> clockDivisions = {24 * 4, 24 * 2, 24, 24 / 2, 24 / 4, 24 / 8, 2, 1};
static const std::vector<std::string> clockDivisionLabels = {"Whole", "Half", "Quarter", "8th", "16th", "32nd", "12 PPQN", "24 PPQN"}; static const std::vector<std::string> clockDivisionLabels = {"Whole", "Half", "Quarter", "8th", "16th", "32nd", "12 PPQN", "24 PPQN"};
@@ -515,7 +515,7 @@ struct MIDI_CVWidget : ModuleWidget {
Menu* createChildMenu() override { Menu* createChildMenu() override {
Menu* menu = new Menu; Menu* menu = new Menu;
for (size_t i = 0; i < clockDivisions.size(); i++) { for (size_t i = 0; i < clockDivisions.size(); i++) {
menu->addChild(createCheckMenuItem(clockDivisionLabels[i],
menu->addChild(createCheckMenuItem(clockDivisionLabels[i], "",
[=]() {return module->clockDivision == clockDivisions[i];}, [=]() {return module->clockDivision == clockDivisions[i];},
[=]() {module->clockDivision = clockDivisions[i];} [=]() {module->clockDivision = clockDivisions[i];}
)); ));
@@ -534,7 +534,7 @@ struct MIDI_CVWidget : ModuleWidget {
Menu* createChildMenu() override { Menu* createChildMenu() override {
Menu* menu = new Menu; Menu* menu = new Menu;
for (int c = 1; c <= 16; c++) { for (int c = 1; c <= 16; c++) {
menu->addChild(createCheckMenuItem((c == 1) ? "Monophonic" : string::f("%d", c),
menu->addChild(createCheckMenuItem((c == 1) ? "Monophonic" : string::f("%d", c), "",
[=]() {return module->channels == c;}, [=]() {return module->channels == c;},
[=]() {module->setChannels(c);} [=]() {module->setChannels(c);}
)); ));


+ 2
- 2
src/core/MIDI_Gate.cpp View File

@@ -219,9 +219,9 @@ struct MIDI_GateWidget : ModuleWidget {


menu->addChild(new MenuSeparator); menu->addChild(new MenuSeparator);


menu->addChild(createBoolPtrMenuItem("Velocity mode", &module->velocityMode));
menu->addChild(createBoolPtrMenuItem("Velocity mode", "", &module->velocityMode));


menu->addChild(createBoolPtrMenuItem("MPE mode", &module->mpeMode));
menu->addChild(createBoolPtrMenuItem("MPE mode", "", &module->mpeMode));


menu->addChild(createMenuItem("Panic", "", menu->addChild(createMenuItem("Panic", "",
[=]() {module->panic();} [=]() {module->panic();}


+ 1
- 1
src/core/MIDI_Map.cpp View File

@@ -492,7 +492,7 @@ struct MIDI_MapWidget : ModuleWidget {


menu->addChild(new MenuSeparator); menu->addChild(new MenuSeparator);


menu->addChild(createBoolPtrMenuItem("Smooth CC", &module->smooth));
menu->addChild(createBoolPtrMenuItem("Smooth CC", "", &module->smooth));
} }
}; };




Loading…
Cancel
Save