diff --git a/src/lvgl_win_sim/lv_port_win_codeblocks/LittlevGL.layout b/src/lvgl_win_sim/lv_port_win_codeblocks/LittlevGL.layout index c2c1101..35519f4 100644 --- a/src/lvgl_win_sim/lv_port_win_codeblocks/LittlevGL.layout +++ b/src/lvgl_win_sim/lv_port_win_codeblocks/LittlevGL.layout @@ -2,159 +2,19 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -162,44 +22,38 @@ - + - + - + - + + + + + + + + + + - + - + - + - + - + - - - - - - - - - - - - - - - - + @@ -207,27 +61,52 @@ - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -244,109 +123,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -354,9 +178,109 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -369,110 +293,16 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -498,14 +328,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/lvgl_win_sim/lv_port_win_codeblocks/settings_screen.c b/src/lvgl_win_sim/lv_port_win_codeblocks/settings_screen.c index a404cc5..a0d5751 100644 --- a/src/lvgl_win_sim/lv_port_win_codeblocks/settings_screen.c +++ b/src/lvgl_win_sim/lv_port_win_codeblocks/settings_screen.c @@ -19,6 +19,12 @@ static const char* vibration_force = "1\n2\n3\n4\n5\n6\n7\n8"; static const char* language_options = "Francais\nDeutsch\nEnglish"; static void _simulate_side_screen_item_click(SettingsScreen_t * const settingsScreen, lv_obj_t *item); +static void _enable_time_and_date_rollers(bool enabled, SettingsScreen_t * const settingsScreen); +static void _reset_switch_pointers(SettingsScreen_t * const settingsScreen) +{ + settingsScreen->ble_switch = NULL; + settingsScreen->auto_set_time_switch = NULL; +} static void gesture_event_cb(lv_event_t * e) { @@ -95,17 +101,22 @@ static void orientation_dropdown_cb(lv_event_t * e) SettingsScreen_t *settingsScreen = e->user_data; } -static void ble_activation_switch_cb(lv_event_t *e) +static void activation_switch_cb(lv_event_t *e) { SettingsScreen_t *settingsScreen = e->user_data; - if(lv_obj_has_state(e->target, LV_STATE_CHECKED)) + bool toggled = lv_obj_has_state(e->target, LV_STATE_CHECKED); + + if(e->target == settingsScreen->ble_switch) { - LV_LOG_USER("BLE is on"); + if(toggled) + LV_LOG_USER("BLE is on"); + else + LV_LOG_USER("BLE is off"); } - else + else if(e->target == settingsScreen->auto_set_time_switch) { - LV_LOG_USER("BLE is off"); + _enable_time_and_date_rollers(!toggled, settingsScreen); } } @@ -157,20 +168,22 @@ static lv_obj_t *add_menu_list_item(lv_obj_t *list, const char *text, lv_event_c static void load_time_and_date_side_screen(SettingsScreen_t *settingsScreen) { lv_obj_clean(settingsScreen->side_screen); + _reset_switch_pointers(settingsScreen); lv_obj_t *label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "Set Time & Date :"); - lv_obj_t *toggle = lv_switch_create(settingsScreen->side_screen); - lv_obj_align_to(toggle, label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 10); - label = lv_label_create(settingsScreen->side_screen); + settingsScreen->auto_set_time_switch = lv_switch_create(settingsScreen->side_screen); + lv_obj_align_to(settingsScreen->auto_set_time_switch, label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 10); + lv_obj_add_event_cb(settingsScreen->auto_set_time_switch, &(activation_switch_cb), LV_EVENT_VALUE_CHANGED, settingsScreen); + label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "Automatic"); - lv_obj_align_to(label, toggle, LV_ALIGN_OUT_RIGHT_MID, 10, 0); + lv_obj_align_to(label, settingsScreen->auto_set_time_switch, LV_ALIGN_OUT_RIGHT_MID, 10, 0); label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "Time :"); - lv_obj_align_to(label, toggle, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 10); + lv_obj_align_to(label, settingsScreen->auto_set_time_switch, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 10); settingsScreen->hour_roller = lv_roller_create(settingsScreen->side_screen); settingsScreen->minute_roller = lv_roller_create(settingsScreen->side_screen); @@ -243,6 +256,7 @@ static void load_time_and_date_side_screen(SettingsScreen_t *settingsScreen) static void load_display_side_screen(SettingsScreen_t *settingsScreen) { lv_obj_clean(settingsScreen->side_screen); + _reset_switch_pointers(settingsScreen); lv_obj_t *label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "Brightness :"); @@ -311,6 +325,7 @@ static void load_display_side_screen(SettingsScreen_t *settingsScreen) static void load_notifications_side_screen(SettingsScreen_t *settingsScreen) { lv_obj_clean(settingsScreen->side_screen); + _reset_switch_pointers(settingsScreen); lv_obj_t *label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "Vibrate on\nnotifications :"); @@ -339,21 +354,22 @@ static void load_notifications_side_screen(SettingsScreen_t *settingsScreen) static void load_connectivity_side_screen(SettingsScreen_t *settingsScreen) { lv_obj_clean(settingsScreen->side_screen); + _reset_switch_pointers(settingsScreen); lv_obj_t *label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "Connectivity :"); - lv_obj_t *ble_switch = lv_switch_create(settingsScreen->side_screen); - lv_obj_align_to(ble_switch, label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 10); - lv_obj_add_event_cb(ble_switch, &(ble_activation_switch_cb), LV_EVENT_VALUE_CHANGED, settingsScreen); + settingsScreen->ble_switch = lv_switch_create(settingsScreen->side_screen); + lv_obj_align_to(settingsScreen->ble_switch, label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 10); + lv_obj_add_event_cb(settingsScreen->ble_switch, &(activation_switch_cb), LV_EVENT_VALUE_CHANGED, settingsScreen); label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "Bluetooth"); - lv_obj_align_to(label, ble_switch, LV_ALIGN_OUT_RIGHT_MID, 10, 0); + lv_obj_align_to(label, settingsScreen->ble_switch, LV_ALIGN_OUT_RIGHT_MID, 10, 0); label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "Device Name :"); - lv_obj_align_to(label, ble_switch, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 5); + lv_obj_align_to(label, settingsScreen->ble_switch, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 5); lv_obj_t *dev_name_label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(dev_name_label, NULL/*"W800SW"*/); @@ -372,6 +388,7 @@ static void load_connectivity_side_screen(SettingsScreen_t *settingsScreen) static void load_language_side_screen(SettingsScreen_t *settingsScreen) { lv_obj_clean(settingsScreen->side_screen); + _reset_switch_pointers(settingsScreen); lv_obj_t *label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "Language :"); @@ -385,6 +402,7 @@ static void load_language_side_screen(SettingsScreen_t *settingsScreen) static void load_about_side_screen(SettingsScreen_t *settingsScreen) { lv_obj_clean(settingsScreen->side_screen); + _reset_switch_pointers(settingsScreen); lv_obj_t *label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "System Info :"); @@ -593,3 +611,39 @@ static void _simulate_side_screen_item_click(SettingsScreen_t * const settingsSc load_about_side_screen(settingsScreen); } } + +static void _enable_time_and_date_rollers(bool enabled, SettingsScreen_t * const settingsScreen) +{ + if(enabled) + { + lv_obj_clear_state(settingsScreen->hour_roller, LV_STATE_DISABLED); + lv_obj_clear_state(settingsScreen->minute_roller, LV_STATE_DISABLED); + lv_obj_clear_state(settingsScreen->second_roller, LV_STATE_DISABLED); + lv_obj_clear_state(settingsScreen->day_roller, LV_STATE_DISABLED); + lv_obj_clear_state(settingsScreen->month_roller, LV_STATE_DISABLED); + lv_obj_clear_state(settingsScreen->year_roller, LV_STATE_DISABLED); + + lv_obj_set_style_bg_color(settingsScreen->hour_roller, lv_palette_main(LV_PALETTE_BLUE), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->minute_roller, lv_palette_main(LV_PALETTE_BLUE), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->second_roller, lv_palette_main(LV_PALETTE_BLUE), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->day_roller, lv_palette_main(LV_PALETTE_BLUE), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->month_roller, lv_palette_main(LV_PALETTE_BLUE), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->year_roller, lv_palette_main(LV_PALETTE_BLUE), LV_PART_SELECTED); + } + else + { + lv_obj_add_state(settingsScreen->hour_roller, LV_STATE_DISABLED); + lv_obj_add_state(settingsScreen->minute_roller, LV_STATE_DISABLED); + lv_obj_add_state(settingsScreen->second_roller, LV_STATE_DISABLED); + lv_obj_add_state(settingsScreen->day_roller, LV_STATE_DISABLED); + lv_obj_add_state(settingsScreen->month_roller, LV_STATE_DISABLED); + lv_obj_add_state(settingsScreen->year_roller, LV_STATE_DISABLED); + + lv_obj_set_style_bg_color(settingsScreen->hour_roller, lv_palette_lighten(LV_PALETTE_GREY, 1), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->minute_roller, lv_palette_lighten(LV_PALETTE_GREY, 1), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->second_roller, lv_palette_lighten(LV_PALETTE_GREY, 1), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->day_roller, lv_palette_lighten(LV_PALETTE_GREY, 1), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->month_roller, lv_palette_lighten(LV_PALETTE_GREY, 1), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->year_roller, lv_palette_lighten(LV_PALETTE_GREY, 1), LV_PART_SELECTED); + } +} diff --git a/src/lvgl_win_sim/lv_port_win_codeblocks/settings_screen.h b/src/lvgl_win_sim/lv_port_win_codeblocks/settings_screen.h index 8eaa980..2bd599c 100644 --- a/src/lvgl_win_sim/lv_port_win_codeblocks/settings_screen.h +++ b/src/lvgl_win_sim/lv_port_win_codeblocks/settings_screen.h @@ -22,6 +22,7 @@ typedef struct SettingsScreen lv_obj_t *side_screen; /* Menu widgets */ + lv_obj_t *auto_set_time_switch; lv_obj_t *hour_roller; lv_obj_t *minute_roller; lv_obj_t *second_roller; @@ -30,6 +31,7 @@ typedef struct SettingsScreen lv_obj_t *day_roller; lv_obj_t *month_roller; lv_obj_t *year_roller; + lv_obj_t *ble_switch; struct { lv_obj_t *current_time_label;