summaryrefslogtreecommitdiff
path: root/lib/lvgl/examples/widgets/menu
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-06-01 15:41:47 +1000
committerjacqueline <me@jacqueline.id.au>2023-06-01 15:41:47 +1000
commitdd27c3530432ea0b09f01e604bf577f31d8ef841 (patch)
treebbf86cf81a78f0ff0b07f31f1c390db473f26fd3 /lib/lvgl/examples/widgets/menu
parent6fd588e970470b15936187980829916d0dbe77bb (diff)
downloadtangara-fw-dd27c3530432ea0b09f01e604bf577f31d8ef841.tar.gz
convert lvgl from submodule to a plain old directory
Diffstat (limited to 'lib/lvgl/examples/widgets/menu')
m---------lib/lvgl0
-rw-r--r--lib/lvgl/examples/widgets/menu/index.rst31
-rw-r--r--lib/lvgl/examples/widgets/menu/lv_example_menu_1.c40
-rw-r--r--lib/lvgl/examples/widgets/menu/lv_example_menu_1.py28
-rw-r--r--lib/lvgl/examples/widgets/menu/lv_example_menu_2.c52
-rw-r--r--lib/lvgl/examples/widgets/menu/lv_example_menu_2.py36
-rw-r--r--lib/lvgl/examples/widgets/menu/lv_example_menu_3.c59
-rw-r--r--lib/lvgl/examples/widgets/menu/lv_example_menu_3.py43
-rw-r--r--lib/lvgl/examples/widgets/menu/lv_example_menu_4.c70
-rw-r--r--lib/lvgl/examples/widgets/menu/lv_example_menu_4.py47
-rw-r--r--lib/lvgl/examples/widgets/menu/lv_example_menu_5.c199
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
+