1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-14 06:42:58 +08:00
lvgl/demos/flex_layout/lv_demo_flex_layout_ctrl_pad.c
Viktor Szépe cc6581ae03
ci: upgrade astyle tool (#4776)
Install from source to use the latest version
2023-11-10 15:37:23 +01:00

169 lines
4.5 KiB
C

/**
* @file lv_demo_flex_layout_ctrl_pad.h
*
*/
/*********************
* INCLUDES
*********************/
#include "lv_demo_flex_layout_main.h"
#if LV_USE_DEMO_FLEX_LAYOUT
/*********************
* DEFINES
*********************/
#define SPINBOX_UPDATE_STYLE_VALUE(item) \
do { \
lv_obj_t* sbox = ui->ctrl_pad.tab.layout.spinbox_##item; \
int32_t val = lv_obj_get_style_##item(obj, LV_PART_MAIN); \
lv_spinbox_set_value(sbox, val); \
} while(0)
#define SPINBOX_EVENT_ATTACH(item) \
lv_obj_add_event(ui->ctrl_pad.tab.layout.spinbox_##item, ctrl_pad_spinbox_event_handler, LV_EVENT_VALUE_CHANGED, ui);
/**********************
* TYPEDEFS
**********************/
/**********************
* STATIC PROTOTYPES
**********************/
static void ctrl_pad_spinbox_event_handler(lv_event_t * e);
static void ctrl_pad_checkbox_event_handler(lv_event_t * e);
static void ctrl_pad_btn_event_attach(view_t * ui);
/**********************
* STATIC VARIABLES
**********************/
/**********************
* MACROS
**********************/
/**********************
* GLOBAL FUNCTIONS
**********************/
void ctrl_pad_attach(view_t * ui)
{
ctrl_pad_btn_event_attach(ui);
flex_loader_attach(ui);
SPINBOX_EVENT_ATTACH(width);
SPINBOX_EVENT_ATTACH(height);
SPINBOX_EVENT_ATTACH(pad_top);
SPINBOX_EVENT_ATTACH(pad_bottom);
SPINBOX_EVENT_ATTACH(pad_left);
SPINBOX_EVENT_ATTACH(pad_right);
SPINBOX_EVENT_ATTACH(pad_column);
SPINBOX_EVENT_ATTACH(pad_row);
SPINBOX_EVENT_ATTACH(flex_grow);
lv_obj_add_event(
ui->ctrl_pad.tab.flex.checkbox_scrl,
ctrl_pad_checkbox_event_handler,
LV_EVENT_VALUE_CHANGED,
ui
);
}
/**********************
* STATIC FUNCTIONS
**********************/
static void ctrl_pad_btn_remove_event_handler(lv_event_t * e)
{
view_t * ui = lv_event_get_user_data(e);
if(ui->obj_cur) {
if(ui->obj_cur == ui->root) {
lv_obj_clean(ui->root);
}
else {
lv_obj_delete(ui->obj_cur);
ui->obj_cur = NULL;
}
}
}
void ctrl_pad_obj_update(lv_obj_t * obj, view_t * ui)
{
lv_obj_t * spinbox = ui->ctrl_pad.tab.layout.spinbox_width;
int32_t value = lv_obj_get_width(obj);
lv_spinbox_set_value(spinbox, value);
spinbox = ui->ctrl_pad.tab.layout.spinbox_height;
value = lv_obj_get_height(obj);
lv_spinbox_set_value(spinbox, value);
SPINBOX_UPDATE_STYLE_VALUE(pad_top);
SPINBOX_UPDATE_STYLE_VALUE(pad_bottom);
SPINBOX_UPDATE_STYLE_VALUE(pad_left);
SPINBOX_UPDATE_STYLE_VALUE(pad_right);
SPINBOX_UPDATE_STYLE_VALUE(pad_column);
SPINBOX_UPDATE_STYLE_VALUE(pad_row);
SPINBOX_UPDATE_STYLE_VALUE(flex_grow);
lv_obj_t * checkbox = ui->ctrl_pad.tab.flex.checkbox_scrl;
if(lv_obj_has_flag(obj, LV_OBJ_FLAG_SCROLLABLE)) {
lv_obj_add_state(checkbox, LV_STATE_CHECKED);
}
else {
lv_obj_remove_state(checkbox, LV_STATE_CHECKED);
}
}
static void ctrl_pad_spinbox_event_handler(lv_event_t * e)
{
view_t * ui = lv_event_get_user_data(e);
lv_obj_t * spinbox = lv_event_get_target(e);
lv_style_prop_t prop = (lv_style_prop_t)(lv_uintptr_t)lv_obj_get_user_data(spinbox);
lv_style_value_t v = {
.num = (int32_t)lv_spinbox_get_value(spinbox)
};
if(ui->obj_cur) {
lv_obj_set_local_style_prop(ui->obj_cur, prop, v, LV_PART_MAIN);
}
}
static void ctrl_pad_btn_add_event_handler(lv_event_t * e)
{
view_t * ui = lv_event_get_user_data(e);
obj_child_node_create(ui->obj_cur, ui);
}
static void ctrl_pad_checkbox_event_handler(lv_event_t * e)
{
view_t * ui = lv_event_get_user_data(e);
if(ui->obj_cur) {
bool checked = lv_obj_has_state(lv_event_get_target(e), LV_STATE_CHECKED);
checked ? lv_obj_add_flag(ui->obj_cur, LV_OBJ_FLAG_SCROLLABLE) : lv_obj_remove_flag(ui->obj_cur,
LV_OBJ_FLAG_SCROLLABLE);
}
}
static void ctrl_pad_btn_event_attach(view_t * ui)
{
lv_obj_add_event(
ui->ctrl_pad.btn.add,
ctrl_pad_btn_add_event_handler,
LV_EVENT_CLICKED,
ui
);
lv_obj_add_event(
ui->ctrl_pad.btn.remove,
ctrl_pad_btn_remove_event_handler,
LV_EVENT_CLICKED,
ui
);
}
#endif