主菜单

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

1、新增图标风格

thread arch thread arch

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

thread arch thread arch
#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 :私有数据

thread arch thread arch

  例如在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号