1 /*
2 Copyright (C) 1997-2001 Id Software, Inc.
3 
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
8 
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 
13 See the GNU General Public License for more details.
14 
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18 
19 */
20 #ifndef __QMENU_H__
21 #define __QMENU_H__
22 
23 #define MAXMENUITEMS	64
24 
25 #define MTYPE_SLIDER		0
26 #define MTYPE_LIST			1
27 #define MTYPE_ACTION		2
28 #define MTYPE_SPINCONTROL	3
29 #define MTYPE_SEPARATOR  	4
30 #define MTYPE_FIELD			5
31 
32 #define	K_TAB			9
33 #define	K_ENTER			13
34 #define	K_ESCAPE		27
35 #define	K_SPACE			32
36 
37 // normal keys should be passed as lowercased ascii
38 
39 #define	K_BACKSPACE		127
40 #define	K_UPARROW		128
41 #define	K_DOWNARROW		129
42 #define	K_LEFTARROW		130
43 #define	K_RIGHTARROW	131
44 
45 #define QMF_LEFT_JUSTIFY	0x00000001
46 #define QMF_GRAYED			0x00000002
47 #define QMF_NUMBERSONLY		0x00000004
48 
49 typedef struct _tag_menuframework
50 {
51 	int x, y;
52 	int	cursor;
53 
54 	int	nitems;
55 	int nslots;
56 	void *items[64];
57 
58 	const char *statusbar;
59 
60 	void (*cursordraw)( struct _tag_menuframework *m );
61 
62 } menuframework_s;
63 
64 typedef struct
65 {
66 	int type;
67 	const char *name;
68 	int x, y;
69 	menuframework_s *parent;
70 	int cursor_offset;
71 	int	localdata[4];
72 	unsigned flags;
73 
74 	const char *statusbar;
75 
76 	void (*callback)( void *self );
77 	void (*statusbarfunc)( void *self );
78 	void (*ownerdraw)( void *self );
79 	void (*cursordraw)( void *self );
80 } menucommon_s;
81 
82 typedef struct
83 {
84 	menucommon_s generic;
85 
86 	char		buffer[80];
87 	int			cursor;
88 	int			length;
89 	int			visible_length;
90 	int			visible_offset;
91 } menufield_s;
92 
93 typedef struct
94 {
95 	menucommon_s generic;
96 
97 	float minvalue;
98 	float maxvalue;
99 	float curvalue;
100 
101 	float range;
102 } menuslider_s;
103 
104 typedef struct
105 {
106 	menucommon_s generic;
107 
108 	int curvalue;
109 
110 	const char **itemnames;
111 } menulist_s;
112 
113 typedef struct
114 {
115 	menucommon_s generic;
116 } menuaction_s;
117 
118 typedef struct
119 {
120 	menucommon_s generic;
121 } menuseparator_s;
122 
123 qboolean Field_Key( menufield_s *field, int key );
124 
125 void	Menu_AddItem( menuframework_s *menu, void *item );
126 void	Menu_AdjustCursor( menuframework_s *menu, int dir );
127 void	Menu_Center( menuframework_s *menu );
128 void	Menu_Draw( menuframework_s *menu );
129 void	/*@null@*/*Menu_ItemAtCursor( menuframework_s *m );
130 qboolean Menu_SelectItem( menuframework_s *s );
131 void	Menu_SetStatusBar( menuframework_s *s, const char *string );
132 void	Menu_SlideItem( menuframework_s *s, int dir );
133 int		Menu_TallySlots( menuframework_s *menu );
134 
135 void	 Menu_DrawString( int, int, const char * );
136 void	 Menu_DrawStringDark( int, int, const char * );
137 void	 Menu_DrawStringR2L( int, int, const char * );
138 void	 Menu_DrawStringR2LDark( int, int, const char * );
139 
140 #endif
141