45 lines
1.3 KiB
C++
45 lines
1.3 KiB
C++
#ifndef MENU_PAINT_H_
|
||
#define MENU_PAINT_H_
|
||
|
||
#include <stdint.h>
|
||
|
||
class MenuPaint {
|
||
public:
|
||
enum MenuType {
|
||
MENU_TYPE_FOLDER,
|
||
MENU_TYPE_SWITCH,
|
||
MENU_TYPE_INFO
|
||
};
|
||
|
||
struct Menu {
|
||
const char *name;
|
||
MenuType type;
|
||
const Menu *subMenus;
|
||
uint8_t subMenuCount;
|
||
uint8_t switchId; // 新增字段:开关ID (仅在type为SWITCH时有效)
|
||
};
|
||
|
||
static void Init(); // 初始化菜单
|
||
static void Paint(); // 渲染菜单
|
||
static void ScrollUp(); // 向上移动
|
||
static void ScrollDown(); // 向下移动
|
||
static void Enter(); // 进入子菜单/切换开关
|
||
static void Exit(); // 返回上级菜单
|
||
|
||
static bool GetSwitchState(uint8_t switchId); // 新增接口:获取开关状态
|
||
|
||
private:
|
||
static const Menu *currentMenu; // 当前菜单指针
|
||
static uint8_t currentMenuSize; // 当前菜单项数量
|
||
static int8_t selectIndex; // 当前选中项索引
|
||
static int8_t scrollOffset; // 滚动偏移
|
||
|
||
static bool switchStates[20]; // 开关状态(按switchId匹配)
|
||
static const Menu *menuStack[5]; // 菜单返回栈
|
||
static uint8_t stackIndex;
|
||
|
||
static void RenderItem(int y, const char *text, bool selected, bool checked);
|
||
};
|
||
|
||
#endif // MENU_PAINT_H_
|