MCPcopy Create free account
hub / github.com/VCVRack/Rack / createIndexSubmenuItem

Function createIndexSubmenuItem

include/helpers.hpp:369–402  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

367*/
368template <class TMenuItem = ui::MenuItem>
369TMenuItem* createIndexSubmenuItem(std::string text, std::vector<std::string> labels, std::function<size_t()> getter, std::function<void(size_t val)> setter, bool disabled = false, bool alwaysConsume = false) {
370 struct Item : TMenuItem {
371 std::function<size_t()> getter;
372 std::function<void(size_t)> setter;
373 std::vector<std::string> labels;
374 bool alwaysConsume;
375
376 void step() override {
377 size_t currIndex = getter();
378 std::string label = (currIndex < labels.size()) ? labels[currIndex] : "";
379 this->rightText = label + " " + RIGHT_ARROW;
380 TMenuItem::step();
381 }
382 ui::Menu* createChildMenu() override {
383 ui::Menu* menu = new ui::Menu;
384 for (size_t i = 0; i < labels.size(); i++) {
385 menu->addChild(createCheckMenuItem(labels[i], "", [=]() {
386 return getter() == i;
387 }, [=]() {
388 setter(i);
389 }, false, alwaysConsume));
390 }
391 return menu;
392 }
393 };
394
395 Item* item = createMenuItem<Item>(text);
396 item->getter = getter;
397 item->setter = setter;
398 item->labels = labels;
399 item->disabled = disabled;
400 item->alwaysConsume = alwaysConsume;
401 return item;
402}
403
404
405/** Easy wrapper for createIndexSubmenuItem() that controls an integer index at a pointer address.

Callers 3

appendContextMenuMethod · 0.85
onActionMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected