28class Submenu :
public MenuItem {
30 enum RenderingStyle { VERTICAL, HORIZONTAL };
32 Submenu(l10n::String newName, std::initializer_list<MenuItem*> newItems)
33 : MenuItem(newName), items{newItems}, current_item_{items.end()} {}
34 Submenu(l10n::String newName, std::span<MenuItem*> newItems)
35 : MenuItem(newName), items{newItems.begin(), newItems.end()}, current_item_{items.end()} {}
36 Submenu(l10n::String newName, l10n::String
title, std::initializer_list<MenuItem*> newItems)
37 : MenuItem(newName,
title), items{newItems}, current_item_{items.end()} {}
38 Submenu(l10n::String newName, l10n::String
title, std::span<MenuItem*> newItems)
39 : MenuItem(newName,
title), items{newItems.begin(), newItems.end()}, current_item_{items.end()} {}
41 void beginSession(MenuItem* navigatedBackwardFrom =
nullptr)
override;
45 ActionResult
buttonAction(deluge::hid::Button b,
bool on,
bool inCardRoutine)
override;
50 void learnKnob(
MIDICable* cable, int32_t whichKnob, int32_t modKnobMode, int32_t midiChannel) final;
51 void learnProgramChange(
MIDICable& cable, int32_t channel, int32_t programNumber) override;
53 virtual RenderingStyle renderingStyle()
const {
return RenderingStyle::VERTICAL; };
54 void renderInHorizontalMenu(int32_t startX, int32_t width, int32_t startY, int32_t height)
override;
56 void drawSubmenuItemsForOled(std::span<MenuItem*> options,
const int32_t selectedOption);
60 bool isSubmenu()
override {
return true; }
61 virtual bool focusChild(
const MenuItem* child);
62 void updatePadLights()
override;
70 uint32_t initial_index_ = 0;
71 deluge::vector<MenuItem*> items;
72 typename decltype(items)::iterator current_item_;
75 bool shouldForwardButtons();