diff --git a/src/Tides2.cpp b/src/Tides2.cpp index da45650..b7f0aaa 100644 --- a/src/Tides2.cpp +++ b/src/Tides2.cpp @@ -303,6 +303,89 @@ struct Tides2Widget : ModuleWidget { addChild(createLightCentered>(mm2px(Vec(49.075, 104.749)), module, Tides2::OUTPUT_LIGHTS + 2)); addChild(createLightCentered>(mm2px(Vec(60.525, 104.749)), module, Tides2::OUTPUT_LIGHTS + 3)); } + + void appendContextMenu(Menu* menu) override { + Tides2* module = dynamic_cast(this->module); + + // Frequency Range + + struct Tides2FrequencyRangeItem : MenuItem { + Tides2* module; + int range; + void onAction(const event::Action& e) override { + module->range = range; + } + }; + + static const std::string frequencyRangeLabels[3] = { + "Low (2 minutes to 2 Hz)", + "Medium (0.125 Hz to 32 Hz)", + "High (8 Hz to 2 kHz)" + }; + + menu->addChild(new MenuSeparator); + menu->addChild(createMenuLabel("Frequency Range")); + for (int i = 0; i < 3; i++) { + Tides2FrequencyRangeItem* modelItem = + createMenuItem(frequencyRangeLabels[i], CHECKMARK(module->range == i)); + modelItem->module = module; + modelItem->range = i; + menu->addChild(modelItem); + } + + // Output Mode + + struct Tides2OutputModeItem : MenuItem { + Tides2* module; + tides2::OutputMode output_mode; + void onAction(const event::Action& e) override { + module->output_mode = output_mode; + } + }; + + static const std::string outputModeLabels[4] = { + "Different Shapes", + "Different Amplitudes", + "Different Times", + "Different Frequencies" + }; + + menu->addChild(new MenuSeparator); + menu->addChild(createMenuLabel("Output Mode")); + for (int i = 0; i < 4; i++) { + Tides2OutputModeItem* modelItem = + createMenuItem(outputModeLabels[i], CHECKMARK(module->output_mode == i)); + modelItem->module = module; + modelItem->output_mode = static_cast(i); + menu->addChild(modelItem); + } + + // Ramp Mode + + struct Tides2RampModeItem : MenuItem { + Tides2* module; + tides2::RampMode ramp_mode; + void onAction(const event::Action& e) override { + module->ramp_mode = ramp_mode; + } + }; + + static const std::string rampModeLabels[3] = { + "AD Envelope", + "Looping (VC-LFO/VCDO)", + "AR envelope" + }; + + menu->addChild(new MenuSeparator); + menu->addChild(createMenuLabel("Ramp Mode")); + for (int i = 0; i < 3; i++) { + Tides2RampModeItem* modelItem = + createMenuItem(rampModeLabels[i], CHECKMARK(module->ramp_mode == i)); + modelItem->module = module; + modelItem->ramp_mode = static_cast(i); + menu->addChild(modelItem); + } + } };