#include "ui_nav.h" #include "lvgl_port.h" #include "screens/ui_Screen1.h" #include "screens/ui_Screen2.h" #include "screens/ui_Screen3.h" #include "screens/ui_Settings.h" #include "ui_helpers.h" #include "esp_log.h" static const char *TAG = "ui_nav"; static lv_obj_t *s_nav_screens[4]; static const char *const s_nav_names[] = { "Settings", "Screen1", "Screen2", "Screen3", }; #define NAV_SCREEN_COUNT (sizeof(s_nav_screens) / sizeof(s_nav_screens[0])) static uint8_t s_nav_index; void ui_nav_init(void) { s_nav_screens[0] = ui_Settings; s_nav_screens[1] = ui_Screen1; s_nav_screens[2] = ui_Screen2; s_nav_screens[3] = ui_Screen3; s_nav_index = 0; ESP_LOGI(TAG, "Navigation ready (%u screens, start=%s)", (unsigned)NAV_SCREEN_COUNT, s_nav_names[s_nav_index]); } void ui_nav_goto(uint8_t index) { if (index >= NAV_SCREEN_COUNT) { return; } lvgl_port_lock(); s_nav_index = index; lv_obj_t **target = &s_nav_screens[s_nav_index]; _ui_screen_change(target, LV_SCR_LOAD_ANIM_FADE_IN, 300, 0, NULL); lvgl_port_unlock(); ESP_LOGI(TAG, "Goto %s (index %u)", s_nav_names[s_nav_index], s_nav_index); } void ui_nav_next(void) { lvgl_port_lock(); s_nav_index = (s_nav_index + 1) % NAV_SCREEN_COUNT; lv_obj_t **target = &s_nav_screens[s_nav_index]; _ui_screen_change(target, LV_SCR_LOAD_ANIM_FADE_IN, 300, 0, NULL); lvgl_port_unlock(); ESP_LOGI(TAG, "Next -> %s (index %u)", s_nav_names[s_nav_index], s_nav_index); } lv_obj_t *ui_nav_current(void) { return s_nav_screens[s_nav_index]; } uint8_t ui_nav_current_index(void) { return s_nav_index; } const char *ui_nav_current_name(void) { return s_nav_names[s_nav_index]; }