summaryrefslogtreecommitdiff
path: root/lib/lvgl/examples/widgets/checkbox
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-06-01 15:41:47 +1000
committerjacqueline <me@jacqueline.id.au>2023-06-01 15:41:47 +1000
commitdd27c3530432ea0b09f01e604bf577f31d8ef841 (patch)
treebbf86cf81a78f0ff0b07f31f1c390db473f26fd3 /lib/lvgl/examples/widgets/checkbox
parent6fd588e970470b15936187980829916d0dbe77bb (diff)
downloadtangara-fw-dd27c3530432ea0b09f01e604bf577f31d8ef841.tar.gz
convert lvgl from submodule to a plain old directory
Diffstat (limited to 'lib/lvgl/examples/widgets/checkbox')
m---------lib/lvgl0
-rw-r--r--lib/lvgl/examples/widgets/checkbox/index.rst12
-rw-r--r--lib/lvgl/examples/widgets/checkbox/lv_example_checkbox_1.c43
-rw-r--r--lib/lvgl/examples/widgets/checkbox/lv_example_checkbox_1.py36
-rw-r--r--lib/lvgl/examples/widgets/checkbox/lv_example_checkbox_2.c86
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