1 /**
2 * @file lv_demo_flex_layout_flex_loader.c
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 FLEX_ALIGN_EVENT_DEF(item) \
19 static void flex_align_##item##_event_handler(lv_event_t* e) \
20 { \
21 view_t* ui = lv_event_get_user_data(e); \
22 lv_obj_t* ddlist = lv_event_get_target(e); \
23 uint16_t selected = lv_dropdown_get_selected(ddlist); \
24 if (ui->obj_cur) { \
25 lv_obj_set_style_flex_##item##_place(ui->obj_cur, \
26 flex_align_map[selected], 0); \
27 } \
28 }
29
30 #define FLEX_ALIGN_DDLIST_UPDATE_DEF(item) \
31 do { \
32 lv_flex_align_t flex_align = lv_obj_get_style_flex_##item##_place(obj, 0); \
33 for (i = 0; i < ARRAY_SIZE(flex_align_map); i++) { \
34 if (flex_align == flex_align_map[i]) { \
35 lv_dropdown_set_selected(ui->ctrl_pad.tab.align.ddlist_align_##item, \
36 i, LV_ANIM_OFF); \
37 break; \
38 } \
39 } \
40 } while(0)
41
42 #define FLEX_ALIGN_EVENT_ATTACH(item) \
43 do { \
44 lv_obj_add_event_cb(ui->ctrl_pad.tab.align.ddlist_align_##item, \
45 flex_align_##item##_event_handler, \
46 LV_EVENT_VALUE_CHANGED, \
47 ui \
48 ); \
49 } while(0)
50
51 /**********************
52 * TYPEDEFS
53 **********************/
54
55 /**********************
56 * STATIC PROTOTYPES
57 **********************/
58
59 static void flex_flow_event_handler(lv_event_t * e);
60
61 /**********************
62 * STATIC VARIABLES
63 **********************/
64
65 static const lv_flex_flow_t flex_flow_map[] = {
66 LV_FLEX_FLOW_ROW,
67 LV_FLEX_FLOW_COLUMN,
68 LV_FLEX_FLOW_ROW_WRAP,
69 LV_FLEX_FLOW_ROW_REVERSE,
70 LV_FLEX_FLOW_ROW_WRAP_REVERSE,
71 LV_FLEX_FLOW_COLUMN_WRAP,
72 LV_FLEX_FLOW_COLUMN_REVERSE,
73 LV_FLEX_FLOW_COLUMN_WRAP_REVERSE
74 };
75
76 static const lv_flex_align_t flex_align_map[] = {
77 LV_FLEX_ALIGN_START,
78 LV_FLEX_ALIGN_END,
79 LV_FLEX_ALIGN_CENTER,
80 LV_FLEX_ALIGN_SPACE_EVENLY,
81 LV_FLEX_ALIGN_SPACE_AROUND,
82 LV_FLEX_ALIGN_SPACE_BETWEEN,
83 };
84
85 /**********************
86 * MACROS
87 **********************/
88
89 FLEX_ALIGN_EVENT_DEF(main)
FLEX_ALIGN_EVENT_DEF(cross)90 FLEX_ALIGN_EVENT_DEF(cross)
91 FLEX_ALIGN_EVENT_DEF(track)
92
93 /**********************
94 * GLOBAL FUNCTIONS
95 **********************/
96
97 void flex_loader_attach(view_t * ui)
98 {
99 lv_obj_add_event_cb(
100 ui->ctrl_pad.tab.flex.ddlist_flow,
101 flex_flow_event_handler,
102 LV_EVENT_VALUE_CHANGED,
103 ui
104 );
105
106 FLEX_ALIGN_EVENT_ATTACH(main);
107 FLEX_ALIGN_EVENT_ATTACH(cross);
108 FLEX_ALIGN_EVENT_ATTACH(track);
109 }
110
flex_loader_obj_update(lv_obj_t * obj,view_t * ui)111 void flex_loader_obj_update(lv_obj_t * obj, view_t * ui)
112 {
113 lv_flex_flow_t flex_flow = lv_obj_get_style_flex_flow(obj, 0);
114 uint32_t i;
115 for(i = 0; i < ARRAY_SIZE(flex_flow_map); i++) {
116 if(flex_flow == flex_flow_map[i]) {
117 lv_dropdown_set_selected(ui->ctrl_pad.tab.flex.ddlist_flow, i, LV_ANIM_OFF);
118 break;
119 }
120 }
121
122 FLEX_ALIGN_DDLIST_UPDATE_DEF(main);
123 FLEX_ALIGN_DDLIST_UPDATE_DEF(cross);
124 FLEX_ALIGN_DDLIST_UPDATE_DEF(track);
125 }
126
127 /**********************
128 * STATIC FUNCTIONS
129 **********************/
130
flex_flow_event_handler(lv_event_t * e)131 static void flex_flow_event_handler(lv_event_t * e)
132 {
133 view_t * ui = lv_event_get_user_data(e);
134 lv_obj_t * ddlist = lv_event_get_target(e);
135 uint16_t selected = lv_dropdown_get_selected(ddlist);
136
137 if(ui->obj_cur) {
138 lv_obj_set_flex_flow(ui->obj_cur, flex_flow_map[selected]);
139 lv_obj_scroll_to(ui->obj_cur, 0, 0, LV_ANIM_ON);
140 }
141 }
142
143 #endif
144