diff --git a/lib/libesp32_lvgl/lv_binding_berry/generate/be_lv_c_mapping.h b/lib/libesp32_lvgl/lv_binding_berry/generate/be_lv_c_mapping.h index be71581c1..c880b3918 100644 --- a/lib/libesp32_lvgl/lv_binding_berry/generate/be_lv_c_mapping.h +++ b/lib/libesp32_lvgl/lv_binding_berry/generate/be_lv_c_mapping.h @@ -529,6 +529,8 @@ const be_ntv_func_def_t lv_obj_func[] = { { "set_style_width", { (const void*) &lv_obj_set_style_width, "", "(lv.lv_obj)ii" } }, { "set_style_x", { (const void*) &lv_obj_set_style_x, "", "(lv.lv_obj)ii" } }, { "set_style_y", { (const void*) &lv_obj_set_style_y, "", "(lv.lv_obj)ii" } }, + { "set_tile", { (const void*) &lv_obj_set_tile, "", "(lv.lv_obj)(lv.lv_obj)i" } }, + { "set_tile_id", { (const void*) &lv_obj_set_tile_id, "", "(lv.lv_obj)iii" } }, { "set_user_data", { (const void*) &lv_obj_set_user_data, "", "(lv.lv_obj)." } }, { "set_width", { (const void*) &lv_obj_set_width, "", "(lv.lv_obj)i" } }, { "set_x", { (const void*) &lv_obj_set_x, "", "(lv.lv_obj)i" } }, @@ -704,6 +706,15 @@ const be_ntv_func_def_t lv_led_func[] = { }; #endif // BE_LV_WIDGET_LED +/* `lv_list` methods */ +#ifdef BE_LV_WIDGET_LIST +const be_ntv_func_def_t lv_list_func[] = { + { "add_btn", { (const void*) &lv_list_add_btn, "lv.lv_obj", "(lv.lv_obj).s" } }, + { "add_text", { (const void*) &lv_list_add_text, "lv.lv_obj", "(lv.lv_obj)s" } }, + { "get_btn_text", { (const void*) &lv_list_get_btn_text, "s", "(lv.lv_obj)(lv.lv_obj)" } }, +}; +#endif // BE_LV_WIDGET_LIST + /* `lv_meter` methods */ #ifdef BE_LV_WIDGET_METER const be_ntv_func_def_t lv_meter_func[] = { @@ -762,6 +773,26 @@ const be_ntv_func_def_t lv_spinner_func[] = { }; #endif // BE_LV_WIDGET_SPINNER +/* `lv_tabview` methods */ +#ifdef BE_LV_WIDGET_TABVIEW +const be_ntv_func_def_t lv_tabview_func[] = { + { "add_tab", { (const void*) &lv_tabview_add_tab, "lv.lv_obj", "(lv.lv_obj)s" } }, + { "get_content", { (const void*) &lv_tabview_get_content, "lv.lv_obj", "(lv.lv_obj)" } }, + { "get_tab_act", { (const void*) &lv_tabview_get_tab_act, "i", "(lv.lv_obj)" } }, + { "get_tab_btns", { (const void*) &lv_tabview_get_tab_btns, "lv.lv_obj", "(lv.lv_obj)" } }, + { "rename_tab", { (const void*) &lv_tabview_rename_tab, "", "(lv.lv_obj)is" } }, + { "set_act", { (const void*) &lv_tabview_set_act, "", "(lv.lv_obj)ii" } }, +}; +#endif // BE_LV_WIDGET_TABVIEW + +/* `lv_tileview` methods */ +#ifdef BE_LV_WIDGET_TILEVIEW +const be_ntv_func_def_t lv_tileview_func[] = { + { "add_tile", { (const void*) &lv_tileview_add_tile, "lv.lv_obj", "(lv.lv_obj)iii" } }, + { "get_tile_act", { (const void*) &lv_tileview_get_tile_act, "lv.lv_obj", "(lv.lv_obj)" } }, +}; +#endif // BE_LV_WIDGET_TILEVIEW + /* `lv_anim` methods */ const be_ntv_func_def_t lv_anim_func[] = { { "custom_del", { (const void*) &lv_anim_custom_del, "b", "(lv.lv_anim)c" } }, @@ -1062,6 +1093,7 @@ extern const bclass be_class_lv_keyboard; extern const bclass be_class_lv_label; extern const bclass be_class_lv_led; extern const bclass be_class_lv_line; +extern const bclass be_class_lv_list; extern const bclass be_class_lv_meter; extern const bclass be_class_lv_msgbox; extern const bclass be_class_lv_obj; @@ -1073,8 +1105,10 @@ extern const bclass be_class_lv_spinner; extern const bclass be_class_lv_style; extern const bclass be_class_lv_switch; extern const bclass be_class_lv_table; +extern const bclass be_class_lv_tabview; extern const bclass be_class_lv_textarea; extern const bclass be_class_lv_theme; +extern const bclass be_class_lv_tileview; extern const bclass be_class_lv_timer; @@ -1131,6 +1165,9 @@ const be_ntv_class_def_t lv_classes[] = { #ifdef BE_LV_WIDGET_LINE { "lv_line", &be_class_lv_line, lv_line_func, sizeof(lv_line_func) / sizeof(lv_line_func[0]) }, #endif // BE_LV_WIDGET_LINE +#ifdef BE_LV_WIDGET_LIST + { "lv_list", &be_class_lv_list, lv_list_func, sizeof(lv_list_func) / sizeof(lv_list_func[0]) }, +#endif // BE_LV_WIDGET_LIST #ifdef BE_LV_WIDGET_METER { "lv_meter", &be_class_lv_meter, lv_meter_func, sizeof(lv_meter_func) / sizeof(lv_meter_func[0]) }, #endif // BE_LV_WIDGET_METER @@ -1160,10 +1197,16 @@ const be_ntv_class_def_t lv_classes[] = { #ifdef BE_LV_WIDGET_TABLE { "lv_table", &be_class_lv_table, lv_table_func, sizeof(lv_table_func) / sizeof(lv_table_func[0]) }, #endif // BE_LV_WIDGET_TABLE +#ifdef BE_LV_WIDGET_TABVIEW + { "lv_tabview", &be_class_lv_tabview, lv_tabview_func, sizeof(lv_tabview_func) / sizeof(lv_tabview_func[0]) }, +#endif // BE_LV_WIDGET_TABVIEW #ifdef BE_LV_WIDGET_TEXTAREA { "lv_textarea", &be_class_lv_textarea, lv_textarea_func, sizeof(lv_textarea_func) / sizeof(lv_textarea_func[0]) }, #endif // BE_LV_WIDGET_TEXTAREA { "lv_theme", &be_class_lv_theme, lv_theme_func, sizeof(lv_theme_func) / sizeof(lv_theme_func[0]) }, +#ifdef BE_LV_WIDGET_TILEVIEW + { "lv_tileview", &be_class_lv_tileview, lv_tileview_func, sizeof(lv_tileview_func) / sizeof(lv_tileview_func[0]) }, +#endif // BE_LV_WIDGET_TILEVIEW { "lv_timer", &be_class_lv_timer, lv_timer_func, sizeof(lv_timer_func) / sizeof(lv_timer_func[0]) }, }; const size_t lv_classes_size = sizeof(lv_classes) / sizeof(lv_classes[0]); @@ -1210,6 +1253,10 @@ const size_t lv_classes_size = sizeof(lv_classes) / sizeof(lv_classes[0]); #ifdef BE_LV_WIDGET_LED int be_ntv_lv_led_init(bvm *vm) { return be_call_c_func(vm, (void*) &lv_led_create, "+_p", "(lv.lv_obj)"); } #endif // BE_LV_WIDGET_LED + /* `lv_list` methods */ +#ifdef BE_LV_WIDGET_LIST + int be_ntv_lv_list_init(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_create, "+_p", "(lv.lv_obj)"); } +#endif // BE_LV_WIDGET_LIST /* `lv_meter` methods */ #ifdef BE_LV_WIDGET_METER int be_ntv_lv_meter_init(bvm *vm) { return be_call_c_func(vm, (void*) &lv_meter_create, "+_p", "(lv.lv_obj)"); } @@ -1226,6 +1273,14 @@ const size_t lv_classes_size = sizeof(lv_classes) / sizeof(lv_classes[0]); #ifdef BE_LV_WIDGET_SPINNER int be_ntv_lv_spinner_init(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinner_create, "+_p", "(lv.lv_obj)ii"); } #endif // BE_LV_WIDGET_SPINNER + /* `lv_tabview` methods */ +#ifdef BE_LV_WIDGET_TABVIEW + int be_ntv_lv_tabview_init(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tabview_create, "+_p", "(lv.lv_obj)ii"); } +#endif // BE_LV_WIDGET_TABVIEW + /* `lv_tileview` methods */ +#ifdef BE_LV_WIDGET_TILEVIEW + int be_ntv_lv_tileview_init(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tileview_create, "+_p", "(lv.lv_obj)"); } +#endif // BE_LV_WIDGET_TILEVIEW /* `lv_anim` methods */ /* `lv_timer` methods */ /* `lv_arc` methods */ diff --git a/lib/libesp32_lvgl/lv_binding_berry/generate/be_lvgl_module.c b/lib/libesp32_lvgl/lv_binding_berry/generate/be_lvgl_module.c index db62ac304..e040b1212 100644 --- a/lib/libesp32_lvgl/lv_binding_berry/generate/be_lvgl_module.c +++ b/lib/libesp32_lvgl/lv_binding_berry/generate/be_lvgl_module.c @@ -483,6 +483,14 @@ const be_const_member_t lv0_constants[] = { { "INDEV_TYPE_KEYPAD", be_cconst_int(LV_INDEV_TYPE_KEYPAD) }, { "INDEV_TYPE_NONE", be_cconst_int(LV_INDEV_TYPE_NONE) }, { "INDEV_TYPE_POINTER", be_cconst_int(LV_INDEV_TYPE_POINTER) }, + { "KEYBOARD_MODE_NUMBER", be_cconst_int(LV_KEYBOARD_MODE_NUMBER) }, + { "KEYBOARD_MODE_SPECIAL", be_cconst_int(LV_KEYBOARD_MODE_SPECIAL) }, + { "KEYBOARD_MODE_TEXT_LOWER", be_cconst_int(LV_KEYBOARD_MODE_TEXT_LOWER) }, + { "KEYBOARD_MODE_TEXT_UPPER", be_cconst_int(LV_KEYBOARD_MODE_TEXT_UPPER) }, + { "KEYBOARD_MODE_USER_1", be_cconst_int(LV_KEYBOARD_MODE_USER_1) }, + { "KEYBOARD_MODE_USER_2", be_cconst_int(LV_KEYBOARD_MODE_USER_2) }, + { "KEYBOARD_MODE_USER_3", be_cconst_int(LV_KEYBOARD_MODE_USER_3) }, + { "KEYBOARD_MODE_USER_4", be_cconst_int(LV_KEYBOARD_MODE_USER_4) }, { "KEY_BACKSPACE", be_cconst_int(LV_KEY_BACKSPACE) }, { "KEY_DEL", be_cconst_int(LV_KEY_DEL) }, { "KEY_DOWN", be_cconst_int(LV_KEY_DOWN) }, diff --git a/lib/libesp32_lvgl/lv_binding_berry/generate/be_lvgl_widgets_lib.c b/lib/libesp32_lvgl/lv_binding_berry/generate/be_lvgl_widgets_lib.c index 52a75bb5c..3a734f566 100644 --- a/lib/libesp32_lvgl/lv_binding_berry/generate/be_lvgl_widgets_lib.c +++ b/lib/libesp32_lvgl/lv_binding_berry/generate/be_lvgl_widgets_lib.c @@ -541,6 +541,8 @@ extern int lvbe_obj_get_style_grid_cell_row_pos(bvm *vm); extern int lvbe_obj_get_style_grid_cell_row_span(bvm *vm); extern int lvbe_obj_get_style_grid_cell_x_align(bvm *vm); extern int lvbe_obj_get_style_grid_cell_y_align(bvm *vm); +extern int lvbe_obj_set_tile(bvm *vm); +extern int lvbe_obj_set_tile_id(bvm *vm); extern int lvbe_obj_move_foreground(bvm *vm); extern int lvbe_obj_move_background(bvm *vm); extern int lvbe_obj_get_child_id(bvm *vm); @@ -685,6 +687,12 @@ extern int lvbe_led_off(bvm *vm); extern int lvbe_led_toggle(bvm *vm); extern int lvbe_led_get_brightness(bvm *vm); +/* `lv_list` external functions definitions */ +extern int lvbe_list_create(bvm *vm); +extern int lvbe_list_add_text(bvm *vm); +extern int lvbe_list_add_btn(bvm *vm); +extern int lvbe_list_get_btn_text(bvm *vm); + /* `lv_meter` external functions definitions */ extern int lvbe_meter_create(bvm *vm); extern int lvbe_meter_add_scale(bvm *vm); @@ -731,6 +739,20 @@ extern int lvbe_spinbox_decrement(bvm *vm); /* `lv_spinner` external functions definitions */ extern int lvbe_spinner_create(bvm *vm); +/* `lv_tabview` external functions definitions */ +extern int lvbe_tabview_create(bvm *vm); +extern int lvbe_tabview_add_tab(bvm *vm); +extern int lvbe_tabview_rename_tab(bvm *vm); +extern int lvbe_tabview_get_content(bvm *vm); +extern int lvbe_tabview_get_tab_btns(bvm *vm); +extern int lvbe_tabview_set_act(bvm *vm); +extern int lvbe_tabview_get_tab_act(bvm *vm); + +/* `lv_tileview` external functions definitions */ +extern int lvbe_tileview_create(bvm *vm); +extern int lvbe_tileview_add_tile(bvm *vm); +extern int lvbe_tileview_get_tile_act(bvm *vm); + /* `lv_anim` external functions definitions */ extern int lvbe_anim_init(bvm *vm); extern int lvbe_anim_set_var(bvm *vm); @@ -983,10 +1005,13 @@ extern int be_ntv_lv_imgbtn_init(bvm *vm); extern int be_ntv_lv_keyboard_init(bvm *vm); extern int be_ntv_lv_btnmatrix_init(bvm *vm); extern int be_ntv_lv_led_init(bvm *vm); +extern int be_ntv_lv_list_init(bvm *vm); extern int be_ntv_lv_meter_init(bvm *vm); extern int be_ntv_lv_msgbox_init(bvm *vm); extern int be_ntv_lv_spinbox_init(bvm *vm); extern int be_ntv_lv_spinner_init(bvm *vm); +extern int be_ntv_lv_tabview_init(bvm *vm); +extern int be_ntv_lv_tileview_init(bvm *vm); extern int be_ntv_lv_anim_init(bvm *vm); extern int be_ntv_lv_timer_init(bvm *vm); extern int be_ntv_lv_arc_init(bvm *vm); @@ -1024,6 +1049,7 @@ extern const bclass be_class_lv_keyboard; extern const bclass be_class_lv_label; extern const bclass be_class_lv_led; extern const bclass be_class_lv_line; +extern const bclass be_class_lv_list; extern const bclass be_class_lv_meter; extern const bclass be_class_lv_msgbox; extern const bclass be_class_lv_obj; @@ -1035,8 +1061,10 @@ extern const bclass be_class_lv_spinner; extern const bclass be_class_lv_style; extern const bclass be_class_lv_switch; extern const bclass be_class_lv_table; +extern const bclass be_class_lv_tabview; extern const bclass be_class_lv_textarea; extern const bclass be_class_lv_theme; +extern const bclass be_class_lv_tileview; extern const bclass be_class_lv_timer; @@ -1262,6 +1290,17 @@ class be_class_lv_led (scope: global, name: lv_led, super: be_class_lv_obj, stri } @const_object_info_end */ +/******************************************************************** +** Solidified class: lv_list +********************************************************************/ +#include "be_fixed_be_class_lv_list.h" +/* @const_object_info_begin +class be_class_lv_list (scope: global, name: lv_list, super: be_class_lv_obj, strings: weak) { + _class, comptr(&lv_list_class) + init, func(be_ntv_lv_list_init) +} +@const_object_info_end */ + /******************************************************************** ** Solidified class: lv_meter ********************************************************************/ @@ -1308,6 +1347,28 @@ class be_class_lv_spinner (scope: global, name: lv_spinner, super: be_class_lv_a } @const_object_info_end */ +/******************************************************************** +** Solidified class: lv_tabview +********************************************************************/ +#include "be_fixed_be_class_lv_tabview.h" +/* @const_object_info_begin +class be_class_lv_tabview (scope: global, name: lv_tabview, super: be_class_lv_obj, strings: weak) { + _class, comptr(&lv_tabview_class) + init, func(be_ntv_lv_tabview_init) +} +@const_object_info_end */ + +/******************************************************************** +** Solidified class: lv_tileview +********************************************************************/ +#include "be_fixed_be_class_lv_tileview.h" +/* @const_object_info_begin +class be_class_lv_tileview (scope: global, name: lv_tileview, super: be_class_lv_obj, strings: weak) { + _class, comptr(&lv_tileview_class) + init, func(be_ntv_lv_tileview_init) +} +@const_object_info_end */ + /******************************************************************** ** Solidified class: lv_arc ********************************************************************/ diff --git a/lib/libesp32_lvgl/lv_binding_berry/mapping/lv_enum.h b/lib/libesp32_lvgl/lv_binding_berry/mapping/lv_enum.h index e2c60d4e4..8828e0c3e 100644 --- a/lib/libesp32_lvgl/lv_binding_berry/mapping/lv_enum.h +++ b/lib/libesp32_lvgl/lv_binding_berry/mapping/lv_enum.h @@ -433,6 +433,14 @@ LV_IMGBTN_STATE_CHECKED_PRESSED LV_IMGBTN_STATE_CHECKED_DISABLED // File: ../../lvgl/src/extra/widgets/keyboard/lv_keyboard.h +LV_KEYBOARD_MODE_TEXT_LOWER +LV_KEYBOARD_MODE_TEXT_UPPER +LV_KEYBOARD_MODE_SPECIAL +LV_KEYBOARD_MODE_NUMBER +LV_KEYBOARD_MODE_USER_1 +LV_KEYBOARD_MODE_USER_2 +LV_KEYBOARD_MODE_USER_3 +LV_KEYBOARD_MODE_USER_4 // File: ../../lvgl/src/extra/widgets/led/lv_led.h LV_LED_DRAW_PART_RECTANGLE diff --git a/lib/libesp32_lvgl/lv_binding_berry/mapping/lv_funcs.h b/lib/libesp32_lvgl/lv_binding_berry/mapping/lv_funcs.h index 1aa1e61c0..edfa2f4f5 100644 --- a/lib/libesp32_lvgl/lv_binding_berry/mapping/lv_funcs.h +++ b/lib/libesp32_lvgl/lv_binding_berry/mapping/lv_funcs.h @@ -687,6 +687,12 @@ void lv_led_off(lv_obj_t * led) void lv_led_toggle(lv_obj_t * led) uint8_t lv_led_get_brightness(const lv_obj_t * obj) +// ../../lvgl/src/extra/widgets/list/lv_list.h +lv_obj_t * lv_list_create(lv_obj_t * parent) +lv_obj_t * lv_list_add_text(lv_obj_t * list, const char * txt) +lv_obj_t * lv_list_add_btn(lv_obj_t * list, const void * icon, const char * txt) +const char * lv_list_get_btn_text(lv_obj_t * list, lv_obj_t * btn) + // ../../lvgl/src/extra/widgets/meter/lv_meter.h lv_obj_t * lv_meter_create(lv_obj_t * parent) lv_meter_scale_t * lv_meter_add_scale(lv_obj_t * obj) @@ -733,6 +739,22 @@ void lv_spinbox_decrement(lv_obj_t * obj) // ../../lvgl/src/extra/widgets/spinner/lv_spinner.h lv_obj_t * lv_spinner_create(lv_obj_t * parent, uint32_t time, uint32_t arc_length) +// ../../lvgl/src/extra/widgets/tabview/lv_tabview.h +lv_obj_t * lv_tabview_create(lv_obj_t * parent, lv_dir_t tab_pos, lv_coord_t tab_size) +lv_obj_t * lv_tabview_add_tab(lv_obj_t * tv, const char * name) +void lv_tabview_rename_tab(lv_obj_t * obj, uint32_t tab_id, const char * new_name) +lv_obj_t * lv_tabview_get_content(lv_obj_t * tv) +lv_obj_t * lv_tabview_get_tab_btns(lv_obj_t * tv) +void lv_tabview_set_act(lv_obj_t * obj, uint32_t id, lv_anim_enable_t anim_en) +uint16_t lv_tabview_get_tab_act(lv_obj_t * tv) + +// ../../lvgl/src/extra/widgets/tileview/lv_tileview.h +lv_obj_t * lv_tileview_create(lv_obj_t * parent) +lv_obj_t * lv_tileview_add_tile(lv_obj_t * tv, uint8_t col_id, uint8_t row_id, lv_dir_t dir) +void lv_obj_set_tile(lv_obj_t * tv, lv_obj_t * tile_obj, lv_anim_enable_t anim_en) +void lv_obj_set_tile_id(lv_obj_t * tv, uint32_t col_id, uint32_t row_id, lv_anim_enable_t anim_en) +lv_obj_t * lv_tileview_get_tile_act(lv_obj_t * obj) + // ../../lvgl/src/font/lv_font.h const uint8_t * lv_font_get_glyph_bitmap(const lv_font_t * font_p, uint32_t letter) bool lv_font_get_glyph_dsc(const lv_font_t * font_p, lv_font_glyph_dsc_t * dsc_out, uint32_t letter, uint32_t letter_next) diff --git a/lib/libesp32_lvgl/lv_binding_berry/tools/convert.py b/lib/libesp32_lvgl/lv_binding_berry/tools/convert.py index 80ea5f579..2820a7682 100644 --- a/lib/libesp32_lvgl/lv_binding_berry/tools/convert.py +++ b/lib/libesp32_lvgl/lv_binding_berry/tools/convert.py @@ -204,7 +204,7 @@ lv_widgets = ['arc', 'bar', 'btn', 'btnmatrix', 'canvas', 'checkbox', 'dropdown', 'img', 'label', 'line', 'roller', 'slider', 'switch', 'table', 'textarea' ] # extra widgets -lv_widgets = lv_widgets + [ 'chart', 'colorwheel', 'imgbtn', 'led', 'meter', 'msgbox', 'spinbox', 'spinner', 'keyboard' ] +lv_widgets = lv_widgets + [ 'chart', 'colorwheel', 'imgbtn', 'led', 'meter', 'msgbox', 'spinbox', 'spinner', 'keyboard' , 'tabview', 'tileview' , 'list'] # add qrcode lv_widgets = lv_widgets + [ 'qrcode' ] diff --git a/lib/libesp32_lvgl/lv_binding_berry/tools/preprocessor.py b/lib/libesp32_lvgl/lv_binding_berry/tools/preprocessor.py index 4fc489daf..356768783 100644 --- a/lib/libesp32_lvgl/lv_binding_berry/tools/preprocessor.py +++ b/lib/libesp32_lvgl/lv_binding_berry/tools/preprocessor.py @@ -62,6 +62,9 @@ lv_fun_globs = [ "extra/widgets/spinbox/*.h", "extra/widgets/spinner/*.h", "extra/widgets/keyboard/*.h", + "extra/widgets/tabview/*.h", + "extra/widgets/tileview/*.h", + "extra/widgets/list/*.h", "extra/themes/default/*.h", "extra/themes/mono/*.h", "extra/layouts/**/*.h", @@ -341,7 +344,7 @@ for header_name in headers_names: # item is ready exclude = False for exclude_prefix in ["_", "LV_BIDI_DIR_", "LV_FONT_", "LV_IMG_CF_RESERVED_", "LV_IMG_CF_USER_", - "LV_SIGNAL_", "LV_TEMPL_", "LV_TASK_PRIO_", "LV_THEME_", "LV_KEYBOARD_", + "LV_SIGNAL_", "LV_TEMPL_", "LV_TASK_PRIO_", "LV_THEME_", "LV_LRU_"]: if enum_item.startswith(exclude_prefix): exclude = True if exclude: continue diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index c93bfe9cc..d74edd0cb 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -1208,6 +1208,9 @@ #define BE_LV_WIDGET_SPINBOX #define BE_LV_WIDGET_SPINNER // #define BE_LV_WIDGET_KEYBOARD + // #define BE_LV_WIDGET_TABVIEW + // #define BE_LV_WIDGET_TILEVIEW + // #define BE_LV_WIDGET_LIST #define BE_LV_WIDGET_QRCODE