From 60e47519d3cd151348000d72811aa7037a01e3f4 Mon Sep 17 00:00:00 2001 From: bigfoot547 Date: Fri, 24 Nov 2023 01:35:51 -0600 Subject: menu --- src/ui/uimenu.internal.h | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/ui/uimenu.internal.h (limited to 'src/ui/uimenu.internal.h') diff --git a/src/ui/uimenu.internal.h b/src/ui/uimenu.internal.h new file mode 100644 index 0000000..82360f5 --- /dev/null +++ b/src/ui/uimenu.internal.h @@ -0,0 +1,51 @@ +#ifndef UMPS_UIMENU_INTERNAL_H_INCLUDED +#define UMPS_UIMENU_INTERNAL_H_INCLUDED + +#include + +#define UMPS__MENU_TYPE_SPACER (0) +#define UMPS__MENU_TYPE_BUTTON (1) +#define UMPS__MENU_TYPE_MENU (2) + +/* this header is right out of a university data structures slide deck */ + +struct uimenu_item_header { + unsigned type; + struct uimenu_item_header *next, *prev; +}; + +struct uimenu_item_button; + +typedef void (uimenu_button_action)(struct uimenu_item_button *); + +struct uimenu_item_button { + struct uimenu_item_header header; + unsigned id; + char *text; + + uimenu_button_action *action; + + bool enabled; +}; + +struct uimenu_item_menu { + struct uimenu_item_header header; + char *text; + + struct uimenu_item_header *head, *tail; + unsigned nchildren; +}; + +void uimenu_item_button_init(struct uimenu_item_button *button, unsigned id, const char *text, uimenu_button_action *action); +void uimenu_item_menu_init(struct uimenu_item_menu *menu, const char *text); + +/* menu items will be freed on removal */ +void uimenu_menu_add_spacer(struct uimenu_item_menu *menu, struct uimenu_item_header *where, bool after); +void uimenu_menu_add(struct uimenu_item_menu *menu, struct uimenu_item_header *where, struct uimenu_item_header *item, bool after); + +void uimenu_menu_remove(struct uimenu_item_menu *menu, struct uimenu_item_header *item); + +/* frees children */ +void uimenu_menu_free(struct uimenu_item_menu *menu); + +#endif /* include guard */ -- cgit v1.2.3-70-g09d2