createBoolPtrMenuItem().tags/v2.0.0
@@ -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;} | ||||
); | ); | ||||
@@ -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)); | |||||
} | } | ||||
}; | }; | ||||
@@ -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)); | |||||
} | } | ||||
}; | }; | ||||
@@ -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();} | ||||
@@ -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)); | |||||
} | } | ||||
}; | }; | ||||
@@ -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);} | ||||
)); | )); | ||||
@@ -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();} | ||||
@@ -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)); | |||||
} | } | ||||
}; | }; | ||||