重构显示逻辑为 MVP 架构,进行显示模块的解耦

This commit is contained in:
2026-03-24 19:52:22 +08:00
parent a4bf0962b2
commit 0690d6a00e
42 changed files with 2207 additions and 1417 deletions

View File

@@ -0,0 +1,52 @@
#include "menu_model.h"
#include <stddef.h>
#include "menu_tree_builder.h"
/* 初始化阶段一次性修饰菜单名称:对有子项的节点追加 '\x10' 指示符。 */
static void MenuModel_DecorateDisplayNames(tagMenuItem *items, uint32_t maxItem)
{
for (uint32_t i = 0; i < maxItem; i++)
{
uint16_t nameCapacity = (uint16_t)sizeof(items[i].byName);
uint16_t maxTextLenWithoutNull = (uint16_t)(nameCapacity - 1);
uint16_t len = 0;
if (items[i].ptLower == NULL)
{
continue;
}
while ((len < maxTextLenWithoutNull) && (items[i].byName[len] != '\0'))
{
len++;
}
if ((len == 0) || (items[i].byName[len - 1] != '\x10'))
{
if (len < maxTextLenWithoutNull)
{
items[i].byName[len] = '\x10';
items[i].byName[len + 1] = '\0';
}
}
}
}
void MenuModel_Bootstrap(tagMenuCtrl *menuCtrl,
tagMenuItem *menuItems,
const tagMenuModel *modelTab,
uint32_t modelCount)
{
MenuTree_0LevelNumCal(menuCtrl, modelTab, modelCount);
MenuTree_MainCreate(menuItems, modelTab, modelCount);
MenuModel_DecorateDisplayNames(menuItems, modelCount);
menuCtrl->ptHead = &menuItems[0];
menuCtrl->ptRoute[0] = &menuItems[0];
menuCtrl->pt0Level = menuCtrl->ptRoute[0];
menuCtrl->ptCurrent = menuCtrl->ptHead->ptLower;
menuCtrl->ptCurBak = menuCtrl->ptCurrent;
menuCtrl->ptRoute[1] = menuCtrl->ptCurrent;
menuCtrl->ptRoute[2] = menuCtrl->ptCurrent;
menuCtrl->ptRoute[3] = menuCtrl->ptCurrent;
}