#include "ui_Settings.h" #include "board_config.h" #include "settings/settings_store.h" #include "settings/settings_tabs.h" #include "ui_handlers.h" #include lv_obj_t *ui_Settings; lv_obj_t *ui_Settings_sidebar; lv_obj_t *ui_Settings_content; static settings_tab_t s_active_tab = SETTINGS_TAB_SYSTEM; static lv_obj_t *s_nav_buttons[4]; static lv_style_t s_style_sidebar_btn_active; static lv_style_t s_style_content_bg; static bool s_styles_inited; static const char *s_tab_labels[] = { "System", "Display", "Audio", "Network", }; static void init_styles(void) { if (s_styles_inited) { return; } lv_style_init(&s_style_sidebar_btn_active); lv_style_set_bg_color(&s_style_sidebar_btn_active, lv_palette_main(LV_PALETTE_BLUE)); lv_style_set_bg_opa(&s_style_sidebar_btn_active, LV_OPA_COVER); lv_style_init(&s_style_content_bg); lv_style_set_bg_color(&s_style_content_bg, lv_palette_lighten(LV_PALETTE_GREY, 2)); lv_style_set_bg_opa(&s_style_content_bg, LV_OPA_COVER); s_styles_inited = true; } static void sidebar_update_highlight(settings_tab_t tab) { for (size_t i = 0; i < 4; i++) { if (s_nav_buttons[i] == NULL) { continue; } if ((settings_tab_t)i == tab) { lv_obj_add_style(s_nav_buttons[i], &s_style_sidebar_btn_active, 0); } else { lv_obj_remove_style(s_nav_buttons[i], &s_style_sidebar_btn_active, 0); } } } settings_tab_t ui_Settings_get_active_tab(void) { return s_active_tab; } void ui_Settings_switch_tab(settings_tab_t tab) { settings_data_t buf = *settings_store_get(); settings_tabs_collect(s_active_tab, &buf); settings_store_update(&buf); s_active_tab = tab; sidebar_update_highlight(tab); lv_obj_clean(ui_Settings_content); switch (tab) { case SETTINGS_TAB_SYSTEM: load_system_settings(ui_Settings_content, settings_store_get()); break; case SETTINGS_TAB_DISPLAY: load_display_settings(ui_Settings_content, settings_store_get()); break; case SETTINGS_TAB_AUDIO: load_audio_settings(ui_Settings_content, settings_store_get()); break; case SETTINGS_TAB_NETWORK: load_network_settings(ui_Settings_content, settings_store_get()); break; default: LV_ASSERT_MSG(false, "unexpected settings_tab_t"); break; } } void ui_Settings_screen_init(void) { init_styles(); ui_Settings = lv_obj_create(NULL); lv_obj_set_size(ui_Settings, BOARD_LCD_LOGIC_H_RES, BOARD_LCD_LOGIC_V_RES); lv_obj_set_style_pad_all(ui_Settings, 2, 0); lv_obj_remove_flag(ui_Settings, LV_OBJ_FLAG_SCROLLABLE); ui_Settings_sidebar = lv_list_create(ui_Settings); lv_obj_set_size(ui_Settings_sidebar, 90, 170); lv_obj_set_pos(ui_Settings_sidebar, 0, 0); lv_obj_set_style_pad_all(ui_Settings_sidebar, 2, 0); lv_obj_set_style_pad_row(ui_Settings_sidebar, 2, 0); lv_obj_remove_flag(ui_Settings_sidebar, LV_OBJ_FLAG_SCROLLABLE); for (size_t i = 0; i < 4; i++) { s_nav_buttons[i] = lv_list_add_button(ui_Settings_sidebar, NULL, s_tab_labels[i]); lv_obj_set_size(s_nav_buttons[i], 86, 28); lv_obj_add_event_cb(s_nav_buttons[i], settings_on_tab_clicked, LV_EVENT_CLICKED, (void *)(intptr_t)i); } lv_obj_t *save_btn = lv_button_create(ui_Settings); lv_obj_set_size(save_btn, 86, 28); lv_obj_set_pos(save_btn, 2, 138); lv_obj_t *save_label = lv_label_create(save_btn); lv_label_set_text(save_label, "Save"); lv_obj_center(save_label); lv_obj_add_event_cb(save_btn, settings_on_save_clicked, LV_EVENT_CLICKED, NULL); ui_Settings_content = lv_obj_create(ui_Settings); lv_obj_set_size(ui_Settings_content, 230, 170); lv_obj_set_pos(ui_Settings_content, 90, 0); lv_obj_set_style_pad_all(ui_Settings_content, 2, 0); lv_obj_add_style(ui_Settings_content, &s_style_content_bg, 0); lv_obj_remove_flag(ui_Settings_content, LV_OBJ_FLAG_SCROLLABLE); settings_store_load(); settings_store_apply(); s_active_tab = SETTINGS_TAB_SYSTEM; sidebar_update_highlight(s_active_tab); load_system_settings(ui_Settings_content, settings_store_get()); } void ui_Settings_screen_destroy(void) { if (ui_Settings != NULL) { lv_obj_del(ui_Settings); ui_Settings = NULL; ui_Settings_sidebar = NULL; ui_Settings_content = NULL; } for (size_t i = 0; i < 4; i++) { s_nav_buttons[i] = NULL; } }