29class Submenu :
public MenuItem {
31 enum RenderingStyle { VERTICAL, HORIZONTAL };
33 Submenu(l10n::String newName, std::initializer_list<MenuItem*> newItems)
34 : MenuItem(newName), items{newItems}, current_item_{items.end()} {}
35 Submenu(l10n::String newName, std::span<MenuItem*> newItems)
36 : MenuItem(newName), items{newItems.begin(), newItems.end()}, current_item_{items.end()} {}
37 Submenu(l10n::String newName, l10n::String
title, std::initializer_list<MenuItem*> newItems)
38 : MenuItem(newName,
title), items{newItems}, current_item_{items.end()} {}
39 Submenu(l10n::String newName, l10n::String
title, std::span<MenuItem*> newItems)
40 : MenuItem(newName,
title), items{newItems.begin(), newItems.end()}, current_item_{items.end()} {}
42 void beginSession(MenuItem* navigatedBackwardFrom =
nullptr)
override;
46 ActionResult
buttonAction(deluge::hid::Button b,
bool on,
bool inCardRoutine)
final;
51 void learnKnob(
MIDICable* cable, int32_t whichKnob, int32_t modKnobMode, int32_t midiChannel) final;
52 void learnProgramChange(
MIDICable& cable, int32_t channel, int32_t programNumber) override;
55 void drawSubmenuItemsForOled(std::span<
MenuItem*> options, const int32_t selectedOption);
59 bool isSubmenu()
override {
return true; }
60 virtual bool focusChild(
const MenuItem* child);
63 RenderingStyle renderingStyle();
64 void updatePadLights()
override;
70 void drawVerticalMenu();
71 void drawHorizontalMenu();
74 bool shouldForwardButtons();
75 deluge::vector<MenuItem*> items;
76 typename decltype(items)::iterator current_item_;
79class HorizontalMenu :
public Submenu {
81 HorizontalMenu(l10n::String newName, std::initializer_list<MenuItem*> newItems) : Submenu(newName, newItems) {}
82 HorizontalMenu(l10n::String newName, std::span<MenuItem*> newItems) : Submenu(newName, newItems) {}
83 HorizontalMenu(l10n::String newName, l10n::String
title, std::initializer_list<MenuItem*> newItems)
84 : Submenu(newName,
title, newItems) {}
85 HorizontalMenu(l10n::String newName, l10n::String
title, std::span<MenuItem*> newItems)
86 : Submenu(newName,
title, newItems) {}