#pragma once #include #include #include #include #include namespace rack { namespace app { struct MidiDriverChoice : LedDisplayChoice { midi::Port* port; void onAction(const ActionEvent& e) override; void step() override; }; struct MidiDeviceChoice : LedDisplayChoice { midi::Port* port; void onAction(const ActionEvent& e) override; void step() override; }; struct MidiChannelChoice : LedDisplayChoice { midi::Port* port; void onAction(const ActionEvent& e) override; void step() override; }; struct MidiDisplay : LedDisplay { MidiDriverChoice* driverChoice; LedDisplaySeparator* driverSeparator; MidiDeviceChoice* deviceChoice; LedDisplaySeparator* deviceSeparator; MidiChannelChoice* channelChoice; void setMidiPort(midi::Port* port); }; /** A virtual MIDI port graphic that displays an MIDI menu when clicked. */ struct MidiButton : SvgButton { midi::Port* port; void setMidiPort(midi::Port* port); void onAction(const ActionEvent& e) override; }; /** Appends menu items to the given menu with driver, device, etc. Useful alternative to putting a MidiDisplay on your module's panel. */ void appendMidiMenu(ui::Menu* menu, midi::Port* port); } // namespace app } // namespace rack