Menu work

This commit is contained in:
Dylan Smith
2026-01-15 15:53:02 -05:00
parent 66cb2436c7
commit b48cb11197
9 changed files with 248 additions and 63 deletions

View File

@@ -5,28 +5,46 @@
#include "stdbool.h"
typedef void (*menu_callback_t)(void *args);
typedef struct _graphical_menu_layout_t graphical_menu_layout_t;
typedef struct _graphical_menu_t graphical_menu_t;
// TODO
// typedef struct {
// uint16_t x;
// uint16_t y;
// uint16_t width;
// uint16_t height;
// } graphical_menu_position_t;
typedef struct
{
uint8_t *title;
bool enabled; // not enabled = grayed out, unhighlightable
menu_callback_t highlighted_callback_function;
void *highlighted_callback_function_args;
menu_callback_t selected_callback_function;
void *selected_callback_function_args;
const char *const title;
const bool enabled; // not enabled = grayed out, unhighlightable
const menu_callback_t highlighted_callback_function;
void *const highlighted_callback_function_args;
const menu_callback_t selected_callback_function;
void *const selected_callback_function_args;
} graphical_menu_entry_t;
typedef struct _graphical_menu_t graphical_menu_t;
struct _graphical_menu_t {
graphical_menu_t *parent_menu;
uint8_t num_entries;
graphical_menu_entry_t *entries;
struct _graphical_menu_layout_t {
graphical_menu_t *const parent_menu;
const uint8_t num_entries;
const graphical_menu_entry_t *const entries;
};
struct _graphical_menu_t {
const graphical_menu_layout_t *const layout;
uint8_t selected_entry_idx;
};
void draw_menu(const graphical_menu_t *const menu);
void select_menu_entry(const graphical_menu_t *const menu);
void select_menu_entry(graphical_menu_t *const menu);
uint8_t get_selected_menu_entry_idx(void);
void set_selected_menu_entry_idx(const graphical_menu_t *const menu, uint8_t idx);
void set_selected_menu_entry_idx(graphical_menu_t *const menu, int8_t idx);
void decrement_selected_menu_entry_idx(graphical_menu_t *const menu);
void increment_selected_menu_entry_idx(graphical_menu_t *const menu);
#endif