text/plain
•
2.79 KB
•
77 lines
#include "home_screen.h"
#include <stdlib.h>
#include "../topbar.h"
static void list_event_cb(lv_event_t* e) {
lv_event_code_t code = lv_event_get_code(e);
if (code == LV_EVENT_CLICKED) {
lv_obj_t* btn = lv_event_get_target(e);
screen_type_t screen =
(screen_type_t)(uintptr_t)lv_obj_get_user_data(btn);
navigate_to(screen);
}
}
static void cancel_event_cb(lv_event_t* e) {
(void)e;
// Home is the root screen, no back navigation
}
ui_state_t setup_home_screen(lv_obj_t* parent) {
home_screen_state_t* state = calloc(1, sizeof(home_screen_state_t));
state->list = bvs_list_create(parent);
topbar_set_title("Onigiri");
// Add menu entries
lv_obj_t* now_playing_btn =
bvs_list_add_button(state->list, NULL, "Now Playing");
lv_obj_set_user_data(now_playing_btn, (void*)(uintptr_t)SCREEN_NOW_PLAYING);
lv_obj_add_event_cb(now_playing_btn, list_event_cb, LV_EVENT_CLICKED, NULL);
lv_obj_t* music_btn = bvs_list_add_button(state->list, NULL, "Music");
lv_obj_set_user_data(music_btn, (void*)(uintptr_t)SCREEN_MUSIC);
lv_obj_add_event_cb(music_btn, list_event_cb, LV_EVENT_CLICKED, NULL);
lv_obj_t* podcasts_btn = bvs_list_add_button(state->list, NULL, "Podcasts");
lv_obj_set_user_data(podcasts_btn, (void*)(uintptr_t)SCREEN_PODCASTS);
lv_obj_add_event_cb(podcasts_btn, list_event_cb, LV_EVENT_CLICKED, NULL);
lv_obj_t* audiobooks_btn =
bvs_list_add_button(state->list, NULL, "Audiobooks");
lv_obj_set_user_data(audiobooks_btn, (void*)(uintptr_t)SCREEN_AUDIOBOOKS);
lv_obj_add_event_cb(audiobooks_btn, list_event_cb, LV_EVENT_CLICKED, NULL);
lv_obj_t* settings_btn = bvs_list_add_button(state->list, NULL, "Settings");
lv_obj_set_user_data(settings_btn, (void*)(uintptr_t)SCREEN_SETTINGS);
lv_obj_add_event_cb(settings_btn, list_event_cb, LV_EVENT_CLICKED, NULL);
// Add all buttons to group for keyboard navigation
lv_group_add_obj(lv_group_get_default(), now_playing_btn);
lv_group_add_obj(lv_group_get_default(), music_btn);
lv_group_add_obj(lv_group_get_default(), podcasts_btn);
lv_group_add_obj(lv_group_get_default(), audiobooks_btn);
lv_group_add_obj(lv_group_get_default(), settings_btn);
lv_obj_add_event_cb(now_playing_btn, cancel_event_cb, LV_EVENT_CANCEL,
NULL);
lv_obj_add_event_cb(music_btn, cancel_event_cb, LV_EVENT_CANCEL, NULL);
lv_obj_add_event_cb(podcasts_btn, cancel_event_cb, LV_EVENT_CANCEL, NULL);
lv_obj_add_event_cb(audiobooks_btn, cancel_event_cb, LV_EVENT_CANCEL, NULL);
lv_obj_add_event_cb(settings_btn, cancel_event_cb, LV_EVENT_CANCEL, NULL);
lv_group_focus_obj(now_playing_btn);
return (ui_state_t){.type = SCREEN_HOME, .home = state};
}
void free_home_screen(home_screen_state_t* state) {
if (!state) {
return;
}
free(state);
}
void update_home_screen(home_screen_state_t* state) {
(void)state; // LVGL handles updates via timer
}