00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "ui_local.h"
00024
00025
00026
00027
00028
00029 #define SPECIFYSERVER_FRAMEL "menu/art/frame2_l"
00030 #define SPECIFYSERVER_FRAMER "menu/art/frame1_r"
00031 #define SPECIFYSERVER_BACK0 "menu/art/back_0"
00032 #define SPECIFYSERVER_BACK1 "menu/art/back_1"
00033 #define SPECIFYSERVER_FIGHT0 "menu/art/fight_0"
00034 #define SPECIFYSERVER_FIGHT1 "menu/art/fight_1"
00035
00036 #define ID_SPECIFYSERVERBACK 102
00037 #define ID_SPECIFYSERVERGO 103
00038
00039 static char* specifyserver_artlist[] =
00040 {
00041 SPECIFYSERVER_FRAMEL,
00042 SPECIFYSERVER_FRAMER,
00043 SPECIFYSERVER_BACK0,
00044 SPECIFYSERVER_BACK1,
00045 SPECIFYSERVER_FIGHT0,
00046 SPECIFYSERVER_FIGHT1,
00047 NULL
00048 };
00049
00050 typedef struct
00051 {
00052 menuframework_s menu;
00053 menutext_s banner;
00054 menubitmap_s framel;
00055 menubitmap_s framer;
00056 menufield_s domain;
00057 menufield_s port;
00058 menubitmap_s go;
00059 menubitmap_s back;
00060 } specifyserver_t;
00061
00062 static specifyserver_t s_specifyserver;
00063
00064
00065
00066
00067
00068
00069 static void SpecifyServer_Event( void* ptr, int event )
00070 {
00071 char buff[256];
00072
00073 switch (((menucommon_s*)ptr)->id)
00074 {
00075 case ID_SPECIFYSERVERGO:
00076 if (event != QM_ACTIVATED)
00077 break;
00078
00079 if (s_specifyserver.domain.field.buffer[0])
00080 {
00081 strcpy(buff,s_specifyserver.domain.field.buffer);
00082 if (s_specifyserver.port.field.buffer[0])
00083 Com_sprintf( buff+strlen(buff), 128, ":%s", s_specifyserver.port.field.buffer );
00084
00085 trap_Cmd_ExecuteText( EXEC_APPEND, va( "connect %s\n", buff ) );
00086 }
00087 break;
00088
00089 case ID_SPECIFYSERVERBACK:
00090 if (event != QM_ACTIVATED)
00091 break;
00092
00093 UI_PopMenu();
00094 break;
00095 }
00096 }
00097
00098
00099
00100
00101
00102
00103 void SpecifyServer_MenuInit( void )
00104 {
00105
00106 memset( &s_specifyserver, 0 ,sizeof(specifyserver_t) );
00107
00108 SpecifyServer_Cache();
00109
00110 s_specifyserver.menu.wrapAround = qtrue;
00111 s_specifyserver.menu.fullscreen = qtrue;
00112
00113 s_specifyserver.banner.generic.type = MTYPE_BTEXT;
00114 s_specifyserver.banner.generic.x = 320;
00115 s_specifyserver.banner.generic.y = 16;
00116 s_specifyserver.banner.string = "SPECIFY SERVER";
00117 s_specifyserver.banner.color = color_white;
00118 s_specifyserver.banner.style = UI_CENTER;
00119
00120 s_specifyserver.framel.generic.type = MTYPE_BITMAP;
00121 s_specifyserver.framel.generic.name = SPECIFYSERVER_FRAMEL;
00122 s_specifyserver.framel.generic.flags = QMF_INACTIVE;
00123 s_specifyserver.framel.generic.x = 0;
00124 s_specifyserver.framel.generic.y = 78;
00125 s_specifyserver.framel.width = 256;
00126 s_specifyserver.framel.height = 329;
00127
00128 s_specifyserver.framer.generic.type = MTYPE_BITMAP;
00129 s_specifyserver.framer.generic.name = SPECIFYSERVER_FRAMER;
00130 s_specifyserver.framer.generic.flags = QMF_INACTIVE;
00131 s_specifyserver.framer.generic.x = 376;
00132 s_specifyserver.framer.generic.y = 76;
00133 s_specifyserver.framer.width = 256;
00134 s_specifyserver.framer.height = 334;
00135
00136 s_specifyserver.domain.generic.type = MTYPE_FIELD;
00137 s_specifyserver.domain.generic.name = "Address:";
00138 s_specifyserver.domain.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT;
00139 s_specifyserver.domain.generic.x = 206;
00140 s_specifyserver.domain.generic.y = 220;
00141 s_specifyserver.domain.field.widthInChars = 38;
00142 s_specifyserver.domain.field.maxchars = 80;
00143
00144 s_specifyserver.port.generic.type = MTYPE_FIELD;
00145 s_specifyserver.port.generic.name = "Port:";
00146 s_specifyserver.port.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT|QMF_NUMBERSONLY;
00147 s_specifyserver.port.generic.x = 206;
00148 s_specifyserver.port.generic.y = 250;
00149 s_specifyserver.port.field.widthInChars = 6;
00150 s_specifyserver.port.field.maxchars = 5;
00151
00152 s_specifyserver.go.generic.type = MTYPE_BITMAP;
00153 s_specifyserver.go.generic.name = SPECIFYSERVER_FIGHT0;
00154 s_specifyserver.go.generic.flags = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS;
00155 s_specifyserver.go.generic.callback = SpecifyServer_Event;
00156 s_specifyserver.go.generic.id = ID_SPECIFYSERVERGO;
00157 s_specifyserver.go.generic.x = 640;
00158 s_specifyserver.go.generic.y = 480-64;
00159 s_specifyserver.go.width = 128;
00160 s_specifyserver.go.height = 64;
00161 s_specifyserver.go.focuspic = SPECIFYSERVER_FIGHT1;
00162
00163 s_specifyserver.back.generic.type = MTYPE_BITMAP;
00164 s_specifyserver.back.generic.name = SPECIFYSERVER_BACK0;
00165 s_specifyserver.back.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
00166 s_specifyserver.back.generic.callback = SpecifyServer_Event;
00167 s_specifyserver.back.generic.id = ID_SPECIFYSERVERBACK;
00168 s_specifyserver.back.generic.x = 0;
00169 s_specifyserver.back.generic.y = 480-64;
00170 s_specifyserver.back.width = 128;
00171 s_specifyserver.back.height = 64;
00172 s_specifyserver.back.focuspic = SPECIFYSERVER_BACK1;
00173
00174 Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.banner );
00175 Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.framel );
00176 Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.framer );
00177 Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.domain );
00178 Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.port );
00179 Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.go );
00180 Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.back );
00181
00182 Com_sprintf( s_specifyserver.port.field.buffer, 6, "%i", 27960 );
00183 }
00184
00185
00186
00187
00188
00189
00190 void SpecifyServer_Cache( void )
00191 {
00192 int i;
00193
00194
00195 for (i=0; ;i++)
00196 {
00197 if (!specifyserver_artlist[i])
00198 break;
00199 trap_R_RegisterShaderNoMip(specifyserver_artlist[i]);
00200 }
00201 }
00202
00203
00204
00205
00206
00207
00208 void UI_SpecifyServerMenu( void )
00209 {
00210 SpecifyServer_MenuInit();
00211 UI_PushMenu( &s_specifyserver.menu );
00212 }
00213