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 Quake III Arena source code; 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 */
SpecifyServer_Event(void * ptr,int event)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 */
SpecifyServer_MenuInit(void)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 */
SpecifyServer_Cache(void)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 */
UI_SpecifyServerMenu(void)208 void UI_SpecifyServerMenu( void )
209 {
210 SpecifyServer_MenuInit();
211 UI_PushMenu( &s_specifyserver.menu );
212 }
213
214