rpgxef/code/ui/ui_confirm.c
Walter Julius Hennecke a39565b783 Integrated RPG-X2 rpgxEF edition into the rpgxEF repo
... not quite content with where the project files lie but it is ok for
now.
... compiling works fine so far (only tested mingw32 right now)
2012-08-04 12:54:37 +02:00

331 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 );
}