Files
Power-Pico/lv_sim_linux/GUI/PageManager.c

91 lines
2.5 KiB
C
Raw Normal View History

2025-09-11 17:02:52 +08:00
#include "./PageManager.h"
2025-09-11 16:36:41 +08:00
#include <string.h>
// 定义全局实例
PageManager_t PageManager;
/**
*
*/
void PageManager_init(void) {
memset(&PageManager, 0, sizeof(PageManager));
}
/**
*
* @param page
*/
void PageManager_register(Page_t* page) {
if (PageManager.count >= MAX_PAGES) {
LV_LOG_WARN("PageManager: page list is full!");
return;
}
PageManager.pages[PageManager.count++] = page;
}
/**
*
*/
void PageManager_next(void) {
if (PageManager.count == 0) return;
Page_t* current = PageManager.pages[PageManager.current_index];
Page_t* next = PageManager.pages[(PageManager.current_index + 1) % PageManager.count];
// 反初始化当前页
if (current->deinit) current->deinit();
// 更新索引
PageManager.current_index = (PageManager.current_index + 1) % PageManager.count;
// 初始化新页面并切换
if (next->init) next->init();
lv_scr_load_anim(*next->page_obj, LV_SCR_LOAD_ANIM_MOVE_LEFT, 200, 0, true);
}
/**
*
*/
void PageManager_prev(void) {
if (PageManager.count == 0) return;
Page_t* current = PageManager.pages[PageManager.current_index];
uint8_t prev_index = (PageManager.current_index == 0) ?
PageManager.count - 1 : PageManager.current_index - 1;
Page_t* prev = PageManager.pages[prev_index];
if (current->deinit) current->deinit();
PageManager.current_index = prev_index;
if (prev->init) prev->init();
lv_scr_load_anim(*prev->page_obj, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 200, 0, true);
}
/**
*
* @param index
*/
void PageManager_goto(uint8_t index) {
if (index >= PageManager.count || PageManager.count == 0) return;
Page_t* current = PageManager.pages[PageManager.current_index];
Page_t* target = PageManager.pages[index];
if (current != target) {
if (current->deinit) current->deinit();
PageManager.current_index = index;
if (target->init) target->init();
lv_scr_load_anim(*target->page_obj, LV_SCR_LOAD_ANIM_FADE_IN, 200, 0, true);
}
}
/**
*
* @return
*/
Page_t* PageManager_get_current_page(void) {
if (PageManager.count == 0) return NULL;
return PageManager.pages[PageManager.current_index];
}