53 lines
1.6 KiB
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;
|
|
}
|