主菜单
主菜单作为系统所有应用程序的入口,提供了多样化的 APP 图标风格,并且支持配置 APP 的显示顺序。
1、新增图标风格


方案默认注册了两种风格的图标资源,如上所示:style1 为圆形图标,style2 为方形图标。


#define APPLICATION_REGISTER(key_str, img, app_name, ptr_size) \
APP_PAGE_REGISTER(app_name, "root", ptr_size); \
APPLICATION_MAIN(app_name, ptr_size); \
BUILTIN_APP_EXPORT(key_str, APP_GET_IMG_FROM_APP(mainmenu, img), app_name, app_main, 1); \
BUILTIN_APP_EXPORT(key_str, APP_GET_IMG_FROM_APP(CONCAT_2(mainmenu, 2), CONCAT_2(img, 2)), app_name, app_main, 2); \
//BUILTIN_APP_EXPORT(key_str, APP_GET_IMG_FROM_APP(CONCAT_2(mainmenu, 3), CONCAT_2(img, 3)), app_name, app_main, 3); \
新增图标风格的步骤:
1) 在资源目录 \resource\images\mainmenuX下创建新的资源目录(X 为风格序号)
2) 在代码根目录 \solution\framework\gui_fwk\reg_fwk\app_reg.c中添加该风格类型的索引
3) 在主菜单注册接口APPLICATION_REGISTER中添加自定义的 style 索引
2、自定义主菜单
通过APPLICATION_REGISTER接口可注册自定义主菜单,创建图标时需指定获取的图标 style 索引值。
获取指定图标链表接口如下
void builtin_app_get_table(builtin_app_desc_t **beg, builtin_app_desc_t **end, uint16_t n)
1) beg 返回指向图标起始段的首地址指针
2) end 返回指向图标结束段的首地址指针
3) n 指定图标的style索引值,如2
注册主菜单需调用接口函数APP_MAINMENU_REGISTER,该函数的参数说明如下:
宏定义APP_MAINMENU_REGISTER(id, name, icon, callback)
1) name:tile的名字
2) id:唯一标识
3) icon:主菜单的图标,用于设置页面中的主菜单选择
4) callback:实例回调处理函数
如下为定义list菜单案例
static void on_resume(void)
{
}
static void on_pause(void)
{
}
static void on_stop(void)
{
}
static void msg_handler(gui_app_msg_type_t msg, void *param)
{
static uint8_t start = 0;
switch (msg)
{
case GUI_APP_MSG_ONSTART:
on_start();
break;
case GUI_APP_MSG_ONRESUME:
on_resume();
break;
case GUI_APP_MSG_ONPAUSE:
on_pause();
break;
case GUI_APP_MSG_ONSTOP:
on_stop();
break;
default:
;
}
}
APP_MAINMENU_REGISTER(List, app_get_strid(key_mainmenu_list, "List"), img_menu_list, msg_handler);
3、图标排序
为方便指定图标的排列顺序,调用方案提供的 builtin_app_read_all 接口加载图标时,可指定图标风格及 APP 的排列顺序。
void builtin_app_read_all(builtin_app_read_app_cb cb, app_list_sort_t *sort_tab, uint16_t size, uint16_t style, void *user_data)
1) cb :APP读取的回调函数
2) sort_tab :是否有排序的数表
3) size :排序数表的个数
4) style :读取的风格类型
5) user_data :私有数据


例如在list菜单中调整APP的排序顺序,可在调用builtin_app_read_all前够着一个排序表,并传递给该接口函数。呈现结果如上图所示
4、主菜单切换
主菜单框架应用管理所有主菜单,动过加载或切换不同主菜单,实现不是的主菜单视图。主菜单框架注册了一个"main"的主菜单应用。
该应用读取当前设定的菜单ID,决定加载或切换到对应的菜单。可调用app_menu_current_regist接口函数,设定当前需要激活的主菜单。
rt_err_t app_menu_current_regist(const char *id)
1) id 需要激活的主菜单ID号