rpgxef/code/ui/ui_cdkey.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

494 lines
13 KiB
C

// Copyright (C) 1999-2000 Id Software, Inc.
//
/*
=======================================================================
CD KEY MENU
=======================================================================
*/
#include "ui_local.h"
#define ID_CDKEY 10
#define ID_ACCEPT 11
#define ID_ACCEPTLATER 12
typedef struct {
menuframework_s menu;
menufield_s cdkey;
menubitmap_s accept;
menubitmap_s acceptlater;
int keyResult;
qhandle_t halfround;
int fromMenu;
} cdkeyMenuInfo_t;
static cdkeyMenuInfo_t cdkeyMenuInfo;
/*
=================
UI_CDKeyMenu_PreValidateKey
=================
*/
static int UI_CDKeyMenu_PreValidateKey( const char *key )
{
int cnt, i;
// With dashes can't be more than 21 long
if( strlen( key ) > 22 )
{
return -1;
}
cnt = 0;
for(i = 0; i < strlen( key ) && key[i]; i++)
{
if ( ( key[i] >= '0' && key[i] <= '9' )
|| ( key[i] >= 'a' && key[i] <= 'z' )
|| ( key[i] >= 'A' && key[i] <= 'Z' )
)
{
cnt++;
}
}
// Count without dashes (Should be 18 but 0's at the end weren't printed on the documentation so we're allowing 16 and adding the 0's in the keycheck)
if ((cnt < 16) || (cnt > 18))
// if (cnt != 18)
{
return -1;
}
return 0;
}
/*
===============
UI_CDKeyMenu_Event
===============
*/
static void UI_CDKeyMenu_Event( void *ptr, int event )
{
if( event != QM_ACTIVATED )
{
return;
}
switch( ((menucommon_s*)ptr)->id )
{
case ID_ACCEPT:
cdkeyMenuInfo.keyResult = UI_CDKeyMenu_PreValidateKey( cdkeyMenuInfo.cdkey.field.buffer);
if (cdkeyMenuInfo.keyResult == 0)
{//passed quick check, now check for real
if(trap_SetCDKey( cdkeyMenuInfo.cdkey.field.buffer ))
{//success
trap_Cvar_Set( "ui_cdkeychecked", "1" );
if (cdkeyMenuInfo.fromMenu)
{
UI_PopMenu();
}
}
else
{//failed real check
cdkeyMenuInfo.keyResult = -1;
trap_S_StartLocalSound( menu_buzz_sound, CHAN_MENU1); // WRONG!!!! sound
}
}
else if (cdkeyMenuInfo.keyResult < 0)
{//failed ui quick check
trap_S_StartLocalSound( menu_buzz_sound, CHAN_MENU1); // WRONG!!!! sound
}
break;
case ID_ACCEPTLATER:
if (cdkeyMenuInfo.keyResult != 0) { //not valid or not entered
trap_Cvar_Set( "ui_cdkeychecked", "-1" );
}
UI_PopMenu();
break;
}
}
/*
=================
UI_CDKeyMenu_DrawKey
=================
*/
static void UI_CDKeyMenu_DrawKey( void *self )
{
menufield_s *f;
qboolean focus;
int style;
char c;
float *color;
int x, y;
f = (menufield_s *)self;
focus = (f->generic.parent->cursor == f->generic.menuPosition);
style = UI_LEFT;
if( focus )
{
color = colorTable[CT_LTGOLD1];
}
else
{
color = colorTable[CT_DKGOLD1];
}
x = cdkeyMenuInfo.cdkey.generic.x;
y = cdkeyMenuInfo.cdkey.generic.y;
UI_FillRect( x, y, cdkeyMenuInfo.cdkey.field.widthInChars * SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, colorTable[CT_BLACK] );
UI_FillRect( x, y, cdkeyMenuInfo.cdkey.field.widthInChars * SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, listbar_color );
UI_DrawString( x, y, f->field.buffer, style, color, qtrue );
// draw cursor if we have focus
if( focus )
{
if ( trap_Key_GetOverstrikeMode() )
{
c = 11;
}
else
{
c = 10;
}
style &= ~UI_PULSE;
style |= UI_BLINK;
UI_DrawChar( x + f->field.cursor * SMALLCHAR_WIDTH, y, c, style, color_white );
}
}
/*
=================
CDKeyMenu_Graphics
=================
*/
void CDKeyMenu_Graphics (void)
{
int x,y;
// Draw the basic screen layout
UI_MenuFrame(&cdkeyMenuInfo.menu);
trap_R_SetColor( colorTable[CT_LTBROWN1]);
UI_DrawHandlePic(30,203, 47, 186, uis.whiteShader); // Middle left line of frame
trap_R_SetColor( colorTable[CT_DKPURPLE1]);
UI_DrawHandlePic( 246, 238, 197, 24, uis.whiteShader);
UI_DrawHandlePic( 227, 238, -16, 32, cdkeyMenuInfo.halfround); // Left round
UI_DrawHandlePic( 446, 238, 16, 32, cdkeyMenuInfo.halfround); // Right round
UI_DrawProportionalString( 74, 66, "557",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 84, "2344",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 188, "89-35",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 206, "32906",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 395, "30-1789",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
x = 344;
y = 279;
if ( cdkeyMenuInfo.keyResult == 0 )
{
UI_DrawProportionalString( x, y, menu_normal_text[MNT_VALID_CDKEY], UI_CENTER|UI_SMALLFONT, colorTable[CT_WHITE] );
}
else if( cdkeyMenuInfo.keyResult == 1 )
{
UI_DrawProportionalString( x, y, menu_normal_text[MNT_ENTER_CDKEY], UI_CENTER|UI_SMALLFONT, colorTable[CT_LTGOLD1] );
}
else
{
UI_DrawProportionalString( x, y, menu_normal_text[MNT_CDKEY_INVALID], UI_CENTER|UI_SMALLFONT, colorTable[CT_RED] );
}
UI_Setup_MenuButtons();
}
/*
=================
CDKey_MenuDraw
=================
*/
static void CDKey_MenuDraw (void)
{
CDKeyMenu_Graphics();
Menu_Draw( &cdkeyMenuInfo.menu );
}
/*
===============
UI_CDKeyMenu_Init
===============
*/
static void UI_CDKeyMenu_Init( void )
{
memset( &cdkeyMenuInfo, 0, sizeof(cdkeyMenuInfo) );
UI_CDKeyMenu_Cache();
cdkeyMenuInfo.menu.wrapAround = qtrue;
cdkeyMenuInfo.menu.fullscreen = qtrue;
cdkeyMenuInfo.menu.draw = CDKey_MenuDraw;
cdkeyMenuInfo.menu.descX = MENU_DESC_X;
cdkeyMenuInfo.menu.descY = MENU_DESC_Y;
cdkeyMenuInfo.menu.titleX = MENU_TITLE_X;
cdkeyMenuInfo.menu.titleY = MENU_TITLE_Y;
cdkeyMenuInfo.menu.titleI = MNT_CDKEYMENU_TITLE;
cdkeyMenuInfo.menu.footNoteEnum = MNT_CDKEY;
cdkeyMenuInfo.cdkey.generic.type = MTYPE_FIELD;
cdkeyMenuInfo.cdkey.generic.flags = QMF_UPPERCASE;
cdkeyMenuInfo.cdkey.generic.x = 256;
cdkeyMenuInfo.cdkey.generic.y = 242;
cdkeyMenuInfo.cdkey.field.style = UI_SMALLFONT;
cdkeyMenuInfo.cdkey.field.widthInChars = 22;
cdkeyMenuInfo.cdkey.field.maxchars = 22;
cdkeyMenuInfo.cdkey.generic.ownerdraw = UI_CDKeyMenu_DrawKey;
cdkeyMenuInfo.cdkey.field.titleEnum = MNT_CDKEY;
cdkeyMenuInfo.cdkey.field.titlecolor = CT_LTGOLD1;
cdkeyMenuInfo.cdkey.field.textcolor = CT_DKGOLD1;
cdkeyMenuInfo.cdkey.field.textcolor2 = CT_LTGOLD1;
cdkeyMenuInfo.accept.generic.type = MTYPE_BITMAP;
cdkeyMenuInfo.accept.generic.name = GRAPHIC_SQUARE;
cdkeyMenuInfo.accept.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
cdkeyMenuInfo.accept.generic.id = ID_ACCEPT;
cdkeyMenuInfo.accept.generic.callback = UI_CDKeyMenu_Event;
cdkeyMenuInfo.accept.generic.x = 279;
cdkeyMenuInfo.accept.generic.y = 391;
cdkeyMenuInfo.accept.width = MENU_BUTTON_MED_WIDTH;
cdkeyMenuInfo.accept.height = 42;
cdkeyMenuInfo.accept.color = CT_DKPURPLE1;
cdkeyMenuInfo.accept.color2 = CT_LTPURPLE1;
cdkeyMenuInfo.accept.textX = MENU_BUTTON_TEXT_X;
cdkeyMenuInfo.accept.textY = MENU_BUTTON_TEXT_Y;
cdkeyMenuInfo.accept.textEnum = MBT_ACCEPT;
cdkeyMenuInfo.accept.textcolor = CT_BLACK;
cdkeyMenuInfo.accept.textcolor2 = CT_WHITE;
SetupMenu_TopButtons(&cdkeyMenuInfo.menu,MENU_CDKEY,NULL);
Menu_AddItem( &cdkeyMenuInfo.menu, &cdkeyMenuInfo.cdkey );
Menu_AddItem( &cdkeyMenuInfo.menu, &cdkeyMenuInfo.accept );
if (ui_cdkeychecked.integer == 1) {
cdkeyMenuInfo.keyResult = 0; //already got a good one once
} else {
cdkeyMenuInfo.keyResult = 1;
}
}
/*
=================
UI_CDKeyMenu_Cache
=================
*/
void UI_CDKeyMenu_Cache( void )
{
cdkeyMenuInfo.halfround = trap_R_RegisterShaderNoMip( "menu/common/halfround_r_24.tga" );
}
/*
===============
UI_CDKeyMenu
===============
*/
void UI_CDKeyMenu( void )
{
UI_CDKeyMenu_Init();
UI_PushMenu( &cdkeyMenuInfo.menu );
}
/*
=================
M_CDKey2Menu_Key
=================
*/
sfxHandle_t M_CDKey2Menu_Key (int key)
{
if (key == K_ESCAPE)
{
return(0);
}
return ( Menu_DefaultKey( &cdkeyMenuInfo.menu, key ) );
}
/*
=================
CDKeyMenu2_Graphics
=================
*/
void CDKeyMenu2_Graphics (void)
{
int x,y;
// Draw the basic screen layout
UI_MenuFrame2(&cdkeyMenuInfo.menu);
trap_R_SetColor( colorTable[CT_LTBROWN1]);
UI_DrawHandlePic(30,203, 47, 186, uis.whiteShader); // Middle left line of frame
// Background for CD Key data
trap_R_SetColor( colorTable[CT_DKPURPLE1]);
UI_DrawHandlePic( 246, 168, 197, 24, uis.whiteShader);
UI_DrawHandlePic( 227, 168, -16, 32, cdkeyMenuInfo.halfround); // Left round
UI_DrawHandlePic( 446, 168, 16, 32, cdkeyMenuInfo.halfround); // Right round
UI_DrawProportionalString( 74, 36, "755",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 132, "4423",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 188, "35-89",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 206, "60932",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 395, "1789-30",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
x = 344;
y = 228;
if ( cdkeyMenuInfo.keyResult == 0 )
{
UI_DrawProportionalString( x, y, menu_normal_text[MNT_VALID_CDKEY], UI_CENTER|UI_SMALLFONT, colorTable[CT_WHITE] );
}
else if( cdkeyMenuInfo.keyResult == 1 )
{
UI_DrawProportionalString( x, y, menu_normal_text[MNT_ENTER_CDKEY], UI_CENTER|UI_SMALLFONT, colorTable[CT_LTGOLD1] );
}
else
{
UI_DrawProportionalString( x, y, menu_normal_text[MNT_CDKEY_INVALID], UI_CENTER|UI_SMALLFONT, colorTable[CT_RED] );
}
}
/*
=================
CDKey2_MenuDraw
=================
*/
static void CDKey2_MenuDraw (void)
{
CDKeyMenu2_Graphics();
Menu_Draw( &cdkeyMenuInfo.menu );
}
/*
===============
UI_CDKeyMenu2_Init
===============
*/
static void UI_CDKeyMenu2_Init( void )
{//initial first time menu
memset( &cdkeyMenuInfo, 0, sizeof(cdkeyMenuInfo) );
cdkeyMenuInfo.fromMenu = 1;
UI_CDKeyMenu_Cache();
cdkeyMenuInfo.menu.wrapAround = qtrue;
cdkeyMenuInfo.menu.fullscreen = qtrue;
cdkeyMenuInfo.menu.draw = CDKey2_MenuDraw;
cdkeyMenuInfo.menu.key = M_CDKey2Menu_Key;
cdkeyMenuInfo.menu.descX = MENU_DESC_X;
cdkeyMenuInfo.menu.descY = MENU_DESC_Y;
cdkeyMenuInfo.menu.titleX = MENU_TITLE_X;
cdkeyMenuInfo.menu.titleY = MENU_TITLE_Y;
cdkeyMenuInfo.menu.titleI = MNT_CDKEYMENU_TITLE;
cdkeyMenuInfo.menu.footNoteEnum = MNT_CDKEY;
cdkeyMenuInfo.cdkey.generic.type = MTYPE_FIELD;
cdkeyMenuInfo.cdkey.generic.flags = QMF_UPPERCASE;
cdkeyMenuInfo.cdkey.generic.x = 260;
cdkeyMenuInfo.cdkey.generic.y = 172;
cdkeyMenuInfo.cdkey.field.style = UI_SMALLFONT;
cdkeyMenuInfo.cdkey.field.widthInChars = 22;
cdkeyMenuInfo.cdkey.field.maxchars = 22;
cdkeyMenuInfo.cdkey.generic.ownerdraw = UI_CDKeyMenu_DrawKey;
cdkeyMenuInfo.cdkey.field.titleEnum = MNT_CDKEY;
cdkeyMenuInfo.cdkey.field.titlecolor = CT_LTGOLD1;
cdkeyMenuInfo.cdkey.field.textcolor = CT_DKGOLD1;
cdkeyMenuInfo.cdkey.field.textcolor2 = CT_LTGOLD1;
cdkeyMenuInfo.accept.generic.type = MTYPE_BITMAP;
cdkeyMenuInfo.accept.generic.name = GRAPHIC_SQUARE;
cdkeyMenuInfo.accept.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
cdkeyMenuInfo.accept.generic.id = ID_ACCEPT;
cdkeyMenuInfo.accept.generic.callback = UI_CDKeyMenu_Event;
cdkeyMenuInfo.accept.generic.x = 96;
cdkeyMenuInfo.accept.generic.y = 347;
cdkeyMenuInfo.accept.width = MENU_BUTTON_MED_WIDTH;
cdkeyMenuInfo.accept.height = 42;
cdkeyMenuInfo.accept.color = CT_DKPURPLE1;
cdkeyMenuInfo.accept.color2 = CT_LTPURPLE1;
cdkeyMenuInfo.accept.textX = MENU_BUTTON_TEXT_X;
cdkeyMenuInfo.accept.textY = MENU_BUTTON_TEXT_Y;
cdkeyMenuInfo.accept.textEnum = MBT_ACCEPT;
cdkeyMenuInfo.accept.textcolor = CT_BLACK;
cdkeyMenuInfo.accept.textcolor2 = CT_WHITE;
cdkeyMenuInfo.acceptlater.generic.type = MTYPE_BITMAP;
cdkeyMenuInfo.acceptlater.generic.name = GRAPHIC_SQUARE;
cdkeyMenuInfo.acceptlater.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
cdkeyMenuInfo.acceptlater.generic.id = ID_ACCEPTLATER;
cdkeyMenuInfo.acceptlater.generic.callback = UI_CDKeyMenu_Event;
cdkeyMenuInfo.acceptlater.generic.x = 482;
cdkeyMenuInfo.acceptlater.generic.y = 347;
cdkeyMenuInfo.acceptlater.width = MENU_BUTTON_MED_WIDTH + 20;
cdkeyMenuInfo.acceptlater.height = 42;
cdkeyMenuInfo.acceptlater.color = CT_DKPURPLE1;
cdkeyMenuInfo.acceptlater.color2 = CT_LTPURPLE1;
cdkeyMenuInfo.acceptlater.textX = MENU_BUTTON_TEXT_X;
cdkeyMenuInfo.acceptlater.textY = MENU_BUTTON_TEXT_Y;
cdkeyMenuInfo.acceptlater.textEnum = MBT_CHECKKEYLATER;
cdkeyMenuInfo.acceptlater.textcolor = CT_BLACK;
cdkeyMenuInfo.acceptlater.textcolor2 = CT_WHITE;
Menu_AddItem( &cdkeyMenuInfo.menu, &cdkeyMenuInfo.cdkey );
Menu_AddItem( &cdkeyMenuInfo.menu, &cdkeyMenuInfo.accept );
Menu_AddItem( &cdkeyMenuInfo.menu, &cdkeyMenuInfo.acceptlater );
if (ui_cdkeychecked.integer == 1) {
cdkeyMenuInfo.keyResult = 0; //already got a good one once
} else {
cdkeyMenuInfo.keyResult = 1;
}
}
/*
===============
UI_CDKeyMenu
===============
*/
void UI_CDKeyMenu2( void )
{
UI_CDKeyMenu2_Init();
UI_PushMenu( &cdkeyMenuInfo.menu );
}
/*
===============
UI_CDKeyMenu_f
===============
*/
void UI_CDKeyMenu_f( void )
{
UI_CDKeyMenu2();
}