Quake-III-Arena

Quake III Arena GPL Source Release
Log | Files | Refs

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 }