优化一版

This commit is contained in:
冯佳
2025-12-23 09:45:36 +08:00
parent 3a5491c11e
commit cf1803dd77
15 changed files with 577 additions and 146 deletions

View File

@ -2,6 +2,8 @@
#include "../src/core/menu_core.h"
#include "../src/core/menu_event.h"
#include "../src/core/menu_stack.h"
#include "../src/core/menu_permission.h"
#include "../src/core/menu_persistence.h"
#include <stddef.h>
static MenuCoreCtx g_menu_ctx;
@ -88,8 +90,12 @@ MenuErrCode menu_register_nodes(
return MENU_ERR_OK;
}
MenuErrCode menu_post_event(MenuEventType type, uint32_t param) {
return menu_event_post(&g_menu_ctx.event_queue, type, param);
MenuErrCode menu_post_event(MenuEventType type, uint32_t param, MenuEventPriority priority) {
return menu_event_post(&g_menu_ctx.event_queue, type, param, priority);
}
MenuErrCode menu_post_event_normal(MenuEventType type, uint32_t param) {
return menu_event_post(&g_menu_ctx.event_queue, type, param, MENU_EVENT_PRIORITY_NORMAL);
}
MenuErrCode menu_enter(void) {
@ -134,7 +140,7 @@ MenuErrCode menu_enter(void) {
}
MenuErrCode menu_back(void) {
return menu_post_event(MENU_EVENT_KEY_ESC, 0);
return menu_post_event_normal(MENU_EVENT_KEY_ESC, 0);
}
MenuErrCode menu_node_bind_param(MenuNodeId node_id, uint16_t param_id) {
@ -146,69 +152,40 @@ MenuErrCode menu_node_bind_param(MenuNodeId node_id, uint16_t param_id) {
// Permission management functions
MenuErrCode menu_permission_register_role(uint8_t role_id, const char* name, MenuPermissionLevel level) {
if (!name) return MENU_ERR_INVALID_PARAM;
if (g_menu_ctx.permission.role_count >= 8) return MENU_ERR_NO_MEM;
for (uint8_t i = 0; i < g_menu_ctx.permission.role_count; i++) {
if (g_menu_ctx.permission.roles[i].id == role_id) {
return MENU_ERR_FAIL;
}
}
MenuRole* role = &g_menu_ctx.permission.roles[g_menu_ctx.permission.role_count];
role->id = role_id;
role->name = name;
role->level = level;
g_menu_ctx.permission.role_count++;
return MENU_ERR_OK;
return menu_permission_register_role_impl(&g_menu_ctx, role_id, name, level);
}
MenuErrCode menu_permission_set_current_role(uint8_t role_id) {
g_menu_ctx.permission.current_role_id = role_id;
return MENU_ERR_OK;
return menu_permission_set_current_role_impl(&g_menu_ctx, role_id);
}
MenuErrCode menu_permission_update_node_level(MenuNodeId node_id, MenuPermissionLevel level) {
MenuNode* node = menu_core_get_node(&g_menu_ctx, node_id);
if (!node) return MENU_ERR_NOT_FOUND;
node->permission_level = level;
return MENU_ERR_OK;
return menu_permission_update_node_level_impl(&g_menu_ctx, node_id, level);
}
bool menu_permission_check_node_access(MenuNodeId node_id) {
MenuNode* node = menu_core_get_node(&g_menu_ctx, node_id);
if (!node) return false;
#if MENU_CONFIG_ENABLE_PERMISSION
MenuRole* role_node = NULL;
for (uint8_t i = 0; i < g_menu_ctx.permission.role_count; i++) {
if (g_menu_ctx.permission.roles[i].id == g_menu_ctx.permission.current_role_id) {
role_node = &g_menu_ctx.permission.roles[i];
break;
}
}
if (!role_node || role_node->level < node->permission_level) {
return false;
}
#endif
return true;
return menu_permission_check_node_access_impl(&g_menu_ctx, node_id);
}
// Persistence functions
MenuErrCode menu_persistence_save(void) {
return menu_core_save_state(&g_menu_ctx);
return menu_persistence_save_impl(&g_menu_ctx);
}
MenuErrCode menu_persistence_load(void) {
return menu_core_load_state(&g_menu_ctx);
return menu_persistence_load_impl(&g_menu_ctx);
}
MenuErrCode menu_persistence_clear(void) {
return menu_persistence_clear_impl(&g_menu_ctx);
}
bool menu_persistence_is_dirty(void) {
return menu_persistence_is_dirty_impl(&g_menu_ctx);
}
MenuErrCode menu_refresh(void) {
MenuErrCode err = menu_post_event(MENU_EVENT_RENDER, 0);
MenuErrCode err = menu_post_event_normal(MENU_EVENT_RENDER, 0);
if (err != MENU_ERR_OK) {
return err;
}

View File

@ -42,7 +42,8 @@ MenuErrCode menu_register_nodes(
);
// Event Handling
MenuErrCode menu_post_event(MenuEventType type, uint32_t param);
MenuErrCode menu_post_event(MenuEventType type, uint32_t param, MenuEventPriority priority);
MenuErrCode menu_post_event_normal(MenuEventType type, uint32_t param);
// Navigation
MenuErrCode menu_enter(void); // Enter root
@ -60,6 +61,8 @@ bool menu_permission_check_node_access(MenuNodeId node_id);
// Persistence Management
MenuErrCode menu_persistence_save(void);
MenuErrCode menu_persistence_load(void);
MenuErrCode menu_persistence_clear(void);
bool menu_persistence_is_dirty(void);
// Dynamic menu updates
MenuErrCode menu_refresh(void);