#include "menu_model.h" #include #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; }