ui_setup.c (10528B)
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 Foobar; 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 26 SETUP MENU 27 28 ======================================================================= 29 */ 30 31 32 #include "ui_local.h" 33 34 35 #define SETUP_MENU_VERTICAL_SPACING 34 36 37 #define ART_BACK0 "menu/art/back_0" 38 #define ART_BACK1 "menu/art/back_1" 39 #define ART_FRAMEL "menu/art/frame2_l" 40 #define ART_FRAMER "menu/art/frame1_r" 41 42 #define ID_CUSTOMIZEPLAYER 10 43 #define ID_CUSTOMIZECONTROLS 11 44 #define ID_SYSTEMCONFIG 12 45 #define ID_GAME 13 46 #define ID_CDKEY 14 47 #define ID_LOAD 15 48 #define ID_SAVE 16 49 #define ID_DEFAULTS 17 50 #define ID_BACK 18 51 52 53 typedef struct { 54 menuframework_s menu; 55 56 menutext_s banner; 57 menubitmap_s framel; 58 menubitmap_s framer; 59 menutext_s setupplayer; 60 menutext_s setupcontrols; 61 menutext_s setupsystem; 62 menutext_s game; 63 menutext_s cdkey; 64 // menutext_s load; 65 // menutext_s save; 66 menutext_s defaults; 67 menubitmap_s back; 68 } setupMenuInfo_t; 69 70 static setupMenuInfo_t setupMenuInfo; 71 72 73 /* 74 ================= 75 Setup_ResetDefaults_Action 76 ================= 77 */ 78 static void Setup_ResetDefaults_Action( qboolean result ) { 79 if( !result ) { 80 return; 81 } 82 trap_Cmd_ExecuteText( EXEC_APPEND, "exec default.cfg\n"); 83 trap_Cmd_ExecuteText( EXEC_APPEND, "cvar_restart\n"); 84 trap_Cmd_ExecuteText( EXEC_APPEND, "vid_restart\n" ); 85 } 86 87 88 /* 89 ================= 90 Setup_ResetDefaults_Draw 91 ================= 92 */ 93 static void Setup_ResetDefaults_Draw( void ) { 94 UI_DrawProportionalString( SCREEN_WIDTH/2, 356 + PROP_HEIGHT * 0, "WARNING: This will reset *ALL*", UI_CENTER|UI_SMALLFONT, color_yellow ); 95 UI_DrawProportionalString( SCREEN_WIDTH/2, 356 + PROP_HEIGHT * 1, "options to their default values.", UI_CENTER|UI_SMALLFONT, color_yellow ); 96 } 97 98 99 /* 100 =============== 101 UI_SetupMenu_Event 102 =============== 103 */ 104 static void UI_SetupMenu_Event( void *ptr, int event ) { 105 if( event != QM_ACTIVATED ) { 106 return; 107 } 108 109 switch( ((menucommon_s*)ptr)->id ) { 110 case ID_CUSTOMIZEPLAYER: 111 UI_PlayerSettingsMenu(); 112 break; 113 114 case ID_CUSTOMIZECONTROLS: 115 UI_ControlsMenu(); 116 break; 117 118 case ID_SYSTEMCONFIG: 119 UI_GraphicsOptionsMenu(); 120 break; 121 122 case ID_GAME: 123 UI_PreferencesMenu(); 124 break; 125 126 case ID_CDKEY: 127 UI_CDKeyMenu(); 128 break; 129 130 // case ID_LOAD: 131 // UI_LoadConfigMenu(); 132 // break; 133 134 // case ID_SAVE: 135 // UI_SaveConfigMenu(); 136 // break; 137 138 case ID_DEFAULTS: 139 UI_ConfirmMenu( "SET TO DEFAULTS?", Setup_ResetDefaults_Draw, Setup_ResetDefaults_Action ); 140 break; 141 142 case ID_BACK: 143 UI_PopMenu(); 144 break; 145 } 146 } 147 148 149 /* 150 =============== 151 UI_SetupMenu_Init 152 =============== 153 */ 154 static void UI_SetupMenu_Init( void ) { 155 int y; 156 157 UI_SetupMenu_Cache(); 158 159 memset( &setupMenuInfo, 0, sizeof(setupMenuInfo) ); 160 setupMenuInfo.menu.wrapAround = qtrue; 161 setupMenuInfo.menu.fullscreen = qtrue; 162 163 setupMenuInfo.banner.generic.type = MTYPE_BTEXT; 164 setupMenuInfo.banner.generic.x = 320; 165 setupMenuInfo.banner.generic.y = 16; 166 setupMenuInfo.banner.string = "SETUP"; 167 setupMenuInfo.banner.color = color_white; 168 setupMenuInfo.banner.style = UI_CENTER; 169 170 setupMenuInfo.framel.generic.type = MTYPE_BITMAP; 171 setupMenuInfo.framel.generic.name = ART_FRAMEL; 172 setupMenuInfo.framel.generic.flags = QMF_INACTIVE; 173 setupMenuInfo.framel.generic.x = 0; 174 setupMenuInfo.framel.generic.y = 78; 175 setupMenuInfo.framel.width = 256; 176 setupMenuInfo.framel.height = 329; 177 178 setupMenuInfo.framer.generic.type = MTYPE_BITMAP; 179 setupMenuInfo.framer.generic.name = ART_FRAMER; 180 setupMenuInfo.framer.generic.flags = QMF_INACTIVE; 181 setupMenuInfo.framer.generic.x = 376; 182 setupMenuInfo.framer.generic.y = 76; 183 setupMenuInfo.framer.width = 256; 184 setupMenuInfo.framer.height = 334; 185 186 y = 134; 187 setupMenuInfo.setupplayer.generic.type = MTYPE_PTEXT; 188 setupMenuInfo.setupplayer.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; 189 setupMenuInfo.setupplayer.generic.x = 320; 190 setupMenuInfo.setupplayer.generic.y = y; 191 setupMenuInfo.setupplayer.generic.id = ID_CUSTOMIZEPLAYER; 192 setupMenuInfo.setupplayer.generic.callback = UI_SetupMenu_Event; 193 setupMenuInfo.setupplayer.string = "PLAYER"; 194 setupMenuInfo.setupplayer.color = color_red; 195 setupMenuInfo.setupplayer.style = UI_CENTER; 196 197 y += SETUP_MENU_VERTICAL_SPACING; 198 setupMenuInfo.setupcontrols.generic.type = MTYPE_PTEXT; 199 setupMenuInfo.setupcontrols.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; 200 setupMenuInfo.setupcontrols.generic.x = 320; 201 setupMenuInfo.setupcontrols.generic.y = y; 202 setupMenuInfo.setupcontrols.generic.id = ID_CUSTOMIZECONTROLS; 203 setupMenuInfo.setupcontrols.generic.callback = UI_SetupMenu_Event; 204 setupMenuInfo.setupcontrols.string = "CONTROLS"; 205 setupMenuInfo.setupcontrols.color = color_red; 206 setupMenuInfo.setupcontrols.style = UI_CENTER; 207 208 y += SETUP_MENU_VERTICAL_SPACING; 209 setupMenuInfo.setupsystem.generic.type = MTYPE_PTEXT; 210 setupMenuInfo.setupsystem.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; 211 setupMenuInfo.setupsystem.generic.x = 320; 212 setupMenuInfo.setupsystem.generic.y = y; 213 setupMenuInfo.setupsystem.generic.id = ID_SYSTEMCONFIG; 214 setupMenuInfo.setupsystem.generic.callback = UI_SetupMenu_Event; 215 setupMenuInfo.setupsystem.string = "SYSTEM"; 216 setupMenuInfo.setupsystem.color = color_red; 217 setupMenuInfo.setupsystem.style = UI_CENTER; 218 219 y += SETUP_MENU_VERTICAL_SPACING; 220 setupMenuInfo.game.generic.type = MTYPE_PTEXT; 221 setupMenuInfo.game.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; 222 setupMenuInfo.game.generic.x = 320; 223 setupMenuInfo.game.generic.y = y; 224 setupMenuInfo.game.generic.id = ID_GAME; 225 setupMenuInfo.game.generic.callback = UI_SetupMenu_Event; 226 setupMenuInfo.game.string = "GAME OPTIONS"; 227 setupMenuInfo.game.color = color_red; 228 setupMenuInfo.game.style = UI_CENTER; 229 230 y += SETUP_MENU_VERTICAL_SPACING; 231 setupMenuInfo.cdkey.generic.type = MTYPE_PTEXT; 232 setupMenuInfo.cdkey.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; 233 setupMenuInfo.cdkey.generic.x = 320; 234 setupMenuInfo.cdkey.generic.y = y; 235 setupMenuInfo.cdkey.generic.id = ID_CDKEY; 236 setupMenuInfo.cdkey.generic.callback = UI_SetupMenu_Event; 237 setupMenuInfo.cdkey.string = "CD Key"; 238 setupMenuInfo.cdkey.color = color_red; 239 setupMenuInfo.cdkey.style = UI_CENTER; 240 241 if( !trap_Cvar_VariableValue( "cl_paused" ) ) { 242 #if 0 243 y += SETUP_MENU_VERTICAL_SPACING; 244 setupMenuInfo.load.generic.type = MTYPE_PTEXT; 245 setupMenuInfo.load.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; 246 setupMenuInfo.load.generic.x = 320; 247 setupMenuInfo.load.generic.y = y; 248 setupMenuInfo.load.generic.id = ID_LOAD; 249 setupMenuInfo.load.generic.callback = UI_SetupMenu_Event; 250 setupMenuInfo.load.string = "LOAD"; 251 setupMenuInfo.load.color = color_red; 252 setupMenuInfo.load.style = UI_CENTER; 253 254 y += SETUP_MENU_VERTICAL_SPACING; 255 setupMenuInfo.save.generic.type = MTYPE_PTEXT; 256 setupMenuInfo.save.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; 257 setupMenuInfo.save.generic.x = 320; 258 setupMenuInfo.save.generic.y = y; 259 setupMenuInfo.save.generic.id = ID_SAVE; 260 setupMenuInfo.save.generic.callback = UI_SetupMenu_Event; 261 setupMenuInfo.save.string = "SAVE"; 262 setupMenuInfo.save.color = color_red; 263 setupMenuInfo.save.style = UI_CENTER; 264 #endif 265 266 y += SETUP_MENU_VERTICAL_SPACING; 267 setupMenuInfo.defaults.generic.type = MTYPE_PTEXT; 268 setupMenuInfo.defaults.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; 269 setupMenuInfo.defaults.generic.x = 320; 270 setupMenuInfo.defaults.generic.y = y; 271 setupMenuInfo.defaults.generic.id = ID_DEFAULTS; 272 setupMenuInfo.defaults.generic.callback = UI_SetupMenu_Event; 273 setupMenuInfo.defaults.string = "DEFAULTS"; 274 setupMenuInfo.defaults.color = color_red; 275 setupMenuInfo.defaults.style = UI_CENTER; 276 } 277 278 setupMenuInfo.back.generic.type = MTYPE_BITMAP; 279 setupMenuInfo.back.generic.name = ART_BACK0; 280 setupMenuInfo.back.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; 281 setupMenuInfo.back.generic.id = ID_BACK; 282 setupMenuInfo.back.generic.callback = UI_SetupMenu_Event; 283 setupMenuInfo.back.generic.x = 0; 284 setupMenuInfo.back.generic.y = 480-64; 285 setupMenuInfo.back.width = 128; 286 setupMenuInfo.back.height = 64; 287 setupMenuInfo.back.focuspic = ART_BACK1; 288 289 Menu_AddItem( &setupMenuInfo.menu, &setupMenuInfo.banner ); 290 Menu_AddItem( &setupMenuInfo.menu, &setupMenuInfo.framel ); 291 Menu_AddItem( &setupMenuInfo.menu, &setupMenuInfo.framer ); 292 Menu_AddItem( &setupMenuInfo.menu, &setupMenuInfo.setupplayer ); 293 Menu_AddItem( &setupMenuInfo.menu, &setupMenuInfo.setupcontrols ); 294 Menu_AddItem( &setupMenuInfo.menu, &setupMenuInfo.setupsystem ); 295 Menu_AddItem( &setupMenuInfo.menu, &setupMenuInfo.game ); 296 Menu_AddItem( &setupMenuInfo.menu, &setupMenuInfo.cdkey ); 297 // Menu_AddItem( &setupMenuInfo.menu, &setupMenuInfo.load ); 298 // Menu_AddItem( &setupMenuInfo.menu, &setupMenuInfo.save ); 299 if( !trap_Cvar_VariableValue( "cl_paused" ) ) { 300 Menu_AddItem( &setupMenuInfo.menu, &setupMenuInfo.defaults ); 301 } 302 Menu_AddItem( &setupMenuInfo.menu, &setupMenuInfo.back ); 303 } 304 305 306 /* 307 ================= 308 UI_SetupMenu_Cache 309 ================= 310 */ 311 void UI_SetupMenu_Cache( void ) { 312 trap_R_RegisterShaderNoMip( ART_BACK0 ); 313 trap_R_RegisterShaderNoMip( ART_BACK1 ); 314 trap_R_RegisterShaderNoMip( ART_FRAMEL ); 315 trap_R_RegisterShaderNoMip( ART_FRAMER ); 316 } 317 318 319 /* 320 =============== 321 UI_SetupMenu 322 =============== 323 */ 324 void UI_SetupMenu( void ) { 325 UI_SetupMenu_Init(); 326 UI_PushMenu( &setupMenuInfo.menu ); 327 }