跳转至

lib/graphic/widget/menu/menu.h

Menu widget for hierarchical item selection. More...

Classes

Name
struct CFBD_MenuOps
struct _CFBD_Menu

Types

Name
typedef struct _CFBD_Menu CFBD_Menu
Forward declaration of menu structure.

Functions

Name
void CFBD_InitMenu(CFBD_Menu * pMenu, CFBD_GraphicDevice * devices, CFBD_MenuItemGroup * assigned_menu_items, SizeBaseType max_width)
void OLED_Menu_SelectNext(CFBD_Menu * m)
void OLED_Menu_SelectPrev(CFBD_Menu * m)

Detailed Description

Menu widget for hierarchical item selection.

Provides comprehensive menu system with items, indicator, animation, and callbacks. Supports keyboard navigation and item selection.

Types Documentation

typedef CFBD_Menu

typedef struct _CFBD_Menu CFBD_Menu;

Forward declaration of menu structure.

See:

Main menu widget structure.

Encompasses all menu state including items, rendering surface, indicator, animation, and selection state.

Functions Documentation

function CFBD_InitMenu

void CFBD_InitMenu(
    CFBD_Menu * pMenu,
    CFBD_GraphicDevice * devices,
    CFBD_MenuItemGroup * assigned_menu_items,
    SizeBaseType max_width
)

function OLED_Menu_SelectNext

static inline void OLED_Menu_SelectNext(
    CFBD_Menu * m
)

function OLED_Menu_SelectPrev

static inline void OLED_Menu_SelectPrev(
    CFBD_Menu * m
)

Source code

#pragma once
#include <stddef.h>

#include "base/point.h"
#include "cfbd_define.h"
#include "cfbd_graphic_define.h"
#include "menu_indicator.h"
#include "menu_item.h"
#include "widget/animation/animation.h"
#include "widget/text_config.h"

typedef struct _CFBD_Menu CFBD_Menu;

typedef struct
{
    void (*bind_item_groups_contains)(CFBD_Menu* pMenu, CFBD_MenuItemGroup* assigned_menu_items);

    CFBD_Bool (*add_item)(CFBD_Menu* pMenu,
                          const char* label,
                          Ascii_Font_Size size,
                          CFBD_MenuItemCallbackPack* callbacks);

    void (*set_indicator_property)(CFBD_Menu* pMenu, CFBD_MenuIndicator* pIndicator);
    void (*set_animation)(CFBD_Menu* pMenu, CFBD_BaseAnimation* pBaseAnimation);
    void (*immediate_draw)(CFBD_Menu* pMenu);
    void (*select_index)(CFBD_Menu* pMenu, int index);
    void (*activate_current)(CFBD_Menu* pMenu);
    void (*reset_tl_points)(CFBD_Menu* pMenu, CFBDGraphic_Point* p, CFBD_Bool request_updates);
} CFBD_MenuOps;

typedef struct _CFBD_Menu
{
    CFBD_MenuOps* operations;

    CFBD_GraphicDevice* device;

    CFBD_MenuItemGroup* menu_items;

    CFBDGraphic_Point tl_point;

    SizeBaseType max_width;

    int selected;

    CFBD_MenuIndicator indicator;

    CFBD_BaseAnimation animation;
} CFBD_Menu;

void CFBD_InitMenu(CFBD_Menu* pMenu,
                   CFBD_GraphicDevice* devices,
                   CFBD_MenuItemGroup* assigned_menu_items,
                   SizeBaseType max_width);

static inline void OLED_Menu_SelectNext(CFBD_Menu* m)
{
    int ni = (m->selected + 1) % (int) m->menu_items->count;
    m->operations->select_index(m, ni);
}

static inline void OLED_Menu_SelectPrev(CFBD_Menu* m)
{
    int ni = (m->selected - 1);
    if (ni < 0)
        ni = (int) m->menu_items->count - 1;
    m->operations->select_index(m, ni);
}

Updated on 2026-02-03 at 13:21:55 +0000