Deluge Firmware 1.3.0
Build date: 2025.06.24
Loading...
Searching...
No Matches
horizontal_menu.h
1#pragma once
2
3#include "gui/menu_item/menu_item.h"
4#include "gui/menu_item/submenu.h"
5#include "util/containers.h"
6#include <initializer_list>
7#include <span>
8
9namespace deluge::gui::menu_item {
10
11class HorizontalMenu : public Submenu {
12public:
13 enum Layout { FIXED, DYNAMIC };
14 struct PageInfo {
15 int32_t number;
16 std::vector<MenuItem*> items;
17 };
18 struct Paging {
19 int32_t visiblePageNumber;
20 int32_t selectedItemPositionOnPage;
21 std::vector<PageInfo> pages;
22 PageInfo& getVisiblePage() { return pages[visiblePageNumber]; }
23 };
25 int32_t startX;
26 int32_t width;
27 };
28
29 using Submenu::Submenu;
30
31 HorizontalMenu(l10n::String newName, std::span<MenuItem*> newItems, Layout layout)
32 : Submenu(newName, newItems), layout(layout), paging{} {}
33 HorizontalMenu(l10n::String newName, std::initializer_list<MenuItem*> newItems, Layout layout)
34 : Submenu(newName, newItems), layout(layout), paging{} {}
35 HorizontalMenu(l10n::String newName, l10n::String newTitle, std::initializer_list<MenuItem*> newItems,
36 Layout layout)
37 : Submenu(newName, newTitle, newItems), layout(layout), paging{} {}
38
39 RenderingStyle renderingStyle() const override;
40 ActionResult buttonAction(hid::Button b, bool on, bool inCardRoutine) override;
41 void selectEncoderAction(int32_t offset) override;
42 void renderOLED() override;
43 void drawPixelsForOled() override;
44 void endSession() override;
45
46protected:
47 Paging paging;
48 Layout layout = DYNAMIC;
49 int32_t lastSelectedItemPosition = kNoSelection;
50 ActionResult selectMenuItemOnVisiblePage(int32_t selectedColumn);
51 ActionResult switchVisiblePage(int32_t direction);
52 void updateSelectedMenuItemLED(int32_t itemNumber);
53 Paging splitMenuItemsByPages() const;
54 static void displayPopup(MenuItem* menuItem);
55 static ColumnLabelPosition renderColumnLabel(MenuItem* menuItem, int32_t labelY, int32_t slotStartX,
56 int32_t slotWidth);
57};
58} // namespace deluge::gui::menu_item
Base class for all menu items.
Definition menu_item.h:40
Definition horizontal_menu.h:11
ActionResult selectMenuItemOnVisiblePage(int32_t selectedColumn)
Selects the menu item covering the given virtual column on the visible page.
Definition horizontal_menu.cpp:224
void selectEncoderAction(int32_t offset) override
Handle select encoder movement.
Definition horizontal_menu.cpp:146
void drawPixelsForOled() override
Paints the pixels below the standard title block.
Definition horizontal_menu.cpp:51
void updateSelectedMenuItemLED(int32_t itemNumber)
When updating the selected horizontal menu item, you need to refresh the lit instrument LED's.
Definition horizontal_menu.cpp:314
void renderOLED() override
Root rendering routine for OLED.
Definition horizontal_menu.cpp:43
ActionResult buttonAction(hid::Button b, bool on, bool inCardRoutine) override
Handle an arbitrary button.
Definition horizontal_menu.cpp:16
void endSession() override
Definition horizontal_menu.cpp:344
Definition submenu.h:29
Definition horizontal_menu.h:18