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 #define SERVERINFO_FRAMEL "menu/art/frame2_l"
00026 #define SERVERINFO_FRAMER "menu/art/frame1_r"
00027 #define SERVERINFO_BACK0 "menu/art/back_0"
00028 #define SERVERINFO_BACK1 "menu/art/back_1"
00029
00030 static char* serverinfo_artlist[] =
00031 {
00032 SERVERINFO_FRAMEL,
00033 SERVERINFO_FRAMER,
00034 SERVERINFO_BACK0,
00035 SERVERINFO_BACK1,
00036 NULL
00037 };
00038
00039 #define ID_ADD 100
00040 #define ID_BACK 101
00041
00042 typedef struct
00043 {
00044 menuframework_s menu;
00045 menutext_s banner;
00046 menubitmap_s framel;
00047 menubitmap_s framer;
00048 menubitmap_s back;
00049 menutext_s add;
00050 char info[MAX_INFO_STRING];
00051 int numlines;
00052 } serverinfo_t;
00053
00054 static serverinfo_t s_serverinfo;
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064 void Favorites_Add( void )
00065 {
00066 char adrstr[128];
00067 char serverbuff[128];
00068 int i;
00069 int best;
00070
00071 trap_Cvar_VariableStringBuffer( "cl_currentServerAddress", serverbuff, sizeof(serverbuff) );
00072 if (!serverbuff[0])
00073 return;
00074
00075 best = 0;
00076 for (i=0; i<MAX_FAVORITESERVERS; i++)
00077 {
00078 trap_Cvar_VariableStringBuffer( va("server%d",i+1), adrstr, sizeof(adrstr) );
00079 if (!Q_stricmp(serverbuff,adrstr))
00080 {
00081
00082 return;
00083 }
00084
00085
00086 if ((adrstr[0] < '0' || adrstr[0] > '9' ) && !best)
00087 best = i+1;
00088 }
00089
00090 if (best)
00091 trap_Cvar_Set( va("server%d",best), serverbuff);
00092 }
00093
00094
00095
00096
00097
00098
00099
00100 static void ServerInfo_Event( void* ptr, int event )
00101 {
00102 switch (((menucommon_s*)ptr)->id)
00103 {
00104 case ID_ADD:
00105 if (event != QM_ACTIVATED)
00106 break;
00107
00108 Favorites_Add();
00109 UI_PopMenu();
00110 break;
00111
00112 case ID_BACK:
00113 if (event != QM_ACTIVATED)
00114 break;
00115
00116 UI_PopMenu();
00117 break;
00118 }
00119 }
00120
00121
00122
00123
00124
00125
00126 static void ServerInfo_MenuDraw( void )
00127 {
00128 const char *s;
00129 char key[MAX_INFO_KEY];
00130 char value[MAX_INFO_VALUE];
00131 int y;
00132
00133 y = SCREEN_HEIGHT/2 - s_serverinfo.numlines*(SMALLCHAR_HEIGHT)/2 - 20;
00134 s = s_serverinfo.info;
00135 while ( s ) {
00136 Info_NextPair( &s, key, value );
00137 if ( !key[0] ) {
00138 break;
00139 }
00140
00141 Q_strcat( key, MAX_INFO_KEY, ":" );
00142
00143 UI_DrawString(SCREEN_WIDTH*0.50 - 8,y,key,UI_RIGHT|UI_SMALLFONT,color_red);
00144 UI_DrawString(SCREEN_WIDTH*0.50 + 8,y,value,UI_LEFT|UI_SMALLFONT,text_color_normal);
00145
00146 y += SMALLCHAR_HEIGHT;
00147 }
00148
00149 Menu_Draw( &s_serverinfo.menu );
00150 }
00151
00152
00153
00154
00155
00156
00157 static sfxHandle_t ServerInfo_MenuKey( int key )
00158 {
00159 return ( Menu_DefaultKey( &s_serverinfo.menu, key ) );
00160 }
00161
00162
00163
00164
00165
00166
00167 void ServerInfo_Cache( void )
00168 {
00169 int i;
00170
00171
00172 for (i=0; ;i++)
00173 {
00174 if (!serverinfo_artlist[i])
00175 break;
00176 trap_R_RegisterShaderNoMip(serverinfo_artlist[i]);
00177 }
00178 }
00179
00180
00181
00182
00183
00184
00185 void UI_ServerInfoMenu( void )
00186 {
00187 const char *s;
00188 char key[MAX_INFO_KEY];
00189 char value[MAX_INFO_VALUE];
00190
00191
00192 memset( &s_serverinfo, 0 ,sizeof(serverinfo_t) );
00193
00194 ServerInfo_Cache();
00195
00196 s_serverinfo.menu.draw = ServerInfo_MenuDraw;
00197 s_serverinfo.menu.key = ServerInfo_MenuKey;
00198 s_serverinfo.menu.wrapAround = qtrue;
00199 s_serverinfo.menu.fullscreen = qtrue;
00200
00201 s_serverinfo.banner.generic.type = MTYPE_BTEXT;
00202 s_serverinfo.banner.generic.x = 320;
00203 s_serverinfo.banner.generic.y = 16;
00204 s_serverinfo.banner.string = "SERVER INFO";
00205 s_serverinfo.banner.color = color_white;
00206 s_serverinfo.banner.style = UI_CENTER;
00207
00208 s_serverinfo.framel.generic.type = MTYPE_BITMAP;
00209 s_serverinfo.framel.generic.name = SERVERINFO_FRAMEL;
00210 s_serverinfo.framel.generic.flags = QMF_INACTIVE;
00211 s_serverinfo.framel.generic.x = 0;
00212 s_serverinfo.framel.generic.y = 78;
00213 s_serverinfo.framel.width = 256;
00214 s_serverinfo.framel.height = 329;
00215
00216 s_serverinfo.framer.generic.type = MTYPE_BITMAP;
00217 s_serverinfo.framer.generic.name = SERVERINFO_FRAMER;
00218 s_serverinfo.framer.generic.flags = QMF_INACTIVE;
00219 s_serverinfo.framer.generic.x = 376;
00220 s_serverinfo.framer.generic.y = 76;
00221 s_serverinfo.framer.width = 256;
00222 s_serverinfo.framer.height = 334;
00223
00224 s_serverinfo.add.generic.type = MTYPE_PTEXT;
00225 s_serverinfo.add.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
00226 s_serverinfo.add.generic.callback = ServerInfo_Event;
00227 s_serverinfo.add.generic.id = ID_ADD;
00228 s_serverinfo.add.generic.x = 320;
00229 s_serverinfo.add.generic.y = 371;
00230 s_serverinfo.add.string = "ADD TO FAVORITES";
00231 s_serverinfo.add.style = UI_CENTER|UI_SMALLFONT;
00232 s_serverinfo.add.color = color_red;
00233 if( trap_Cvar_VariableValue( "sv_running" ) ) {
00234 s_serverinfo.add.generic.flags |= QMF_GRAYED;
00235 }
00236
00237 s_serverinfo.back.generic.type = MTYPE_BITMAP;
00238 s_serverinfo.back.generic.name = SERVERINFO_BACK0;
00239 s_serverinfo.back.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
00240 s_serverinfo.back.generic.callback = ServerInfo_Event;
00241 s_serverinfo.back.generic.id = ID_BACK;
00242 s_serverinfo.back.generic.x = 0;
00243 s_serverinfo.back.generic.y = 480-64;
00244 s_serverinfo.back.width = 128;
00245 s_serverinfo.back.height = 64;
00246 s_serverinfo.back.focuspic = SERVERINFO_BACK1;
00247
00248 trap_GetConfigString( CS_SERVERINFO, s_serverinfo.info, MAX_INFO_STRING );
00249
00250 s_serverinfo.numlines = 0;
00251 s = s_serverinfo.info;
00252 while ( s ) {
00253 Info_NextPair( &s, key, value );
00254 if ( !key[0] ) {
00255 break;
00256 }
00257 s_serverinfo.numlines++;
00258 }
00259
00260 if (s_serverinfo.numlines > 16)
00261 s_serverinfo.numlines = 16;
00262
00263 Menu_AddItem( &s_serverinfo.menu, (void*) &s_serverinfo.banner );
00264 Menu_AddItem( &s_serverinfo.menu, (void*) &s_serverinfo.framel );
00265 Menu_AddItem( &s_serverinfo.menu, (void*) &s_serverinfo.framer );
00266 Menu_AddItem( &s_serverinfo.menu, (void*) &s_serverinfo.add );
00267 Menu_AddItem( &s_serverinfo.menu, (void*) &s_serverinfo.back );
00268
00269 UI_PushMenu( &s_serverinfo.menu );
00270 }
00271
00272