1 Star 0 Fork 8

Anderson/vtor_elec_module

forked from vtor3478/vtor_elec_module 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
vtor_menu.c 2.32 KB
一键复制 编辑 原始数据 按行查看 历史
#include "vtor_menu.h"
#ifdef __VTOR_MENU__
struct VtorMenu* pCurVtorMenu = NULL;
void VtorMenu_Display()
{
// 显示预处理
VtorMenu_PreProcess();
// 先绘制标题
struct VtorMenu* pCurMenuItem = NULL;
// 再绘制菜单内容,从1开始,因为0表示了上级目录
for (unsigned char itemIdx = 0; itemIdx < pCurVtorMenu->itemCnt; ++itemIdx)
{
pCurMenuItem = pCurVtorMenu->item[itemIdx];
// 0指向父菜单,显示时需要调整为自身
if (pCurMenuItem == pCurVtorMenu->item[0])
{
pCurMenuItem = pCurVtorMenu;
}
pCurMenuItem->display(itemIdx, pCurMenuItem);
}
}
void VtorMenu_Operate(uint8_t opType, int32_t opValue)
{
struct VtorMenu* pCurMenuItem = pCurVtorMenu->item[pCurVtorMenu->itemIdx];
// 0指向父菜单,操作时需要调整为自身
if (pCurMenuItem == pCurVtorMenu->item[0])
{
pCurMenuItem = pCurVtorMenu;
}
// 点击操作会改变pCurVtorMenu,单独处理!!!
if (VTOR_MENU_OPERATE_ENTER == opType)
{
pCurVtorMenu = pCurVtorMenu->item[pCurVtorMenu->itemIdx]; // 直接item跳转即可
return ;
}
switch(opType)
{
// 针对项选择,需要操作pCurVtorMenu
case VTOR_MENU_OPERATE_ITEM_UP:
pCurVtorMenu->itemIdx -= opValue;
break;
case VTOR_MENU_OPERATE_ITEM_DOWN:
pCurVtorMenu->itemIdx += opValue;
break;
case VTOR_MENU_OPERATE_ITEM_SELECT:
pCurVtorMenu->itemIdx = opValue;
break;
// 针对项的值,需要操作pCurMenuIte
case VTOR_MENU_OPERATE_VALUE_UP:
pCurMenuItem->value += opValue;
break;
case VTOR_MENU_OPERATE_VALUE_DOWN:
pCurMenuItem->value -= opValue;
break;
case VTOR_MENU_OPERATE_VALUE_SET:
pCurMenuItem->value = opValue;
break;
case VTOR_MENU_OPERATE_HANDLER:
if (NULL != pCurMenuItem->handler)
{
pCurMenuItem->handler(pCurMenuItem);
}
break;
default:
break;
}
pCurVtorMenu->itemIdx = (pCurVtorMenu->itemIdx + pCurVtorMenu->itemCnt) % (pCurVtorMenu->itemCnt);
// 操作后再处理
VtorMenu_ReProcess();
}
void VtorMenu_RelateItem(struct VtorMenu* pParentMenu, struct VtorMenu* pItemMenu)
{
pParentMenu->item[pParentMenu->itemCnt] = pItemMenu;
pParentMenu->itemCnt++;
pItemMenu->item[0] = pParentMenu;
pItemMenu->itemCnt = 1;
if (NULL == pItemMenu->display)
{
pItemMenu->display = VtorMenu_DisplayItem;
}
if (NULL == pItemMenu->handler)
{
pItemMenu->handler = VtorMenu_Handler;
}
}
#endif // __VTOR_MENU__
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/Thomas_Ti/vtor_elec_module.git
git@gitee.com:Thomas_Ti/vtor_elec_module.git
Thomas_Ti
vtor_elec_module
vtor_elec_module
main

搜索帮助

0d507c66 1850385 C8b1a773 1850385