blob: f52ba4fd59cb70a5aca435cd507df31c6f716dfc (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#ifndef UMPS_UIMENU_INTERNAL_H_INCLUDED
#define UMPS_UIMENU_INTERNAL_H_INCLUDED
#include <stdbool.h>
#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 */
|