1 /**
2 * @file lv_demo_flex_layout_ctrl_pad.h
3 *
4 */
5
6 /*********************
7 * INCLUDES
8 *********************/
9
10 #include "lv_demo_flex_layout_main.h"
11
12 #if LV_USE_DEMO_FLEX_LAYOUT
13
14 /*********************
15 * DEFINES
16 *********************/
17
18 #define SPINBOX_UPDATE_STYLE_VALUE(item) \
19 do { \
20 lv_obj_t* sbox = ui->ctrl_pad.tab.layout.spinbox_##item; \
21 int32_t val = lv_obj_get_style_##item(obj, LV_PART_MAIN); \
22 lv_spinbox_set_value(sbox, val); \
23 } while(0)
24
25 #define SPINBOX_EVENT_ATTACH(item) \
26 lv_obj_add_event_cb(ui->ctrl_pad.tab.layout.spinbox_##item, ctrl_pad_spinbox_event_handler, LV_EVENT_VALUE_CHANGED, ui);
27
28 /**********************
29 * TYPEDEFS
30 **********************/
31
32 /**********************
33 * STATIC PROTOTYPES
34 **********************/
35
36 static void ctrl_pad_spinbox_event_handler(lv_event_t * e);
37 static void ctrl_pad_checkbox_event_handler(lv_event_t * e);
38 static void ctrl_pad_btn_event_attach(view_t * ui);
39
40 /**********************
41 * STATIC VARIABLES
42 **********************/
43
44 /**********************
45 * MACROS
46 **********************/
47
48 /**********************
49 * GLOBAL FUNCTIONS
50 **********************/
51
ctrl_pad_attach(view_t * ui)52 void ctrl_pad_attach(view_t * ui)
53 {
54 ctrl_pad_btn_event_attach(ui);
55 flex_loader_attach(ui);
56
57 SPINBOX_EVENT_ATTACH(width);
58 SPINBOX_EVENT_ATTACH(height);
59 SPINBOX_EVENT_ATTACH(pad_top);
60 SPINBOX_EVENT_ATTACH(pad_bottom);
61 SPINBOX_EVENT_ATTACH(pad_left);
62 SPINBOX_EVENT_ATTACH(pad_right);
63 SPINBOX_EVENT_ATTACH(pad_column);
64 SPINBOX_EVENT_ATTACH(pad_row);
65 SPINBOX_EVENT_ATTACH(flex_grow);
66
67 lv_obj_add_event_cb(
68 ui->ctrl_pad.tab.flex.checkbox_scrl,
69 ctrl_pad_checkbox_event_handler,
70 LV_EVENT_VALUE_CHANGED,
71 ui
72 );
73 }
74
75 /**********************
76 * STATIC FUNCTIONS
77 **********************/
78
ctrl_pad_btn_remove_event_handler(lv_event_t * e)79 static void ctrl_pad_btn_remove_event_handler(lv_event_t * e)
80 {
81 view_t * ui = lv_event_get_user_data(e);
82 if(ui->obj_cur) {
83 if(ui->obj_cur == ui->root) {
84 lv_obj_clean(ui->root);
85 }
86 else {
87 lv_obj_delete(ui->obj_cur);
88 ui->obj_cur = NULL;
89 }
90 }
91 }
92
ctrl_pad_obj_update(lv_obj_t * obj,view_t * ui)93 void ctrl_pad_obj_update(lv_obj_t * obj, view_t * ui)
94 {
95 lv_obj_t * spinbox = ui->ctrl_pad.tab.layout.spinbox_width;
96 int32_t value = lv_obj_get_width(obj);
97 lv_spinbox_set_value(spinbox, value);
98
99 spinbox = ui->ctrl_pad.tab.layout.spinbox_height;
100 value = lv_obj_get_height(obj);
101 lv_spinbox_set_value(spinbox, value);
102
103 SPINBOX_UPDATE_STYLE_VALUE(pad_top);
104 SPINBOX_UPDATE_STYLE_VALUE(pad_bottom);
105 SPINBOX_UPDATE_STYLE_VALUE(pad_left);
106 SPINBOX_UPDATE_STYLE_VALUE(pad_right);
107 SPINBOX_UPDATE_STYLE_VALUE(pad_column);
108 SPINBOX_UPDATE_STYLE_VALUE(pad_row);
109 SPINBOX_UPDATE_STYLE_VALUE(flex_grow);
110
111 lv_obj_t * checkbox = ui->ctrl_pad.tab.flex.checkbox_scrl;
112 if(lv_obj_has_flag(obj, LV_OBJ_FLAG_SCROLLABLE)) {
113 lv_obj_add_state(checkbox, LV_STATE_CHECKED);
114 }
115 else {
116 lv_obj_remove_state(checkbox, LV_STATE_CHECKED);
117 }
118 }
119
ctrl_pad_spinbox_event_handler(lv_event_t * e)120 static void ctrl_pad_spinbox_event_handler(lv_event_t * e)
121 {
122 view_t * ui = lv_event_get_user_data(e);
123 lv_obj_t * spinbox = lv_event_get_target(e);
124 lv_style_prop_t prop = (lv_style_prop_t)(lv_uintptr_t)lv_obj_get_user_data(spinbox);
125
126 lv_style_value_t v = {
127 .num = (int32_t)lv_spinbox_get_value(spinbox)
128 };
129
130 if(ui->obj_cur) {
131 lv_obj_set_local_style_prop(ui->obj_cur, prop, v, LV_PART_MAIN);
132 }
133 }
134
ctrl_pad_btn_add_event_handler(lv_event_t * e)135 static void ctrl_pad_btn_add_event_handler(lv_event_t * e)
136 {
137 view_t * ui = lv_event_get_user_data(e);
138 obj_child_node_create(ui->obj_cur, ui);
139 }
140
ctrl_pad_checkbox_event_handler(lv_event_t * e)141 static void ctrl_pad_checkbox_event_handler(lv_event_t * e)
142 {
143 view_t * ui = lv_event_get_user_data(e);
144 if(ui->obj_cur) {
145 bool checked = lv_obj_has_state(lv_event_get_target(e), LV_STATE_CHECKED);
146 checked ? lv_obj_add_flag(ui->obj_cur, LV_OBJ_FLAG_SCROLLABLE) : lv_obj_remove_flag(ui->obj_cur,
147 LV_OBJ_FLAG_SCROLLABLE);
148 }
149 }
150
ctrl_pad_btn_event_attach(view_t * ui)151 static void ctrl_pad_btn_event_attach(view_t * ui)
152 {
153 lv_obj_add_event_cb(
154 ui->ctrl_pad.btn.add,
155 ctrl_pad_btn_add_event_handler,
156 LV_EVENT_CLICKED,
157 ui
158 );
159
160 lv_obj_add_event_cb(
161 ui->ctrl_pad.btn.remove,
162 ctrl_pad_btn_remove_event_handler,
163 LV_EVENT_CLICKED,
164 ui
165 );
166 }
167
168 #endif
169