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