diff --git a/midi2cv/menu/menu_items.h b/midi2cv/menu/menu_items.h index 0049bc5..7fab9ff 100644 --- a/midi2cv/menu/menu_items.h +++ b/midi2cv/menu/menu_items.h @@ -150,6 +150,22 @@ class BoolMenuItem : public NumberMenuItem { , off_string(_off_string) {}; }; +class StringListMenuItem : public NumberMenuItem { + private: + const char** string_labels; + + protected: + const char* get_format_string() + { + return this->string_labels[this->get_value()]; + } + + public: + StringListMenuItem(const char* _label, uint32_t _initialValue, const char** _stringLabels, size_t _itemCount) + : NumberMenuItem(_label, _initialValue, 0, _itemCount - 1, 1) + , string_labels(_stringLabels) {}; +}; + class MidiNoteMenuItem : public NumberMenuItem { private: char string_buffer[4]; diff --git a/midi2cv/ui/part_menu.cc b/midi2cv/ui/part_menu.cc index 999ea80..946df11 100644 --- a/midi2cv/ui/part_menu.cc +++ b/midi2cv/ui/part_menu.cc @@ -3,11 +3,13 @@ #include "../menu/menu_items.h" #include +static const char* kVoiceDetailStrings[] = {"S", "M", "L", "XL"}; + PartMenu::PartMenu() : item_voice_count("voice count", 1, 1, 4, 1) - , item_voice_detail("voice detail", 1, 1, 4, 1) + , item_voice_detail("voice detail", 0, kVoiceDetailStrings, 4) , item_midi_filter_enabled("MIDI filter", 1, "on", "off") - , item_midi_channel("MIDI channel", 0, 0, 100, 1) + , item_midi_channel("MIDI channel", 0, 0, 16, 1) , item_midi_lowest_note("MIDI lowest", 0) , item_midi_highest_note("MIDI highest", 127) { diff --git a/midi2cv/ui/part_menu.h b/midi2cv/ui/part_menu.h index 5ce1294..3e6fa2a 100644 --- a/midi2cv/ui/part_menu.h +++ b/midi2cv/ui/part_menu.h @@ -18,7 +18,7 @@ class PartMenu { private: Menu menu; UIntMenuItem item_voice_count; - UIntMenuItem item_voice_detail; + StringListMenuItem item_voice_detail; BoolMenuItem item_midi_filter_enabled; UIntMenuItem item_midi_channel; MidiNoteMenuItem item_midi_lowest_note;