1 /*
2 ===========================================================================
3 Copyright (C) 1999-2005 Id Software, Inc.
4
5 This file is part of Quake III Arena source code.
6
7 Quake III Arena source code is free software; you can redistribute it
8 and/or modify it under the terms of the GNU General Public License as
9 published by the Free Software Foundation; either version 2 of the License,
10 or (at your option) any later version.
11
12 Quake III Arena source code is distributed in the hope that it will be
13 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with Quake III Arena source code; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 ===========================================================================
21 */
22 /*
23 =======================================================================
24
25 SYSTEM CONFIGURATION MENU
26
27 =======================================================================
28 */
29
30 #include "ui_local.h"
31
32
33 #define ART_FRAMEL "menu/art/frame2_l"
34 #define ART_FRAMER "menu/art/frame1_r"
35 #define ART_BACK0 "menu/art/back_0"
36 #define ART_BACK1 "menu/art/back_1"
37
38 #define ID_GRAPHICS 10
39 #define ID_DISPLAY 11
40 #define ID_SOUND 12
41 #define ID_NETWORK 13
42 #define ID_BACK 14
43
44 #define VERTICAL_SPACING 34
45
46 typedef struct {
47 menuframework_s menu;
48
49 menutext_s banner;
50 menubitmap_s framel;
51 menubitmap_s framer;
52
53 menutext_s graphics;
54 menutext_s display;
55 menutext_s sound;
56 menutext_s network;
57 menubitmap_s back;
58 } optionsmenu_t;
59
60 static optionsmenu_t s_options;
61
62
63 /*
64 =================
65 Options_Event
66 =================
67 */
Options_Event(void * ptr,int event)68 static void Options_Event( void* ptr, int event ) {
69 if( event != QM_ACTIVATED ) {
70 return;
71 }
72
73 switch( ((menucommon_s*)ptr)->id ) {
74 case ID_GRAPHICS:
75 UI_GraphicsOptionsMenu();
76 break;
77
78 case ID_DISPLAY:
79 UI_DisplayOptionsMenu();
80 break;
81
82 case ID_SOUND:
83 UI_SoundOptionsMenu();
84 break;
85
86 case ID_NETWORK:
87 UI_NetworkOptionsMenu();
88 break;
89
90 case ID_BACK:
91 UI_PopMenu();
92 break;
93 }
94 }
95
96
97 /*
98 ===============
99 SystemConfig_Cache
100 ===============
101 */
SystemConfig_Cache(void)102 void SystemConfig_Cache( void ) {
103 trap_R_RegisterShaderNoMip( ART_FRAMEL );
104 trap_R_RegisterShaderNoMip( ART_FRAMER );
105 trap_R_RegisterShaderNoMip( ART_BACK0 );
106 trap_R_RegisterShaderNoMip( ART_BACK1 );
107 }
108
109 /*
110 ===============
111 Options_MenuInit
112 ===============
113 */
Options_MenuInit(void)114 void Options_MenuInit( void ) {
115 int y;
116 uiClientState_t cstate;
117
118 memset( &s_options, 0, sizeof(optionsmenu_t) );
119
120 SystemConfig_Cache();
121 s_options.menu.wrapAround = qtrue;
122
123 trap_GetClientState( &cstate );
124 if ( cstate.connState >= CA_CONNECTED ) {
125 s_options.menu.fullscreen = qfalse;
126 }
127 else {
128 s_options.menu.fullscreen = qtrue;
129 }
130
131 s_options.banner.generic.type = MTYPE_BTEXT;
132 s_options.banner.generic.flags = QMF_CENTER_JUSTIFY;
133 s_options.banner.generic.x = 320;
134 s_options.banner.generic.y = 16;
135 s_options.banner.string = "SYSTEM SETUP";
136 s_options.banner.color = color_white;
137 s_options.banner.style = UI_CENTER;
138
139 s_options.framel.generic.type = MTYPE_BITMAP;
140 s_options.framel.generic.name = ART_FRAMEL;
141 s_options.framel.generic.flags = QMF_INACTIVE;
142 s_options.framel.generic.x = 8;
143 s_options.framel.generic.y = 76;
144 s_options.framel.width = 256;
145 s_options.framel.height = 334;
146
147 s_options.framer.generic.type = MTYPE_BITMAP;
148 s_options.framer.generic.name = ART_FRAMER;
149 s_options.framer.generic.flags = QMF_INACTIVE;
150 s_options.framer.generic.x = 376;
151 s_options.framer.generic.y = 76;
152 s_options.framer.width = 256;
153 s_options.framer.height = 334;
154
155 y = 168;
156 s_options.graphics.generic.type = MTYPE_PTEXT;
157 s_options.graphics.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
158 s_options.graphics.generic.callback = Options_Event;
159 s_options.graphics.generic.id = ID_GRAPHICS;
160 s_options.graphics.generic.x = 320;
161 s_options.graphics.generic.y = y;
162 s_options.graphics.string = "GRAPHICS";
163 s_options.graphics.color = color_red;
164 s_options.graphics.style = UI_CENTER;
165
166 y += VERTICAL_SPACING;
167 s_options.display.generic.type = MTYPE_PTEXT;
168 s_options.display.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
169 s_options.display.generic.callback = Options_Event;
170 s_options.display.generic.id = ID_DISPLAY;
171 s_options.display.generic.x = 320;
172 s_options.display.generic.y = y;
173 s_options.display.string = "DISPLAY";
174 s_options.display.color = color_red;
175 s_options.display.style = UI_CENTER;
176
177 y += VERTICAL_SPACING;
178 s_options.sound.generic.type = MTYPE_PTEXT;
179 s_options.sound.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
180 s_options.sound.generic.callback = Options_Event;
181 s_options.sound.generic.id = ID_SOUND;
182 s_options.sound.generic.x = 320;
183 s_options.sound.generic.y = y;
184 s_options.sound.string = "SOUND";
185 s_options.sound.color = color_red;
186 s_options.sound.style = UI_CENTER;
187
188 y += VERTICAL_SPACING;
189 s_options.network.generic.type = MTYPE_PTEXT;
190 s_options.network.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
191 s_options.network.generic.callback = Options_Event;
192 s_options.network.generic.id = ID_NETWORK;
193 s_options.network.generic.x = 320;
194 s_options.network.generic.y = y;
195 s_options.network.string = "NETWORK";
196 s_options.network.color = color_red;
197 s_options.network.style = UI_CENTER;
198
199 s_options.back.generic.type = MTYPE_BITMAP;
200 s_options.back.generic.name = ART_BACK0;
201 s_options.back.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
202 s_options.back.generic.callback = Options_Event;
203 s_options.back.generic.id = ID_BACK;
204 s_options.back.generic.x = 0;
205 s_options.back.generic.y = 480-64;
206 s_options.back.width = 128;
207 s_options.back.height = 64;
208 s_options.back.focuspic = ART_BACK1;
209
210 Menu_AddItem( &s_options.menu, ( void * ) &s_options.banner );
211 Menu_AddItem( &s_options.menu, ( void * ) &s_options.framel );
212 Menu_AddItem( &s_options.menu, ( void * ) &s_options.framer );
213 Menu_AddItem( &s_options.menu, ( void * ) &s_options.graphics );
214 Menu_AddItem( &s_options.menu, ( void * ) &s_options.display );
215 Menu_AddItem( &s_options.menu, ( void * ) &s_options.sound );
216 Menu_AddItem( &s_options.menu, ( void * ) &s_options.network );
217 Menu_AddItem( &s_options.menu, ( void * ) &s_options.back );
218 }
219
220
221 /*
222 ===============
223 UI_SystemConfigMenu
224 ===============
225 */
UI_SystemConfigMenu(void)226 void UI_SystemConfigMenu( void ) {
227 Options_MenuInit();
228 UI_PushMenu ( &s_options.menu );
229 }
230