Quake-III-Arena

Quake III Arena GPL Source Release
Log | Files | Refs

ui_specifyserver.c (6682B)


      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 SPECIFYSERVER_FRAMEL	"menu/art/frame2_l"
     30 #define SPECIFYSERVER_FRAMER	"menu/art/frame1_r"
     31 #define SPECIFYSERVER_BACK0		"menu/art/back_0"
     32 #define SPECIFYSERVER_BACK1		"menu/art/back_1"
     33 #define SPECIFYSERVER_FIGHT0	"menu/art/fight_0"
     34 #define SPECIFYSERVER_FIGHT1	"menu/art/fight_1"
     35 
     36 #define ID_SPECIFYSERVERBACK	102
     37 #define ID_SPECIFYSERVERGO		103
     38 
     39 static char* specifyserver_artlist[] =
     40 {
     41 	SPECIFYSERVER_FRAMEL,
     42 	SPECIFYSERVER_FRAMER,
     43 	SPECIFYSERVER_BACK0,	
     44 	SPECIFYSERVER_BACK1,	
     45 	SPECIFYSERVER_FIGHT0,
     46 	SPECIFYSERVER_FIGHT1,
     47 	NULL
     48 };
     49 
     50 typedef struct
     51 {
     52 	menuframework_s	menu;
     53 	menutext_s		banner;
     54 	menubitmap_s	framel;
     55 	menubitmap_s	framer;
     56 	menufield_s		domain;
     57 	menufield_s		port;
     58 	menubitmap_s	go;
     59 	menubitmap_s	back;
     60 } specifyserver_t;
     61 
     62 static specifyserver_t	s_specifyserver;
     63 
     64 /*
     65 =================
     66 SpecifyServer_Event
     67 =================
     68 */
     69 static void SpecifyServer_Event( void* ptr, int event )
     70 {
     71 	char	buff[256];
     72 
     73 	switch (((menucommon_s*)ptr)->id)
     74 	{
     75 		case ID_SPECIFYSERVERGO:
     76 			if (event != QM_ACTIVATED)
     77 				break;
     78 
     79 			if (s_specifyserver.domain.field.buffer[0])
     80 			{
     81 				strcpy(buff,s_specifyserver.domain.field.buffer);
     82 				if (s_specifyserver.port.field.buffer[0])
     83 					Com_sprintf( buff+strlen(buff), 128, ":%s", s_specifyserver.port.field.buffer );
     84 
     85 				trap_Cmd_ExecuteText( EXEC_APPEND, va( "connect %s\n", buff ) );
     86 			}
     87 			break;
     88 
     89 		case ID_SPECIFYSERVERBACK:
     90 			if (event != QM_ACTIVATED)
     91 				break;
     92 
     93 			UI_PopMenu();
     94 			break;
     95 	}
     96 }
     97 
     98 /*
     99 =================
    100 SpecifyServer_MenuInit
    101 =================
    102 */
    103 void SpecifyServer_MenuInit( void )
    104 {
    105 	// zero set all our globals
    106 	memset( &s_specifyserver, 0 ,sizeof(specifyserver_t) );
    107 
    108 	SpecifyServer_Cache();
    109 
    110 	s_specifyserver.menu.wrapAround = qtrue;
    111 	s_specifyserver.menu.fullscreen = qtrue;
    112 
    113 	s_specifyserver.banner.generic.type	 = MTYPE_BTEXT;
    114 	s_specifyserver.banner.generic.x     = 320;
    115 	s_specifyserver.banner.generic.y     = 16;
    116 	s_specifyserver.banner.string		 = "SPECIFY SERVER";
    117 	s_specifyserver.banner.color  		 = color_white;
    118 	s_specifyserver.banner.style  		 = UI_CENTER;
    119 
    120 	s_specifyserver.framel.generic.type  = MTYPE_BITMAP;
    121 	s_specifyserver.framel.generic.name  = SPECIFYSERVER_FRAMEL;
    122 	s_specifyserver.framel.generic.flags = QMF_INACTIVE;
    123 	s_specifyserver.framel.generic.x	 = 0;  
    124 	s_specifyserver.framel.generic.y	 = 78;
    125 	s_specifyserver.framel.width  	     = 256;
    126 	s_specifyserver.framel.height  	     = 329;
    127 
    128 	s_specifyserver.framer.generic.type  = MTYPE_BITMAP;
    129 	s_specifyserver.framer.generic.name  = SPECIFYSERVER_FRAMER;
    130 	s_specifyserver.framer.generic.flags = QMF_INACTIVE;
    131 	s_specifyserver.framer.generic.x	 = 376;
    132 	s_specifyserver.framer.generic.y	 = 76;
    133 	s_specifyserver.framer.width  	     = 256;
    134 	s_specifyserver.framer.height  	     = 334;
    135 
    136 	s_specifyserver.domain.generic.type       = MTYPE_FIELD;
    137 	s_specifyserver.domain.generic.name       = "Address:";
    138 	s_specifyserver.domain.generic.flags      = QMF_PULSEIFFOCUS|QMF_SMALLFONT;
    139 	s_specifyserver.domain.generic.x	      = 206;
    140 	s_specifyserver.domain.generic.y	      = 220;
    141 	s_specifyserver.domain.field.widthInChars = 38;
    142 	s_specifyserver.domain.field.maxchars     = 80;
    143 
    144 	s_specifyserver.port.generic.type       = MTYPE_FIELD;
    145 	s_specifyserver.port.generic.name	    = "Port:";
    146 	s_specifyserver.port.generic.flags	    = QMF_PULSEIFFOCUS|QMF_SMALLFONT|QMF_NUMBERSONLY;
    147 	s_specifyserver.port.generic.x	        = 206;
    148 	s_specifyserver.port.generic.y	        = 250;
    149 	s_specifyserver.port.field.widthInChars = 6;
    150 	s_specifyserver.port.field.maxchars     = 5;
    151 
    152 	s_specifyserver.go.generic.type	    = MTYPE_BITMAP;
    153 	s_specifyserver.go.generic.name     = SPECIFYSERVER_FIGHT0;
    154 	s_specifyserver.go.generic.flags    = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS;
    155 	s_specifyserver.go.generic.callback = SpecifyServer_Event;
    156 	s_specifyserver.go.generic.id	    = ID_SPECIFYSERVERGO;
    157 	s_specifyserver.go.generic.x		= 640;
    158 	s_specifyserver.go.generic.y		= 480-64;
    159 	s_specifyserver.go.width  		    = 128;
    160 	s_specifyserver.go.height  		    = 64;
    161 	s_specifyserver.go.focuspic         = SPECIFYSERVER_FIGHT1;
    162 
    163 	s_specifyserver.back.generic.type	  = MTYPE_BITMAP;
    164 	s_specifyserver.back.generic.name     = SPECIFYSERVER_BACK0;
    165 	s_specifyserver.back.generic.flags    = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
    166 	s_specifyserver.back.generic.callback = SpecifyServer_Event;
    167 	s_specifyserver.back.generic.id	      = ID_SPECIFYSERVERBACK;
    168 	s_specifyserver.back.generic.x		  = 0;
    169 	s_specifyserver.back.generic.y		  = 480-64;
    170 	s_specifyserver.back.width  		  = 128;
    171 	s_specifyserver.back.height  		  = 64;
    172 	s_specifyserver.back.focuspic         = SPECIFYSERVER_BACK1;
    173 
    174 	Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.banner );
    175 	Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.framel );
    176 	Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.framer );
    177 	Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.domain );
    178 	Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.port );
    179 	Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.go );
    180 	Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.back );
    181 
    182 	Com_sprintf( s_specifyserver.port.field.buffer, 6, "%i", 27960 );
    183 }
    184 
    185 /*
    186 =================
    187 SpecifyServer_Cache
    188 =================
    189 */
    190 void SpecifyServer_Cache( void )
    191 {
    192 	int	i;
    193 
    194 	// touch all our pics
    195 	for (i=0; ;i++)
    196 	{
    197 		if (!specifyserver_artlist[i])
    198 			break;
    199 		trap_R_RegisterShaderNoMip(specifyserver_artlist[i]);
    200 	}
    201 }
    202 
    203 /*
    204 =================
    205 UI_SpecifyServerMenu
    206 =================
    207 */
    208 void UI_SpecifyServerMenu( void )
    209 {
    210 	SpecifyServer_MenuInit();
    211 	UI_PushMenu( &s_specifyserver.menu );
    212 }
    213