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¶
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¶
function OLED_Menu_SelectPrev¶
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