将菜单的架构改成 MVP,并且进一步优化视图层和模型层的逻辑
This commit is contained in:
77
src/Drv/pages/page_manager.h
Normal file
77
src/Drv/pages/page_manager.h
Normal file
@@ -0,0 +1,77 @@
|
||||
#ifndef PAGE_MANAGER_H
|
||||
#define PAGE_MANAGER_H
|
||||
|
||||
#include "page.h"
|
||||
|
||||
/* -------------------------------------------------------------------------
|
||||
* 结构体名: page_manager_t
|
||||
* 作用:
|
||||
* 页面管理器运行时上下文,维护“页面栈 + 页面注册表”两套核心状态。
|
||||
*
|
||||
* 设计说明:
|
||||
* - page_stack:
|
||||
* 运行时导航栈,表示当前页面跳转路径。
|
||||
* 栈顶元素是当前可见/可交互页面。
|
||||
* - stack_top:
|
||||
* 栈顶索引。约定 -1 表示空栈。
|
||||
* 当前栈深可由 (stack_top + 1) 推导。
|
||||
* - page_registry:
|
||||
* 可导航页面的注册表,按 page_id 查找目标页面时使用。
|
||||
* - page_count:
|
||||
* 当前注册表有效页面数量,范围 [0, MAX_PAGE_COUNT]。
|
||||
*
|
||||
* 约束关系:
|
||||
* - page_stack 最大深度由 MAX_PAGE_STACK_DEPTH 限制;
|
||||
* - page_registry 最大容量由 MAX_PAGE_COUNT 限制;
|
||||
* - 调用方需通过 PageManager_Init 初始化后再使用。
|
||||
* ------------------------------------------------------------------------- */
|
||||
#define MAX_PAGE_STACK_DEPTH 5
|
||||
#define MAX_PAGE_COUNT 16
|
||||
|
||||
/* -------------------------------------------------------------------------
|
||||
* 枚举名: page_manager_result_t
|
||||
* 作用:
|
||||
* 定义 PageManager 相关接口的统一返回码,避免使用无语义的裸整数。
|
||||
*
|
||||
* 取值说明:
|
||||
* PAGE_MANAGER_OK - 操作成功
|
||||
* PAGE_MANAGER_ERR_NULL_PARAM - 传入参数为空
|
||||
* PAGE_MANAGER_ERR_INVALID_ID - 页面 ID 非法
|
||||
* PAGE_MANAGER_ERR_NOT_FOUND - 目标页面未注册/未找到
|
||||
* PAGE_MANAGER_ERR_STACK_FULL - 页面栈已满,无法继续压栈
|
||||
* PAGE_MANAGER_ERR_STACK_BOTTOM - 页面栈已到栈底,无法继续弹栈
|
||||
* PAGE_MANAGER_ERR_REGISTRY_FULL - 页面注册表已满
|
||||
* PAGE_MANAGER_ERR_NO_ACTIVE_PAGE - 当前无活动页面可供分发/循环驱动
|
||||
* ------------------------------------------------------------------------- */
|
||||
typedef enum
|
||||
{
|
||||
PAGE_MANAGER_OK = 0,
|
||||
PAGE_MANAGER_ERR_NULL_PARAM = -1,
|
||||
PAGE_MANAGER_ERR_INVALID_ID = -2,
|
||||
PAGE_MANAGER_ERR_NOT_FOUND = -3,
|
||||
PAGE_MANAGER_ERR_STACK_FULL = -4,
|
||||
PAGE_MANAGER_ERR_STACK_BOTTOM = -5,
|
||||
PAGE_MANAGER_ERR_REGISTRY_FULL = -6,
|
||||
PAGE_MANAGER_ERR_NO_ACTIVE_PAGE = -7
|
||||
} page_manager_result_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
page_t *page_stack[MAX_PAGE_STACK_DEPTH]; /* 页面导航栈 */
|
||||
int8_t stack_top; /* 栈顶索引(-1 表示空栈) */
|
||||
page_t *page_registry[MAX_PAGE_COUNT]; /* 页面注册表 */
|
||||
uint8_t page_count; /* 注册页面数量 */
|
||||
} page_manager_t;
|
||||
|
||||
void PageManager_Init(void);
|
||||
page_manager_result_t PageManager_Register(page_t *page);
|
||||
page_manager_result_t PageManager_Navigate(page_id_t pageId);
|
||||
page_manager_result_t PageManager_DispatchEvent(input_event_t *event);
|
||||
|
||||
page_t *PageManager_GetTop(void);
|
||||
page_manager_result_t PageManager_Push(page_t *newPage);
|
||||
page_manager_result_t PageManager_Pop(void);
|
||||
page_t *PageManager_Find(page_id_t pageId);
|
||||
void PageManager_Loop(void);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user