Browse Source

Use menu item helpers for Elements and Rings.

pull/114/head
Andrew Belt 3 years ago
parent
commit
a3ee3166ba
2 changed files with 40 additions and 52 deletions
  1. +17
    -20
      src/Elements.cpp
  2. +23
    -32
      src/Rings.cpp

+ 17
- 20
src/Elements.cpp View File

@@ -288,19 +288,6 @@ struct Elements : Module {
}; };




struct ElementsModalItem : MenuItem {
Elements* elements;
int model;
void onAction(const event::Action& e) override {
elements->setModel(model);
}
void step() override {
rightText = CHECKMARK(elements->getModel() == model);
MenuItem::step();
}
};


struct ElementsWidget : ModuleWidget { struct ElementsWidget : ModuleWidget {
ElementsWidget(Elements* module) { ElementsWidget(Elements* module) {
setModule(module); setModule(module);
@@ -380,15 +367,25 @@ struct ElementsWidget : ModuleWidget {
} }


void appendContextMenu(Menu* menu) override { void appendContextMenu(Menu* menu) override {
Elements* elements = dynamic_cast<Elements*>(module);
assert(elements);
Elements* module = dynamic_cast<Elements*>(this->module);
assert(module);


menu->addChild(new MenuSeparator); menu->addChild(new MenuSeparator);
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Alternative models"));
menu->addChild(construct<ElementsModalItem>(&MenuItem::text, "Original", &ElementsModalItem::elements, elements, &ElementsModalItem::model, 0));
menu->addChild(construct<ElementsModalItem>(&MenuItem::text, "Non-linear string", &ElementsModalItem::elements, elements, &ElementsModalItem::model, 1));
menu->addChild(construct<ElementsModalItem>(&MenuItem::text, "Chords", &ElementsModalItem::elements, elements, &ElementsModalItem::model, 2));
menu->addChild(construct<ElementsModalItem>(&MenuItem::text, "Ominous voice", &ElementsModalItem::elements, elements, &ElementsModalItem::model, -1));

menu->addChild(createMenuLabel("Models"));

static const std::vector<std::string> modelLabels = {
"Original",
"Non-linear string",
"Chords",
"Ominous voice",
};
for (int i = 0; i < 4; i++) {
menu->addChild(createCheckMenuItem(modelLabels[i],
[=]() {return module->getModel() == i;},
[=]() {module->setModel(i);}
));
}
} }
}; };




+ 23
- 32
src/Rings.cpp View File

@@ -290,43 +290,34 @@ struct RingsWidget : ModuleWidget {
} }


void appendContextMenu(Menu* menu) override { void appendContextMenu(Menu* menu) override {
Rings* rings = dynamic_cast<Rings*>(module);
assert(rings);

struct RingsModelItem : MenuItem {
Rings* rings;
rings::ResonatorModel model;
void onAction(const event::Action& e) override {
rings->resonatorModel = model;
}
void step() override {
rightText = (rings->resonatorModel == model) ? "✔" : "";
MenuItem::step();
}
};
Rings* module = dynamic_cast<Rings*>(this->module);
assert(module);


struct RingsEasterEggItem : MenuItem {
Rings* rings;
void onAction(const event::Action& e) override {
rings->easterEgg = !rings->easterEgg;
}
void step() override {
rightText = (rings->easterEgg) ? "✔" : "";
MenuItem::step();
}
menu->addChild(new MenuSeparator);

menu->addChild(createMenuLabel("Resonator"));

static const std::vector<std::string> modelLabels = {
"Modal resonator",
"Sympathetic strings",
"Modulated/inharmonic string",
"FM voice",
"Quantized sympathetic strings",
"Reverb string",
}; };
for (int i = 0; i < 6; i++) {
menu->addChild(createCheckMenuItem(modelLabels[i],
[=]() {return module->resonatorModel == i;},
[=]() {module->resonatorModel = (rings::ResonatorModel) i;}
));
}


menu->addChild(new MenuSeparator); menu->addChild(new MenuSeparator);
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Resonator"));
menu->addChild(construct<RingsModelItem>(&MenuItem::text, "Modal resonator", &RingsModelItem::rings, rings, &RingsModelItem::model, rings::RESONATOR_MODEL_MODAL));
menu->addChild(construct<RingsModelItem>(&MenuItem::text, "Sympathetic strings", &RingsModelItem::rings, rings, &RingsModelItem::model, rings::RESONATOR_MODEL_SYMPATHETIC_STRING));
menu->addChild(construct<RingsModelItem>(&MenuItem::text, "Modulated/inharmonic string", &RingsModelItem::rings, rings, &RingsModelItem::model, rings::RESONATOR_MODEL_STRING));
menu->addChild(construct<RingsModelItem>(&MenuItem::text, "FM voice", &RingsModelItem::rings, rings, &RingsModelItem::model, rings::RESONATOR_MODEL_FM_VOICE));
menu->addChild(construct<RingsModelItem>(&MenuItem::text, "Quantized sympathetic strings", &RingsModelItem::rings, rings, &RingsModelItem::model, rings::RESONATOR_MODEL_SYMPATHETIC_STRING_QUANTIZED));
menu->addChild(construct<RingsModelItem>(&MenuItem::text, "Reverb string", &RingsModelItem::rings, rings, &RingsModelItem::model, rings::RESONATOR_MODEL_STRING_AND_REVERB));


menu->addChild(new MenuSeparator);
menu->addChild(construct<RingsEasterEggItem>(&MenuItem::text, "Disastrous Peace", &RingsEasterEggItem::rings, rings));
menu->addChild(createBoolMenuItem("Disastrous Peace",
[=]() {return module->easterEgg;},
[=](bool val) {module->easterEgg = val;}
));
} }
}; };




Loading…
Cancel
Save