mirror of
https://github.com/lvgl/lvgl.git
synced 2025-01-14 06:42:58 +08:00
cc6581ae03
Install from source to use the latest version
169 lines
4.5 KiB
C
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
|