Files
DTU-HMI/src/Drv/menu/model/menu_model.c

53 lines
1.6 KiB
C

#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;
}