@@ -143,6 +143,22 @@ struct CV_Gate : Module { | |||
}; | |||
struct CV_GateVelocityItem : MenuItem { | |||
CV_Gate *module; | |||
void onAction(const event::Action &e) override { | |||
module->velocityMode ^= true; | |||
} | |||
}; | |||
struct CV_GatePanicItem : MenuItem { | |||
CV_Gate *module; | |||
void onAction(const event::Action &e) override { | |||
module->midiOutput.panic(); | |||
} | |||
}; | |||
struct CV_GateWidget : ModuleWidget { | |||
CV_GateWidget(CV_Gate *module) { | |||
setModule(module); | |||
@@ -182,17 +198,15 @@ struct CV_GateWidget : ModuleWidget { | |||
void appendContextMenu(Menu *menu) override { | |||
CV_Gate *module = dynamic_cast<CV_Gate*>(this->module); | |||
struct VelocityItem : MenuItem { | |||
CV_Gate *module; | |||
void onAction(const event::Action &e) override { | |||
module->velocityMode ^= true; | |||
} | |||
}; | |||
menu->addChild(new MenuEntry); | |||
VelocityItem *velocityItem = createMenuItem<VelocityItem>("Velocity mode", CHECKMARK(module->velocityMode)); | |||
CV_GateVelocityItem *velocityItem = createMenuItem<CV_GateVelocityItem>("Velocity mode", CHECKMARK(module->velocityMode)); | |||
velocityItem->module = module; | |||
menu->addChild(velocityItem); | |||
CV_GatePanicItem *panicItem = new CV_GatePanicItem; | |||
panicItem->text = "Panic"; | |||
panicItem->module = module; | |||
menu->addChild(panicItem); | |||
} | |||
}; | |||
@@ -313,6 +313,14 @@ struct CV_MIDI : Module { | |||
}; | |||
struct CV_MIDIPanicItem : MenuItem { | |||
CV_MIDI *module; | |||
void onAction(const event::Action &e) override { | |||
module->midiOutput.panic(); | |||
} | |||
}; | |||
struct CV_MIDIWidget : ModuleWidget { | |||
CV_MIDIWidget(CV_MIDI *module) { | |||
setModule(module); | |||
@@ -342,6 +350,17 @@ struct CV_MIDIWidget : ModuleWidget { | |||
midiWidget->midiIO = &module->midiOutput; | |||
addChild(midiWidget); | |||
} | |||
void appendContextMenu(Menu *menu) override { | |||
CV_MIDI *module = dynamic_cast<CV_MIDI*>(this->module); | |||
menu->addChild(new MenuEntry); | |||
CV_MIDIPanicItem *panicItem = new CV_MIDIPanicItem; | |||
panicItem->text = "Panic"; | |||
panicItem->module = module; | |||
menu->addChild(panicItem); | |||
} | |||
}; | |||
@@ -507,7 +507,7 @@ struct PolyModeItem : MenuItem { | |||
}; | |||
struct PanicItem : MenuItem { | |||
struct MIDI_CVPanicItem : MenuItem { | |||
MIDI_CV *module; | |||
void onAction(const event::Action &e) override { | |||
module->panic(); | |||
@@ -566,7 +566,7 @@ struct MIDI_CVWidget : ModuleWidget { | |||
polyModeItem->module = module; | |||
menu->addChild(polyModeItem); | |||
PanicItem *panicItem = new PanicItem; | |||
MIDI_CVPanicItem *panicItem = new MIDI_CVPanicItem; | |||
panicItem->text = "Panic"; | |||
panicItem->module = module; | |||
menu->addChild(panicItem); | |||
@@ -32,14 +32,20 @@ struct MIDI_Gate : Module { | |||
void onReset() override { | |||
for (int i = 0; i < 16; i++) { | |||
gates[i] = false; | |||
gateTimes[i] = 0.f; | |||
learnedNotes[i] = i + 36; | |||
} | |||
learningId = -1; | |||
panic(); | |||
midiInput.reset(); | |||
} | |||
void panic() { | |||
for (int i = 0; i < 16; i++) { | |||
gates[i] = false; | |||
gateTimes[i] = 0.f; | |||
} | |||
} | |||
void pressNote(uint8_t note, uint8_t vel) { | |||
// Learn | |||
if (learningId >= 0) { | |||
@@ -144,6 +150,22 @@ struct MIDI_Gate : Module { | |||
}; | |||
struct MIDI_GateVelocityItem : MenuItem { | |||
MIDI_Gate *module; | |||
void onAction(const event::Action &e) override { | |||
module->velocityMode ^= true; | |||
} | |||
}; | |||
struct MIDI_GatePanicItem : MenuItem { | |||
MIDI_Gate *module; | |||
void onAction(const event::Action &e) override { | |||
module->panic(); | |||
} | |||
}; | |||
struct MIDI_GateWidget : ModuleWidget { | |||
MIDI_GateWidget(MIDI_Gate *module) { | |||
setModule(module); | |||
@@ -183,17 +205,15 @@ struct MIDI_GateWidget : ModuleWidget { | |||
void appendContextMenu(Menu *menu) override { | |||
MIDI_Gate *module = dynamic_cast<MIDI_Gate*>(this->module); | |||
struct VelocityItem : MenuItem { | |||
MIDI_Gate *module; | |||
void onAction(const event::Action &e) override { | |||
module->velocityMode ^= true; | |||
} | |||
}; | |||
menu->addChild(new MenuEntry); | |||
VelocityItem *velocityItem = createMenuItem<VelocityItem>("Velocity mode", CHECKMARK(module->velocityMode)); | |||
MIDI_GateVelocityItem *velocityItem = createMenuItem<MIDI_GateVelocityItem>("Velocity mode", CHECKMARK(module->velocityMode)); | |||
velocityItem->module = module; | |||
menu->addChild(velocityItem); | |||
MIDI_GatePanicItem *panicItem = new MIDI_GatePanicItem; | |||
panicItem->text = "Panic"; | |||
panicItem->module = module; | |||
menu->addChild(panicItem); | |||
} | |||
}; | |||