diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 174e849bc..028460926 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,6 +1,8 @@ # Changelog ## v8.1.0 (In progress) +- added sample lv_example_list_2.py +- lv_obj_move_up(obj) and lv_obj_move_down(obj) added. (#2461) - feat(example) stacked area chart lv_example_chart_8 added. - renamed lv_obj_get_child_id(obj) to lv_obj_get_index(obj). - added lv_obj_move_to_index(obj, index). (#2461) diff --git a/examples/widgets/list/lv_example_list_2.py b/examples/widgets/list/lv_example_list_2.py new file mode 100644 index 000000000..254d1df37 --- /dev/null +++ b/examples/widgets/list/lv_example_list_2.py @@ -0,0 +1,137 @@ +import urandom + +currentButton = None +list1 = None + +def event_handler(evt): + global currentButton + code = evt.get_code() + obj = evt.get_target() + if code == lv.EVENT.CLICKED: + if currentButton == obj: + currentButton = None + else: + currentButton = obj + parent = obj.get_parent() + for i in range( parent.get_child_cnt()): + child = parent.get_child(i) + if child == currentButton: + child.add_state(lv.STATE.CHECKED) + else: + child.clear_state(lv.STATE.CHECKED) + +def event_handler_top(evt): + global currentButton + code = evt.get_code() + obj = evt.get_target() + if code == lv.EVENT.CLICKED: + if currentButton == None: + return + currentButton.move_background() + currentButton.scroll_to_view( lv.ANIM.ON) + +def event_handler_up(evt): + global currentButton + code = evt.get_code() + obj = evt.get_target() + if code == lv.EVENT.CLICKED or code == lv.EVENT.LONG_PRESSED_REPEAT: + if currentButton == None: + return + index = currentButton.get_index() + if index <= 0: + return + currentButton.move_to_index(index - 1) + currentButton.scroll_to_view(lv.ANIM.ON) + +def event_handler_center(evt): + global currentButton + code = evt.get_code() + obj = evt.get_target() + if code == lv.EVENT.CLICKED or code == lv.EVENT.LONG_PRESSED_REPEAT: + if currentButton == None: + return + parent = currentButton.get_parent() + pos = parent.get_child_cnt() // 2 + currentButton.move_to_index(pos) + currentButton.scroll_to_view(lv.ANIM.ON) + +def event_handler_dn(evt): + global currentButton + code = evt.get_code() + obj = evt.get_target() + if code == lv.EVENT.CLICKED or code == lv.EVENT.LONG_PRESSED_REPEAT: + if currentButton == None: + return + index = currentButton.get_index() + currentButton.move_to_index(index + 1) + currentButton.scroll_to_view(lv.ANIM.ON) + +def event_handler_bottom(evt): + global currentButton + code = evt.get_code() + obj = evt.get_target() + if code == lv.EVENT.CLICKED or code == lv.EVENT.LONG_PRESSED_REPEAT: + if currentButton == None: + return + currentButton.move_foreground() + currentButton.scroll_to_view(lv.ANIM.ON) + +def event_handler_swap(evt): + global currentButton + global list1 + code = evt.get_code() + obj = evt.get_target() + if code == lv.EVENT.CLICKED: + cnt = list1.get_child_cnt() + for i in range(100): + if cnt > 1: + obj = list1.get_child(urandom.getrandbits(32) % cnt ) + obj.move_to_index(urandom.getrandbits(32) % cnt) + if currentButton != None: + currentButton.scroll_to_view(lv.ANIM.ON) + +#Create a list with buttons that can be sorted +list1 = lv.list(lv.scr_act()) +list1.set_size(lv.pct(60), lv.pct(100)) +list1.set_style_pad_row( 5, 0) + +for i in range(15): + btn = lv.btn(list1) + btn.set_width(lv.pct(100)) + btn.add_event_cb( event_handler, lv.EVENT.CLICKED, None) + lab = lv.label(btn) + lab.set_text("Item " + str(i)) + +#Select the first button by default +currentButton = list1.get_child(0) +currentButton.add_state(lv.STATE.CHECKED) + +#Create a second list with up and down buttons +list2 = lv.list(lv.scr_act()) +list2.set_size(lv.pct(40), lv.pct(100)) +list2.align(lv.ALIGN.TOP_RIGHT, 0, 0) +list2.set_flex_flow(lv.FLEX_FLOW.COLUMN) + +btn = list2.add_btn(None, "Top") +btn.add_event_cb(event_handler_top, lv.EVENT.ALL, None) +lv.group_remove_obj(btn) + +btn = list2.add_btn(lv.SYMBOL.UP, "Up") +btn.add_event_cb(event_handler_up, lv.EVENT.ALL, None) +lv.group_remove_obj(btn) + +btn = list2.add_btn(lv.SYMBOL.LEFT, "Center") +btn.add_event_cb(event_handler_center, lv.EVENT.ALL, None) +lv.group_remove_obj(btn) + +btn = list2.add_btn(lv.SYMBOL.DOWN, "Down") +btn.add_event_cb(event_handler_dn, lv.EVENT.ALL, None) +lv.group_remove_obj(btn) + +btn = list2.add_btn(None, "Bottom") +btn.add_event_cb(event_handler_bottom, lv.EVENT.ALL, None) +lv.group_remove_obj(btn) + +btn = list2.add_btn(lv.SYMBOL.SHUFFLE, "Shuffle") +btn.add_event_cb(event_handler_swap, lv.EVENT.ALL, None) +lv.group_remove_obj(btn)