mirror of
https://github.com/UberGames/RPG-X2.git
synced 2024-11-24 21:32:36 +00:00
332 lines
8.1 KiB
C
332 lines
8.1 KiB
C
|
// Copyright (C) 1999-2000 Id Software, Inc.
|
||
|
//
|
||
|
/*
|
||
|
=======================================================================
|
||
|
|
||
|
CONFIRMATION MENU
|
||
|
|
||
|
=======================================================================
|
||
|
*/
|
||
|
|
||
|
|
||
|
#include "ui_local.h"
|
||
|
|
||
|
|
||
|
#define ID_CONFIRM_NO 10
|
||
|
#define ID_CONFIRM_YES 11
|
||
|
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
menuframework_s menu;
|
||
|
|
||
|
menubitmap_s no;
|
||
|
menubitmap_s yes;
|
||
|
|
||
|
/*const*/ char * question;
|
||
|
void (*draw)( void );
|
||
|
void (*action)( qboolean result );
|
||
|
qhandle_t cornerPic;
|
||
|
} confirmMenu_t;
|
||
|
|
||
|
|
||
|
static confirmMenu_t s_confirm;
|
||
|
|
||
|
|
||
|
/*
|
||
|
=================
|
||
|
ConfirmMenu_Event
|
||
|
=================
|
||
|
*/
|
||
|
static void ConfirmMenu_Event( void* ptr, int event )
|
||
|
{
|
||
|
qboolean result;
|
||
|
|
||
|
if( event != QM_ACTIVATED )
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
UI_PopMenu();
|
||
|
|
||
|
if( ((menucommon_s*)ptr)->id == ID_CONFIRM_NO )
|
||
|
{
|
||
|
result = qfalse;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
result = qtrue;
|
||
|
}
|
||
|
|
||
|
if( s_confirm.action )
|
||
|
{
|
||
|
s_confirm.action( result );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
=================
|
||
|
ConfirmMenu_Key
|
||
|
=================
|
||
|
*/
|
||
|
static sfxHandle_t ConfirmMenu_Key( int key )
|
||
|
{
|
||
|
switch ( key )
|
||
|
{
|
||
|
case K_KP_LEFTARROW:
|
||
|
case K_LEFTARROW:
|
||
|
case K_KP_RIGHTARROW:
|
||
|
case K_RIGHTARROW:
|
||
|
key = K_TAB;
|
||
|
break;
|
||
|
|
||
|
case 'n':
|
||
|
case 'N':
|
||
|
ConfirmMenu_Event( &s_confirm.no, QM_ACTIVATED );
|
||
|
break;
|
||
|
|
||
|
case 'y':
|
||
|
case 'Y':
|
||
|
ConfirmMenu_Event( &s_confirm.yes, QM_ACTIVATED );
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return Menu_DefaultKey( &s_confirm.menu, key );
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
=================
|
||
|
ConfirmMenu_Draw
|
||
|
=================
|
||
|
*/
|
||
|
static void ConfirmMenu_Draw( void )
|
||
|
{
|
||
|
UI_MenuFrame(&s_confirm.menu);
|
||
|
|
||
|
// End of upper line
|
||
|
trap_R_SetColor( colorTable[CT_LTBROWN1]);
|
||
|
UI_DrawHandlePic( 482, 136, MENU_BUTTON_MED_WIDTH - 22, MENU_BUTTON_MED_HEIGHT, uis.whiteShader);
|
||
|
UI_DrawHandlePic( 460 + MENU_BUTTON_MED_WIDTH -6 , 136, -19, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd); //right
|
||
|
|
||
|
trap_R_SetColor( colorTable[CT_DKBLUE2]);
|
||
|
UI_DrawHandlePic( 30, 203, 47, 186, uis.whiteShader); // Left hand column
|
||
|
|
||
|
UI_DrawProportionalString( 74, 66, "286",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
|
||
|
UI_DrawProportionalString( 74, 84, "386",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
|
||
|
UI_DrawProportionalString( 74, 188, "486",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
|
||
|
UI_DrawProportionalString( 74, 207, "8088",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
|
||
|
UI_DrawProportionalString( 74, 395, "12799",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
|
||
|
|
||
|
|
||
|
trap_R_SetColor( colorTable[CT_LTBLUE1]);
|
||
|
UI_DrawHandlePic( 132, 142, 128, -64, s_confirm.cornerPic); // Top Left corner
|
||
|
UI_DrawHandlePic( 132, 352, 128, 64, s_confirm.cornerPic); // Bottom Left corner
|
||
|
|
||
|
UI_DrawHandlePic( 429, 142, -128, -64, s_confirm.cornerPic); // Top Right corner
|
||
|
UI_DrawHandlePic( 429, 352, -128, 64, s_confirm.cornerPic); // Bottom Right corner
|
||
|
|
||
|
UI_DrawHandlePic(145,175, 395, 18, uis.whiteShader); // Top
|
||
|
UI_DrawHandlePic(132,193, 47, 175, uis.whiteShader); // Left side
|
||
|
UI_DrawHandlePic(510,193, 47, 175, uis.whiteShader); // Right side
|
||
|
UI_DrawHandlePic(147,365, 65, 18, uis.whiteShader); // Bottom Left
|
||
|
UI_DrawHandlePic(477,365, 65, 18, uis.whiteShader); // Bottom Right
|
||
|
|
||
|
//TiM - if message is a long one, break it up and display it on separate lines
|
||
|
if ( strlen( s_confirm.question ) < 45 )
|
||
|
{
|
||
|
UI_DrawProportionalString( 345, 269, s_confirm.question, UI_SMALLFONT | UI_CENTER, color_red );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
int numLines;
|
||
|
char *message;
|
||
|
char buffer[46];
|
||
|
int height;
|
||
|
int x, y;
|
||
|
int i, j;
|
||
|
int spacePoint=45;
|
||
|
|
||
|
message = s_confirm.question;
|
||
|
|
||
|
numLines = strlen( message ) / 45 + 1;
|
||
|
height = (SMALLCHAR_HEIGHT + 4) * numLines;
|
||
|
x = 345;
|
||
|
y = 277 - (height * 0.5); //269
|
||
|
|
||
|
//Com_Printf( S_COLOR_RED "numLines: %i\n", numLines );
|
||
|
|
||
|
for ( i = 0; i < numLines; i++ )
|
||
|
{
|
||
|
if ( !message )
|
||
|
break;
|
||
|
|
||
|
if (strlen(message) >= 45 )
|
||
|
{
|
||
|
for ( j = 1; j <= 45; j++ ) {
|
||
|
if ( message[j] == ' ' )
|
||
|
spacePoint = j;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
spacePoint = strlen(message);
|
||
|
|
||
|
Q_strncpyz( buffer, message, spacePoint + 1 );
|
||
|
//Com_Printf( S_COLOR_RED "%s\n", buffer );
|
||
|
|
||
|
UI_DrawProportionalString( 345, y, buffer, UI_SMALLFONT | UI_CENTER, color_red );
|
||
|
|
||
|
y += SMALLCHAR_HEIGHT + 4;
|
||
|
message += spacePoint;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Menu_Draw( &s_confirm.menu );
|
||
|
|
||
|
if( s_confirm.draw )
|
||
|
{
|
||
|
s_confirm.draw();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
=================
|
||
|
ConfirmMenu_Cache
|
||
|
=================
|
||
|
*/
|
||
|
void ConfirmMenu_Cache( void )
|
||
|
{
|
||
|
s_confirm.cornerPic = trap_R_RegisterShaderNoMip("menu/common/corner_ll_47_18.tga");
|
||
|
}
|
||
|
|
||
|
static const char* TranslateQuestion(const char *question) {
|
||
|
static char translatedQuestion[128];
|
||
|
|
||
|
if (!strcmp(question, "Unpure client detected. Invalid .PK3 files referenced!")) {
|
||
|
return menu_normal_text[MNT_UNPURECLIENT];
|
||
|
}
|
||
|
|
||
|
if (!strcmp(question, "Cannot validate pure client!")) {
|
||
|
return menu_normal_text[MNT_CANNOTVALIDATE];
|
||
|
}
|
||
|
|
||
|
if (!strcmp(question, "kicked")) {
|
||
|
return menu_normal_text[MNT_KICKED];
|
||
|
}
|
||
|
|
||
|
if (!strcmp(question, "timed out")) {
|
||
|
return menu_normal_text[MNT_TIMEDOUT];
|
||
|
}
|
||
|
|
||
|
if (!strcmp(question, "server shut down")) {
|
||
|
return menu_normal_text[MNT_SERVERSHUTDOWN];
|
||
|
}
|
||
|
|
||
|
if (!strcmp(question, "disconnected")) {
|
||
|
return menu_normal_text[MNT_DISCONNECTED];
|
||
|
}
|
||
|
|
||
|
if (!strcmp(question, "broken download")) {
|
||
|
return menu_normal_text[MNT_BROKENDOWNLOAD];
|
||
|
}
|
||
|
|
||
|
if (!strcmp(question, "Server command overflow")) {
|
||
|
return menu_normal_text[MNT_SERVERCOMMANDOVERFLOW];
|
||
|
}
|
||
|
|
||
|
if (!strcmp(question, "Lost reliable commands")) {
|
||
|
return menu_normal_text[MNT_LOSTRELIABLECOMMANDS];
|
||
|
}
|
||
|
|
||
|
Q_strncpyz(translatedQuestion, question, sizeof(translatedQuestion));
|
||
|
return translatedQuestion;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
=================
|
||
|
UI_ConfirmMenu
|
||
|
=================
|
||
|
*/
|
||
|
void UI_ConfirmMenu( const char *question, void (*draw)( void ), void (*action)( qboolean result ) )
|
||
|
{
|
||
|
// uiClientState_t cstate;
|
||
|
|
||
|
// zero set all our globals
|
||
|
memset( &s_confirm, 0, sizeof(s_confirm) );
|
||
|
|
||
|
ConfirmMenu_Cache();
|
||
|
|
||
|
Mouse_Show();
|
||
|
|
||
|
s_confirm.question = (char *)TranslateQuestion(question);
|
||
|
s_confirm.draw = draw;
|
||
|
s_confirm.action = action;
|
||
|
|
||
|
s_confirm.menu.draw = ConfirmMenu_Draw;
|
||
|
s_confirm.menu.key = ConfirmMenu_Key;
|
||
|
s_confirm.menu.wrapAround = qtrue;
|
||
|
s_confirm.menu.fullscreen = qtrue;
|
||
|
s_confirm.menu.descX = MENU_DESC_X;
|
||
|
s_confirm.menu.descY = MENU_DESC_Y;
|
||
|
s_confirm.menu.titleX = MENU_TITLE_X;
|
||
|
s_confirm.menu.titleY = MENU_TITLE_Y;
|
||
|
s_confirm.menu.titleI = MNT_CONFIRMATIONMENU_TITLE;
|
||
|
s_confirm.menu.footNoteEnum = MNT_CONFIRMATION;
|
||
|
|
||
|
|
||
|
/* trap_GetClientState( &cstate );
|
||
|
if ( cstate.connState >= CA_CONNECTED )
|
||
|
{
|
||
|
s_confirm.menu.fullscreen = qfalse;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
s_confirm.menu.fullscreen = qtrue;
|
||
|
}
|
||
|
*/
|
||
|
s_confirm.yes.generic.type = MTYPE_BITMAP;
|
||
|
s_confirm.yes.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
||
|
s_confirm.yes.generic.x = 215;
|
||
|
s_confirm.yes.generic.y = 365;
|
||
|
s_confirm.yes.generic.callback = ConfirmMenu_Event;
|
||
|
s_confirm.yes.generic.id = ID_CONFIRM_YES;
|
||
|
s_confirm.yes.generic.name = GRAPHIC_SQUARE;
|
||
|
s_confirm.yes.width = MENU_BUTTON_MED_WIDTH;
|
||
|
s_confirm.yes.height = MENU_BUTTON_MED_HEIGHT;
|
||
|
s_confirm.yes.color = CT_DKPURPLE1;
|
||
|
s_confirm.yes.color2 = CT_LTPURPLE1;
|
||
|
s_confirm.yes.textX = MENU_BUTTON_TEXT_X;
|
||
|
s_confirm.yes.textY = MENU_BUTTON_TEXT_Y;
|
||
|
s_confirm.yes.textEnum = MBT_GENERIC_YES;
|
||
|
s_confirm.yes.textcolor = CT_BLACK;
|
||
|
s_confirm.yes.textcolor2 = CT_WHITE;
|
||
|
|
||
|
s_confirm.no.generic.type = MTYPE_BITMAP;
|
||
|
s_confirm.no.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
||
|
s_confirm.no.generic.x = 371;
|
||
|
s_confirm.no.generic.y = 365;
|
||
|
s_confirm.no.generic.callback = ConfirmMenu_Event;
|
||
|
s_confirm.no.generic.id = ID_CONFIRM_NO;
|
||
|
s_confirm.no.generic.name = GRAPHIC_SQUARE;
|
||
|
s_confirm.no.width = 103;
|
||
|
s_confirm.no.height = MENU_BUTTON_MED_HEIGHT;
|
||
|
s_confirm.no.color = CT_DKPURPLE1;
|
||
|
s_confirm.no.color2 = CT_LTPURPLE1;
|
||
|
s_confirm.no.textX = MENU_BUTTON_TEXT_X;
|
||
|
s_confirm.no.textY = MENU_BUTTON_TEXT_Y;
|
||
|
s_confirm.no.textEnum = MBT_GENERIC_NO;
|
||
|
s_confirm.no.textcolor = CT_BLACK;
|
||
|
s_confirm.no.textcolor2 = CT_WHITE;
|
||
|
|
||
|
Menu_AddItem( &s_confirm.menu, &s_confirm.yes );
|
||
|
if (action) {
|
||
|
Menu_AddItem( &s_confirm.menu, &s_confirm.no );
|
||
|
}
|
||
|
|
||
|
UI_PushMenu( &s_confirm.menu );
|
||
|
|
||
|
Menu_SetCursorToItem( &s_confirm.menu, &s_confirm.no );
|
||
|
}
|