commeownder/main/menus.c

51 lines
1.7 KiB
C

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "menus.h"
#include "menu_life.h"
#include "menu_cmdr.h"
#include "menu_counters.h"
#include "menu_dice.h"
#include "menu_settings.h"
#include "state.h"
#include "ble.h"
// Array index = header slot position (0NUM_MENU_SLOTS-1).
// Initialized with offline CMDR vtable; menus_init() fixes up slot 1 based on g_ble_enabled.
const menu_vtable_t *menus[NUM_MENU_SLOTS] = {
[MENU_LIFE] = &menu_life_vtable, // slot 0 — life counter
[MENU_CMDR] = &menu_cmdr_offline_vtable, // slot 1 — commander damage (fixed by menus_init)
[MENU_COUNTERS] = &menu_counters_vtable, // slot 2 — counters
[MENU_DICE] = &menu_dice_vtable, // slot 3 — dice
[4] = NULL, // slot 4 — empty
[5] = NULL, // slot 5 — battery pct (special in oled_draw_header)
[6] = NULL, // slot 6 — battery icon (special in oled_draw_header)
[MENU_SETTINGS] = &menu_settings_vtable, // slot 7 — FWD+BACK combo to enter/exit
};
void menus_init(void)
{
menus[MENU_CMDR] = g_ble_enabled ? &menu_cmdr_ble_vtable : &menu_cmdr_offline_vtable;
}
void menus_nav_short(int d)
{
const menu_vtable_t *m = menus[g_active_menu];
if (m && m->nav_short) m->nav_short(d);
menus_draw();
}
void menus_lr_delta(int d)
{
const menu_vtable_t *m = menus[g_active_menu];
if (m && m->lr_delta) m->lr_delta(d);
menus_draw();
if (g_active_menu == MENU_LIFE || g_active_menu == MENU_COUNTERS ||
g_active_menu == MENU_CMDR)
ble_adv_update();
led_sync(true);
}
void menus_draw(void)
{
const menu_vtable_t *m = menus[g_active_menu];
if (m && m->draw) m->draw();
}