~ubuntu-branches/ubuntu/hardy/openarena/hardy-backports

« back to all changes in this revision

Viewing changes to code/q3_ui/ui_serverinfo.c

  • Committer: Bazaar Package Importer
  • Author(s): Bruno "Fuddl" Kleinert
  • Date: 2007-01-20 12:28:09 UTC
  • Revision ID: james.westby@ubuntu.com-20070120122809-2yza5ojt7nqiyiam
Tags: upstream-0.6.0
ImportĀ upstreamĀ versionĀ 0.6.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
#define SERVERINFO_FRAMEL       "menu/art/frame2_l"
 
26
#define SERVERINFO_FRAMER       "menu/art/frame1_r"
 
27
#define SERVERINFO_BACK0        "menu/art/back_0"
 
28
#define SERVERINFO_BACK1        "menu/art/back_1"
 
29
 
 
30
static char* serverinfo_artlist[] =
 
31
{
 
32
        SERVERINFO_FRAMEL,      
 
33
        SERVERINFO_FRAMER,
 
34
        SERVERINFO_BACK0,
 
35
        SERVERINFO_BACK1,
 
36
        NULL
 
37
};
 
38
 
 
39
#define ID_ADD   100
 
40
#define ID_BACK  101
 
41
 
 
42
typedef struct
 
43
{
 
44
        menuframework_s menu;
 
45
        menutext_s              banner;
 
46
        menubitmap_s    framel;
 
47
        menubitmap_s    framer;
 
48
        menubitmap_s    back;
 
49
        menutext_s              add;
 
50
        char                    info[MAX_INFO_STRING];
 
51
        int                             numlines;
 
52
} serverinfo_t;
 
53
 
 
54
static serverinfo_t     s_serverinfo;
 
55
 
 
56
 
 
57
/*
 
58
=================
 
59
Favorites_Add
 
60
 
 
61
Add current server to favorites
 
62
=================
 
63
*/
 
64
void Favorites_Add( void )
 
65
{
 
66
        char    adrstr[128];
 
67
        char    serverbuff[128];
 
68
        int             i;
 
69
        int             best;
 
70
 
 
71
        trap_Cvar_VariableStringBuffer( "cl_currentServerAddress", serverbuff, sizeof(serverbuff) );
 
72
        if (!serverbuff[0])
 
73
                return;
 
74
 
 
75
        best = 0;
 
76
        for (i=0; i<MAX_FAVORITESERVERS; i++)
 
77
        {
 
78
                trap_Cvar_VariableStringBuffer( va("server%d",i+1), adrstr, sizeof(adrstr) );
 
79
                if (!Q_stricmp(serverbuff,adrstr))
 
80
                {
 
81
                        // already in list
 
82
                        return;
 
83
                }
 
84
                
 
85
                // use first empty or non-numeric available slot
 
86
                if ((adrstr[0]  < '0' || adrstr[0] > '9' ) && !best)
 
87
                        best = i+1;
 
88
        }
 
89
 
 
90
        if (best)
 
91
                trap_Cvar_Set( va("server%d",best), serverbuff);
 
92
}
 
93
 
 
94
 
 
95
/*
 
96
=================
 
97
ServerInfo_Event
 
98
=================
 
99
*/
 
100
static void ServerInfo_Event( void* ptr, int event )
 
101
{
 
102
        switch (((menucommon_s*)ptr)->id)
 
103
        {
 
104
                case ID_ADD:
 
105
                        if (event != QM_ACTIVATED)
 
106
                                break;
 
107
                
 
108
                        Favorites_Add();
 
109
                        UI_PopMenu();
 
110
                        break;
 
111
 
 
112
                case ID_BACK:
 
113
                        if (event != QM_ACTIVATED)
 
114
                                break;
 
115
 
 
116
                        UI_PopMenu();
 
117
                        break;
 
118
        }
 
119
}
 
120
 
 
121
/*
 
122
=================
 
123
ServerInfo_MenuDraw
 
124
=================
 
125
*/
 
126
static void ServerInfo_MenuDraw( void )
 
127
{
 
128
        const char              *s;
 
129
        char                    key[MAX_INFO_KEY];
 
130
        char                    value[MAX_INFO_VALUE];
 
131
        int                             y;
 
132
 
 
133
        y = SCREEN_HEIGHT/2 - s_serverinfo.numlines*(SMALLCHAR_HEIGHT)/2 - 20;
 
134
        s = s_serverinfo.info;
 
135
        while ( s ) {
 
136
                Info_NextPair( &s, key, value );
 
137
                if ( !key[0] ) {
 
138
                        break;
 
139
                }
 
140
 
 
141
                Q_strcat( key, MAX_INFO_KEY, ":" ); 
 
142
 
 
143
                UI_DrawString(SCREEN_WIDTH*0.50 - 8,y,key,UI_RIGHT|UI_SMALLFONT,color_red);
 
144
                UI_DrawString(SCREEN_WIDTH*0.50 + 8,y,value,UI_LEFT|UI_SMALLFONT,text_color_normal);
 
145
 
 
146
                y += SMALLCHAR_HEIGHT;
 
147
        }
 
148
 
 
149
        Menu_Draw( &s_serverinfo.menu );
 
150
}
 
151
 
 
152
/*
 
153
=================
 
154
ServerInfo_MenuKey
 
155
=================
 
156
*/
 
157
static sfxHandle_t ServerInfo_MenuKey( int key )
 
158
{
 
159
        return ( Menu_DefaultKey( &s_serverinfo.menu, key ) );
 
160
}
 
161
 
 
162
/*
 
163
=================
 
164
ServerInfo_Cache
 
165
=================
 
166
*/
 
167
void ServerInfo_Cache( void )
 
168
{
 
169
        int     i;
 
170
 
 
171
        // touch all our pics
 
172
        for (i=0; ;i++)
 
173
        {
 
174
                if (!serverinfo_artlist[i])
 
175
                        break;
 
176
                trap_R_RegisterShaderNoMip(serverinfo_artlist[i]);
 
177
        }
 
178
}
 
179
 
 
180
/*
 
181
=================
 
182
UI_ServerInfoMenu
 
183
=================
 
184
*/
 
185
void UI_ServerInfoMenu( void )
 
186
{
 
187
        const char              *s;
 
188
        char                    key[MAX_INFO_KEY];
 
189
        char                    value[MAX_INFO_VALUE];
 
190
 
 
191
        // zero set all our globals
 
192
        memset( &s_serverinfo, 0 ,sizeof(serverinfo_t) );
 
193
 
 
194
        ServerInfo_Cache();
 
195
 
 
196
        s_serverinfo.menu.draw       = ServerInfo_MenuDraw;
 
197
        s_serverinfo.menu.key        = ServerInfo_MenuKey;
 
198
        s_serverinfo.menu.wrapAround = qtrue;
 
199
        s_serverinfo.menu.fullscreen = qtrue;
 
200
 
 
201
        s_serverinfo.banner.generic.type  = MTYPE_BTEXT;
 
202
        s_serverinfo.banner.generic.x     = 320;
 
203
        s_serverinfo.banner.generic.y     = 16;
 
204
        s_serverinfo.banner.string                = "SERVER INFO";
 
205
        s_serverinfo.banner.color             = color_white;
 
206
        s_serverinfo.banner.style             = UI_CENTER;
 
207
 
 
208
        s_serverinfo.framel.generic.type  = MTYPE_BITMAP;
 
209
        s_serverinfo.framel.generic.name  = SERVERINFO_FRAMEL;
 
210
        s_serverinfo.framel.generic.flags = QMF_INACTIVE;
 
211
        s_serverinfo.framel.generic.x     = 0;  
 
212
        s_serverinfo.framel.generic.y     = 78;
 
213
        s_serverinfo.framel.width             = 256;
 
214
        s_serverinfo.framel.height        = 329;
 
215
 
 
216
        s_serverinfo.framer.generic.type  = MTYPE_BITMAP;
 
217
        s_serverinfo.framer.generic.name  = SERVERINFO_FRAMER;
 
218
        s_serverinfo.framer.generic.flags = QMF_INACTIVE;
 
219
        s_serverinfo.framer.generic.x     = 376;
 
220
        s_serverinfo.framer.generic.y     = 76;
 
221
        s_serverinfo.framer.width             = 256;
 
222
        s_serverinfo.framer.height        = 334;
 
223
 
 
224
        s_serverinfo.add.generic.type     = MTYPE_PTEXT;
 
225
        s_serverinfo.add.generic.flags    = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
 
226
        s_serverinfo.add.generic.callback = ServerInfo_Event;
 
227
        s_serverinfo.add.generic.id           = ID_ADD;
 
228
        s_serverinfo.add.generic.x                = 320;
 
229
        s_serverinfo.add.generic.y                = 371;
 
230
        s_serverinfo.add.string                   = "ADD TO FAVORITES";
 
231
        s_serverinfo.add.style                    = UI_CENTER|UI_SMALLFONT;
 
232
        s_serverinfo.add.color                    =     color_red;
 
233
        if( trap_Cvar_VariableValue( "sv_running" ) ) {
 
234
                s_serverinfo.add.generic.flags |= QMF_GRAYED;
 
235
        }
 
236
 
 
237
        s_serverinfo.back.generic.type     = MTYPE_BITMAP;
 
238
        s_serverinfo.back.generic.name     = SERVERINFO_BACK0;
 
239
        s_serverinfo.back.generic.flags    = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
 
240
        s_serverinfo.back.generic.callback = ServerInfo_Event;
 
241
        s_serverinfo.back.generic.id       = ID_BACK;
 
242
        s_serverinfo.back.generic.x                = 0;
 
243
        s_serverinfo.back.generic.y                = 480-64;
 
244
        s_serverinfo.back.width                    = 128;
 
245
        s_serverinfo.back.height                   = 64;
 
246
        s_serverinfo.back.focuspic         = SERVERINFO_BACK1;
 
247
 
 
248
        trap_GetConfigString( CS_SERVERINFO, s_serverinfo.info, MAX_INFO_STRING );
 
249
 
 
250
        s_serverinfo.numlines = 0;
 
251
        s = s_serverinfo.info;
 
252
        while ( s ) {
 
253
                Info_NextPair( &s, key, value );
 
254
                if ( !key[0] ) {
 
255
                        break;
 
256
                }
 
257
                s_serverinfo.numlines++;
 
258
        }
 
259
 
 
260
        if (s_serverinfo.numlines > 16)
 
261
                s_serverinfo.numlines = 16;
 
262
 
 
263
        Menu_AddItem( &s_serverinfo.menu, (void*) &s_serverinfo.banner );
 
264
        Menu_AddItem( &s_serverinfo.menu, (void*) &s_serverinfo.framel );
 
265
        Menu_AddItem( &s_serverinfo.menu, (void*) &s_serverinfo.framer );
 
266
        Menu_AddItem( &s_serverinfo.menu, (void*) &s_serverinfo.add );
 
267
        Menu_AddItem( &s_serverinfo.menu, (void*) &s_serverinfo.back );
 
268
 
 
269
        UI_PushMenu( &s_serverinfo.menu );
 
270
}
 
271
 
 
272