Quake-III-Arena

Quake III Arena GPL Source Release
Log | Files | Refs

ui_specifyleague.c (10554B)


      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 #include "ui_local.h"
     24 
     25 /*********************************************************************************
     26 	SPECIFY SERVER
     27 *********************************************************************************/
     28 
     29 #define MAX_LISTBOXITEMS		128
     30 #define MAX_LISTBOXWIDTH		40
     31 #define MAX_LEAGUENAME			80
     32 
     33 #define SPECIFYLEAGUE_FRAMEL	"menu/art/frame2_l"
     34 #define SPECIFYLEAGUE_FRAMER	"menu/art/frame1_r"
     35 #define SPECIFYLEAGUE_BACK0		"menu/art/back_0"
     36 #define SPECIFYLEAGUE_BACK1		"menu/art/back_1"
     37 #define SPECIFYLEAGUE_ARROWS0	"menu/art/arrows_vert_0"
     38 #define SPECIFYLEAGUE_UP		"menu/art/arrows_vert_top"
     39 #define SPECIFYLEAGUE_DOWN		"menu/art/arrows_vert_bot"
     40 #define GLOBALRANKINGS_LOGO		"menu/art/gr/grlogo"
     41 #define GLOBALRANKINGS_LETTERS	"menu/art/gr/grletters"
     42 
     43 #define ID_SPECIFYLEAGUENAME	100
     44 #define ID_SPECIFYLEAGUELIST	101
     45 #define ID_SPECIFYLEAGUEUP		102
     46 #define ID_SPECIFYLEAGUEDOWN	103
     47 #define ID_SPECIFYLEAGUEBACK	104
     48 
     49 static char* specifyleague_artlist[] =
     50 {
     51 	SPECIFYLEAGUE_FRAMEL,
     52 	SPECIFYLEAGUE_FRAMER,
     53 	SPECIFYLEAGUE_ARROWS0,	
     54 	SPECIFYLEAGUE_UP,	
     55 	SPECIFYLEAGUE_DOWN,	
     56 	SPECIFYLEAGUE_BACK0,	
     57 	SPECIFYLEAGUE_BACK1,
     58 	GLOBALRANKINGS_LOGO,
     59 	GLOBALRANKINGS_LETTERS,
     60 	NULL
     61 };
     62 
     63 static char playername[80];
     64 
     65 typedef struct
     66 {
     67 	menuframework_s	menu;
     68 	menutext_s		banner;
     69 	menubitmap_s	framel;
     70 	menubitmap_s	framer;
     71 	menufield_s		rankname;
     72 	menulist_s		list;
     73 	menubitmap_s	arrows;
     74 	menubitmap_s	up;
     75 	menubitmap_s	down;
     76 	menubitmap_s	back;
     77 	menubitmap_s	grlogo;
     78 	menubitmap_s	grletters;
     79 } specifyleague_t;
     80 
     81 static specifyleague_t	s_specifyleague;
     82 
     83 
     84 typedef struct {
     85 	char			buff[MAX_LISTBOXWIDTH];
     86 	char			leaguename[MAX_LEAGUENAME];
     87 } table_t;
     88 
     89 table_t league_table[MAX_LISTBOXITEMS];
     90 char *leaguename_items[MAX_LISTBOXITEMS];
     91 
     92 
     93 static void SpecifyLeague_GetList()
     94 {
     95 	int count = 0;
     96 	int i;
     97 	/* The Player Name has changed. We need to perform another search */
     98 	Q_strncpyz( playername,
     99 		s_specifyleague.rankname.field.buffer, 
    100 		sizeof(playername) );
    101 
    102 	count = trap_CL_UI_RankGetLeauges( playername );
    103 
    104 	for(i = 0; i < count; i++)
    105 	{
    106 		char	s[MAX_LEAGUENAME];
    107 		const char	*var;
    108 		var = va( "leaguename%i", i+1 );
    109 		trap_Cvar_VariableStringBuffer( var, s, sizeof(s) );
    110 		Q_strncpyz(league_table[i].leaguename, s, sizeof(league_table[i].leaguename) );
    111 		Q_strncpyz(league_table[i].buff, league_table[i].leaguename, sizeof(league_table[i].buff) );
    112 	}
    113 
    114 	s_specifyleague.list.numitems = count;
    115 }
    116 
    117 /*
    118 =================
    119 SpecifyLeague_Event
    120 =================
    121 */
    122 static void SpecifyLeague_Event( void* ptr, int event )
    123 {
    124 	int		id;
    125 	id = ((menucommon_s*)ptr)->id;
    126 	//if( event != QM_ACTIVATED && id != ID_SPECIFYLEAGUELIST ) {
    127 	//	return;
    128 	//}
    129 
    130 	switch (id)
    131 	{
    132 		case ID_SPECIFYLEAGUELIST:
    133 			if( event == QM_GOTFOCUS ) {
    134 				//ArenaServers_UpdatePicture();
    135 			}
    136 		break;
    137 
    138 		case ID_SPECIFYLEAGUEUP:
    139 			if( event == QM_ACTIVATED )
    140 				ScrollList_Key( &s_specifyleague.list, K_UPARROW );
    141 		break;		
    142 	
    143 		case ID_SPECIFYLEAGUEDOWN:
    144 			if( event == QM_ACTIVATED )
    145 				ScrollList_Key( &s_specifyleague.list, K_DOWNARROW );
    146 		break;
    147 			
    148 		case ID_SPECIFYLEAGUENAME:
    149 			if( (event == QM_LOSTFOCUS) && 
    150 				(Q_strncmp(playername, 
    151 					s_specifyleague.rankname.field.buffer, 
    152 					strlen(s_specifyleague.rankname.field.buffer)) != 0))
    153 			{
    154 				SpecifyLeague_GetList();
    155 			}
    156 		break;
    157 
    158 		case ID_SPECIFYLEAGUEBACK:
    159 			if( event == QM_ACTIVATED )
    160 			{
    161 				trap_Cvar_Set( "sv_leagueName", league_table[s_specifyleague.list.curvalue].leaguename);
    162 				UI_PopMenu();
    163 			}
    164 		break;
    165 	}
    166 }
    167 
    168 /*
    169 =================
    170 SpecifyLeague_MenuInit
    171 =================
    172 */
    173 void SpecifyLeague_MenuInit( void )
    174 {
    175 	int i;
    176 	// zero set all our globals
    177 	memset( &s_specifyleague, 0 ,sizeof(specifyleague_t) );
    178 
    179 	SpecifyLeague_Cache();
    180 
    181 	s_specifyleague.menu.wrapAround = qtrue;
    182 	s_specifyleague.menu.fullscreen = qtrue;
    183 
    184 	s_specifyleague.banner.generic.type	 = MTYPE_BTEXT;
    185 	s_specifyleague.banner.generic.x     = 320;
    186 	s_specifyleague.banner.generic.y     = 16;
    187 	s_specifyleague.banner.string		 = "CHOOSE LEAGUE";
    188 	s_specifyleague.banner.color  		 = color_white;
    189 	s_specifyleague.banner.style  		 = UI_CENTER;
    190 
    191 	s_specifyleague.framel.generic.type  = MTYPE_BITMAP;
    192 	s_specifyleague.framel.generic.name  = SPECIFYLEAGUE_FRAMEL;
    193 	s_specifyleague.framel.generic.flags = QMF_INACTIVE;
    194 	s_specifyleague.framel.generic.x	 = 0;  
    195 	s_specifyleague.framel.generic.y	 = 78;
    196 	s_specifyleague.framel.width  	     = 256;
    197 	s_specifyleague.framel.height  	     = 334;
    198 
    199 	s_specifyleague.framer.generic.type  = MTYPE_BITMAP;
    200 	s_specifyleague.framer.generic.name  = SPECIFYLEAGUE_FRAMER;
    201 	s_specifyleague.framer.generic.flags = QMF_INACTIVE;
    202 	s_specifyleague.framer.generic.x	 = 376;
    203 	s_specifyleague.framer.generic.y	 = 76;
    204 	s_specifyleague.framer.width  	     = 256;
    205 	s_specifyleague.framer.height  	     = 334;
    206 
    207 	s_specifyleague.grlogo.generic.type  = MTYPE_BITMAP;
    208 	s_specifyleague.grlogo.generic.name  = GLOBALRANKINGS_LOGO;
    209 	s_specifyleague.grlogo.generic.flags = QMF_INACTIVE;
    210 	s_specifyleague.grlogo.generic.x	 = 0;
    211 	s_specifyleague.grlogo.generic.y	 = 0;
    212 	s_specifyleague.grlogo.width		 = 64;
    213 	s_specifyleague.grlogo.height		 = 128;
    214 
    215 	s_specifyleague.rankname.generic.type       = MTYPE_FIELD;
    216 	s_specifyleague.rankname.generic.name       = "Player Name:";
    217 	s_specifyleague.rankname.generic.flags      = QMF_PULSEIFFOCUS|QMF_SMALLFONT;
    218 	s_specifyleague.rankname.generic.callback   = SpecifyLeague_Event;
    219 	s_specifyleague.rankname.generic.id	        = ID_SPECIFYLEAGUENAME;
    220 	s_specifyleague.rankname.generic.x	        = 226;
    221 	s_specifyleague.rankname.generic.y	        = 128;
    222 	s_specifyleague.rankname.field.widthInChars = 32;
    223 	s_specifyleague.rankname.field.maxchars     = 80;
    224 
    225 	s_specifyleague.list.generic.type			= MTYPE_SCROLLLIST;
    226 	s_specifyleague.list.generic.flags			= QMF_HIGHLIGHT_IF_FOCUS;
    227 	s_specifyleague.list.generic.id				= ID_SPECIFYLEAGUELIST;
    228 	s_specifyleague.list.generic.callback		= SpecifyLeague_Event;
    229 	s_specifyleague.list.generic.x				= 160;
    230 	s_specifyleague.list.generic.y				= 200;
    231 	s_specifyleague.list.width					= MAX_LISTBOXWIDTH;
    232 	s_specifyleague.list.height					= 8;
    233 	s_specifyleague.list.itemnames				= (const char **)leaguename_items;
    234 	s_specifyleague.list.numitems               = 0;
    235 	for( i = 0; i < MAX_LISTBOXITEMS; i++ ) {
    236 		league_table[i].buff[0] = 0;
    237 		league_table[i].leaguename[0] = 0;
    238 		leaguename_items[i] = league_table[i].buff;
    239 	}
    240 	
    241 	s_specifyleague.arrows.generic.type			= MTYPE_BITMAP;
    242 	s_specifyleague.arrows.generic.name			= SPECIFYLEAGUE_ARROWS0;
    243 	s_specifyleague.arrows.generic.flags		= QMF_LEFT_JUSTIFY|QMF_INACTIVE;
    244 	s_specifyleague.arrows.generic.callback		= SpecifyLeague_Event;
    245 	s_specifyleague.arrows.generic.x			= 512;
    246 	s_specifyleague.arrows.generic.y			= 240-64+16;
    247 	s_specifyleague.arrows.width				= 64;
    248 	s_specifyleague.arrows.height				= 128;
    249 
    250 	s_specifyleague.up.generic.type				= MTYPE_BITMAP;
    251 	s_specifyleague.up.generic.flags			= QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_MOUSEONLY;
    252 	s_specifyleague.up.generic.callback			= SpecifyLeague_Event;
    253 	s_specifyleague.up.generic.id				= ID_SPECIFYLEAGUEUP;
    254 	s_specifyleague.up.generic.x				= 512;
    255 	s_specifyleague.up.generic.y				= 240-64+16;
    256 	s_specifyleague.up.width					= 64;
    257 	s_specifyleague.up.height					= 64;
    258 	s_specifyleague.up.focuspic					= SPECIFYLEAGUE_UP;
    259 
    260 	s_specifyleague.down.generic.type			= MTYPE_BITMAP;
    261 	s_specifyleague.down.generic.flags			= QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_MOUSEONLY;
    262 	s_specifyleague.down.generic.callback		= SpecifyLeague_Event;
    263 	s_specifyleague.down.generic.id				= ID_SPECIFYLEAGUEDOWN;
    264 	s_specifyleague.down.generic.x				= 512;
    265 	s_specifyleague.down.generic.y				= 240+16;
    266 	s_specifyleague.down.width					= 64;
    267 	s_specifyleague.down.height					= 64;
    268 	s_specifyleague.down.focuspic				= SPECIFYLEAGUE_DOWN;
    269 
    270 	s_specifyleague.back.generic.type	  = MTYPE_BITMAP;
    271 	s_specifyleague.back.generic.name     = SPECIFYLEAGUE_BACK0;
    272 	s_specifyleague.back.generic.flags    = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
    273 	s_specifyleague.back.generic.callback = SpecifyLeague_Event;
    274 	s_specifyleague.back.generic.id	      = ID_SPECIFYLEAGUEBACK;
    275 	s_specifyleague.back.generic.x		  = 0;
    276 	s_specifyleague.back.generic.y		  = 480-64;
    277 	s_specifyleague.back.width  		  = 128;
    278 	s_specifyleague.back.height  		  = 64;
    279 	s_specifyleague.back.focuspic         = SPECIFYLEAGUE_BACK1;
    280 
    281 	Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.banner );
    282 	Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.framel );
    283 	Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.framer );
    284 	Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.grlogo );
    285 	Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.rankname );
    286 	Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.list );
    287 	Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.arrows );
    288 	Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.up );
    289 	Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.down );
    290 	Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.back );
    291 
    292 
    293 	// initialize any menu variables
    294 	Q_strncpyz( s_specifyleague.rankname.field.buffer, 
    295 		UI_Cvar_VariableString("name"), 
    296 		sizeof(s_specifyleague.rankname.field.buffer) );
    297 
    298 	Q_strncpyz( playername,
    299 		UI_Cvar_VariableString("name"), 
    300 		sizeof(playername) );
    301 
    302 	SpecifyLeague_GetList();
    303 }
    304 
    305 /*
    306 =================
    307 SpecifyLeague_Cache
    308 =================
    309 */
    310 void SpecifyLeague_Cache( void )
    311 {
    312 	int	i;
    313 
    314 	// touch all our pics
    315 	for (i=0; ;i++)
    316 	{
    317 		if (!specifyleague_artlist[i])
    318 			break;
    319 		trap_R_RegisterShaderNoMip(specifyleague_artlist[i]);
    320 	}
    321 }
    322 
    323 /*
    324 =================
    325 UI_SpecifyLeagueMenu
    326 =================
    327 */
    328 void UI_SpecifyLeagueMenu( void )
    329 {
    330 	SpecifyLeague_MenuInit();
    331 	UI_PushMenu( &s_specifyleague.menu );
    332 }
    333