1 /**
2 * @file lv_demo_smartwatch_settings.c
3 * Settings screen layout & functions. Contains basic settings for smartwatch.
4 */
5
6 /*********************
7 * INCLUDES
8 *********************/
9 #include "lv_demo_smartwatch.h"
10 #if LV_USE_DEMO_SMARTWATCH
11
12 #include "lv_demo_smartwatch_private.h"
13 #include "lv_demo_smartwatch_settings.h"
14
15 /*********************
16 * DEFINES
17 *********************/
18
19 /**********************
20 * TYPEDEFS
21 **********************/
22
23 typedef enum {
24 ST_SLIDER,
25 ST_SWITCH,
26 ST_DROPDOWN,
27 ST_LABEL,
28 ST_MAX
29 } settings_type_t;
30
31 /**********************
32 * STATIC PROTOTYPES
33 **********************/
34 static void create_screen_settings(void);
35 static void settings_action_event_cb(lv_event_t * e);
36 static void settings_screen_event_cb(lv_event_t * e);
37
38 /**********************
39 * STATIC VARIABLES
40 **********************/
41 static lv_obj_t * settings_screen;
42 static lv_obj_t * settings_list;
43
44 static lv_obj_t * brightness_slider;
45 static lv_obj_t * circular_switch;
46 static lv_obj_t * timeout_dropdown;
47 static lv_obj_t * rotation_dropdown;
48 static lv_obj_t * alerts_switch;
49 static lv_obj_t * about_label;
50 static lv_obj_t * scroll_mode;
51 static lv_obj_t * hint_switch;
52 static bool manual_trigger;
53
54 static lv_smartwatch_settings_change_cb_t settings_change_cb;
55
56 /**********************
57 * MACROS
58 **********************/
59
60 /**********************
61 * GLOBAL FUNCTIONS
62 **********************/
63
lv_demo_smartwatch_settings_create(void)64 void lv_demo_smartwatch_settings_create(void)
65 {
66 create_screen_settings();
67 }
68
lv_demo_smartwatch_settings_load(lv_screen_load_anim_t anim_type,uint32_t time,uint32_t delay)69 void lv_demo_smartwatch_settings_load(lv_screen_load_anim_t anim_type, uint32_t time, uint32_t delay)
70 {
71 lv_screen_load_anim(settings_screen, anim_type, time, delay, false);
72 }
73
lv_demo_smartwatch_settings_add_slider(uint16_t id,const char * name,const lv_img_dsc_t * img,int32_t value,int32_t min,int32_t max)74 lv_obj_t * lv_demo_smartwatch_settings_add_slider(uint16_t id, const char * name, const lv_img_dsc_t * img,
75 int32_t value,
76 int32_t min, int32_t max)
77 {
78 lv_obj_t * panel = lv_obj_create(settings_list);
79 lv_obj_set_width(panel, lv_pct(85));
80 lv_obj_set_height(panel, 64);
81 lv_obj_set_align(panel, LV_ALIGN_CENTER);
82 lv_obj_remove_flag(panel, LV_OBJ_FLAG_SCROLLABLE);
83 lv_obj_set_style_radius(panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
84 lv_obj_set_style_bg_color(panel, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);
85 lv_obj_set_style_bg_opa(panel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
86 lv_obj_set_style_border_color(panel, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
87 lv_obj_set_style_border_opa(panel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
88 lv_obj_set_style_border_width(panel, 1, LV_PART_MAIN | LV_STATE_DEFAULT);
89 lv_obj_set_style_border_side(panel, LV_BORDER_SIDE_BOTTOM, LV_PART_MAIN | LV_STATE_DEFAULT);
90 lv_obj_set_style_pad_left(panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
91 lv_obj_set_style_pad_right(panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
92 lv_obj_set_style_pad_top(panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
93 lv_obj_set_style_pad_bottom(panel, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
94
95 lv_obj_t * slider = lv_slider_create(panel);
96 lv_slider_set_range(slider, min, max);
97 lv_slider_set_value(slider, value, LV_ANIM_OFF);
98 if(lv_slider_get_mode(slider) == LV_SLIDER_MODE_RANGE)
99 lv_slider_set_left_value(slider, 0, LV_ANIM_OFF);
100 lv_obj_set_width(slider, 123);
101 lv_obj_set_height(slider, 10);
102 lv_obj_set_x(slider, 65);
103 lv_obj_set_y(slider, 12);
104 lv_obj_set_align(slider, LV_ALIGN_LEFT_MID);
105 lv_obj_remove_flag(slider, LV_OBJ_FLAG_GESTURE_BUBBLE);
106
107 lv_obj_t * icon = lv_image_create(panel);
108 lv_image_set_src(icon, img);
109 lv_obj_set_width(icon, LV_SIZE_CONTENT);
110 lv_obj_set_height(icon, LV_SIZE_CONTENT);
111 lv_obj_set_align(icon, LV_ALIGN_LEFT_MID);
112 lv_obj_add_flag(icon, LV_OBJ_FLAG_ADV_HITTEST);
113 lv_obj_remove_flag(icon, LV_OBJ_FLAG_SCROLLABLE);
114 lv_image_set_scale(icon, 150);
115
116 lv_obj_t * label = lv_label_create(panel);
117 lv_obj_set_width(label, LV_SIZE_CONTENT);
118 lv_obj_set_height(label, LV_SIZE_CONTENT);
119 lv_obj_set_x(label, 60);
120 lv_obj_set_y(label, 3);
121 lv_label_set_text(label, name);
122
123 lv_obj_add_event_cb(slider, settings_action_event_cb, LV_EVENT_VALUE_CHANGED,
124 (void *)(intptr_t)((ST_SLIDER << 16) | id));
125
126 return slider;
127 }
128
lv_demo_smartwatch_settings_add_toggle(uint16_t id,const char * name,const lv_img_dsc_t * img,bool state)129 lv_obj_t * lv_demo_smartwatch_settings_add_toggle(uint16_t id, const char * name, const lv_img_dsc_t * img, bool state)
130 {
131 lv_obj_t * panel = lv_obj_create(settings_list);
132 lv_obj_set_width(panel, lv_pct(85));
133 lv_obj_set_height(panel, 64);
134 lv_obj_set_align(panel, LV_ALIGN_CENTER);
135 lv_obj_remove_flag(panel, LV_OBJ_FLAG_SCROLLABLE);
136 lv_obj_set_style_radius(panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
137 lv_obj_set_style_bg_color(panel, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);
138 lv_obj_set_style_bg_opa(panel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
139 lv_obj_set_style_border_color(panel, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
140 lv_obj_set_style_border_opa(panel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
141 lv_obj_set_style_border_width(panel, 1, LV_PART_MAIN | LV_STATE_DEFAULT);
142 lv_obj_set_style_border_side(panel, LV_BORDER_SIDE_BOTTOM, LV_PART_MAIN | LV_STATE_DEFAULT);
143 lv_obj_set_style_pad_left(panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
144 lv_obj_set_style_pad_right(panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
145 lv_obj_set_style_pad_top(panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
146 lv_obj_set_style_pad_bottom(panel, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
147
148 lv_obj_t * icon = lv_image_create(panel);
149 lv_image_set_src(icon, img);
150 lv_obj_set_width(icon, LV_SIZE_CONTENT);
151 lv_obj_set_height(icon, LV_SIZE_CONTENT);
152 lv_obj_set_align(icon, LV_ALIGN_LEFT_MID);
153 lv_obj_add_flag(icon, LV_OBJ_FLAG_ADV_HITTEST);
154 lv_obj_remove_flag(icon, LV_OBJ_FLAG_SCROLLABLE);
155 lv_image_set_scale(icon, 150);
156
157 lv_obj_t * toggle = lv_switch_create(panel);
158 lv_obj_set_width(toggle, 50);
159 lv_obj_set_height(toggle, 25);
160 lv_obj_set_x(toggle, 65);
161 lv_obj_set_y(toggle, 12);
162 lv_obj_set_align(toggle, LV_ALIGN_LEFT_MID);
163
164 if(state) {
165 lv_obj_add_state(toggle, LV_STATE_CHECKED);
166 }
167 else {
168 lv_obj_remove_state(toggle, LV_STATE_CHECKED);
169 }
170
171 lv_obj_t * label = lv_label_create(panel);
172 lv_obj_set_width(label, LV_SIZE_CONTENT);
173 lv_obj_set_height(label, LV_SIZE_CONTENT);
174 lv_obj_set_x(label, 60);
175 lv_obj_set_y(label, 3);
176 lv_label_set_text(label, name);
177
178 lv_obj_add_event_cb(toggle, settings_action_event_cb, LV_EVENT_VALUE_CHANGED,
179 (void *)(intptr_t)((ST_SWITCH << 16) | id));
180
181 return toggle;
182 }
183
lv_demo_smartwatch_settings_add_dropdown(uint16_t id,const char * name,const lv_img_dsc_t * img,const char * options)184 lv_obj_t * lv_demo_smartwatch_settings_add_dropdown(uint16_t id, const char * name, const lv_img_dsc_t * img,
185 const char * options)
186 {
187 lv_obj_t * panel = lv_obj_create(settings_list);
188 lv_obj_set_width(panel, lv_pct(85));
189 lv_obj_set_height(panel, 64);
190 lv_obj_set_x(panel, 37);
191 lv_obj_set_y(panel, 7);
192 lv_obj_set_align(panel, LV_ALIGN_CENTER);
193 lv_obj_remove_flag(panel, LV_OBJ_FLAG_SCROLLABLE);
194 lv_obj_set_style_radius(panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
195 lv_obj_set_style_bg_color(panel, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);
196 lv_obj_set_style_bg_opa(panel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
197 lv_obj_set_style_border_color(panel, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
198 lv_obj_set_style_border_opa(panel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
199 lv_obj_set_style_border_width(panel, 1, LV_PART_MAIN | LV_STATE_DEFAULT);
200 lv_obj_set_style_border_side(panel, LV_BORDER_SIDE_BOTTOM, LV_PART_MAIN | LV_STATE_DEFAULT);
201 lv_obj_set_style_pad_left(panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
202 lv_obj_set_style_pad_right(panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
203 lv_obj_set_style_pad_top(panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
204 lv_obj_set_style_pad_bottom(panel, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
205
206 lv_obj_t * dropdown = lv_dropdown_create(panel);
207 lv_dropdown_set_options(dropdown, options);
208 lv_obj_set_width(dropdown, 120);
209 lv_obj_set_height(dropdown, LV_SIZE_CONTENT);
210 lv_obj_set_x(dropdown, 65);
211 lv_obj_set_y(dropdown, 12);
212 lv_obj_set_align(dropdown, LV_ALIGN_LEFT_MID);
213 lv_obj_add_flag(dropdown, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
214 lv_obj_set_style_bg_color(dropdown, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);
215 lv_obj_set_style_bg_opa(dropdown, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
216 lv_obj_set_style_border_color(dropdown, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
217 lv_obj_set_style_border_opa(dropdown, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
218 lv_obj_set_style_border_width(dropdown, 1, LV_PART_MAIN | LV_STATE_DEFAULT);
219
220 lv_obj_set_style_bg_color(lv_dropdown_get_list(dropdown), lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);
221 lv_obj_set_style_bg_opa(lv_dropdown_get_list(dropdown), 255, LV_PART_MAIN | LV_STATE_DEFAULT);
222
223 lv_obj_t * icon = lv_image_create(panel);
224 lv_image_set_src(icon, img);
225 lv_obj_set_width(icon, LV_SIZE_CONTENT);
226 lv_obj_set_height(icon, LV_SIZE_CONTENT);
227 lv_obj_set_align(icon, LV_ALIGN_LEFT_MID);
228 lv_obj_add_flag(icon, LV_OBJ_FLAG_ADV_HITTEST);
229 lv_obj_remove_flag(icon, LV_OBJ_FLAG_SCROLLABLE);
230 lv_image_set_scale(icon, 150);
231
232 lv_obj_t * label = lv_label_create(panel);
233 lv_obj_set_width(label, LV_SIZE_CONTENT);
234 lv_obj_set_height(label, LV_SIZE_CONTENT);
235 lv_obj_set_x(label, 60);
236 lv_obj_set_y(label, 3);
237 lv_label_set_text(label, name);
238
239 lv_obj_add_event_cb(dropdown, settings_action_event_cb, LV_EVENT_VALUE_CHANGED,
240 (void *)(intptr_t)((ST_DROPDOWN << 16) | id));
241
242 return dropdown;
243 }
244
lv_demo_smartwatch_settings_add_label(uint16_t id,const char * name,const lv_img_dsc_t * img)245 lv_obj_t * lv_demo_smartwatch_settings_add_label(uint16_t id, const char * name, const lv_img_dsc_t * img)
246 {
247 lv_obj_t * panel = lv_obj_create(settings_list);
248 lv_obj_set_width(panel, lv_pct(85));
249 lv_obj_set_height(panel, LV_SIZE_CONTENT);
250 lv_obj_set_align(panel, LV_ALIGN_CENTER);
251 lv_obj_remove_flag(panel, LV_OBJ_FLAG_SCROLLABLE);
252 lv_obj_set_style_radius(panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
253 lv_obj_set_style_bg_color(panel, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);
254 lv_obj_set_style_bg_opa(panel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
255 lv_obj_set_style_border_color(panel, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
256 lv_obj_set_style_border_opa(panel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
257 lv_obj_set_style_border_width(panel, 1, LV_PART_MAIN | LV_STATE_DEFAULT);
258 lv_obj_set_style_border_side(panel, LV_BORDER_SIDE_BOTTOM, LV_PART_MAIN | LV_STATE_DEFAULT);
259 lv_obj_set_style_pad_left(panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
260 lv_obj_set_style_pad_right(panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
261 lv_obj_set_style_pad_top(panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
262 lv_obj_set_style_pad_bottom(panel, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
263
264 lv_obj_t * icon = lv_image_create(panel);
265 lv_image_set_src(icon, img);
266 lv_obj_set_width(icon, LV_SIZE_CONTENT);
267 lv_obj_set_height(icon, LV_SIZE_CONTENT);
268 lv_obj_set_x(icon, -5);
269 lv_obj_set_y(icon, 2);
270 lv_obj_add_flag(icon, LV_OBJ_FLAG_ADV_HITTEST);
271 lv_obj_remove_flag(icon, LV_OBJ_FLAG_SCROLLABLE);
272 lv_image_set_scale(icon, 150);
273
274 lv_obj_t * label = lv_label_create(panel);
275 lv_obj_set_width(label, 130);
276 lv_obj_set_height(label, LV_SIZE_CONTENT);
277 lv_obj_set_x(label, 60);
278 lv_obj_set_y(label, 7);
279 lv_label_set_text(label, name);
280
281 lv_obj_add_event_cb(panel, settings_action_event_cb, LV_EVENT_CLICKED, (void *)(intptr_t)((ST_LABEL << 16) | id));
282
283 return label;
284 }
285
lv_demo_smartwatch_set_settings_actions_cb(lv_smartwatch_settings_change_cb_t cb)286 void lv_demo_smartwatch_set_settings_actions_cb(lv_smartwatch_settings_change_cb_t cb)
287 {
288 settings_change_cb = cb;
289 }
290
lv_demo_smartwatch_set_default_brightness(uint8_t brightness)291 void lv_demo_smartwatch_set_default_brightness(uint8_t brightness)
292 {
293 lv_slider_set_value(brightness_slider, brightness, LV_ANIM_OFF);
294 lv_demo_smartwatch_update_brightness_slider(brightness);
295 manual_trigger = true;
296 lv_obj_send_event(brightness_slider, LV_EVENT_VALUE_CHANGED, (void *)(intptr_t)((ST_SLIDER << 16) | 0x0001));
297 }
298
lv_demo_smartwatch_set_default_timeout(uint8_t timeout)299 void lv_demo_smartwatch_set_default_timeout(uint8_t timeout)
300 {
301 lv_dropdown_set_selected(timeout_dropdown, timeout, LV_ANIM_OFF);
302 manual_trigger = true;
303 lv_obj_send_event(timeout_dropdown, LV_EVENT_VALUE_CHANGED, (void *)(intptr_t)((ST_DROPDOWN << 16) | 0x0003));
304 }
305
lv_demo_smartwatch_set_default_rotation(uint8_t rotation)306 void lv_demo_smartwatch_set_default_rotation(uint8_t rotation)
307 {
308 lv_dropdown_set_selected(rotation_dropdown, rotation, LV_ANIM_OFF);
309 manual_trigger = true;
310 lv_obj_send_event(rotation_dropdown, LV_EVENT_VALUE_CHANGED, (void *)(intptr_t)((ST_DROPDOWN << 16) | 0x0004));
311 }
312
lv_demo_smartwatch_set_default_circular_scroll(bool enabled)313 void lv_demo_smartwatch_set_default_circular_scroll(bool enabled)
314 {
315 if(enabled) {
316 lv_obj_add_state(circular_switch, LV_STATE_CHECKED);
317 }
318 else {
319 lv_obj_remove_state(circular_switch, LV_STATE_CHECKED);
320 }
321 manual_trigger = true;
322 lv_obj_send_event(circular_switch, LV_EVENT_VALUE_CHANGED, (void *)(intptr_t)((ST_SWITCH << 16) | 0x0002));
323 }
324
lv_demo_smartwatch_set_default_alert_state(bool enabled)325 void lv_demo_smartwatch_set_default_alert_state(bool enabled)
326 {
327 if(enabled) {
328 lv_obj_add_state(alerts_switch, LV_STATE_CHECKED);
329 }
330 else {
331 lv_obj_remove_state(alerts_switch, LV_STATE_CHECKED);
332 }
333 manual_trigger = true;
334 lv_obj_send_event(alerts_switch, LV_EVENT_VALUE_CHANGED, (void *)(intptr_t)((ST_SWITCH << 16) | 0x0005));
335 }
336
lv_demo_smartwatch_set_default_hints_state(bool enabled)337 void lv_demo_smartwatch_set_default_hints_state(bool enabled)
338 {
339 if(enabled) {
340 lv_obj_add_state(hint_switch, LV_STATE_CHECKED);
341 }
342 else {
343 lv_obj_remove_state(hint_switch, LV_STATE_CHECKED);
344 }
345 manual_trigger = true;
346 lv_obj_send_event(hint_switch, LV_EVENT_VALUE_CHANGED, (void *)(intptr_t)((ST_SWITCH << 16) | 0x0009));
347 }
348
lv_demo_smartwatch_set_default_scrollbar_mode(lv_scrollbar_mode_t mode)349 void lv_demo_smartwatch_set_default_scrollbar_mode(lv_scrollbar_mode_t mode)
350 {
351 lv_dropdown_set_selected(scroll_mode, mode, LV_ANIM_OFF);
352 manual_trigger = true;
353 lv_obj_send_event(scroll_mode, LV_EVENT_VALUE_CHANGED, (void *)(intptr_t)((ST_DROPDOWN << 16) | 0x0008));
354 }
355
lv_demo_smartwatch_set_default_about_info(const char * info)356 void lv_demo_smartwatch_set_default_about_info(const char * info)
357 {
358 lv_label_set_text(about_label, info);
359 }
360
361 /**********************
362 * STATIC FUNCTIONS
363 **********************/
364
settings_action_event_cb(lv_event_t * e)365 static void settings_action_event_cb(lv_event_t * e)
366 {
367
368 lv_obj_t * active_screen = lv_screen_active();
369
370 LV_LOG_WARN("Settings actions event triggered, settings screen %s, Manually triggered %s",
371 active_screen == settings_screen ? "active" : "inactive", manual_trigger ? "yes" : "no");
372
373 if(active_screen != settings_screen && !manual_trigger) {
374 /* event was triggered but the current screen is no longer active */
375 /* event was not manually triggerd */
376 LV_LOG_WARN("Settings actions event triggered but the current screen is no longer active");
377 return;
378 }
379
380 uint32_t data = (uint32_t)(intptr_t)lv_event_get_user_data(e);
381 uint16_t id = (uint16_t)data;
382 uint16_t type = (uint16_t)(data >> 16);
383 uint64_t value;
384 lv_obj_t * target = lv_event_get_target(e);
385
386 /* extract value based on the type */
387 switch(type) {
388 case ST_SLIDER:
389 value = lv_slider_get_value(target);
390 break;
391 case ST_DROPDOWN:
392 value = lv_dropdown_get_selected(target);
393 break;
394 case ST_SWITCH:
395 value = lv_obj_has_state(target, LV_STATE_CHECKED) ? 1 : 0;
396 break;
397 case ST_LABEL:
398 break;
399
400 default:
401 break;
402 }
403
404 /* send actions to user callback function if set */
405 if(settings_change_cb != NULL) {
406 settings_change_cb(id, value);
407 }
408
409 /* handle actions for the inbuilt settings */
410 switch(id) {
411 case 0x0001:
412 if(!manual_trigger) {
413 /* Update the brightness slider in the control screen */
414 lv_demo_smartwatch_update_brightness_slider(value);
415 }
416 break;
417 case 0x0002:
418 lv_demo_smartwatch_set_circular_scroll(value);
419 lv_obj_scroll_by(settings_list, 0, value ? 1 : -1, LV_ANIM_OFF);
420 break;
421 case 0x0007:
422 lv_demo_smartwatch_easter_egg_load(LV_SCR_LOAD_ANIM_FADE_ON, 500, 0);
423 break;
424 case 0x0008:
425 lv_demo_smartwatch_set_scrollbar_mode(value);
426 lv_obj_set_scrollbar_mode(settings_list, lv_demo_smartwatch_get_scrollbar_mode());
427 break;
428 case 0x0009:
429 lv_demo_smartwatch_set_scroll_hint(value);
430 break;
431
432 default:
433 break;
434 }
435
436 manual_trigger = false;
437 }
438
settings_screen_event_cb(lv_event_t * e)439 static void settings_screen_event_cb(lv_event_t * e)
440 {
441 lv_event_code_t event_code = lv_event_get_code(e);
442
443 if(event_code == LV_EVENT_GESTURE && lv_indev_get_gesture_dir(lv_indev_active()) == LV_DIR_RIGHT) {
444 lv_demo_smartwatch_list_load(LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0);
445 }
446
447 if(event_code == LV_EVENT_GESTURE && lv_indev_get_gesture_dir(lv_indev_active()) == LV_DIR_LEFT) {
448 lv_demo_smartwatch_show_scroll_hint(LV_DIR_LEFT);
449 }
450
451 if(event_code == LV_EVENT_SCREEN_LOAD_START) {
452 lv_obj_scroll_by(settings_list, 0, 1, LV_ANIM_OFF);
453 lv_obj_scroll_by(settings_list, 0, -1, LV_ANIM_OFF);
454
455 lv_obj_set_scrollbar_mode(settings_list, lv_demo_smartwatch_get_scrollbar_mode());
456 }
457
458 if(event_code == LV_EVENT_SCREEN_LOADED) {
459 lv_demo_smartwatch_show_scroll_hint(LV_DIR_LEFT);
460 }
461 }
462
create_screen_settings(void)463 static void create_screen_settings(void)
464 {
465
466 settings_screen = lv_obj_create(NULL);
467 lv_obj_remove_flag(settings_screen, LV_OBJ_FLAG_SCROLLABLE);
468 lv_obj_set_style_radius(settings_screen, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
469 lv_obj_set_style_bg_color(settings_screen, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);
470 lv_obj_set_style_bg_opa(settings_screen, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
471
472 settings_list = lv_obj_create(settings_screen);
473 lv_obj_set_width(settings_list, lv_pct(100));
474 lv_obj_set_height(settings_list, lv_pct(100));
475 lv_obj_set_align(settings_list, LV_ALIGN_TOP_MID);
476 lv_obj_set_flex_flow(settings_list, LV_FLEX_FLOW_COLUMN);
477 lv_obj_set_flex_align(settings_list, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
478 lv_obj_set_scrollbar_mode(settings_list, LV_SCROLLBAR_MODE_OFF);
479 lv_obj_set_scroll_dir(settings_list, LV_DIR_VER);
480 lv_obj_set_style_radius(settings_list, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
481 lv_obj_set_style_bg_color(settings_list, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);
482 lv_obj_set_style_bg_opa(settings_list, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
483 lv_obj_set_style_border_width(settings_list, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
484 lv_obj_set_style_pad_left(settings_list, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
485 lv_obj_set_style_pad_right(settings_list, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
486 lv_obj_set_style_pad_top(settings_list, 50, LV_PART_MAIN | LV_STATE_DEFAULT);
487 lv_obj_set_style_pad_bottom(settings_list, 70, LV_PART_MAIN | LV_STATE_DEFAULT);
488
489 brightness_slider = lv_demo_smartwatch_settings_add_slider(0x0001, "Screen Brightness", &img_brightness_icon, 50, 1,
490 255);
491 circular_switch = lv_demo_smartwatch_settings_add_toggle(0x0002, "Circular Scroll", &img_scrolling_icon, true);
492 scroll_mode = lv_demo_smartwatch_settings_add_dropdown(0x0008, "Scrollbar Mode", &img_scrolling_icon,
493 "OFF\nON\nACTIVE\nAUTO");
494 timeout_dropdown = lv_demo_smartwatch_settings_add_dropdown(0x0003, "Screen Timeout", &img_timeout_icon,
495 "5 Seconds\n10 Seconds\n20 Seconds\n30 Seconds\nAlways On");
496 rotation_dropdown = lv_demo_smartwatch_settings_add_dropdown(0x0004, "Screen Rotation", &img_screen_rotate_icon,
497 "Default\n90\n180\n270");
498 hint_switch = lv_demo_smartwatch_settings_add_toggle(0x0009, "Show Hints", &img_info_icon, false);
499 alerts_switch = lv_demo_smartwatch_settings_add_toggle(0x0005, "Show Alerts", &img_alert_icon, false);
500 about_label = lv_demo_smartwatch_settings_add_label(0x0006, "LVGL Demo\nSmart Watch UI\n11:22:33:44:55:66",
501 &img_info_icon);
502 lv_demo_smartwatch_settings_add_label(0x0007, "Made with love\nin Kenya\nusing LVGL", &img_kenya_icon);
503
504 lv_obj_add_event_cb(settings_list, lv_demo_smartwatch_scroll_event, LV_EVENT_ALL, NULL);
505 lv_obj_add_event_cb(settings_screen, settings_screen_event_cb, LV_EVENT_ALL, NULL);
506 }
507
508 #endif /*LV_USE_DEMO_SMARTWATCH*/
509