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