| @@ -526,38 +526,6 @@ struct CKD6Light : BASE { | |||
| }; | |||
| MenuItem* createIndexMenu(int* ptr, std::string name, std::vector<std::string> labels) { | |||
| struct IndexItem : MenuItem { | |||
| int* ptr; | |||
| int index; | |||
| void onAction(const event::Action& e) override { | |||
| *ptr = index; | |||
| } | |||
| }; | |||
| struct Item : MenuItem { | |||
| int* ptr; | |||
| std::vector<std::string> labels; | |||
| Menu* createChildMenu() override { | |||
| Menu* menu = new Menu(); | |||
| for (int i = 0; i < (int) labels.size(); i++) { | |||
| IndexItem* item = createMenuItem<IndexItem>(labels[i], CHECKMARK(*ptr == i)); | |||
| item->ptr = ptr; | |||
| item->index = i; | |||
| menu->addChild(item); | |||
| } | |||
| return menu; | |||
| } | |||
| }; | |||
| int index = *ptr; | |||
| std::string label = (0 <= index && index < (int) labels.size()) ? labels[index] : ""; | |||
| Item* item = createMenuItem<Item>(name, label); | |||
| item->ptr = ptr; | |||
| item->labels = labels; | |||
| return item; | |||
| } | |||
| struct MarblesWidget : ModuleWidget { | |||
| MarblesWidget(Marbles* module) { | |||
| setModule(module); | |||
| @@ -623,7 +591,7 @@ struct MarblesWidget : ModuleWidget { | |||
| menu->addChild(new MenuSeparator); | |||
| menu->addChild(createIndexMenu(&module->t_mode, "t mode", { | |||
| menu->addChild(createIndexMenuItem(&module->t_mode, "t mode", { | |||
| "Complementary Bernoulli", | |||
| "Clusters", | |||
| "Drums", | |||
| @@ -633,25 +601,25 @@ struct MarblesWidget : ModuleWidget { | |||
| "Markov", | |||
| })); | |||
| menu->addChild(createIndexMenu(&module->t_range, "t range", { | |||
| menu->addChild(createIndexMenuItem(&module->t_range, "t range", { | |||
| "1/4x", | |||
| "1x", | |||
| "4x", | |||
| })); | |||
| menu->addChild(createIndexMenu(&module->x_mode, "X mode", { | |||
| menu->addChild(createIndexMenuItem(&module->x_mode, "X mode", { | |||
| "Identical", | |||
| "Bump", | |||
| "Tilt", | |||
| })); | |||
| menu->addChild(createIndexMenu(&module->x_range, "X range", { | |||
| menu->addChild(createIndexMenuItem(&module->x_range, "X range", { | |||
| "Narrow", | |||
| "Positive", | |||
| "Full", | |||
| })); | |||
| menu->addChild(createIndexMenu(&module->x_scale, "Scales", { | |||
| menu->addChild(createIndexMenuItem(&module->x_scale, "Scales", { | |||
| "Major", | |||
| "Minor", | |||
| "Pentatonic", | |||
| @@ -660,14 +628,14 @@ struct MarblesWidget : ModuleWidget { | |||
| "Raag Shri", | |||
| })); | |||
| menu->addChild(createIndexMenu(&module->x_clock_source_internal, "Internal X clock source", { | |||
| menu->addChild(createIndexMenuItem(&module->x_clock_source_internal, "Internal X clock source", { | |||
| "T₁ → X₁, T₂ → X₂, T₃ → X₃", | |||
| "T₁ → X₁, X₂, X₃", | |||
| "T₂ → X₁, X₂, X₃", | |||
| "T₃ → X₁, X₂, X₃", | |||
| })); | |||
| menu->addChild(createIndexMenu(&module->y_divider_index, "Y divider ratio", { | |||
| menu->addChild(createIndexMenuItem(&module->y_divider_index, "Y divider ratio", { | |||
| "1/64", | |||
| "1/48", | |||
| "1/32", | |||