Main Page | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

ui_specifyleague.c

Go to the documentation of this file.
00001 /*
00002 ===========================================================================
00003 Copyright (C) 1999-2005 Id Software, Inc.
00004 
00005 This file is part of Quake III Arena source code.
00006 
00007 Quake III Arena source code is free software; you can redistribute it
00008 and/or modify it under the terms of the GNU General Public License as
00009 published by the Free Software Foundation; either version 2 of the License,
00010 or (at your option) any later version.
00011 
00012 Quake III Arena source code is distributed in the hope that it will be
00013 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015 GNU General Public License for more details.
00016 
00017 You should have received a copy of the GNU General Public License
00018 along with Foobar; if not, write to the Free Software
00019 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00020 ===========================================================================
00021 */
00022 //
00023 #include "ui_local.h"
00024 
00025 /*********************************************************************************
00026     SPECIFY SERVER
00027 *********************************************************************************/
00028 
00029 #define MAX_LISTBOXITEMS        128
00030 #define MAX_LISTBOXWIDTH        40
00031 #define MAX_LEAGUENAME          80
00032 
00033 #define SPECIFYLEAGUE_FRAMEL    "menu/art/frame2_l"
00034 #define SPECIFYLEAGUE_FRAMER    "menu/art/frame1_r"
00035 #define SPECIFYLEAGUE_BACK0     "menu/art/back_0"
00036 #define SPECIFYLEAGUE_BACK1     "menu/art/back_1"
00037 #define SPECIFYLEAGUE_ARROWS0   "menu/art/arrows_vert_0"
00038 #define SPECIFYLEAGUE_UP        "menu/art/arrows_vert_top"
00039 #define SPECIFYLEAGUE_DOWN      "menu/art/arrows_vert_bot"
00040 #define GLOBALRANKINGS_LOGO     "menu/art/gr/grlogo"
00041 #define GLOBALRANKINGS_LETTERS  "menu/art/gr/grletters"
00042 
00043 #define ID_SPECIFYLEAGUENAME    100
00044 #define ID_SPECIFYLEAGUELIST    101
00045 #define ID_SPECIFYLEAGUEUP      102
00046 #define ID_SPECIFYLEAGUEDOWN    103
00047 #define ID_SPECIFYLEAGUEBACK    104
00048 
00049 static char* specifyleague_artlist[] =
00050 {
00051     SPECIFYLEAGUE_FRAMEL,
00052     SPECIFYLEAGUE_FRAMER,
00053     SPECIFYLEAGUE_ARROWS0,  
00054     SPECIFYLEAGUE_UP,   
00055     SPECIFYLEAGUE_DOWN, 
00056     SPECIFYLEAGUE_BACK0,    
00057     SPECIFYLEAGUE_BACK1,
00058     GLOBALRANKINGS_LOGO,
00059     GLOBALRANKINGS_LETTERS,
00060     NULL
00061 };
00062 
00063 static char playername[80];
00064 
00065 typedef struct
00066 {
00067     menuframework_s menu;
00068     menutext_s      banner;
00069     menubitmap_s    framel;
00070     menubitmap_s    framer;
00071     menufield_s     rankname;
00072     menulist_s      list;
00073     menubitmap_s    arrows;
00074     menubitmap_s    up;
00075     menubitmap_s    down;
00076     menubitmap_s    back;
00077     menubitmap_s    grlogo;
00078     menubitmap_s    grletters;
00079 } specifyleague_t;
00080 
00081 static specifyleague_t  s_specifyleague;
00082 
00083 
00084 typedef struct {
00085     char            buff[MAX_LISTBOXWIDTH];
00086     char            leaguename[MAX_LEAGUENAME];
00087 } table_t;
00088 
00089 table_t league_table[MAX_LISTBOXITEMS];
00090 char *leaguename_items[MAX_LISTBOXITEMS];
00091 
00092 
00093 static void SpecifyLeague_GetList()
00094 {
00095     int count = 0;
00096     int i;
00097     /* The Player Name has changed. We need to perform another search */
00098     Q_strncpyz( playername,
00099         s_specifyleague.rankname.field.buffer, 
00100         sizeof(playername) );
00101 
00102     count = trap_CL_UI_RankGetLeauges( playername );
00103 
00104     for(i = 0; i < count; i++)
00105     {
00106         char    s[MAX_LEAGUENAME];
00107         const char  *var;
00108         var = va( "leaguename%i", i+1 );
00109         trap_Cvar_VariableStringBuffer( var, s, sizeof(s) );
00110         Q_strncpyz(league_table[i].leaguename, s, sizeof(league_table[i].leaguename) );
00111         Q_strncpyz(league_table[i].buff, league_table[i].leaguename, sizeof(league_table[i].buff) );
00112     }
00113 
00114     s_specifyleague.list.numitems = count;
00115 }
00116 
00117 /*
00118 =================
00119 SpecifyLeague_Event
00120 =================
00121 */
00122 static void SpecifyLeague_Event( void* ptr, int event )
00123 {
00124     int     id;
00125     id = ((menucommon_s*)ptr)->id;
00126     //if( event != QM_ACTIVATED && id != ID_SPECIFYLEAGUELIST ) {
00127     //  return;
00128     //}
00129 
00130     switch (id)
00131     {
00132         case ID_SPECIFYLEAGUELIST:
00133             if( event == QM_GOTFOCUS ) {
00134                 //ArenaServers_UpdatePicture();
00135             }
00136         break;
00137 
00138         case ID_SPECIFYLEAGUEUP:
00139             if( event == QM_ACTIVATED )
00140                 ScrollList_Key( &s_specifyleague.list, K_UPARROW );
00141         break;      
00142     
00143         case ID_SPECIFYLEAGUEDOWN:
00144             if( event == QM_ACTIVATED )
00145                 ScrollList_Key( &s_specifyleague.list, K_DOWNARROW );
00146         break;
00147             
00148         case ID_SPECIFYLEAGUENAME:
00149             if( (event == QM_LOSTFOCUS) && 
00150                 (Q_strncmp(playername, 
00151                     s_specifyleague.rankname.field.buffer, 
00152                     strlen(s_specifyleague.rankname.field.buffer)) != 0))
00153             {
00154                 SpecifyLeague_GetList();
00155             }
00156         break;
00157 
00158         case ID_SPECIFYLEAGUEBACK:
00159             if( event == QM_ACTIVATED )
00160             {
00161                 trap_Cvar_Set( "sv_leagueName", league_table[s_specifyleague.list.curvalue].leaguename);
00162                 UI_PopMenu();
00163             }
00164         break;
00165     }
00166 }
00167 
00168 /*
00169 =================
00170 SpecifyLeague_MenuInit
00171 =================
00172 */
00173 void SpecifyLeague_MenuInit( void )
00174 {
00175     int i;
00176     // zero set all our globals
00177     memset( &s_specifyleague, 0 ,sizeof(specifyleague_t) );
00178 
00179     SpecifyLeague_Cache();
00180 
00181     s_specifyleague.menu.wrapAround = qtrue;
00182     s_specifyleague.menu.fullscreen = qtrue;
00183 
00184     s_specifyleague.banner.generic.type  = MTYPE_BTEXT;
00185     s_specifyleague.banner.generic.x     = 320;
00186     s_specifyleague.banner.generic.y     = 16;
00187     s_specifyleague.banner.string        = "CHOOSE LEAGUE";
00188     s_specifyleague.banner.color         = color_white;
00189     s_specifyleague.banner.style         = UI_CENTER;
00190 
00191     s_specifyleague.framel.generic.type  = MTYPE_BITMAP;
00192     s_specifyleague.framel.generic.name  = SPECIFYLEAGUE_FRAMEL;
00193     s_specifyleague.framel.generic.flags = QMF_INACTIVE;
00194     s_specifyleague.framel.generic.x     = 0;  
00195     s_specifyleague.framel.generic.y     = 78;
00196     s_specifyleague.framel.width         = 256;
00197     s_specifyleague.framel.height        = 334;
00198 
00199     s_specifyleague.framer.generic.type  = MTYPE_BITMAP;
00200     s_specifyleague.framer.generic.name  = SPECIFYLEAGUE_FRAMER;
00201     s_specifyleague.framer.generic.flags = QMF_INACTIVE;
00202     s_specifyleague.framer.generic.x     = 376;
00203     s_specifyleague.framer.generic.y     = 76;
00204     s_specifyleague.framer.width         = 256;
00205     s_specifyleague.framer.height        = 334;
00206 
00207     s_specifyleague.grlogo.generic.type  = MTYPE_BITMAP;
00208     s_specifyleague.grlogo.generic.name  = GLOBALRANKINGS_LOGO;
00209     s_specifyleague.grlogo.generic.flags = QMF_INACTIVE;
00210     s_specifyleague.grlogo.generic.x     = 0;
00211     s_specifyleague.grlogo.generic.y     = 0;
00212     s_specifyleague.grlogo.width         = 64;
00213     s_specifyleague.grlogo.height        = 128;
00214 
00215     s_specifyleague.rankname.generic.type       = MTYPE_FIELD;
00216     s_specifyleague.rankname.generic.name       = "Player Name:";
00217     s_specifyleague.rankname.generic.flags      = QMF_PULSEIFFOCUS|QMF_SMALLFONT;
00218     s_specifyleague.rankname.generic.callback   = SpecifyLeague_Event;
00219     s_specifyleague.rankname.generic.id         = ID_SPECIFYLEAGUENAME;
00220     s_specifyleague.rankname.generic.x          = 226;
00221     s_specifyleague.rankname.generic.y          = 128;
00222     s_specifyleague.rankname.field.widthInChars = 32;
00223     s_specifyleague.rankname.field.maxchars     = 80;
00224 
00225     s_specifyleague.list.generic.type           = MTYPE_SCROLLLIST;
00226     s_specifyleague.list.generic.flags          = QMF_HIGHLIGHT_IF_FOCUS;
00227     s_specifyleague.list.generic.id             = ID_SPECIFYLEAGUELIST;
00228     s_specifyleague.list.generic.callback       = SpecifyLeague_Event;
00229     s_specifyleague.list.generic.x              = 160;
00230     s_specifyleague.list.generic.y              = 200;
00231     s_specifyleague.list.width                  = MAX_LISTBOXWIDTH;
00232     s_specifyleague.list.height                 = 8;
00233     s_specifyleague.list.itemnames              = (const char **)leaguename_items;
00234     s_specifyleague.list.numitems               = 0;
00235     for( i = 0; i < MAX_LISTBOXITEMS; i++ ) {
00236         league_table[i].buff[0] = 0;
00237         league_table[i].leaguename[0] = 0;
00238         leaguename_items[i] = league_table[i].buff;
00239     }
00240     
00241     s_specifyleague.arrows.generic.type         = MTYPE_BITMAP;
00242     s_specifyleague.arrows.generic.name         = SPECIFYLEAGUE_ARROWS0;
00243     s_specifyleague.arrows.generic.flags        = QMF_LEFT_JUSTIFY|QMF_INACTIVE;
00244     s_specifyleague.arrows.generic.callback     = SpecifyLeague_Event;
00245     s_specifyleague.arrows.generic.x            = 512;
00246     s_specifyleague.arrows.generic.y            = 240-64+16;
00247     s_specifyleague.arrows.width                = 64;
00248     s_specifyleague.arrows.height               = 128;
00249 
00250     s_specifyleague.up.generic.type             = MTYPE_BITMAP;
00251     s_specifyleague.up.generic.flags            = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_MOUSEONLY;
00252     s_specifyleague.up.generic.callback         = SpecifyLeague_Event;
00253     s_specifyleague.up.generic.id               = ID_SPECIFYLEAGUEUP;
00254     s_specifyleague.up.generic.x                = 512;
00255     s_specifyleague.up.generic.y                = 240-64+16;
00256     s_specifyleague.up.width                    = 64;
00257     s_specifyleague.up.height                   = 64;
00258     s_specifyleague.up.focuspic                 = SPECIFYLEAGUE_UP;
00259 
00260     s_specifyleague.down.generic.type           = MTYPE_BITMAP;
00261     s_specifyleague.down.generic.flags          = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_MOUSEONLY;
00262     s_specifyleague.down.generic.callback       = SpecifyLeague_Event;
00263     s_specifyleague.down.generic.id             = ID_SPECIFYLEAGUEDOWN;
00264     s_specifyleague.down.generic.x              = 512;
00265     s_specifyleague.down.generic.y              = 240+16;
00266     s_specifyleague.down.width                  = 64;
00267     s_specifyleague.down.height                 = 64;
00268     s_specifyleague.down.focuspic               = SPECIFYLEAGUE_DOWN;
00269 
00270     s_specifyleague.back.generic.type     = MTYPE_BITMAP;
00271     s_specifyleague.back.generic.name     = SPECIFYLEAGUE_BACK0;
00272     s_specifyleague.back.generic.flags    = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
00273     s_specifyleague.back.generic.callback = SpecifyLeague_Event;
00274     s_specifyleague.back.generic.id       = ID_SPECIFYLEAGUEBACK;
00275     s_specifyleague.back.generic.x        = 0;
00276     s_specifyleague.back.generic.y        = 480-64;
00277     s_specifyleague.back.width            = 128;
00278     s_specifyleague.back.height           = 64;
00279     s_specifyleague.back.focuspic         = SPECIFYLEAGUE_BACK1;
00280 
00281     Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.banner );
00282     Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.framel );
00283     Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.framer );
00284     Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.grlogo );
00285     Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.rankname );
00286     Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.list );
00287     Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.arrows );
00288     Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.up );
00289     Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.down );
00290     Menu_AddItem( &s_specifyleague.menu, &s_specifyleague.back );
00291 
00292 
00293     // initialize any menu variables
00294     Q_strncpyz( s_specifyleague.rankname.field.buffer, 
00295         UI_Cvar_VariableString("name"), 
00296         sizeof(s_specifyleague.rankname.field.buffer) );
00297 
00298     Q_strncpyz( playername,
00299         UI_Cvar_VariableString("name"), 
00300         sizeof(playername) );
00301 
00302     SpecifyLeague_GetList();
00303 }
00304 
00305 /*
00306 =================
00307 SpecifyLeague_Cache
00308 =================
00309 */
00310 void SpecifyLeague_Cache( void )
00311 {
00312     int i;
00313 
00314     // touch all our pics
00315     for (i=0; ;i++)
00316     {
00317         if (!specifyleague_artlist[i])
00318             break;
00319         trap_R_RegisterShaderNoMip(specifyleague_artlist[i]);
00320     }
00321 }
00322 
00323 /*
00324 =================
00325 UI_SpecifyLeagueMenu
00326 =================
00327 */
00328 void UI_SpecifyLeagueMenu( void )
00329 {
00330     SpecifyLeague_MenuInit();
00331     UI_PushMenu( &s_specifyleague.menu );
00332 }
00333 

Generated on Thu Aug 25 12:37:44 2005 for Quake III Arena by  doxygen 1.3.9.1