rpgxef/code/ui/ui_serverinfo.c

445 lines
10 KiB
C
Raw Normal View History

// Copyright (C) 1999-2000 Id Software, Inc.
//
#include "ui_local.h"
#include "ui_logger.h"
2014-11-09 12:53:48 +00:00
enum ui_serverinfoLimits_e {
MAX_VIDEODRIVER_LINES = 20
};
2014-11-09 12:53:48 +00:00
enum ui_serverinfoIDs_e {
ID_ADD = 100,
ID_MAINMENU,
ID_ARROWUP,
ID_ARROWDWN
};
typedef struct
{
menuframework_s menu;
menubitmap_s mainmenu;
menubitmap_s add;
char info[MAX_INFO_STRING];
qhandle_t cornerLower;
2014-11-09 12:53:48 +00:00
int32_t lineCnt;
int32_t lineStartCnt;
menubitmap_s arrowdwn;
menubitmap_s arrowup;
menutext_s key1;
menutext_s key2;
menutext_s key3;
menutext_s key4;
menutext_s key5;
menutext_s key6;
menutext_s key7;
menutext_s key8;
menutext_s key9;
menutext_s key10;
menutext_s key11;
menutext_s key12;
menutext_s key13;
menutext_s key14;
menutext_s key15;
menutext_s key16;
menutext_s key17;
menutext_s key18;
menutext_s key19;
menutext_s key20;
menutext_s value1;
menutext_s value2;
menutext_s value3;
menutext_s value4;
menutext_s value5;
menutext_s value6;
menutext_s value7;
menutext_s value8;
menutext_s value9;
menutext_s value10;
menutext_s value11;
menutext_s value12;
menutext_s value13;
menutext_s value14;
menutext_s value15;
menutext_s value16;
menutext_s value17;
menutext_s value18;
menutext_s value19;
menutext_s value20;
char key[MAX_VIDEODRIVER_LINES][MAX_INFO_KEY];
char value[MAX_VIDEODRIVER_LINES][MAX_INFO_VALUE];
} serverinfo_t;
static serverinfo_t s_serverinfo;
2014-11-09 12:53:48 +00:00
static void ServerInfo_LinePrep(void);
/*
=================
Favorites_Add
Add current server to favorites
=================
*/
2014-11-09 12:53:48 +00:00
void Favorites_Add(void)
{
UI_LogFuncBegin();
char adrstr[128];
char serverbuff[128];
int32_t i;
int32_t best;
2014-11-09 12:53:48 +00:00
trap_Cvar_VariableStringBuffer("cl_currentServerAddress", serverbuff, sizeof(serverbuff));
if (!serverbuff[0]){
UI_LogFuncEnd();
return;
}
best = 0;
2014-11-09 12:53:48 +00:00
for (i = 0; i < MAX_FAVORITESERVERS; i++)
{
2014-11-09 12:53:48 +00:00
trap_Cvar_VariableStringBuffer(va("server%d", i + 1), adrstr, sizeof(adrstr));
if (!Q_stricmp(serverbuff, adrstr))
{
// already in list
UI_LogFuncEnd();
return;
}
2014-11-09 12:53:48 +00:00
// use first empty or non-numeric available slot
2014-11-09 12:53:48 +00:00
if ((adrstr[0] < '0' || adrstr[0] > '9') && !best)
best = i + 1;
}
if (best)
2014-11-09 12:53:48 +00:00
trap_Cvar_Set(va("server%d", best), serverbuff);
UI_LogFuncEnd();
}
/*
=================
ServerInfo_Event
=================
*/
2014-11-09 12:53:48 +00:00
static void ServerInfo_Event(void* ptr, int32_t event)
{
UI_LogFuncBegin();
switch (((menucommon_s*)ptr)->id)
{
2014-11-09 12:53:48 +00:00
case ID_ADD:
if (event != QM_ACTIVATED)
break;
2014-11-09 12:53:48 +00:00
Favorites_Add();
UI_PopMenu();
break;
2014-11-09 12:53:48 +00:00
case ID_MAINMENU:
if (event != QM_ACTIVATED)
break;
2014-11-09 12:53:48 +00:00
UI_PopMenu();
break;
case ID_ARROWUP:
if (event != QM_ACTIVATED)
break;
2014-11-09 12:53:48 +00:00
s_serverinfo.lineStartCnt--;
if (s_serverinfo.lineStartCnt >= 0)
{
ServerInfo_LinePrep();
s_serverinfo.arrowdwn.generic.flags &= ~QMF_HIDDEN;
s_serverinfo.arrowdwn.generic.flags &= ~QMF_INACTIVE;
}
else
{
s_serverinfo.arrowup.generic.flags |= QMF_HIDDEN | QMF_INACTIVE;
s_serverinfo.lineStartCnt = 0;
}
break;
2014-11-09 12:53:48 +00:00
case ID_ARROWDWN:
if (event != QM_ACTIVATED)
break;
2014-11-09 12:53:48 +00:00
s_serverinfo.lineStartCnt++;
if ((s_serverinfo.lineStartCnt + MAX_VIDEODRIVER_LINES) <= s_serverinfo.lineCnt)
{
ServerInfo_LinePrep();
s_serverinfo.arrowup.generic.flags &= ~QMF_HIDDEN;
s_serverinfo.arrowup.generic.flags &= ~QMF_INACTIVE;
}
else
{
s_serverinfo.arrowdwn.generic.flags |= QMF_HIDDEN | QMF_INACTIVE;
s_serverinfo.lineStartCnt = s_serverinfo.lineCnt - MAX_VIDEODRIVER_LINES;
}
break;
}
UI_LogFuncEnd();
}
/*
=================
ServerInfoMenu_Graphics
=================
*/
2014-11-09 12:53:48 +00:00
void ServerInfoMenu_Graphics(void)
{
UI_LogFuncBegin();
// Draw the basic screen layout
UI_MenuFrame2(&s_serverinfo.menu);
2014-11-09 12:53:48 +00:00
trap_R_SetColor(colorTable[CT_LTPURPLE1]);
UI_DrawHandlePic(30, 202, 47, 188, uis.whiteShader);
2014-11-09 12:53:48 +00:00
trap_R_SetColor(colorTable[CT_LTPURPLE1]);
UI_DrawHandlePic(250, 400, 180, 20, uis.whiteShader);
UI_LogFuncEnd();
}
/*
=================
ServerInfo_MenuDraw
=================
*/
2014-11-09 12:53:48 +00:00
static void ServerInfo_MenuDraw(void)
{
UI_LogFuncBegin();
ServerInfoMenu_Graphics();
2014-11-09 12:53:48 +00:00
Menu_Draw(&s_serverinfo.menu);
UI_LogFuncEnd();
}
/*
=================
ServerInfo_LinePrep
=================
*/
2014-11-09 12:53:48 +00:00
static void ServerInfo_LinePrep(void)
{
UI_LogFuncBegin();
int32_t i;
const char *s;
char key[MAX_INFO_KEY];
char value[MAX_INFO_VALUE];
s = s_serverinfo.info;
s_serverinfo.lineCnt = 0;
2014-11-09 12:53:48 +00:00
i = 0;
while (s)
{
2014-11-09 12:53:48 +00:00
Info_NextPair(&s, key, value);
if (!key[0])
{
break;
}
2014-11-09 12:53:48 +00:00
Q_strcat(key, MAX_INFO_KEY, ":");
if ((s_serverinfo.lineStartCnt <= s_serverinfo.lineCnt) && (i < MAX_VIDEODRIVER_LINES))
{
Q_strncpyz(s_serverinfo.key[i], key, sizeof(key));
Q_strncpyz(s_serverinfo.value[i], value, sizeof(value));
i++;
}
s_serverinfo.lineCnt++;
}
UI_LogFuncEnd();
}
/*
=================
ServerInfo_MenuKey
=================
*/
2014-11-09 12:53:48 +00:00
static sfxHandle_t ServerInfo_MenuKey(int32_t key)
{
2014-11-09 12:53:48 +00:00
return (Menu_DefaultKey(&s_serverinfo.menu, key));
}
/*
=================
ServerInfo_Cache
=================
*/
2014-11-09 12:53:48 +00:00
void ServerInfo_Cache(void)
{
s_serverinfo.cornerLower = trap_R_RegisterShaderNoMip("menu/common/corner_ll_47_18.tga");
}
/*
=================
PlayerSettings_MenuInit
=================
*/
2014-11-09 12:53:48 +00:00
static void UI_ServerInfoMenu_Init(void)
{
UI_LogFuncBegin();
2014-11-09 12:53:48 +00:00
int32_t i, x, y;
menutext_s *hold_key, *hold_value;
// zero set all our globals
2014-11-09 12:53:48 +00:00
memset(&s_serverinfo, 0, sizeof(serverinfo_t));
ServerInfo_Cache();
2014-11-09 12:53:48 +00:00
s_serverinfo.menu.draw = ServerInfo_MenuDraw;
s_serverinfo.menu.key = ServerInfo_MenuKey;
s_serverinfo.menu.wrapAround = qtrue;
s_serverinfo.menu.fullscreen = qtrue;
s_serverinfo.menu.nitems = 0;
s_serverinfo.menu.descX = MENU_DESC_X;
s_serverinfo.menu.descY = MENU_DESC_Y;
s_serverinfo.menu.listX = 230;
s_serverinfo.menu.listY = 188;
s_serverinfo.menu.titleX = MENU_TITLE_X;
s_serverinfo.menu.titleY = MENU_TITLE_Y;
s_serverinfo.menu.titleI = MNT_SERVERINFO_TITLE;
s_serverinfo.menu.footNoteEnum = MNT_SERVERINFO;
y = 400;
// Button Data
2014-11-09 12:53:48 +00:00
s_serverinfo.mainmenu.generic.type = MTYPE_BITMAP;
s_serverinfo.mainmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_serverinfo.mainmenu.generic.x = 90;
s_serverinfo.mainmenu.generic.y = 400;
s_serverinfo.mainmenu.generic.name = GRAPHIC_SQUARE;
s_serverinfo.mainmenu.generic.id = ID_MAINMENU;
s_serverinfo.mainmenu.generic.callback = ServerInfo_Event;
s_serverinfo.mainmenu.width = MENU_BUTTON_MED_WIDTH;
s_serverinfo.mainmenu.height = MENU_BUTTON_MED_HEIGHT;
s_serverinfo.mainmenu.color = CT_DKPURPLE1;
s_serverinfo.mainmenu.color2 = CT_LTPURPLE1;
s_serverinfo.mainmenu.textX = MENU_BUTTON_TEXT_X;
s_serverinfo.mainmenu.textY = MENU_BUTTON_TEXT_Y;
s_serverinfo.mainmenu.textEnum = MBT_INGAMEMENU;
s_serverinfo.mainmenu.textcolor = CT_BLACK;
s_serverinfo.mainmenu.textcolor2 = CT_WHITE;
s_serverinfo.add.generic.type = MTYPE_BITMAP;
s_serverinfo.add.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_serverinfo.add.generic.x = 460;
s_serverinfo.add.generic.y = y;
s_serverinfo.add.generic.name = GRAPHIC_SQUARE;
s_serverinfo.add.generic.id = ID_ADD;
s_serverinfo.add.generic.callback = ServerInfo_Event;
s_serverinfo.add.width = MENU_BUTTON_MED_WIDTH;
s_serverinfo.add.height = MENU_BUTTON_MED_HEIGHT;
s_serverinfo.add.color = CT_DKPURPLE1;
s_serverinfo.add.color2 = CT_LTPURPLE1;
s_serverinfo.add.textX = MENU_BUTTON_TEXT_X;
s_serverinfo.add.textY = MENU_BUTTON_TEXT_Y;
s_serverinfo.add.textEnum = MBT_ADDTOFAVS;
s_serverinfo.add.textcolor = CT_BLACK;
s_serverinfo.add.textcolor2 = CT_WHITE;
s_serverinfo.arrowup.generic.type = MTYPE_BITMAP;
s_serverinfo.arrowup.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_serverinfo.arrowup.generic.x = 270;
s_serverinfo.arrowup.generic.y = y + 2;
s_serverinfo.arrowup.generic.name = "menu/common/arrow_up_16.tga";
s_serverinfo.arrowup.generic.id = ID_ARROWUP;
s_serverinfo.arrowup.generic.callback = ServerInfo_Event;
s_serverinfo.arrowup.width = 16;
s_serverinfo.arrowup.height = 16;
s_serverinfo.arrowup.color = CT_DKBLUE1;
s_serverinfo.arrowup.color2 = CT_LTBLUE1;
s_serverinfo.arrowup.textX = 0;
s_serverinfo.arrowup.textY = 0;
s_serverinfo.arrowup.textEnum = MBT_NONE;
s_serverinfo.arrowup.textcolor = CT_BLACK;
s_serverinfo.arrowup.textcolor2 = CT_WHITE;
s_serverinfo.arrowdwn.generic.type = MTYPE_BITMAP;
s_serverinfo.arrowdwn.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_serverinfo.arrowdwn.generic.x = 394;
s_serverinfo.arrowdwn.generic.y = y + 2;
s_serverinfo.arrowdwn.generic.name = "menu/common/arrow_dn_16.tga";
s_serverinfo.arrowdwn.generic.id = ID_ARROWDWN;
s_serverinfo.arrowdwn.generic.callback = ServerInfo_Event;
s_serverinfo.arrowdwn.width = 16;
s_serverinfo.arrowdwn.height = 16;
s_serverinfo.arrowdwn.color = CT_DKBLUE1;
s_serverinfo.arrowdwn.color2 = CT_LTBLUE1;
s_serverinfo.arrowdwn.textX = 0;
s_serverinfo.arrowdwn.textY = 0;
s_serverinfo.arrowdwn.textEnum = MBT_NONE;
s_serverinfo.arrowdwn.textcolor = CT_BLACK;
s_serverinfo.arrowdwn.textcolor2 = CT_WHITE;
Menu_AddItem(&s_serverinfo.menu, (void*)&s_serverinfo.mainmenu);
Menu_AddItem(&s_serverinfo.menu, (void*)&s_serverinfo.add);
Menu_AddItem(&s_serverinfo.menu, (void *)&s_serverinfo.arrowup);
Menu_AddItem(&s_serverinfo.menu, (void *)&s_serverinfo.arrowdwn);
s_serverinfo.lineStartCnt = 0;
hold_key = &s_serverinfo.key1;
hold_value = &s_serverinfo.value1;
y = 62;
x = SCREEN_WIDTH*0.50;
2014-11-09 12:53:48 +00:00
for (i = 0; i < MAX_VIDEODRIVER_LINES; i++)
{
2014-11-09 12:53:48 +00:00
hold_key->generic.x = x - 8;
hold_key->generic.y = y;
hold_key->generic.type = MTYPE_TEXT;
hold_key->generic.flags = UI_RIGHT | UI_SMALLFONT;
hold_key->color = colorTable[CT_LTBLUE2];
hold_key->string = s_serverinfo.key[i];
hold_key->style = UI_RIGHT | UI_SMALLFONT;
hold_value->generic.x = x + 8;
hold_value->generic.y = y;
hold_value->generic.type = MTYPE_TEXT;
hold_value->generic.flags = UI_LEFT | UI_SMALLFONT;
hold_value->color = colorTable[CT_LTGOLD1];
hold_value->string = s_serverinfo.value[i];
hold_value->style = UI_LEFT | UI_SMALLFONT;
Menu_AddItem(&s_serverinfo.menu, (void *)hold_key);
Menu_AddItem(&s_serverinfo.menu, (void *)hold_value);
y += SMALLCHAR_HEIGHT;
++hold_key;
++hold_value;
}
2014-11-09 12:53:48 +00:00
if (trap_Cvar_VariableValue("sv_running"))
{
s_serverinfo.add.generic.flags |= QMF_GRAYED;
}
2014-11-09 12:53:48 +00:00
trap_GetConfigString(CS_SERVERINFO, s_serverinfo.info, MAX_INFO_STRING);
ServerInfo_LinePrep();
2014-11-09 12:53:48 +00:00
s_serverinfo.arrowup.generic.flags |= QMF_HIDDEN | QMF_INACTIVE;
UI_LogFuncEnd();
}
/*
=================
UI_ServerInfoMenu
=================
*/
2014-11-09 12:53:48 +00:00
void UI_ServerInfoMenu(void)
{
UI_LogFuncBegin();
UI_ServerInfoMenu_Init();
2014-11-09 12:53:48 +00:00
UI_PushMenu(&s_serverinfo.menu);
UI_LogFuncEnd();
}