diff options
Diffstat (limited to 'lib/lvgl/examples/widgets/menu')
| m--------- | lib/lvgl | 0 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/menu/index.rst | 31 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/menu/lv_example_menu_1.c | 40 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/menu/lv_example_menu_1.py | 28 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/menu/lv_example_menu_2.c | 52 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/menu/lv_example_menu_2.py | 36 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/menu/lv_example_menu_3.c | 59 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/menu/lv_example_menu_3.py | 43 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/menu/lv_example_menu_4.c | 70 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/menu/lv_example_menu_4.py | 47 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/menu/lv_example_menu_5.c | 199 |
11 files changed, 605 insertions, 0 deletions
diff --git a/lib/lvgl b/lib/lvgl deleted file mode 160000 -Subproject 0732400e7b564dd0e7dc4a924619d8e19c5b23a diff --git a/lib/lvgl/examples/widgets/menu/index.rst b/lib/lvgl/examples/widgets/menu/index.rst new file mode 100644 index 00000000..4a5e7c8c --- /dev/null +++ b/lib/lvgl/examples/widgets/menu/index.rst @@ -0,0 +1,31 @@ + +Simple Menu +"""""""""""""""" + +.. lv_example:: widgets/menu/lv_example_menu_1 + :language: c + +Simple Menu with root btn +"""""""""""""""""""""""""""" + +.. lv_example:: widgets/menu/lv_example_menu_2 + :language: c + +Simple Menu with custom header +"""""""""""""""""""""""""""" + +.. lv_example:: widgets/menu/lv_example_menu_3 + :language: c + +Simple Menu with floating btn to add new menu page +"""""""""""""""""""""""""""" + +.. lv_example:: widgets/menu/lv_example_menu_4 + :language: c + +Complex Menu +"""""""""""""""""""""""""""" + +.. lv_example:: widgets/menu/lv_example_menu_5 + :language: c + diff --git a/lib/lvgl/examples/widgets/menu/lv_example_menu_1.c b/lib/lvgl/examples/widgets/menu/lv_example_menu_1.c new file mode 100644 index 00000000..db8d3405 --- /dev/null +++ b/lib/lvgl/examples/widgets/menu/lv_example_menu_1.c @@ -0,0 +1,40 @@ +#include "../../lv_examples.h" +#if LV_USE_MENU && LV_BUILD_EXAMPLES + +void lv_example_menu_1(void) +{ + /*Create a menu object*/ + lv_obj_t * menu = lv_menu_create(lv_scr_act()); + lv_obj_set_size(menu, lv_disp_get_hor_res(NULL), lv_disp_get_ver_res(NULL)); + lv_obj_center(menu); + + lv_obj_t * cont; + lv_obj_t * label; + + /*Create a sub page*/ + lv_obj_t * sub_page = lv_menu_page_create(menu, NULL); + + cont = lv_menu_cont_create(sub_page); + label = lv_label_create(cont); + lv_label_set_text(label, "Hello, I am hiding here"); + + /*Create a main page*/ + lv_obj_t * main_page = lv_menu_page_create(menu, NULL); + + cont = lv_menu_cont_create(main_page); + label = lv_label_create(cont); + lv_label_set_text(label, "Item 1"); + + cont = lv_menu_cont_create(main_page); + label = lv_label_create(cont); + lv_label_set_text(label, "Item 2"); + + cont = lv_menu_cont_create(main_page); + label = lv_label_create(cont); + lv_label_set_text(label, "Item 3 (Click me!)"); + lv_menu_set_load_page_event(menu, cont, sub_page); + + lv_menu_set_page(menu, main_page); +} + +#endif diff --git a/lib/lvgl/examples/widgets/menu/lv_example_menu_1.py b/lib/lvgl/examples/widgets/menu/lv_example_menu_1.py new file mode 100644 index 00000000..1f8c8128 --- /dev/null +++ b/lib/lvgl/examples/widgets/menu/lv_example_menu_1.py @@ -0,0 +1,28 @@ +# Create a menu object +menu = lv.menu(lv.scr_act()) +menu.set_size(320, 240) +menu.center() + +# Create a sub page +sub_page = lv.menu_page(menu, None) +cont = lv.menu_cont(sub_page) +label = lv.label(cont) +label.set_text("Hello, I am hiding here") + +# Create a main page +main_page = lv.menu_page(menu, None) + +cont = lv.menu_cont(main_page) +label = lv.label(cont) +label.set_text("Item 1") + +cont = lv.menu_cont(main_page) +label = lv.label(cont) +label.set_text("Item 2") + +cont = lv.menu_cont(main_page) +label = lv.label(cont) +label.set_text("Item 3 (Click me!)") +menu.set_load_page_event(cont, sub_page) + +menu.set_page(main_page)
\ No newline at end of file diff --git a/lib/lvgl/examples/widgets/menu/lv_example_menu_2.c b/lib/lvgl/examples/widgets/menu/lv_example_menu_2.c new file mode 100644 index 00000000..fe11dc81 --- /dev/null +++ b/lib/lvgl/examples/widgets/menu/lv_example_menu_2.c @@ -0,0 +1,52 @@ +#include "../../lv_examples.h" +#if LV_USE_MENU && LV_USE_MSGBOX && LV_BUILD_EXAMPLES + +static void back_event_handler(lv_event_t * e) +{ + lv_obj_t * obj = lv_event_get_target(e); + lv_obj_t * menu = lv_event_get_user_data(e); + + if(lv_menu_back_btn_is_root(menu, obj)) { + lv_obj_t * mbox1 = lv_msgbox_create(NULL, "Hello", "Root back btn click.", NULL, true); + lv_obj_center(mbox1); + } +} + +void lv_example_menu_2(void) +{ + lv_obj_t * menu = lv_menu_create(lv_scr_act()); + lv_menu_set_mode_root_back_btn(menu, LV_MENU_ROOT_BACK_BTN_ENABLED); + lv_obj_add_event_cb(menu, back_event_handler, LV_EVENT_CLICKED, menu); + lv_obj_set_size(menu, lv_disp_get_hor_res(NULL), lv_disp_get_ver_res(NULL)); + lv_obj_center(menu); + + lv_obj_t * cont; + lv_obj_t * label; + + /*Create a sub page*/ + lv_obj_t * sub_page = lv_menu_page_create(menu, NULL); + + cont = lv_menu_cont_create(sub_page); + label = lv_label_create(cont); + lv_label_set_text(label, "Hello, I am hiding here"); + + /*Create a main page*/ + lv_obj_t * main_page = lv_menu_page_create(menu, NULL); + + cont = lv_menu_cont_create(main_page); + label = lv_label_create(cont); + lv_label_set_text(label, "Item 1"); + + cont = lv_menu_cont_create(main_page); + label = lv_label_create(cont); + lv_label_set_text(label, "Item 2"); + + cont = lv_menu_cont_create(main_page); + label = lv_label_create(cont); + lv_label_set_text(label, "Item 3 (Click me!)"); + lv_menu_set_load_page_event(menu, cont, sub_page); + + lv_menu_set_page(menu, main_page); +} + +#endif diff --git a/lib/lvgl/examples/widgets/menu/lv_example_menu_2.py b/lib/lvgl/examples/widgets/menu/lv_example_menu_2.py new file mode 100644 index 00000000..5787f540 --- /dev/null +++ b/lib/lvgl/examples/widgets/menu/lv_example_menu_2.py @@ -0,0 +1,36 @@ +def back_event_handler(e): + obj = e.get_target() + if menu.back_btn_is_root(obj): + mbox1 = lv.msgbox(lv.scr_act(), "Hello", "Root back btn click.", None, True) + mbox1.center() + +# Create a menu object +menu = lv.menu(lv.scr_act()) +menu.set_mode_root_back_btn(lv.menu.ROOT_BACK_BTN.ENABLED) +menu.add_event_cb(back_event_handler, lv.EVENT.CLICKED, None) +menu.set_size(320, 240) +menu.center() + +# Create a sub page +sub_page = lv.menu_page(menu, None) +cont = lv.menu_cont(sub_page) +label = lv.label(cont) +label.set_text("Hello, I am hiding here") + +# Create a main page +main_page = lv.menu_page(menu, None) + +cont = lv.menu_cont(main_page) +label = lv.label(cont) +label.set_text("Item 1") + +cont = lv.menu_cont(main_page) +label = lv.label(cont) +label.set_text("Item 2") + +cont = lv.menu_cont(main_page) +label = lv.label(cont) +label.set_text("Item 3 (Click me!)") +menu.set_load_page_event(cont, sub_page) + +menu.set_page(main_page)
\ No newline at end of file diff --git a/lib/lvgl/examples/widgets/menu/lv_example_menu_3.c b/lib/lvgl/examples/widgets/menu/lv_example_menu_3.c new file mode 100644 index 00000000..24b9f6c5 --- /dev/null +++ b/lib/lvgl/examples/widgets/menu/lv_example_menu_3.c @@ -0,0 +1,59 @@ +#include "../../lv_examples.h" +#if LV_USE_MENU && LV_USE_USER_DATA && LV_BUILD_EXAMPLES + +void lv_example_menu_3(void) +{ + /*Create a menu object*/ + lv_obj_t * menu = lv_menu_create(lv_scr_act()); + lv_obj_set_size(menu, lv_disp_get_hor_res(NULL), lv_disp_get_ver_res(NULL)); + lv_obj_center(menu); + + /*Modify the header*/ + lv_obj_t * back_btn = lv_menu_get_main_header_back_btn(menu); + lv_obj_t * back_btn_label = lv_label_create(back_btn); + lv_label_set_text(back_btn_label, "Back"); + + lv_obj_t * cont; + lv_obj_t * label; + + /*Create sub pages*/ + lv_obj_t * sub_1_page = lv_menu_page_create(menu, "Page 1"); + + cont = lv_menu_cont_create(sub_1_page); + label = lv_label_create(cont); + lv_label_set_text(label, "Hello, I am hiding here"); + + lv_obj_t * sub_2_page = lv_menu_page_create(menu, "Page 2"); + + cont = lv_menu_cont_create(sub_2_page); + label = lv_label_create(cont); + lv_label_set_text(label, "Hello, I am hiding here"); + + lv_obj_t * sub_3_page = lv_menu_page_create(menu, "Page 3"); + + cont = lv_menu_cont_create(sub_3_page); + label = lv_label_create(cont); + lv_label_set_text(label, "Hello, I am hiding here"); + + /*Create a main page*/ + lv_obj_t * main_page = lv_menu_page_create(menu, NULL); + + cont = lv_menu_cont_create(main_page); + label = lv_label_create(cont); + lv_label_set_text(label, "Item 1 (Click me!)"); + lv_menu_set_load_page_event(menu, cont, sub_1_page); + + cont = lv_menu_cont_create(main_page); + label = lv_label_create(cont); + lv_label_set_text(label, "Item 2 (Click me!)"); + lv_menu_set_load_page_event(menu, cont, sub_2_page); + + cont = lv_menu_cont_create(main_page); + label = lv_label_create(cont); + lv_label_set_text(label, "Item 3 (Click me!)"); + lv_menu_set_load_page_event(menu, cont, sub_3_page); + + lv_menu_set_page(menu, main_page); +} + +#endif diff --git a/lib/lvgl/examples/widgets/menu/lv_example_menu_3.py b/lib/lvgl/examples/widgets/menu/lv_example_menu_3.py new file mode 100644 index 00000000..bbaf937b --- /dev/null +++ b/lib/lvgl/examples/widgets/menu/lv_example_menu_3.py @@ -0,0 +1,43 @@ +# Create a menu object +menu = lv.menu(lv.scr_act()) +menu.set_size(320, 240) +menu.center() + +# Create sub pages +sub_page_1 = lv.menu_page(menu, "Page 1") + +cont = lv.menu_cont(sub_page_1) +label = lv.label(cont) +label.set_text("Hello, I am hiding here") + +sub_page_2 = lv.menu_page(menu, "Page 2") + +cont = lv.menu_cont(sub_page_2) +label = lv.label(cont) +label.set_text("Hello, I am hiding here") + +sub_page_3 = lv.menu_page(menu, "Page 3") + +cont = lv.menu_cont(sub_page_3) +label = lv.label(cont) +label.set_text("Hello, I am hiding here") + +# Create a main page +main_page = lv.menu_page(menu, None) + +cont = lv.menu_cont(main_page) +label = lv.label(cont) +label.set_text("Item 1 (Click me!)") +menu.set_load_page_event(cont, sub_page_1) + +cont = lv.menu_cont(main_page) +label = lv.label(cont) +label.set_text("Item 2 (Click me!)") +menu.set_load_page_event(cont, sub_page_2) + +cont = lv.menu_cont(main_page) +label = lv.label(cont) +label.set_text("Item 3 (Click me!)") +menu.set_load_page_event(cont, sub_page_3) + +menu.set_page(main_page)
\ No newline at end of file diff --git a/lib/lvgl/examples/widgets/menu/lv_example_menu_4.c b/lib/lvgl/examples/widgets/menu/lv_example_menu_4.c new file mode 100644 index 00000000..5807e5d9 --- /dev/null +++ b/lib/lvgl/examples/widgets/menu/lv_example_menu_4.c @@ -0,0 +1,70 @@ +#include "../../lv_examples.h" +#if LV_USE_MENU && LV_BUILD_EXAMPLES + +static uint32_t btn_cnt = 1; +static lv_obj_t * main_page; +static lv_obj_t * menu; + +static void float_btn_event_cb(lv_event_t * e) +{ + LV_UNUSED(e); + + btn_cnt++; + + lv_obj_t * cont; + lv_obj_t * label; + + lv_obj_t * sub_page = lv_menu_page_create(menu, NULL); + + cont = lv_menu_cont_create(sub_page); + label = lv_label_create(cont); + lv_label_set_text_fmt(label, "Hello, I am hiding inside %i", btn_cnt); + + cont = lv_menu_cont_create(main_page); + label = lv_label_create(cont); + lv_label_set_text_fmt(label, "Item %i", btn_cnt); + lv_menu_set_load_page_event(menu, cont, sub_page); + + lv_obj_scroll_to_view_recursive(cont, LV_ANIM_ON); +} + +void lv_example_menu_4(void) +{ + /*Create a menu object*/ + menu = lv_menu_create(lv_scr_act()); + lv_obj_set_size(menu, lv_disp_get_hor_res(NULL), lv_disp_get_ver_res(NULL)); + lv_obj_center(menu); + + lv_obj_t * cont; + lv_obj_t * label; + + /*Create a sub page*/ + lv_obj_t * sub_page = lv_menu_page_create(menu, NULL); + + cont = lv_menu_cont_create(sub_page); + label = lv_label_create(cont); + lv_label_set_text(label, "Hello, I am hiding inside the first item"); + + /*Create a main page*/ + main_page = lv_menu_page_create(menu, NULL); + + cont = lv_menu_cont_create(main_page); + label = lv_label_create(cont); + lv_label_set_text(label, "Item 1"); + lv_menu_set_load_page_event(menu, cont, sub_page); + + lv_menu_set_page(menu, main_page); + + /*Create floating btn*/ + lv_obj_t * float_btn = lv_btn_create(lv_scr_act()); + lv_obj_set_size(float_btn, 50, 50); + lv_obj_add_flag(float_btn, LV_OBJ_FLAG_FLOATING); + lv_obj_align(float_btn, LV_ALIGN_BOTTOM_RIGHT, -10, -10); + lv_obj_add_event_cb(float_btn, float_btn_event_cb, LV_EVENT_CLICKED, menu); + lv_obj_set_style_radius(float_btn, LV_RADIUS_CIRCLE, 0); + lv_obj_set_style_bg_img_src(float_btn, LV_SYMBOL_PLUS, 0); + lv_obj_set_style_text_font(float_btn, lv_theme_get_font_large(float_btn), 0); +} + +#endif + diff --git a/lib/lvgl/examples/widgets/menu/lv_example_menu_4.py b/lib/lvgl/examples/widgets/menu/lv_example_menu_4.py new file mode 100644 index 00000000..4bb190d0 --- /dev/null +++ b/lib/lvgl/examples/widgets/menu/lv_example_menu_4.py @@ -0,0 +1,47 @@ +btn_cnt = 1 + +def float_btn_event_cb(e): + global btn_cnt + btn_cnt += 1 + + sub_page = lv.menu_page(menu, None) + + cont = lv.menu_cont(sub_page) + label = lv.label(cont) + label.set_text("Hello, I am hiding inside {:d}".format(btn_cnt)) + + cont = lv.menu_cont(main_page) + label = lv.label(cont) + label.set_text("Item {:d}".format(btn_cnt)) + menu.set_load_page_event(cont, sub_page) + +# Create a menu object +menu = lv.menu(lv.scr_act()) +menu.set_size(320, 240) +menu.center() + +# Create a sub page +sub_page = lv.menu_page(menu, None) + +cont = lv.menu_cont(sub_page) +label = lv.label(cont) +label.set_text("Hello, I am hiding inside the first item") + +# Create a main page +main_page = lv.menu_page(menu, None) + +cont = lv.menu_cont(main_page) +label = lv.label(cont) +label.set_text("Item 1") +menu.set_load_page_event(cont, sub_page) + +menu.set_page(main_page) + +float_btn = lv.btn(lv.scr_act()) +float_btn.set_size(50, 50) +float_btn.add_flag(lv.obj.FLAG.FLOATING) +float_btn.align(lv.ALIGN.BOTTOM_RIGHT, -10, -10) +float_btn.add_event_cb(float_btn_event_cb, lv.EVENT.CLICKED, None) +float_btn.set_style_radius(lv.RADIUS.CIRCLE, 0) +float_btn.set_style_bg_img_src(lv.SYMBOL.PLUS, 0) +float_btn.set_style_text_font(lv.theme_get_font_large(float_btn), 0)
\ No newline at end of file diff --git a/lib/lvgl/examples/widgets/menu/lv_example_menu_5.c b/lib/lvgl/examples/widgets/menu/lv_example_menu_5.c new file mode 100644 index 00000000..e8068acf --- /dev/null +++ b/lib/lvgl/examples/widgets/menu/lv_example_menu_5.c @@ -0,0 +1,199 @@ +#include "../../lv_examples.h" +#if LV_USE_MENU && LV_USE_MSGBOX && LV_BUILD_EXAMPLES + +enum { + LV_MENU_ITEM_BUILDER_VARIANT_1, + LV_MENU_ITEM_BUILDER_VARIANT_2 +}; +typedef uint8_t lv_menu_builder_variant_t; + +static void back_event_handler(lv_event_t * e); +static void switch_handler(lv_event_t * e); +lv_obj_t * root_page; +static lv_obj_t * create_text(lv_obj_t * parent, const char * icon, const char * txt, + lv_menu_builder_variant_t builder_variant); +static lv_obj_t * create_slider(lv_obj_t * parent, + const char * icon, const char * txt, int32_t min, int32_t max, int32_t val); +static lv_obj_t * create_switch(lv_obj_t * parent, + const char * icon, const char * txt, bool chk); + +void lv_example_menu_5(void) +{ + lv_obj_t * menu = lv_menu_create(lv_scr_act()); + + lv_color_t bg_color = lv_obj_get_style_bg_color(menu, 0); + if(lv_color_brightness(bg_color) > 127) { + lv_obj_set_style_bg_color(menu, lv_color_darken(lv_obj_get_style_bg_color(menu, 0), 10), 0); + } + else { + lv_obj_set_style_bg_color(menu, lv_color_darken(lv_obj_get_style_bg_color(menu, 0), 50), 0); + } + lv_menu_set_mode_root_back_btn(menu, LV_MENU_ROOT_BACK_BTN_ENABLED); + lv_obj_add_event_cb(menu, back_event_handler, LV_EVENT_CLICKED, menu); + lv_obj_set_size(menu, lv_disp_get_hor_res(NULL), lv_disp_get_ver_res(NULL)); + lv_obj_center(menu); + + lv_obj_t * cont; + lv_obj_t * section; + + /*Create sub pages*/ + lv_obj_t * sub_mechanics_page = lv_menu_page_create(menu, NULL); + lv_obj_set_style_pad_hor(sub_mechanics_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0); + lv_menu_separator_create(sub_mechanics_page); + section = lv_menu_section_create(sub_mechanics_page); + create_slider(section, LV_SYMBOL_SETTINGS, "Velocity", 0, 150, 120); + create_slider(section, LV_SYMBOL_SETTINGS, "Acceleration", 0, 150, 50); + create_slider(section, LV_SYMBOL_SETTINGS, "Weight limit", 0, 150, 80); + + lv_obj_t * sub_sound_page = lv_menu_page_create(menu, NULL); + lv_obj_set_style_pad_hor(sub_sound_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0); + lv_menu_separator_create(sub_sound_page); + section = lv_menu_section_create(sub_sound_page); + create_switch(section, LV_SYMBOL_AUDIO, "Sound", false); + + lv_obj_t * sub_display_page = lv_menu_page_create(menu, NULL); + lv_obj_set_style_pad_hor(sub_display_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0); + lv_menu_separator_create(sub_display_page); + section = lv_menu_section_create(sub_display_page); + create_slider(section, LV_SYMBOL_SETTINGS, "Brightness", 0, 150, 100); + + lv_obj_t * sub_software_info_page = lv_menu_page_create(menu, NULL); + lv_obj_set_style_pad_hor(sub_software_info_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0); + section = lv_menu_section_create(sub_software_info_page); + create_text(section, NULL, "Version 1.0", LV_MENU_ITEM_BUILDER_VARIANT_1); + + lv_obj_t * sub_legal_info_page = lv_menu_page_create(menu, NULL); + lv_obj_set_style_pad_hor(sub_legal_info_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0); + section = lv_menu_section_create(sub_legal_info_page); + for(uint32_t i = 0; i < 15; i++) { + create_text(section, NULL, + "This is a long long long long long long long long long text, if it is long enough it may scroll.", + LV_MENU_ITEM_BUILDER_VARIANT_1); + } + + lv_obj_t * sub_about_page = lv_menu_page_create(menu, NULL); + lv_obj_set_style_pad_hor(sub_about_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0); + lv_menu_separator_create(sub_about_page); + section = lv_menu_section_create(sub_about_page); + cont = create_text(section, NULL, "Software information", LV_MENU_ITEM_BUILDER_VARIANT_1); + lv_menu_set_load_page_event(menu, cont, sub_software_info_page); + cont = create_text(section, NULL, "Legal information", LV_MENU_ITEM_BUILDER_VARIANT_1); + lv_menu_set_load_page_event(menu, cont, sub_legal_info_page); + + lv_obj_t * sub_menu_mode_page = lv_menu_page_create(menu, NULL); + lv_obj_set_style_pad_hor(sub_menu_mode_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0); + lv_menu_separator_create(sub_menu_mode_page); + section = lv_menu_section_create(sub_menu_mode_page); + cont = create_switch(section, LV_SYMBOL_AUDIO, "Sidebar enable", true); + lv_obj_add_event_cb(lv_obj_get_child(cont, 2), switch_handler, LV_EVENT_VALUE_CHANGED, menu); + + /*Create a root page*/ + root_page = lv_menu_page_create(menu, "Settings"); + lv_obj_set_style_pad_hor(root_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0); + section = lv_menu_section_create(root_page); + cont = create_text(section, LV_SYMBOL_SETTINGS, "Mechanics", LV_MENU_ITEM_BUILDER_VARIANT_1); + lv_menu_set_load_page_event(menu, cont, sub_mechanics_page); + cont = create_text(section, LV_SYMBOL_AUDIO, "Sound", LV_MENU_ITEM_BUILDER_VARIANT_1); + lv_menu_set_load_page_event(menu, cont, sub_sound_page); + cont = create_text(section, LV_SYMBOL_SETTINGS, "Display", LV_MENU_ITEM_BUILDER_VARIANT_1); + lv_menu_set_load_page_event(menu, cont, sub_display_page); + + create_text(root_page, NULL, "Others", LV_MENU_ITEM_BUILDER_VARIANT_1); + section = lv_menu_section_create(root_page); + cont = create_text(section, NULL, "About", LV_MENU_ITEM_BUILDER_VARIANT_1); + lv_menu_set_load_page_event(menu, cont, sub_about_page); + cont = create_text(section, LV_SYMBOL_SETTINGS, "Menu mode", LV_MENU_ITEM_BUILDER_VARIANT_1); + lv_menu_set_load_page_event(menu, cont, sub_menu_mode_page); + + lv_menu_set_sidebar_page(menu, root_page); + + lv_event_send(lv_obj_get_child(lv_obj_get_child(lv_menu_get_cur_sidebar_page(menu), 0), 0), LV_EVENT_CLICKED, NULL); +} + +static void back_event_handler(lv_event_t * e) +{ + lv_obj_t * obj = lv_event_get_target(e); + lv_obj_t * menu = lv_event_get_user_data(e); + + if(lv_menu_back_btn_is_root(menu, obj)) { + lv_obj_t * mbox1 = lv_msgbox_create(NULL, "Hello", "Root back btn click.", NULL, true); + lv_obj_center(mbox1); + } +} + +static void switch_handler(lv_event_t * e) +{ + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t * menu = lv_event_get_user_data(e); + lv_obj_t * obj = lv_event_get_target(e); + if(code == LV_EVENT_VALUE_CHANGED) { + if(lv_obj_has_state(obj, LV_STATE_CHECKED)) { + lv_menu_set_page(menu, NULL); + lv_menu_set_sidebar_page(menu, root_page); + lv_event_send(lv_obj_get_child(lv_obj_get_child(lv_menu_get_cur_sidebar_page(menu), 0), 0), LV_EVENT_CLICKED, NULL); + } + else { + lv_menu_set_sidebar_page(menu, NULL); + lv_menu_clear_history(menu); /* Clear history because we will be showing the root page later */ + lv_menu_set_page(menu, root_page); + } + } +} + +static lv_obj_t * create_text(lv_obj_t * parent, const char * icon, const char * txt, + lv_menu_builder_variant_t builder_variant) +{ + lv_obj_t * obj = lv_menu_cont_create(parent); + + lv_obj_t * img = NULL; + lv_obj_t * label = NULL; + + if(icon) { + img = lv_img_create(obj); + lv_img_set_src(img, icon); + } + + if(txt) { + label = lv_label_create(obj); + lv_label_set_text(label, txt); + lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR); + lv_obj_set_flex_grow(label, 1); + } + + if(builder_variant == LV_MENU_ITEM_BUILDER_VARIANT_2 && icon && txt) { + lv_obj_add_flag(img, LV_OBJ_FLAG_FLEX_IN_NEW_TRACK); + lv_obj_swap(img, label); + } + + return obj; +} + +static lv_obj_t * create_slider(lv_obj_t * parent, const char * icon, const char * txt, int32_t min, int32_t max, + int32_t val) +{ + lv_obj_t * obj = create_text(parent, icon, txt, LV_MENU_ITEM_BUILDER_VARIANT_2); + + lv_obj_t * slider = lv_slider_create(obj); + lv_obj_set_flex_grow(slider, 1); + lv_slider_set_range(slider, min, max); + lv_slider_set_value(slider, val, LV_ANIM_OFF); + + if(icon == NULL) { + lv_obj_add_flag(slider, LV_OBJ_FLAG_FLEX_IN_NEW_TRACK); + } + + return obj; +} + +static lv_obj_t * create_switch(lv_obj_t * parent, const char * icon, const char * txt, bool chk) +{ + lv_obj_t * obj = create_text(parent, icon, txt, LV_MENU_ITEM_BUILDER_VARIANT_1); + + lv_obj_t * sw = lv_switch_create(obj); + lv_obj_add_state(sw, chk ? LV_STATE_CHECKED : 0); + + return obj; +} + +#endif + |
