重构显示逻辑为 MVP 架构,进行显示模块的解耦
This commit is contained in:
52
src/Drv/menu/model/menu_model.c
Normal file
52
src/Drv/menu/model/menu_model.c
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user