File: client\qmenu.h
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 *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