Deluge Firmware 1.3.0
Build date: 2025.08.10
Loading...
Searching...
No Matches
deluge::gui::menu_item::HorizontalMenu Class Reference
Inheritance diagram for deluge::gui::menu_item::HorizontalMenu:
Collaboration diagram for deluge::gui::menu_item::HorizontalMenu:

Classes

struct  Paging

Public Types

enum  Layout { FIXED , DYNAMIC }
Public Types inherited from deluge::gui::menu_item::Submenu
enum  RenderingStyle { VERTICAL , HORIZONTAL }

Public Member Functions

 HorizontalMenu (l10n::String newName, std::span< MenuItem * > newItems, Layout layout)
 HorizontalMenu (l10n::String newName, std::initializer_list< MenuItem * > newItems, Layout layout)
 HorizontalMenu (l10n::String newName, l10n::String newTitle, std::initializer_list< MenuItem * > newItems, Layout layout)
RenderingStyle renderingStyle () const override
ActionResult buttonAction (hid::Button b, bool on, bool inCardRoutine) override
 Handle an arbitrary button.
void selectEncoderAction (int32_t offset) override
 Handle select encoder movement.
void renderOLED () override
 Root rendering routine for OLED.
MenuPermission checkPermissionToBeginSession (ModControllableAudio *modControllable, int32_t whichThing, MultiRange **currentRange) override
void beginSession (MenuItem *navigatedBackwardFrom) override
 Begin an editing session with this menu item.
void endSession () override
 Submenu (l10n::String newName, std::initializer_list< MenuItem * > newItems)
 Submenu (l10n::String newName, std::span< MenuItem * > newItems)
 Submenu (l10n::String newName, l10n::String title, std::initializer_list< MenuItem * > newItems)
 Submenu (l10n::String newName, l10n::String title, std::span< MenuItem * > newItems)
Public Member Functions inherited from deluge::gui::menu_item::Submenu
 Submenu (l10n::String newName, std::initializer_list< MenuItem * > newItems)
 Submenu (l10n::String newName, std::span< MenuItem * > newItems)
 Submenu (l10n::String newName, l10n::String title, std::initializer_list< MenuItem * > newItems)
 Submenu (l10n::String newName, l10n::String title, std::span< MenuItem * > newItems)
void beginSession (MenuItem *navigatedBackwardFrom=nullptr) override
 Begin an editing session with this menu item.
void updateDisplay ()
void selectEncoderAction (int32_t offset) override
 Handle select encoder movement.
MenuItemselectButtonPress () final
 Handle a select button press.
ActionResult buttonAction (deluge::hid::Button b, bool on, bool inCardRoutine) override
 Handle an arbitrary button.
void readValueAgain () final
 Re-read the value from the system and redraw the display to match.
void unlearnAction () final
 Unlearn the parameter controlled by this menu.
bool usesAffectEntire () override
 Claim support for Kit AFFECT_ENTIRE editing.
bool allowsLearnMode () final
 Used by SoundEditor to determine if the current menu item can accept MIDI learning.
void learnKnob (MIDICable *cable, int32_t whichKnob, int32_t modKnobMode, int32_t midiChannel) final
void learnProgramChange (MIDICable &cable, int32_t channel, int32_t programNumber) override
bool learnNoteOn (MIDICable &cable, int32_t channel, int32_t noteCode) final
 Attempt to bind this menu item to a note code.
void renderInHorizontalMenu (int32_t startX, int32_t width, int32_t startY, int32_t height) override
void drawPixelsForOled () override
 Paints the pixels below the standard title block.
void drawSubmenuItemsForOled (std::span< MenuItem * > options, const int32_t selectedOption)
bool wrapAround ()
 Indicates if the menu-like object should wrap-around. Destined to be virtualized. At the moment implements the legacy behaviour of wrapping on 7seg but not on OLED.
bool isSubmenu () override
virtual bool focusChild (const MenuItem *child)
void updatePadLights () override
MenuItempatchingSourceShortcutPress (PatchSource s, bool previousPressStillActive=false) override
 Action to take when a source shortcut is pressed.
deluge::modulation::params::Kind getParamKind () override
uint32_t getParamIndex () override
int32_t getColumnSpan () const override
 Get the number of occupied virtual columns in Horizontal menu.
bool showNotification () const override
 Show a popup with the full name and value of the editing parameter at the top of Horizontal menu.
Public Member Functions inherited from MenuItem
 MenuItem (deluge::l10n::String newName, deluge::l10n::String newTitle=deluge::l10n::String::EMPTY_STRING)
 MenuItem (const MenuItem &other)=delete
 MenuItem (const MenuItem &&other)=delete
MenuItemoperator= (const MenuItem &other)=delete
MenuItemoperator= (const MenuItem &&other)=delete
virtual void horizontalEncoderAction (int32_t offset)
 Handle horizontal encoder movement.
virtual void verticalEncoderAction (int32_t offset)
 Handle vertical encoder movement.
virtual bool selectEncoderActionEditsInstrument ()
 Used by the sound editor to mark the current instrument as edited when the select encoder is scrolled.
virtual ActionResult timerCallback ()
 Handle a TimerName::UI_SPECIFIC event.
virtual MenuPermission checkPermissionToBeginSession (ModControllableAudio *modControllable, int32_t whichThing, MultiRange **currentRange)
 Double-check that this MenuItem will work with the currently selected sound range.
virtual void readCurrentValue ()
 Like readValueAgain, but does not redraw.
virtual uint8_t getIndexOfPatchedParamToBlink ()
virtual uint8_t shouldBlinkPatchingSourceShortcut (PatchSource s, uint8_t *colour)
virtual void learnCC (MIDICable &cable, int32_t channel, int32_t ccNumber, int32_t value)
virtual bool shouldBlinkLearnLed ()
virtual bool isRangeDependent ()
 Returns true if this parameter is only relevant to some note ranges.
virtual std::string_view getTitle () const
 Get the title to be used when rendering on OLED, both as a deluge::gui::menu_item::Submenu and when displaying ourselves (using the default renderOLED implementation).
virtual uint8_t shouldDrawDotOnName ()
 Get the "draw dot state".
virtual void drawName ()
 Draw the name we want to use when selecting this in a deluge::gui::menu_item::Submenu to the 7SEG.
virtual std::string_view getName () const
 Get the actual name for use on OLED for deluge::gui::menu_item::Submenu s.
virtual bool isRelevant (ModControllableAudio *modControllable, int32_t whichThing)
 Check if this MenuItem should show up in a containing deluge::gui::menu_item::Submenu.
virtual bool shouldEnterSubmenu ()
 Check if selecting this menu item (with select encoder) should enter a submenu.
virtual int32_t getSubmenuItemTypeRenderLength ()
 Handle rendering of submenu item types.
virtual int32_t getSubmenuItemTypeRenderIconStart ()
virtual void renderSubmenuItemTypeForOled (int32_t yPixel)
virtual void setupNumberEditor ()
virtual void updateAutomationViewParameter ()
virtual void getColumnLabel (StringBuf &label)
virtual bool showColumnLabel () const
 Show a label for the parameter in Horizontal menu.
virtual bool allowToBeginSessionFromHorizontalMenu ()
 Allow entering menu session by selecting the menu item twice in Horizontal menu.
virtual void getNotificationValue (StringBuf &valueBuf)
 Get the parameter value string to show in the popup.

Protected Member Functions

virtual void renderMenuItems (std::span< MenuItem * > items, const MenuItem *currentItem)
virtual PagingpreparePaging (std::span< MenuItem * > items, const MenuItem *currentItem)
virtual void handleInstrumentButtonPress (std::span< MenuItem * > visiblePageItems, const MenuItem *previous, int32_t pressedButtonPosition)
virtual void selectMenuItem (int32_t pageNumber, int32_t itemPos)
virtual void switchVisiblePage (int32_t direction)
virtual void switchHorizontalMenu (int32_t direction, std::span< HorizontalMenu *const > chain, bool forceSelectFirstItem=false)

Protected Attributes

Paging paging
Layout layout {DYNAMIC}
int32_t lastSelectedItemPosition {kNoSelection}
std::optional< std::span< HorizontalMenu *const > > chain {std::nullopt}
Protected Attributes inherited from deluge::gui::menu_item::Submenu
uint32_t initial_index_ = 0
deluge::vector< MenuItem * > items
decltype(items) ::iterator current_item_

Private Member Functions

void updateSelectedMenuItemLED (int32_t itemNumber) const
 When updating the selected horizontal menu item, you need to refresh the lit instrument LED's.
double calcNextKnobSpeed (int8_t offset)

Static Private Member Functions

static void handleItemAction (MenuItem *menuItem)
static void displayNotification (MenuItem *menuItem)
static void renderPageCounters (const Paging &paging)
static void renderColumnLabel (MenuItem *menuItem, int32_t labelY, int32_t slotStartX, int32_t slotWidth, bool isSelected)

Private Attributes

double currentKnobSpeed {0.0}

Friends

class HorizontalMenuCombined

Additional Inherited Members

static void drawItemsForOled (std::span< std::string_view > options, int32_t selectedOption, int32_t offset=0)
 Internal helper which can draw the standard deluge::gui::menu_item::Submenu layout.
deluge::l10n::String title
 Can get overridden by getTitle(). Actual max num chars for OLED display is 14.
const deluge::l10n::String name
 Default name for use on OLED for deluge::gui::menu_item::Submenu s.
deluge::gui::menu_item::Submenuparent {nullptr}

Member Function Documentation

◆ beginSession()

void deluge::gui::menu_item::HorizontalMenu::beginSession ( MenuItem * navigatedBackwardFrom)
overridevirtual

Begin an editing session with this menu item.

Should make sure the menu's internal state matches the system and redraw the display.

Reimplemented from MenuItem.

Reimplemented in deluge::gui::menu_item::HorizontalMenuCombined, deluge::gui::menu_item::submenu::ReverbSidechain, and deluge::gui::menu_item::submenu::Sidechain.

◆ buttonAction()

ActionResult deluge::gui::menu_item::HorizontalMenu::buttonAction ( hid::Button b,
bool on,
bool inCardRoutine )
overridevirtual

Handle an arbitrary button.

The returned result is forwarded up the View stack, so returning ActionResult::DEALT_WITH will suppress buttons going to the current View.

This is called with (b == SELECT_ENC && on) immediately after the menu is entered, or after selectButtonPress is called and returns NO_NAVIGATION.

Reimplemented from MenuItem.

◆ endSession()

void deluge::gui::menu_item::HorizontalMenu::endSession ( )
overridevirtual

when exiting a horizontal menu, turn off the LED's and reset selected horizontal menu item position so that next time you open a horizontal menu, it refreshes the LED for the selected horizontal menu item

Reimplemented from MenuItem.

◆ renderingStyle()

Submenu::RenderingStyle deluge::gui::menu_item::HorizontalMenu::renderingStyle ( ) const
overridevirtual

Reimplemented from deluge::gui::menu_item::Submenu.

◆ renderOLED()

void deluge::gui::menu_item::HorizontalMenu::renderOLED ( )
overridevirtual

Root rendering routine for OLED.

If you want a title, you probably want to override drawPixelsForOled instead or you will need to paint the title yourself. Uses the title from getTitle() when rendering.

Reimplemented from MenuItem.

◆ selectEncoderAction()

void deluge::gui::menu_item::HorizontalMenu::selectEncoderAction ( int32_t offset)
overridevirtual

Handle select encoder movement.

Child classes which override this should be careful to handle offsets larger than 1, as holding shift and scrolling will increase them.

Reimplemented from MenuItem.

Reimplemented in deluge::gui::menu_item::HorizontalMenuCombined.


The documentation for this class was generated from the following files:
  • src/deluge/gui/menu_item/horizontal_menu.h
  • src/deluge/gui/menu_item/horizontal_menu.cpp