Initial commit: TXW82x FPV v2.7.0.7-42229 SDK + project sources
This commit is contained in:
12
sdk/lib/lvgl/examples/widgets/checkbox/index.rst
Normal file
12
sdk/lib/lvgl/examples/widgets/checkbox/index.rst
Normal file
@@ -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
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
#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);
|
||||
LV_UNUSED(obj);
|
||||
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_UNUSED(txt);
|
||||
LV_UNUSED(state);
|
||||
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
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
@@ -0,0 +1,83 @@
|
||||
import time
|
||||
|
||||
class LV_Example_Checkbox_2:
|
||||
def __init__(self):
|
||||
#
|
||||
# Checkboxes as radio buttons
|
||||
#
|
||||
# The idea is to enable `LV_OBJ_FLAG_EVENT_BUBBLE` on checkboxes and process the
|
||||
#`LV.EVENT.CLICKED` on the container.
|
||||
# Since user_data cannot be used to pass parameters in MicroPython I use an instance variable to
|
||||
# keep the index of the active button
|
||||
|
||||
self.active_index_1 = 0
|
||||
self.active_index_2 = 0
|
||||
self.style_radio = lv.style_t()
|
||||
self.style_radio.init()
|
||||
self.style_radio.set_radius(lv.RADIUS_CIRCLE)
|
||||
|
||||
self.style_radio_chk = lv.style_t()
|
||||
self.style_radio_chk.init()
|
||||
self.style_radio_chk.init()
|
||||
self.style_radio_chk.set_bg_img_src(None)
|
||||
|
||||
self.cont1 = lv.obj(lv.scr_act())
|
||||
self.cont1.set_flex_flow(lv.FLEX_FLOW.COLUMN)
|
||||
self.cont1.set_size(lv.pct(40), lv.pct(80))
|
||||
self.cont1.add_event_cb(self.radio_event_handler, lv.EVENT.CLICKED, None)
|
||||
|
||||
for i in range(5):
|
||||
txt = "A {:d}".format(i+1)
|
||||
self.radiobutton_create(self.cont1,txt)
|
||||
|
||||
# Make the first checkbox checked
|
||||
#lv_obj_add_state(lv_obj_get_child(self.cont1, 0), LV_STATE_CHECKED);
|
||||
self.cont1.get_child(0).add_state(lv.STATE.CHECKED)
|
||||
|
||||
self.cont2 = lv.obj(lv.scr_act())
|
||||
self.cont2.set_flex_flow(lv.FLEX_FLOW.COLUMN)
|
||||
self.cont2.set_size(lv.pct(40), lv.pct(80))
|
||||
self.cont2.set_x(lv.pct(50))
|
||||
self.cont2.add_event_cb(self.radio_event_handler, lv.EVENT.CLICKED, None)
|
||||
|
||||
for i in range(3):
|
||||
txt = "B {:d}".format(i+1)
|
||||
self.radiobutton_create(self.cont2,txt)
|
||||
|
||||
# Make the first checkbox checked*/
|
||||
self.cont2.get_child(0).add_state(lv.STATE.CHECKED)
|
||||
|
||||
|
||||
def radio_event_handler(self,e):
|
||||
cont = e.get_current_target()
|
||||
act_cb = e.get_target()
|
||||
if cont == self.cont1:
|
||||
active_id = self.active_index_1
|
||||
else:
|
||||
active_id = self.active_index_2
|
||||
old_cb = cont.get_child(active_id)
|
||||
|
||||
# Do nothing if the container was clicked
|
||||
if act_cb == cont:
|
||||
return
|
||||
|
||||
old_cb.clear_state(lv.STATE.CHECKED) # Uncheck the previous radio button
|
||||
act_cb.add_state(lv.STATE.CHECKED) # Uncheck the current radio button
|
||||
|
||||
if cont == self.cont1:
|
||||
self.active_index_1 = act_cb.get_index()
|
||||
# print("active index 1: ", self.active_index_1)
|
||||
else:
|
||||
self.active_index_2 = act_cb.get_index()
|
||||
# print("active index 2: ", self.active_index_2)
|
||||
|
||||
print("Selected radio buttons: {:d}, {:d}".format(self.active_index_1, self.active_index_2))
|
||||
|
||||
def radiobutton_create(self,parent, txt):
|
||||
obj = lv.checkbox(parent)
|
||||
obj.set_text(txt)
|
||||
obj.add_flag(lv.obj.FLAG.EVENT_BUBBLE)
|
||||
obj.add_style(self.style_radio, lv.PART.INDICATOR)
|
||||
obj.add_style(self.style_radio_chk, lv.PART.INDICATOR | lv.STATE.CHECKED)
|
||||
|
||||
lv_example_checkbox_2 = LV_Example_Checkbox_2()
|
||||
Reference in New Issue
Block a user