From ec6c20b58704052f2940ad60caa5ba9e030a345f Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Wed, 26 May 2021 22:04:10 +0200 Subject: [PATCH] feat(examples) add event examples --- docs/overview/event.md | 9 ++++++ examples/event/index.rst | 25 +++++++++++++++ examples/event/lv_example_event.h | 40 +++++++++++++++++++++++ examples/event/lv_example_event_1.c | 30 +++++++++++++++++ examples/event/lv_example_event_2.c | 46 +++++++++++++++++++++++++++ examples/event/lv_example_event_3.c | 44 +++++++++++++++++++++++++ examples/lv_examples.h | 1 + examples/scroll/lv_example_scroll_4.c | 19 ----------- 8 files changed, 195 insertions(+), 19 deletions(-) create mode 100644 examples/event/index.rst create mode 100644 examples/event/lv_example_event.h create mode 100644 examples/event/lv_example_event_1.c create mode 100644 examples/event/lv_example_event_2.c create mode 100644 examples/event/lv_example_event_3.c diff --git a/docs/overview/event.md b/docs/overview/event.md index 5e3915bcd..1bf1bd1c9 100644 --- a/docs/overview/event.md +++ b/docs/overview/event.md @@ -157,3 +157,12 @@ If `lv_obj_add_flag(obj, LV_OBJ_FLAG_EVENT_BUBBLE)` is enabled all events will b The *target* parameter of the event is always the current target object, not the original object. To get the original target call `lv_event_get_original_target(e)` in the event handler. + + +## Examples + +```eval_rst + +.. include:: ../../examples/event/index.rst + +``` diff --git a/examples/event/index.rst b/examples/event/index.rst new file mode 100644 index 000000000..45a0ab284 --- /dev/null +++ b/examples/event/index.rst @@ -0,0 +1,25 @@ +C +^ + +Button click event +""""""""""""""""""" + +.. lv_example:: event/lv_example_event_1 + :language: c + +Handle multiple events +"""""""""""""""""""""""" +.. lv_example:: event/lv_example_event_2 + :language: c + + +Event bubbling +"""""""""""""""""""""""" +.. lv_example:: event/lv_example_event_3 + :language: c + + +MicroPython +^^^^^^^^^^^ + +No examples yet. diff --git a/examples/event/lv_example_event.h b/examples/event/lv_example_event.h new file mode 100644 index 000000000..66c9c0d99 --- /dev/null +++ b/examples/event/lv_example_event.h @@ -0,0 +1,40 @@ +/** + * @file lv_example_event.h + * + */ + +#ifndef LV_EXAMPLE_EVENT_H +#define LV_EXAMPLE_EVENT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * GLOBAL PROTOTYPES + **********************/ +void lv_example_event_1(void); +void lv_example_event_2(void); +void lv_example_event_3(void); + +/********************** + * MACROS + **********************/ + +#ifdef __cplusplus +} /*extern "C"*/ +#endif + +#endif /*LV_EXAMPLE_EVENT_H*/ diff --git a/examples/event/lv_example_event_1.c b/examples/event/lv_example_event_1.c new file mode 100644 index 000000000..746fd0aec --- /dev/null +++ b/examples/event/lv_example_event_1.c @@ -0,0 +1,30 @@ +#include "../lv_examples.h" +#if LV_BUILD_EXAMPLES && LV_USE_SWITCH + +static void event_cb(lv_event_t * e) +{ + LV_LOG_USER("Clicked"); + + static uint32_t cnt = 1; + lv_obj_t * btn = lv_event_get_target(e); + lv_obj_t * label = lv_obj_get_child(btn, 0); + lv_label_set_text_fmt(label, "%d", cnt); + cnt++; +} + +/** + * Add click event to a button + */ +void lv_example_event_1(void) +{ + lv_obj_t * btn = lv_btn_create(lv_scr_act()); + lv_obj_set_size(btn, 100, 50); + lv_obj_center(btn); + lv_obj_add_event_cb(btn, event_cb, LV_EVENT_CLICKED, NULL); + + lv_obj_t * label = lv_label_create(btn); + lv_label_set_text(label, "Click me!"); + lv_obj_center(label); +} + +#endif diff --git a/examples/event/lv_example_event_2.c b/examples/event/lv_example_event_2.c new file mode 100644 index 000000000..64b21474e --- /dev/null +++ b/examples/event/lv_example_event_2.c @@ -0,0 +1,46 @@ +#include "../lv_examples.h" +#if LV_BUILD_EXAMPLES && LV_USE_SWITCH + +static void event_cb(lv_event_t * e) +{ + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t * label = lv_event_get_user_data(e); + + switch(code) { + case LV_EVENT_PRESSED: + lv_label_set_text(label, "The last button event:\nLV_EVENT_PRESSED"); + break; + case LV_EVENT_CLICKED: + lv_label_set_text(label, "The last button event:\nLV_EVENT_CLICKED"); + break; + case LV_EVENT_LONG_PRESSED: + lv_label_set_text(label, "The last button event:\nLV_EVENT_LONG_PRESSED"); + break; + case LV_EVENT_LONG_PRESSED_REPEAT: + lv_label_set_text(label, "The last button event:\nLV_EVENT_LONG_PRESSED_REPEAT"); + break; + default: + break; + } +} + +/** + * Handle multiple events + */ +void lv_example_event_2(void) +{ + lv_obj_t * btn = lv_btn_create(lv_scr_act()); + lv_obj_set_size(btn, 100, 50); + lv_obj_center(btn); + + lv_obj_t * btn_label = lv_label_create(btn); + lv_label_set_text(btn_label, "Click me!"); + lv_obj_center(btn_label); + + lv_obj_t * info_label = lv_label_create(lv_scr_act()); + lv_label_set_text(info_label, "The last button event:\nNone"); + + lv_obj_add_event_cb(btn, event_cb, LV_EVENT_ALL, info_label); +} + +#endif diff --git a/examples/event/lv_example_event_3.c b/examples/event/lv_example_event_3.c new file mode 100644 index 000000000..8eb257f3c --- /dev/null +++ b/examples/event/lv_example_event_3.c @@ -0,0 +1,44 @@ +#include "../lv_examples.h" +#if LV_BUILD_EXAMPLES && LV_USE_FLEX + +static void event_cb(lv_event_t * e) +{ + /*The original target of the event. Can be the buttons or the container*/ + lv_obj_t * target = lv_event_get_target(e); + + /*The current target is always the container as the event is added to it*/ + lv_obj_t * cont = lv_event_get_current_target(e); + + /*If container was clicked do nothing*/ + if(target == cont) return; + + /*Make the clicked buttons red*/ + lv_obj_set_style_bg_color(target, lv_palette_main(LV_PALETTE_RED), 0); +} + +/** + * Demonstrate event bubbling + */ +void lv_example_event_3(void) +{ + + lv_obj_t * cont = lv_obj_create(lv_scr_act()); + lv_obj_set_size(cont, 290, 200); + lv_obj_center(cont); + lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_ROW_WRAP); + + uint32_t i; + for(i = 0; i < 30; i++) { + lv_obj_t * btn = lv_btn_create(cont); + lv_obj_set_size(btn, 80, 50); + lv_obj_add_flag(btn, LV_OBJ_FLAG_EVENT_BUBBLE); + + lv_obj_t * label = lv_label_create(btn); + lv_label_set_text_fmt(label, "%d", i); + lv_obj_center(label); + } + + lv_obj_add_event_cb(cont, event_cb, LV_EVENT_CLICKED, NULL); +} + +#endif diff --git a/examples/lv_examples.h b/examples/lv_examples.h index 74eb2e6fd..462bb5855 100644 --- a/examples/lv_examples.h +++ b/examples/lv_examples.h @@ -21,6 +21,7 @@ extern "C" { #include "layouts/lv_example_layout.h" #include "scroll/lv_example_scroll.h" #include "anim/lv_example_anim.h" +#include "event/lv_example_event.h" /********************* * DEFINES diff --git a/examples/scroll/lv_example_scroll_4.c b/examples/scroll/lv_example_scroll_4.c index d816b0b06..55fb12e9c 100644 --- a/examples/scroll/lv_example_scroll_4.c +++ b/examples/scroll/lv_example_scroll_4.c @@ -1,25 +1,6 @@ #include "../lv_examples.h" #if LV_BUILD_EXAMPLES && LV_USE_LIST -static uint32_t btn_cnt = 1; - -static void float_btn_event_cb(lv_event_t * e) -{ - lv_event_code_t code = lv_event_get_code(e); - lv_obj_t * float_btn = lv_event_get_target(e); - - if(code == LV_EVENT_CLICKED) { - lv_obj_t * list = lv_event_get_user_data(e); - char buf[32]; - lv_snprintf(buf, sizeof(buf), "Track %d", btn_cnt); - lv_obj_t * list_btn = lv_list_add_btn(list, LV_SYMBOL_AUDIO, buf); - btn_cnt++; - - lv_obj_move_foreground(float_btn); - - lv_obj_scroll_to_view(list_btn, LV_ANIM_ON); - } -} /** * Styling the scrollbars