Commit | Line | Data |
---|---|---|
95a2ec38 | 1 | /* |
2 | * (C) GraÅžvydas "notaz" Ignotas, 2006-2010 | |
3 | * | |
4 | * This work is licensed under the terms of any of these licenses | |
5 | * (at your option): | |
6 | * - GNU GPL, version 2 or later. | |
7 | * - GNU LGPL, version 2.1 or later. | |
8 | * See the COPYING file in the top-level directory. | |
9 | */ | |
c7a4ff64 | 10 | |
7bf7acb6 GI |
11 | #ifndef LIBPICOFE_MENU_H |
12 | #define LIBPICOFE_MENU_H | |
13 | ||
c7a4ff64 | 14 | typedef enum |
15 | { | |
16 | MB_NONE = 1, /* no auto processing */ | |
24b24674 | 17 | MB_OPT_ONOFF, /* ON/OFF setting */ |
18 | MB_OPT_RANGE, /* [min-max] setting */ | |
049a6b3e | 19 | MB_OPT_CUSTOM, /* custom value */ |
20 | MB_OPT_CUSTONOFF, | |
21 | MB_OPT_CUSTRANGE, | |
0c9ae592 | 22 | MB_OPT_ENUM, |
c7a4ff64 | 23 | } menu_behavior; |
24 | ||
c7a4ff64 | 25 | typedef struct |
26 | { | |
d572cbad | 27 | const char *name; |
c7a4ff64 | 28 | menu_behavior beh; |
94a1d22e | 29 | int id; |
24b24674 | 30 | void *var; /* for on-off/range settings */ |
31 | int mask; /* bit to toggle for on/off */ | |
049a6b3e | 32 | signed short min; /* for ranged integer settings, to be sign-extended */ |
33 | signed short max; | |
c66f49e6 | 34 | unsigned int enabled:1; |
35 | unsigned int need_to_save:1; | |
36 | unsigned int selectable:1; | |
94a1d22e | 37 | int (*handler)(int id, int keys); |
38 | const char * (*generate_name)(int id, int *offs); | |
0c9ae592 | 39 | const void *data; |
40 | const char *help; | |
c7a4ff64 | 41 | } menu_entry; |
42 | ||
95a2ec38 | 43 | #define mee_handler_id_h(name, id, handler, help) \ |
44 | { name, MB_NONE, id, NULL, 0, 0, 0, 1, 0, 1, handler, NULL, NULL, help } | |
45 | ||
049a6b3e | 46 | #define mee_handler_id(name, id, handler) \ |
95a2ec38 | 47 | mee_handler_id_h(name, id, handler, NULL) |
24b24674 | 48 | |
049a6b3e | 49 | #define mee_handler(name, handler) \ |
50 | mee_handler_id(name, MA_NONE, handler) | |
51 | ||
95a2ec38 | 52 | #define mee_handler_h(name, handler, help) \ |
53 | mee_handler_id_h(name, MA_NONE, handler, help) | |
54 | ||
049a6b3e | 55 | #define mee_label(name) \ |
0c9ae592 | 56 | { name, MB_NONE, MA_NONE, NULL, 0, 0, 0, 1, 0, 0, NULL, NULL, NULL, NULL } |
049a6b3e | 57 | |
58 | #define mee_label_mk(id, name_func) \ | |
0c9ae592 | 59 | { "", MB_NONE, id, NULL, 0, 0, 0, 1, 0, 0, NULL, name_func, NULL, NULL } |
60 | ||
61 | #define mee_onoff_h(name, id, var, mask, help) \ | |
62 | { name, MB_OPT_ONOFF, id, &(var), mask, 0, 0, 1, 1, 1, NULL, NULL, NULL, help } | |
049a6b3e | 63 | |
64 | #define mee_onoff(name, id, var, mask) \ | |
0c9ae592 | 65 | mee_onoff_h(name, id, var, mask, NULL) |
049a6b3e | 66 | |
92bef70f | 67 | #define mee_range_h(name, id, var, min, max, help) \ |
68 | { name, MB_OPT_RANGE, id, &(var), 0, min, max, 1, 1, 1, NULL, NULL, NULL, help } | |
69 | ||
049a6b3e | 70 | #define mee_range(name, id, var, min, max) \ |
92bef70f | 71 | mee_range_h(name, id, var, min, max, NULL) |
0c9ae592 | 72 | |
c66f49e6 | 73 | #define mee_range_hide(name, id, var, min, max) \ |
74 | { name, MB_OPT_RANGE, id, &(var), 0, min, max, 0, 1, 0, NULL, NULL, NULL, NULL } | |
75 | ||
0c9ae592 | 76 | #define mee_cust_s_h(name, id, need_save, handler, name_func, help) \ |
77 | { name, MB_OPT_CUSTOM, id, NULL, 0, 0, 0, 1, need_save, 1, handler, name_func, NULL, help } | |
78 | ||
79 | #define mee_cust_h(name, id, handler, name_func, help) \ | |
80 | mee_cust_s_h(name, id, 1, handler, name_func, help) | |
049a6b3e | 81 | |
82 | #define mee_cust(name, id, handler, name_func) \ | |
0c9ae592 | 83 | mee_cust_h(name, id, handler, name_func, NULL) |
84 | ||
85 | #define mee_cust_nosave(name, id, handler, name_func) \ | |
86 | mee_cust_s_h(name, id, 0, handler, name_func, NULL) | |
049a6b3e | 87 | |
88 | #define mee_onoff_cust(name, id, var, mask, name_func) \ | |
0c9ae592 | 89 | { name, MB_OPT_CUSTONOFF, id, &(var), mask, 0, 0, 1, 1, 1, NULL, name_func, NULL, NULL } |
049a6b3e | 90 | |
7ceadd99 | 91 | #define mee_range_cust_h(name, id, var, min, max, name_func, help) \ |
92 | { name, MB_OPT_CUSTRANGE, id, &(var), 0, min, max, 1, 1, 1, NULL, name_func, NULL, help } | |
93 | ||
049a6b3e | 94 | #define mee_range_cust(name, id, var, min, max, name_func) \ |
7ceadd99 | 95 | mee_range_cust_h(name, id, var, min, max, name_func, NULL) |
0c9ae592 | 96 | |
97 | #define mee_enum_h(name, id, var, names_list, help) \ | |
98 | { name, MB_OPT_ENUM, id, &(var), 0, 0, 0, 1, 1, 1, NULL, NULL, names_list, help } | |
99 | ||
100 | #define mee_enum(name, id, var, names_list) \ | |
101 | mee_enum_h(name, id, var, names_list, NULL) | |
24b24674 | 102 | |
103 | #define mee_end \ | |
0c9ae592 | 104 | { NULL, 0, 0, NULL, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL } |
24b24674 | 105 | |
367b6f1f | 106 | typedef struct |
107 | { | |
108 | char *name; | |
109 | int mask; | |
110 | } me_bind_action; | |
111 | ||
94a1d22e | 112 | extern me_bind_action me_ctrl_actions[]; |
367b6f1f | 113 | extern me_bind_action emuctrl_actions[]; // platform code |
114 | ||
c66f49e6 | 115 | extern void *g_menuscreen_ptr; |
68c85e2a | 116 | extern void *g_menubg_ptr; |
117 | extern void *g_menubg_src_ptr; | |
118 | ||
c66f49e6 | 119 | extern int g_menuscreen_w; |
120 | extern int g_menuscreen_h; | |
2b27288e | 121 | extern int g_menuscreen_pp; // pitch (in pixels) |
68c85e2a | 122 | extern int g_menubg_src_w; |
123 | extern int g_menubg_src_h; | |
124 | extern int g_menubg_src_pp; | |
d2f29611 | 125 | |
9089665c | 126 | extern int g_autostateld_opt; |
127 | ||
675d1d36 | 128 | void menu_init_base(void); |
129 | void menu_update_msg(const char *msg); | |
3ffee69c | 130 | void text_out16(int x, int y, const char *texto, ...); |
7fd581f4 | 131 | |
049a6b3e | 132 | menu_entry *me_list_get_first(void); |
133 | menu_entry *me_list_get_next(void); | |
7bf7acb6 GI |
134 | |
135 | #endif // LIBPICOFE_MENU_H |