多级菜单 (Multi level)

该控件可用于需要管理复杂层次结构的GUI应用程序,例如嵌套的菜单结构和分层显示对象。使用此控件,开发人员可以灵活地管理和操作多层子窗口,实现特定层次和顺序对象的隐藏和显示,从而增强界面的动态性和交互性。

用法

创建控件

创建函数为 gui_multi_level_create()。此函数创建并初始化一个新的 gui_multi_level_t 控件实例。

跳转到(层次,索引)

函数为 gui_multi_level_jump()。此函数便于跳转到多层GUI结构中的特定层次和索引。

示例



  • 在0~2层级中创建多级菜单,根据嵌套结构。

GUI_APP_ENTRY(APP_SETTING)
{
    gui_multi_level_t *m0 = gui_multi_level_create(GUI_APP_ROOT_SCREEN, 0, ui_design_0);//main
    gui_multi_level_t *m1_0 = gui_multi_level_create(m0, 0, ui_design_1_0);//mydevice
    gui_multi_level_t *m1_1 = gui_multi_level_create(m0, 0, ui_design_1_1);//battery
    gui_multi_level_t *m1_2 = gui_multi_level_create(m0, 0, ui_design_1_2);//bluetooth
    gui_multi_level_t *m2_0 = gui_multi_level_create(m1_0, 0, ui_design_2_0);//rename
    gui_multi_level_t *m2_1 = gui_multi_level_create(m1_0, 0, ui_design_2_1);//storage
}
  • ui_design_xx 函数将在显示特定(层次,索引)多层窗口时创建显示内容。


#define HIGHLIGHT_BLUE gui_rgb(0, 100, 255)
struct button_args
{
    gui_multi_level_t *parent;
    unsigned char index;
    unsigned char level;
};

static void multi_levle_button_cb(gui_obj_t *this, void *event, struct button_args *args)
{
    GUI_API(gui_multi_level_t).jump(args->parent, args->level, args->index);
}
static void ui_design_0(gui_obj_t *parent)
{
    {
        gui_button_t *button = gui_button_create(parent, 0, 0, 454, 100, MYDEVICE_BIN, MYDEVICEHL_BIN, 0, 0,
                                                 0);
        static struct button_args args;
        args.parent = (void *)parent;
        args.level = 1;
        args.index = 0;
        GUI_API(gui_button_t).on_click(button, (gui_event_cb_t)multi_levle_button_cb, &args);
    }
    {
        gui_button_t *button = gui_button_create(parent, 0, 102 * 1, 454, 100, BATTERY_BIN, BATTERYHL_BIN,
                                                 0, 0, 0);
        static struct button_args args;
        args.parent = (void *)parent;
        args.level = 1;
        args.index = 1;
        GUI_API(gui_button_t).on_click(button, (gui_event_cb_t)multi_levle_button_cb, &args);
    }
    {
        gui_button_t *button = gui_button_create(parent, 0, 102 * 2, 454, 100, BLUETOOTH_BIN,
                                                 BLUETOOTHHL_BIN, 0, 0, 0);
        static struct button_args args;
        args.parent = (void *)parent;
        args.level = 1;
        args.index = 2;
        GUI_API(gui_button_t).on_click(button, (gui_event_cb_t)multi_levle_button_cb, &args);
    }
    gui_return_create(parent, gui_app_return_array,
                      sizeof(gui_app_return_array) / sizeof(uint32_t *), win_cb, (void *)0);
}

API

Functions

gui_multi_level_t *gui_multi_level_create(void *parent, const char *widget_name, void (*ui_design)(gui_obj_t*))

Create a multi_level widget.

参数:
  • parent – The father widget nested in.

  • widget_name – The widget name.

  • x – The X-axis coordinate.

  • y – The Y-axis coordinate.

  • ui_design – Ui_design function pointer.

返回:

Return the widget object pointer.

void gui_multi_level_jump(gui_multi_level_t *this, int level, int index)

Jump to a specific multi_level widget.

参数:
  • this – One of the multi_level widgets in app.

  • level – Specific level. 0,1,2…

  • index – Index in this level. 0,1,2…

gui_multi_level_t *gui_multi_level_get_group(const char *group_name)

Get a multi_level widget by group name.

参数:

group_name – Multi_level widget group name.

返回:

Return the widget object pointer.

Variables

_gui_api_gui_multi_level_t _gui_api_for_gui_multi_level_t
struct gui_multi_level_t

multi_level structure

Public Members

gui_obj_t base
void (*ui_design)(gui_obj_t*)
const char *group_name
bool hidden
uint8_t level
uint8_t index
struct _gui_api_gui_multi_level_t

Public Members

void (*jump)(gui_multi_level_t *this, int levle, int index)

Jump to a specific multi_level widget.

Param this:

One of the multi_level widgets in app.

Param level:

Specific level. 0,1,2…

Param index:

Index in this level. 0,1,2…