mirror of
https://github.com/lvgl/lvgl.git
synced 2025-01-14 06:42:58 +08:00
f753265a79
BREAKING CHANGE This is a huge update which introduces parallel rendering. lv_conf.h needs to be updated too.
173 lines
5.9 KiB
Python
173 lines
5.9 KiB
Python
from micropython import const
|
|
|
|
def create_text(parent, icon, txt, builder_variant):
|
|
|
|
obj = lv.menu_cont(parent)
|
|
|
|
img = None
|
|
label = None
|
|
|
|
if icon :
|
|
img = lv.img(obj)
|
|
img.set_src(icon)
|
|
|
|
if txt :
|
|
label = lv.label(obj)
|
|
label.set_text(txt)
|
|
label.set_long_mode(lv.label.LONG.SCROLL_CIRCULAR)
|
|
label.set_flex_grow(1)
|
|
|
|
if builder_variant == LV_MENU_ITEM_BUILDER_VARIANT_2 and icon and txt :
|
|
img.add_flag(lv.OBJ_FLAG_FLEX_IN_NEW_TRACK)
|
|
img.swap(label)
|
|
|
|
return obj
|
|
|
|
|
|
def create_slider(parent, icon, txt, min, max, val) :
|
|
|
|
obj = create_text(parent, icon, txt, LV_MENU_ITEM_BUILDER_VARIANT_2)
|
|
|
|
slider = lv.slider(obj)
|
|
slider.set_flex_grow(1)
|
|
slider.set_range(min, max)
|
|
slider.set_value(val, lv.ANIM.OFF)
|
|
|
|
if icon == None :
|
|
slider.add_flag(lv.obj.FLAG_FLEX.IN_NEW_TRACK)
|
|
|
|
return obj
|
|
|
|
def create_switch(parent, icon, txt, chk) :
|
|
|
|
obj = create_text(parent, icon, txt, LV_MENU_ITEM_BUILDER_VARIANT_1)
|
|
|
|
sw = lv.switch(obj)
|
|
if chk == lv.STATE.CHECKED:
|
|
sw.add_state(chk )
|
|
else:
|
|
sw.add_state(0)
|
|
|
|
return obj
|
|
|
|
|
|
def back_event_handler(e,menu):
|
|
|
|
obj = e.get_target_obj()
|
|
# menu = lv_event_get_user_data(e);
|
|
|
|
if menu.back_btn_is_root(obj) :
|
|
mbox1 = lv.msgbox(None, "Hello", "Root back btn click.", None, True)
|
|
mbox1.center()
|
|
|
|
def switch_handler(e,menu):
|
|
|
|
code = e.get_code()
|
|
obj = e.get_target_obj()
|
|
if code == lv.EVENT.VALUE_CHANGED :
|
|
if obj.has_state(lv.STATE.CHECKED) :
|
|
menu.set_page(None)
|
|
menu.set_sidebar_page(root_page)
|
|
menu.get_cur_sidebar_page().get_child(0).get_child(0).send_event(lv.EVENT.CLICKED,None)
|
|
else :
|
|
menu.set_sidebar_page(None)
|
|
menu.clear_history() # Clear history because we will be showing the root page later
|
|
menu.set_page(root_page)
|
|
|
|
LV_MENU_ITEM_BUILDER_VARIANT_1 = const(0)
|
|
LV_MENU_ITEM_BUILDER_VARIANT_2 = const(1)
|
|
|
|
menu = lv.menu(lv.scr_act())
|
|
|
|
bg_color = menu.get_style_bg_color(0)
|
|
if bg_color.brightness() > 127 :
|
|
menu.set_style_bg_color(menu.get_style_bg_color(0).darken(10),0)
|
|
else :
|
|
menu.set_style_bg_color(menu.get_style_bg_color(0).darken(50),0)
|
|
|
|
|
|
menu.set_mode_root_back_btn(lv.menu.ROOT_BACK_BTN.ENABLED)
|
|
menu.add_event(lambda evt: back_event_handler(evt,menu), lv.EVENT.CLICKED, None)
|
|
menu.set_size(lv.pct(100), lv.pct(100))
|
|
menu.center()
|
|
|
|
# Create sub pages
|
|
sub_mechanics_page = lv.menu_page(menu, None)
|
|
sub_mechanics_page.set_style_pad_hor(menu.get_main_header().get_style_pad_left(0),0)
|
|
lv.menu_separator(sub_mechanics_page)
|
|
section = lv.menu_section(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)
|
|
|
|
sub_sound_page = lv.menu_page(menu, None)
|
|
sub_sound_page.set_style_pad_hor(menu.get_main_header().get_style_pad_left(0),0)
|
|
lv.menu_separator(sub_sound_page)
|
|
section = lv.menu_section(sub_sound_page)
|
|
create_switch(section,lv.SYMBOL.AUDIO, "Sound", False)
|
|
|
|
sub_display_page = lv.menu_page(menu, None)
|
|
sub_display_page.set_style_pad_hor(menu.get_main_header().get_style_pad_left(0),0)
|
|
lv.menu_separator(sub_display_page)
|
|
section = lv.menu_section(sub_display_page)
|
|
create_slider(section,lv.SYMBOL.SETTINGS, "Brightness", 0, 150, 100)
|
|
|
|
sub_software_info_page = lv.menu_page(menu, None)
|
|
sub_software_info_page.set_style_pad_hor(menu.get_main_header().get_style_pad_left(0),0)
|
|
section = lv.menu_section(sub_software_info_page)
|
|
create_text(section,None, "Version 1.0", LV_MENU_ITEM_BUILDER_VARIANT_1)
|
|
|
|
sub_legal_info_page = lv.menu_page(menu, None)
|
|
sub_legal_info_page.set_style_pad_hor(menu.get_main_header().get_style_pad_left(0),0)
|
|
|
|
section = lv.menu_section(sub_legal_info_page)
|
|
|
|
for i in range(15):
|
|
create_text(section, None,
|
|
"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)
|
|
|
|
sub_about_page = lv.menu_page(menu, None)
|
|
sub_about_page.set_style_pad_hor(menu.get_main_header().get_style_pad_left(0),0)
|
|
|
|
lv.menu_separator(sub_about_page)
|
|
section = lv.menu_section(sub_about_page)
|
|
cont = create_text(section, None, "Software information", LV_MENU_ITEM_BUILDER_VARIANT_1);
|
|
menu.set_load_page_event(cont, sub_software_info_page);
|
|
cont = create_text(section, None, "Legal information", LV_MENU_ITEM_BUILDER_VARIANT_1);
|
|
menu.set_load_page_event(cont, sub_legal_info_page)
|
|
|
|
sub_menu_mode_page = lv.menu_page(menu, None)
|
|
sub_menu_mode_page.set_style_pad_hor(menu.get_main_header().get_style_pad_left(0),0)
|
|
lv.menu_separator(sub_menu_mode_page)
|
|
section = lv.menu_section(sub_menu_mode_page)
|
|
cont = create_switch(section, lv.SYMBOL.AUDIO, "Sidebar enable",True)
|
|
cont.get_child(2).add_event(lambda evt: switch_handler(evt,menu), lv.EVENT.VALUE_CHANGED, None)
|
|
|
|
# Create a root page
|
|
root_page = lv.menu_page(menu, "Settings")
|
|
root_page.set_style_pad_hor(menu.get_main_header().get_style_pad_left(0),0)
|
|
section = lv.menu_section(root_page)
|
|
cont = create_text(section, lv.SYMBOL.SETTINGS, "Mechanics", LV_MENU_ITEM_BUILDER_VARIANT_1)
|
|
menu.set_load_page_event(cont, sub_mechanics_page);
|
|
cont = create_text(section, lv.SYMBOL.AUDIO, "Sound", LV_MENU_ITEM_BUILDER_VARIANT_1);
|
|
menu.set_load_page_event(cont, sub_sound_page)
|
|
cont = create_text(section, lv.SYMBOL.SETTINGS, "Display", LV_MENU_ITEM_BUILDER_VARIANT_1);
|
|
menu.set_load_page_event(cont, sub_display_page)
|
|
|
|
create_text(root_page, None, "Others", LV_MENU_ITEM_BUILDER_VARIANT_1);
|
|
section = lv.menu_section(root_page)
|
|
cont = create_text(section, None, "About", LV_MENU_ITEM_BUILDER_VARIANT_1);
|
|
menu.set_load_page_event(cont, sub_about_page)
|
|
cont = create_text(section, lv.SYMBOL.SETTINGS, "Menu mode", LV_MENU_ITEM_BUILDER_VARIANT_1);
|
|
menu.set_load_page_event(cont, sub_menu_mode_page)
|
|
|
|
menu.set_sidebar_page(root_page)
|
|
|
|
|
|
menu.get_cur_sidebar_page().get_child(0).get_child(0).send_event(lv.EVENT.CLICKED,None)
|
|
|
|
|
|
|
|
|