1 /**
2 * @file lv_demo_ebike_settings.c
3 *
4 */
5
6 /*********************
7 * INCLUDES
8 *********************/
9 #include "lv_demo_ebike.h"
10 #if LV_USE_DEMO_EBIKE
11
12 #include "translations/lv_i18n.h"
13 #include "lv_demo_ebike_settings.h"
14 #include "lv_demo_ebike_private.h"
15
16 /*********************
17 * DEFINES
18 *********************/
19
20 /**********************
21 * TYPEDEFS
22 **********************/
23
24 /**********************
25 * STATIC PROTOTYPES
26 **********************/
27 static lv_obj_t * left_cont_create(lv_obj_t * parent);
28 static lv_obj_t * right_cont_create(lv_obj_t * parent);
29
30 /**********************
31 * STATIC VARIABLES
32 **********************/
33
34 /**********************
35 * MACROS
36 **********************/
37
38 /**********************
39 * GLOBAL FUNCTIONS
40 **********************/
41
lv_demo_ebike_settings_create(lv_obj_t * parent)42 void lv_demo_ebike_settings_create(lv_obj_t * parent)
43 {
44 lv_obj_t * main_cont = lv_obj_create(parent);
45 lv_obj_set_style_bg_opa(main_cont, 0, 0);
46 lv_obj_set_size(main_cont, lv_pct(100), lv_pct(100));
47 lv_obj_set_flex_flow(main_cont, LV_DEMO_EBIKE_PORTRAIT ? LV_FLEX_FLOW_COLUMN : LV_FLEX_FLOW_ROW);
48
49 lv_obj_t * left_cont = left_cont_create(main_cont);
50 #if LV_DEMO_EBIKE_PORTRAIT
51 lv_obj_set_size(left_cont, lv_pct(100), 120);
52 #else
53 lv_obj_set_size(left_cont, 164, lv_pct(100));
54 #endif
55 lv_obj_t * right_cont = right_cont_create(main_cont);
56 lv_obj_set_size(right_cont, lv_pct(100), lv_pct(100));
57 lv_obj_set_flex_grow(right_cont, 1);
58 }
59
60 /**********************
61 * STATIC FUNCTIONS
62 **********************/
63
left_cont_create(lv_obj_t * parent)64 static lv_obj_t * left_cont_create(lv_obj_t * parent)
65 {
66 lv_obj_t * cont = lv_obj_create(parent);
67 lv_obj_set_style_bg_opa(cont, 0, 0);
68 lv_obj_remove_flag(cont, LV_OBJ_FLAG_SCROLLABLE);
69
70 lv_obj_t * label = lv_label_create(cont);
71 lv_obj_align(label, LV_ALIGN_TOP_LEFT, 24, 16);
72 lv_label_set_text(label, _("SETTINGS"));
73 lv_obj_set_style_text_font(label, EBIKE_FONT_MEDIUM, 0);
74
75 lv_obj_t * settings_img;
76 #if LV_USE_LOTTIE
77 extern const uint8_t lottie_ebike_settings[];
78 extern const size_t lottie_ebike_settings_size;
79 settings_img = lv_lottie_create(cont);
80 lv_lottie_set_src_data(settings_img, lottie_ebike_settings, lottie_ebike_settings_size);
81 lv_lottie_set_draw_buf(settings_img, lv_demo_ebike_get_lottie_draw_buf());
82 #else
83 settings_img = lv_image_create(cont);
84 LV_IMAGE_DECLARE(img_ebike_settings_large);
85 lv_image_set_src(settings_img, &img_ebike_settings_large);
86 #endif
87
88 #if LV_DEMO_EBIKE_PORTRAIT
89 lv_obj_align(settings_img, LV_ALIGN_BOTTOM_RIGHT, 0, 0);
90 #else
91 lv_obj_align(settings_img, LV_ALIGN_BOTTOM_MID, 0, 0);
92 #endif
93 return cont;
94 }
95
slider_create(lv_obj_t * parent,const char * title)96 static lv_obj_t * slider_create(lv_obj_t * parent, const char * title)
97 {
98 lv_obj_t * cont = lv_obj_create(parent);
99 lv_obj_set_size(cont, lv_pct(100), LV_SIZE_CONTENT);
100 lv_obj_set_style_bg_opa(cont, 0, 0);
101 lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_COLUMN);
102 lv_obj_set_style_text_font(cont, EBIKE_FONT_SMALL, 0);
103 lv_obj_set_style_pad_all(cont, 10, 0);
104 lv_obj_set_style_pad_column(cont, 4, 0);
105
106 lv_obj_t * label;
107 label = lv_label_create(cont);
108 lv_label_set_text(label, title);
109 lv_obj_set_width(label, lv_pct(100));
110
111 lv_obj_t * slider = lv_slider_create(cont);
112 lv_obj_set_size(slider, lv_pct(100), 4);
113 lv_obj_set_ext_click_area(slider, 24);
114 lv_obj_set_style_bg_opa(slider, LV_OPA_30, 0);
115 lv_obj_set_style_radius(slider, LV_RADIUS_CIRCLE, 0);
116 lv_obj_set_style_bg_color(slider, EBIKE_COLOR_TURQUOISE, 0);
117 lv_obj_set_style_bg_color(slider, EBIKE_COLOR_TURQUOISE, LV_PART_INDICATOR);
118 lv_obj_set_style_radius(slider, LV_RADIUS_CIRCLE, LV_PART_INDICATOR);
119 lv_obj_set_style_pad_all(slider, 8, LV_PART_KNOB);
120 lv_obj_set_style_radius(slider, LV_RADIUS_CIRCLE, LV_PART_KNOB);
121 lv_obj_set_style_border_width(slider, 4, LV_PART_KNOB);
122 lv_obj_set_style_border_color(slider, EBIKE_COLOR_TURQUOISE, LV_PART_KNOB);
123 lv_obj_set_style_bg_color(slider, lv_color_black(), LV_PART_KNOB);
124 lv_obj_set_style_margin_top(slider, 12, 0);
125
126 return cont;
127 }
128
switch_create(lv_obj_t * parent,const char * title,lv_subject_t * subject)129 static lv_obj_t * switch_create(lv_obj_t * parent, const char * title, lv_subject_t * subject)
130 {
131 lv_obj_t * cont = lv_obj_create(parent);
132 lv_obj_set_size(cont, lv_pct(100), LV_SIZE_CONTENT);
133 lv_obj_set_style_bg_opa(cont, 0, 0);
134 lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_ROW);
135 lv_obj_set_style_flex_main_place(cont, LV_FLEX_ALIGN_SPACE_BETWEEN, 0);
136 lv_obj_set_style_flex_cross_place(cont, LV_FLEX_ALIGN_CENTER, 0);
137 lv_obj_set_style_text_font(cont, EBIKE_FONT_SMALL, 0);
138 lv_obj_set_style_pad_all(cont, 10, 0);
139 lv_obj_set_style_pad_column(cont, 4, 0);
140
141 lv_obj_t * label;
142 label = lv_label_create(cont);
143 lv_label_set_text(label, title);
144 lv_obj_set_width(label, lv_pct(100));
145
146 lv_obj_t * sw = lv_switch_create(cont);
147 lv_obj_set_size(sw, 40, 24);
148 lv_obj_set_ext_click_area(sw, 32);
149 lv_obj_set_style_radius(sw, LV_RADIUS_CIRCLE, 0);
150 lv_obj_set_style_bg_color(sw, EBIKE_COLOR_TURQUOISE, 0);
151
152 lv_obj_set_style_radius(sw, LV_RADIUS_CIRCLE, LV_PART_KNOB);
153 lv_obj_set_style_bg_color(sw, lv_color_black(), LV_PART_KNOB);
154 lv_obj_set_style_pad_all(sw, -2, LV_PART_KNOB);
155
156 if(subject) lv_button_bind_checked(sw, subject);
157
158 return cont;
159 }
160
161
dropdown_create(lv_obj_t * parent,const char * title,const char * options,lv_subject_t * subject)162 static lv_obj_t * dropdown_create(lv_obj_t * parent, const char * title, const char * options, lv_subject_t * subject)
163 {
164 lv_obj_t * cont = lv_obj_create(parent);
165 lv_obj_set_size(cont, lv_pct(100), LV_SIZE_CONTENT);
166 lv_obj_set_style_bg_opa(cont, 0, 0);
167 lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_ROW);
168 lv_obj_set_style_flex_main_place(cont, LV_FLEX_ALIGN_SPACE_BETWEEN, 0);
169 lv_obj_set_style_flex_cross_place(cont, LV_FLEX_ALIGN_CENTER, 0);
170 lv_obj_set_style_text_font(cont, EBIKE_FONT_SMALL, 0);
171 lv_obj_set_style_pad_all(cont, 10, 0);
172 lv_obj_set_style_pad_column(cont, 4, 0);
173
174 lv_obj_t * label;
175 label = lv_label_create(cont);
176 lv_label_set_text(label, title);
177
178 LV_IMAGE_DECLARE(img_ebike_dropdown_icon);
179 lv_obj_t * dd = lv_dropdown_create(cont);
180 lv_dropdown_set_options(dd, options);
181 lv_obj_set_style_bg_color(dd, EBIKE_COLOR_TURQUOISE, 0);
182 lv_obj_set_style_bg_opa(dd, LV_OPA_40, 0);
183 lv_obj_set_style_radius(dd, 4, 0);
184 lv_obj_set_width(dd, 150);
185 lv_obj_set_style_pad_all(dd, 8, 0);
186 lv_dropdown_set_symbol(dd, &img_ebike_dropdown_icon);
187 lv_dropdown_bind_value(dd, subject);
188
189 lv_obj_t * list = lv_dropdown_get_list(dd);
190 lv_obj_set_style_bg_color(list, lv_color_black(), 0);
191 lv_obj_set_style_bg_opa(list, LV_OPA_COVER, 0);
192 lv_obj_set_style_bg_color(list, EBIKE_COLOR_TURQUOISE, LV_PART_SELECTED | LV_STATE_CHECKED);
193 lv_obj_set_style_bg_opa(list, LV_OPA_20, LV_PART_SELECTED | LV_STATE_CHECKED);
194 lv_obj_set_style_bg_color(list, EBIKE_COLOR_TURQUOISE, LV_PART_SELECTED | LV_STATE_PRESSED);
195 lv_obj_set_style_bg_opa(list, LV_OPA_40, LV_PART_SELECTED | LV_STATE_PRESSED);
196 lv_obj_set_style_radius(list, 4, 0);
197 lv_obj_set_style_text_line_space(list, 16, 0);
198 lv_obj_set_style_text_font(list, EBIKE_FONT_SMALL, 0);
199 lv_obj_set_style_pad_all(list, 16, 0);
200 return cont;
201 }
202
right_cont_create(lv_obj_t * parent)203 static lv_obj_t * right_cont_create(lv_obj_t * parent)
204 {
205 lv_obj_t * right_cont = lv_obj_create(parent);
206 lv_obj_set_style_bg_opa(right_cont, 0, 0);
207 lv_obj_set_flex_flow(right_cont, LV_FLEX_FLOW_COLUMN);
208 lv_obj_set_style_pad_ver(right_cont, 12, 0);
209 lv_obj_set_style_pad_right(right_cont, 8, 0);
210 lv_obj_set_style_pad_gap(right_cont, 8, 0);
211 lv_obj_set_style_width(right_cont, 3, LV_PART_SCROLLBAR);
212 lv_obj_set_style_pad_ver(right_cont, 8, LV_PART_SCROLLBAR);
213 lv_obj_set_style_radius(right_cont, 2, LV_PART_SCROLLBAR);
214 lv_obj_set_style_bg_opa(right_cont, LV_OPA_40, LV_PART_SCROLLBAR);
215 lv_obj_set_style_bg_color(right_cont, EBIKE_COLOR_TURQUOISE, LV_PART_SCROLLBAR);
216 if(lv_strcmp(lv_i18n_get_current_locale(), "ar") == 0) {
217 lv_obj_set_style_base_dir(right_cont, LV_BASE_DIR_RTL, 0);
218 }
219 else {
220 lv_obj_set_style_base_dir(right_cont, LV_BASE_DIR_LTR, 0);
221 }
222
223 dropdown_create(right_cont, _("Language"), "English\n简体中文\nعربي", &ebike_subject_language);
224 switch_create(right_cont, _("Bluetooth"), NULL);
225 switch_create(right_cont, _("Lights"), NULL);
226 slider_create(right_cont, _("Brightness"));
227 slider_create(right_cont, _("Volume"));
228 slider_create(right_cont, _("Max. speed"));
229 slider_create(right_cont, _("Light level"));
230
231 return right_cont;
232 }
233
234 #endif /*LV_USE_DEMO_EBIKE*/
235
236