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()} {}
41 Submenu(l10n::String newName, std::span<MenuItem*> newItems, int32_t newThingIndex)
42 : MenuItem(newName), items{newItems.begin(), newItems.end()}, current_item_{items.end()},
43 thingIndex(newThingIndex) {}
44 Submenu(l10n::String newName, std::initializer_list<MenuItem*> newItems, int32_t newThingIndex)
45 : MenuItem(newName), items{newItems}, current_item_{items.end()}, thingIndex(newThingIndex) {}
47 void beginSession(MenuItem* navigatedBackwardFrom =
nullptr)
override;
51 ActionResult
buttonAction(deluge::hid::Button b,
bool on,
bool inCardRoutine)
override;
56 void learnKnob(
MIDICable* cable, int32_t whichKnob, int32_t modKnobMode, int32_t midiChannel) final;
57 void learnProgramChange(
MIDICable& cable, int32_t channel, int32_t programNumber) override;
59 virtual RenderingStyle renderingStyle()
const {
return RenderingStyle::VERTICAL; };
60 void renderInHorizontalMenu(int32_t startX, int32_t width, int32_t startY, int32_t height)
override;
62 void drawSubmenuItemsForOled(std::span<MenuItem*> options,
const int32_t selectedOption);
66 bool isSubmenu()
override {
return true; }
67 virtual bool focusChild(
const MenuItem* child);
68 void updatePadLights()
override;
72 std::optional<uint8_t> getThingIndex() {
return thingIndex; }
74 [[nodiscard]]
bool showPopup()
const override {
return false; }
77 std::optional<uint8_t> thingIndex = std::nullopt;
78 uint32_t initial_index_ = 0;
79 deluge::vector<MenuItem*> items;
80 typename decltype(items)::iterator current_item_;
83 bool shouldForwardButtons();