77 lines
1.7 KiB
C
77 lines
1.7 KiB
C
#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];
|
|
}
|