diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-06-01 15:41:47 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-06-01 15:41:47 +1000 |
| commit | dd27c3530432ea0b09f01e604bf577f31d8ef841 (patch) | |
| tree | bbf86cf81a78f0ff0b07f31f1c390db473f26fd3 /lib/lvgl/examples/widgets/checkbox | |
| parent | 6fd588e970470b15936187980829916d0dbe77bb (diff) | |
| download | tangara-fw-dd27c3530432ea0b09f01e604bf577f31d8ef841.tar.gz | |
convert lvgl from submodule to a plain old directory
Diffstat (limited to 'lib/lvgl/examples/widgets/checkbox')
| m--------- | lib/lvgl | 0 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/checkbox/index.rst | 12 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/checkbox/lv_example_checkbox_1.c | 43 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/checkbox/lv_example_checkbox_1.py | 36 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/checkbox/lv_example_checkbox_2.c | 86 |
5 files changed, 177 insertions, 0 deletions
diff --git a/lib/lvgl b/lib/lvgl deleted file mode 160000 -Subproject 0732400e7b564dd0e7dc4a924619d8e19c5b23a diff --git a/lib/lvgl/examples/widgets/checkbox/index.rst b/lib/lvgl/examples/widgets/checkbox/index.rst new file mode 100644 index 00000000..e24f0142 --- /dev/null +++ b/lib/lvgl/examples/widgets/checkbox/index.rst @@ -0,0 +1,12 @@ + +Simple Checkboxes +""""""""""""""""" + +.. lv_example:: widgets/checkbox/lv_example_checkbox_1 + :language: c + +Checkboxes as radio buttons +""""""""""""""""""""""""""" +.. lv_example:: widgets/checkbox/lv_example_checkbox_2 + :language: c + diff --git a/lib/lvgl/examples/widgets/checkbox/lv_example_checkbox_1.c b/lib/lvgl/examples/widgets/checkbox/lv_example_checkbox_1.c new file mode 100644 index 00000000..ff59bd99 --- /dev/null +++ b/lib/lvgl/examples/widgets/checkbox/lv_example_checkbox_1.c @@ -0,0 +1,43 @@ +#include "../../lv_examples.h" +#if LV_USE_CHECKBOX && LV_BUILD_EXAMPLES + +static void event_handler(lv_event_t * e) +{ + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t * obj = lv_event_get_target(e); + if(code == LV_EVENT_VALUE_CHANGED) { + const char * txt = lv_checkbox_get_text(obj); + const char * state = lv_obj_get_state(obj) & LV_STATE_CHECKED ? "Checked" : "Unchecked"; + LV_LOG_USER("%s: %s", txt, state); + } +} + +void lv_example_checkbox_1(void) +{ + lv_obj_set_flex_flow(lv_scr_act(), LV_FLEX_FLOW_COLUMN); + lv_obj_set_flex_align(lv_scr_act(), LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER); + + lv_obj_t * cb; + cb = lv_checkbox_create(lv_scr_act()); + lv_checkbox_set_text(cb, "Apple"); + lv_obj_add_event_cb(cb, event_handler, LV_EVENT_ALL, NULL); + + cb = lv_checkbox_create(lv_scr_act()); + lv_checkbox_set_text(cb, "Banana"); + lv_obj_add_state(cb, LV_STATE_CHECKED); + lv_obj_add_event_cb(cb, event_handler, LV_EVENT_ALL, NULL); + + cb = lv_checkbox_create(lv_scr_act()); + lv_checkbox_set_text(cb, "Lemon"); + lv_obj_add_state(cb, LV_STATE_DISABLED); + lv_obj_add_event_cb(cb, event_handler, LV_EVENT_ALL, NULL); + + cb = lv_checkbox_create(lv_scr_act()); + lv_obj_add_state(cb, LV_STATE_CHECKED | LV_STATE_DISABLED); + lv_checkbox_set_text(cb, "Melon\nand a new line"); + lv_obj_add_event_cb(cb, event_handler, LV_EVENT_ALL, NULL); + + lv_obj_update_layout(cb); +} + +#endif diff --git a/lib/lvgl/examples/widgets/checkbox/lv_example_checkbox_1.py b/lib/lvgl/examples/widgets/checkbox/lv_example_checkbox_1.py new file mode 100644 index 00000000..e2c9a1b0 --- /dev/null +++ b/lib/lvgl/examples/widgets/checkbox/lv_example_checkbox_1.py @@ -0,0 +1,36 @@ +def event_handler(e): + code = e.get_code() + obj = e.get_target() + if code == lv.EVENT.VALUE_CHANGED: + txt = obj.get_text() + if obj.get_state() & lv.STATE.CHECKED: + state = "Checked" + else: + state = "Unchecked" + print(txt + ":" + state) + + +lv.scr_act().set_flex_flow(lv.FLEX_FLOW.COLUMN) +lv.scr_act().set_flex_align(lv.FLEX_ALIGN.CENTER, lv.FLEX_ALIGN.START, lv.FLEX_ALIGN.CENTER) + +cb = lv.checkbox(lv.scr_act()) +cb.set_text("Apple") +cb.add_event_cb(event_handler, lv.EVENT.ALL, None) + +cb = lv.checkbox(lv.scr_act()) +cb.set_text("Banana") +cb.add_state(lv.STATE.CHECKED) +cb.add_event_cb(event_handler, lv.EVENT.ALL, None) + +cb = lv.checkbox(lv.scr_act()) +cb.set_text("Lemon") +cb.add_state(lv.STATE.DISABLED) +cb.add_event_cb(event_handler, lv.EVENT.ALL, None) + +cb = lv.checkbox(lv.scr_act()) +cb.add_state(lv.STATE.CHECKED | lv.STATE.DISABLED) +cb.set_text("Melon") +cb.add_event_cb(event_handler, lv.EVENT.ALL, None) + +cb.update_layout() + diff --git a/lib/lvgl/examples/widgets/checkbox/lv_example_checkbox_2.c b/lib/lvgl/examples/widgets/checkbox/lv_example_checkbox_2.c new file mode 100644 index 00000000..02a57289 --- /dev/null +++ b/lib/lvgl/examples/widgets/checkbox/lv_example_checkbox_2.c @@ -0,0 +1,86 @@ +#include "../../lv_examples.h" +#if LV_USE_CHECKBOX && LV_BUILD_EXAMPLES + +static lv_style_t style_radio; +static lv_style_t style_radio_chk; +static uint32_t active_index_1 = 0; +static uint32_t active_index_2 = 0; + +static void radio_event_handler(lv_event_t * e) +{ + uint32_t * active_id = lv_event_get_user_data(e); + lv_obj_t * cont = lv_event_get_current_target(e); + lv_obj_t * act_cb = lv_event_get_target(e); + lv_obj_t * old_cb = lv_obj_get_child(cont, *active_id); + + /*Do nothing if the container was clicked*/ + if(act_cb == cont) return; + + lv_obj_clear_state(old_cb, LV_STATE_CHECKED); /*Uncheck the previous radio button*/ + lv_obj_add_state(act_cb, LV_STATE_CHECKED); /*Uncheck the current radio button*/ + + *active_id = lv_obj_get_index(act_cb); + + LV_LOG_USER("Selected radio buttons: %d, %d", (int)active_index_1, (int)active_index_2); +} + + +static void radiobutton_create(lv_obj_t * parent, const char * txt) +{ + lv_obj_t * obj = lv_checkbox_create(parent); + lv_checkbox_set_text(obj, txt); + lv_obj_add_flag(obj, LV_OBJ_FLAG_EVENT_BUBBLE); + lv_obj_add_style(obj, &style_radio, LV_PART_INDICATOR); + lv_obj_add_style(obj, &style_radio_chk, LV_PART_INDICATOR | LV_STATE_CHECKED); +} + +/** + * Checkboxes as radio buttons + */ +void lv_example_checkbox_2(void) +{ + /* The idea is to enable `LV_OBJ_FLAG_EVENT_BUBBLE` on checkboxes and process the + * `LV_EVENT_CLICKED` on the container. + * A variable is passed as event user data where the index of the active + * radiobutton is saved */ + + + lv_style_init(&style_radio); + lv_style_set_radius(&style_radio, LV_RADIUS_CIRCLE); + + lv_style_init(&style_radio_chk); + lv_style_set_bg_img_src(&style_radio_chk, NULL); + + uint32_t i; + char buf[32]; + + lv_obj_t * cont1 = lv_obj_create(lv_scr_act()); + lv_obj_set_flex_flow(cont1, LV_FLEX_FLOW_COLUMN); + lv_obj_set_size(cont1, lv_pct(40), lv_pct(80)); + lv_obj_add_event_cb(cont1, radio_event_handler, LV_EVENT_CLICKED, &active_index_1); + + for(i = 0; i < 5; i++) { + lv_snprintf(buf, sizeof(buf), "A %d", (int)i + 1); + radiobutton_create(cont1, buf); + + } + /*Make the first checkbox checked*/ + lv_obj_add_state(lv_obj_get_child(cont1, 0), LV_STATE_CHECKED); + + lv_obj_t * cont2 = lv_obj_create(lv_scr_act()); + lv_obj_set_flex_flow(cont2, LV_FLEX_FLOW_COLUMN); + lv_obj_set_size(cont2, lv_pct(40), lv_pct(80)); + lv_obj_set_x(cont2, lv_pct(50)); + lv_obj_add_event_cb(cont2, radio_event_handler, LV_EVENT_CLICKED, &active_index_2); + + for(i = 0; i < 3; i++) { + lv_snprintf(buf, sizeof(buf), "B %d", (int)i + 1); + radiobutton_create(cont2, buf); + } + + /*Make the first checkbox checked*/ + lv_obj_add_state(lv_obj_get_child(cont2, 0), LV_STATE_CHECKED); +} + + +#endif |
