Added translations in the menu item list (on the left hand side of the configuration screen), added time format (12H/24H) setting restoration callback

This commit is contained in:
anschrammh 2023-04-05 08:17:24 +02:00
parent d0c933c78c
commit 8d408b5125
2 changed files with 60 additions and 23 deletions

View File

@ -20,15 +20,24 @@ static const char* vibration_force = "1\n2\n3\n4\n5\n6\n7\n8";
static const char* language_options = "Francais\nDeutsch\nEnglish";
static lv_obj_t *add_menu_list_item(lv_obj_t *list, const char *text, lv_event_cb_t event_cb, void *user_data);
static void update_menu_list_item_text(lv_obj_t *menu_list_item, const char *text);
static void _simulate_side_screen_item_click(SettingsScreen_t * const settingsScreen, lv_obj_t *item);
static void _set_rtc_time_to_label(SettingsScreen_t * const settingsScreen);
static void _set_battery_voltage_to_label(SettingsScreen_t * const settingsScreen);
static void _settings_screen_update_labels_language(SettingsScreen_t * const settingsScreen)
{
//Update the header's title
// Update the header's title
common_screen_header_update_title(translation_get_word(TRANSLATION_SETTINGS));
// And all other labels
// All items in the menu list
update_menu_list_item_text(settingsScreen->time_and_date_item, translation_get_word(TRANSLATION_TIME_AND_DATE));
update_menu_list_item_text(settingsScreen->display_item, translation_get_word(TRANSLATION_DISPLAY));
update_menu_list_item_text(settingsScreen->notifications_item, translation_get_word(TRANSLATION_NOTIFICATIONS));
update_menu_list_item_text(settingsScreen->connectivity_item, translation_get_word(TRANSLATION_CONNECTIVITY));
update_menu_list_item_text(settingsScreen->language_item, translation_get_word(TRANSLATION_LANGUAGE));
update_menu_list_item_text(settingsScreen->about_item, translation_get_word(TRANSLATION_ABOUT));
}
static void gesture_event_cb(lv_event_t *e)
@ -114,6 +123,7 @@ static void time_roller_cb(lv_event_t *e)
static void time_format_cb(lv_event_t *e)
{
SettingsScreen_t *settingsScreen = e->user_data;
bool is_24H__hour_format = true;
if(e->target == settingsScreen->checkbox_time_12H)
{
@ -121,6 +131,7 @@ static void time_format_cb(lv_event_t *e)
lv_obj_clear_flag(settingsScreen->checkbox_time_12H, LV_OBJ_FLAG_CHECKABLE);
lv_obj_add_flag(settingsScreen->checkbox_time_24H, LV_OBJ_FLAG_CHECKABLE);
lv_obj_clear_state(settingsScreen->checkbox_time_24H, LV_STATE_CHECKED);
is_24H__hour_format = false;
}
else if(e->target == settingsScreen->checkbox_time_24H)
{
@ -128,7 +139,11 @@ static void time_format_cb(lv_event_t *e)
lv_obj_clear_flag(settingsScreen->checkbox_time_24H, LV_OBJ_FLAG_CHECKABLE);
lv_obj_clear_state(settingsScreen->checkbox_time_12H, LV_STATE_CHECKED);
lv_obj_add_flag(settingsScreen->checkbox_time_12H, LV_OBJ_FLAG_CHECKABLE);
is_24H__hour_format = true;
}
if(settingsScreen->settingsScreenAPIInterface.setTimeFormatSettingsCb)
settingsScreen->settingsScreenAPIInterface.setTimeFormatSettingsCb(&is_24H__hour_format, SETTING_MODE_SET);
}
static void brightness_slider_cb(lv_event_t *e)
@ -236,20 +251,6 @@ static void about_refresh_timer_cb(lv_timer_t *timer)
_set_battery_voltage_to_label(settingsScreen);
}
static lv_obj_t *add_menu_list_item(lv_obj_t *list, const char *text, lv_event_cb_t event_cb, void *user_data)
{
lv_obj_t *btn = lv_list_add_btn(list, NULL, text);
lv_obj_t *label = lv_obj_get_child(btn, 0);
if(label)
{
lv_label_set_long_mode(label, LV_LABEL_LONG_WRAP);
lv_obj_set_style_pad_right(btn, 0, LV_PART_MAIN);
}
lv_obj_add_event_cb(btn, event_cb, LV_EVENT_CLICKED, user_data);
return btn;
}
static void load_time_and_date_side_screen(SettingsScreen_t *settingsScreen)
{
lv_obj_clean(settingsScreen->side_screen);
@ -298,6 +299,8 @@ static void load_time_and_date_side_screen(SettingsScreen_t *settingsScreen)
lv_label_set_text_static(label, "Time Format :");
lv_obj_align_to(label, settingsScreen->hour_roller, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 10);
bool is_24H_format = true;
if(settingsScreen->settingsScreenAPIInterface.setTimeFormatSettingsCb)settingsScreen->settingsScreenAPIInterface.setTimeFormatSettingsCb(&is_24H_format, SETTING_MODE_GET);
settingsScreen->checkbox_time_12H = lv_checkbox_create(settingsScreen->side_screen);
lv_checkbox_set_text(settingsScreen->checkbox_time_12H, "12H");
lv_obj_set_style_radius(settingsScreen->checkbox_time_12H, LV_RADIUS_CIRCLE, LV_PART_INDICATOR);
@ -306,11 +309,21 @@ static void load_time_and_date_side_screen(SettingsScreen_t *settingsScreen)
settingsScreen->checkbox_time_24H = lv_checkbox_create(settingsScreen->side_screen);
lv_checkbox_set_text(settingsScreen->checkbox_time_24H, "24H");
lv_obj_add_state(settingsScreen->checkbox_time_24H, LV_STATE_CHECKED);
lv_obj_set_style_radius(settingsScreen->checkbox_time_24H, LV_RADIUS_CIRCLE, LV_PART_INDICATOR);
lv_obj_align_to(settingsScreen->checkbox_time_24H, settingsScreen->checkbox_time_12H, LV_ALIGN_OUT_RIGHT_TOP, 10, 0);
lv_obj_add_event_cb(settingsScreen->checkbox_time_24H, &(time_format_cb), LV_EVENT_CLICKED, settingsScreen);
if(is_24H_format)
{
lv_obj_add_state(settingsScreen->checkbox_time_24H, LV_STATE_CHECKED);
lv_obj_clear_flag(settingsScreen->checkbox_time_24H, LV_OBJ_FLAG_CHECKABLE);
}
else
{
lv_obj_add_state(settingsScreen->checkbox_time_12H, LV_STATE_CHECKED);
lv_obj_clear_flag(settingsScreen->checkbox_time_12H, LV_OBJ_FLAG_CHECKABLE);
}
label = lv_label_create(settingsScreen->side_screen);
lv_label_set_text_static(label, "Date :");
lv_obj_align_to(label, settingsScreen->checkbox_time_12H, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 10);
@ -658,12 +671,12 @@ void settings_screen_create(SettingsScreen_t * const settingsScreen)
lv_obj_set_scroll_dir(settingsScreen->side_screen, LV_DIR_VER);
//We add all the menu list items
settingsScreen->time_and_date_item = add_menu_list_item(menu_list, "Time & Date", &(menu_list_item_event_handler), settingsScreen);
settingsScreen->display_item = add_menu_list_item(menu_list, "Display", &(menu_list_item_event_handler), settingsScreen);
settingsScreen->notifications_item = add_menu_list_item(menu_list, "Notifications", &(menu_list_item_event_handler), settingsScreen);
settingsScreen->connectivity_item = add_menu_list_item(menu_list, "Connectivity", &(menu_list_item_event_handler), settingsScreen);
settingsScreen->language_item = add_menu_list_item(menu_list, "Language", &(menu_list_item_event_handler), settingsScreen);
settingsScreen->about_item = add_menu_list_item(menu_list, "About", &(menu_list_item_event_handler), settingsScreen);
settingsScreen->time_and_date_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_TIME_AND_DATE), &(menu_list_item_event_handler), settingsScreen);
settingsScreen->display_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_DISPLAY), &(menu_list_item_event_handler), settingsScreen);
settingsScreen->notifications_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_NOTIFICATIONS), &(menu_list_item_event_handler), settingsScreen);
settingsScreen->connectivity_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_CONNECTIVITY), &(menu_list_item_event_handler), settingsScreen);
settingsScreen->language_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_LANGUAGE), &(menu_list_item_event_handler), settingsScreen);
settingsScreen->about_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_ABOUT), &(menu_list_item_event_handler), settingsScreen);
//We register the event callback to handle gesture
lv_obj_add_event_cb(settingsScreen->display, &(gesture_event_cb), LV_EVENT_GESTURE, settingsScreen);
@ -751,3 +764,26 @@ static void _set_battery_voltage_to_label(SettingsScreen_t * const settingsScree
sprintf(settingsScreen->batteryVoltage.batteryVoltageText, "%u mV", voltage);
lv_label_set_text_static(settingsScreen->batteryVoltage.batteryVoltageLabel, settingsScreen->batteryVoltage.batteryVoltageText);
}
static lv_obj_t *add_menu_list_item(lv_obj_t *list, const char *text, lv_event_cb_t event_cb, void *user_data)
{
lv_obj_t *btn = lv_list_add_btn(list, NULL, text);
lv_obj_t *label = lv_obj_get_child(btn, 0);
if(label)
{
lv_label_set_long_mode(label, LV_LABEL_LONG_WRAP);
lv_obj_set_style_pad_right(btn, 0, LV_PART_MAIN);
}
lv_obj_add_event_cb(btn, event_cb, LV_EVENT_CLICKED, user_data);
return btn;
}
static void update_menu_list_item_text(lv_obj_t *menu_list_item, const char *text)
{
lv_obj_t *label = lv_obj_get_child(menu_list_item, 0);
if(label)
{
lv_label_set_text(label, text);
}
}

View File

@ -12,6 +12,7 @@ typedef enum SettingMode
typedef struct SettingsScreenAPIInterface
{
void (*setTimeSettingsCb)(uint8_t *hour, uint8_t *minute, uint8_t *second, uint8_t *day, uint8_t *month, uint8_t *year, SettingMode_e mode);
void (*setTimeFormatSettingsCb)(bool *hour_24H_format, SettingMode_e mode);
void (*setBrightnessSettingsCb)(uint8_t *brightness, SettingMode_e mode);
void (*setTimeoutSettingsCb)(uint8_t *timeout, SettingMode_e mode);
void (*setOrientationSettingsCb)(uint8_t *orientation, SettingMode_e mode);