mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8837 3b4a5df2-a311-0410-b5c6-a8a6f20db521
658 lines
18 KiB
C++
658 lines
18 KiB
C++
/**
|
|
* @file
|
|
* @author Flugente (bears-pit.com)
|
|
*/
|
|
|
|
#include "MilitiaInterface.h"
|
|
|
|
#include "Font.h"
|
|
#include "laptop.h"
|
|
#include "Cursors.h"
|
|
#include "Utilities.h"
|
|
#include "vobject.h"
|
|
#include "WCheck.h"
|
|
#include "line.h"
|
|
#include "WordWrap.h"
|
|
#include "input.h" // for gfLeftButtonState
|
|
#include "personnel.h"
|
|
#include "Animation Data.h"
|
|
#include "Text.h"
|
|
#include "MilitiaWebsite.h"
|
|
#include "Game Clock.h"
|
|
#include "Militia Control.h"
|
|
#include "Town Militia.h"
|
|
#include "Interface Items.h"
|
|
#include "Interface.h" // for DIRTYLEVEL2
|
|
|
|
extern BOOLEAN gfMilitiaWebsiteMainRedraw;
|
|
|
|
UINT32 guTraitImages = 0;
|
|
|
|
MilitiaServiceRecordTable::MilitiaServiceRecordTable( )
|
|
: BaseTable( )
|
|
{
|
|
}
|
|
|
|
void
|
|
MilitiaServiceRecordTable::Init( UINT16 sX, UINT16 sY, UINT16 sX_End, UINT16 sY_End )
|
|
{
|
|
SetColorLine( Get16BPPColor( FROMRGB( 128, 128, 128 ) ) );
|
|
SetColorLineShadow( Get16BPPColor( FROMRGB( 255, 255, 255 ) ) );
|
|
SetColorMarked( Get16BPPColor( FROMRGB( 200, 169, 87 ) ) );
|
|
SetColorHighLight( Get16BPPColor( FROMRGB( 235, 222, 171 ) ) );
|
|
|
|
BaseTable::Init( sX, sY, sX_End, sY_End );
|
|
}
|
|
|
|
void
|
|
MilitiaServiceRecordTable::Create( UINT16 sX, UINT16 sY, UINT16 sX_End, UINT16 sY_End )
|
|
{
|
|
Destroy( );
|
|
|
|
Init( sX, sY, sX_End, sY_End );
|
|
|
|
TestTableTemplate<2>::getInstance( ).Create( sX + 4, sY + 14, sX_End, sY_End );
|
|
RegisterMemberThingy( &TestTableTemplate<2>::getInstance( ) );
|
|
}
|
|
|
|
void
|
|
MilitiaServiceRecordTable::Destroy( )
|
|
{
|
|
if ( !IsInit( ) )
|
|
return;
|
|
|
|
BaseTable::Destroy( );
|
|
}
|
|
|
|
void
|
|
MilitiaServiceRecordTable::Display( )
|
|
{
|
|
if ( !IsInit( ) )
|
|
return;
|
|
|
|
DestroyMouseRegions( );
|
|
|
|
SetFontShadow( NO_SHADOW );
|
|
|
|
CHAR16 sText[800];
|
|
swprintf( sText, L"" );
|
|
UINT16 usPosX = GetX( ) + 10;
|
|
UINT16 usPosY = GetY( ) + 10;
|
|
|
|
MILITIA militia;
|
|
if ( GetMilitia( mMilitiaId, &militia ) )
|
|
{
|
|
TestTableTemplate<2>::getInstance( ).ClearColumnDataProvider( );
|
|
|
|
ColumnDataProvider namcol( szIdividualMilitiaWebsiteText[0] );
|
|
namcol.SetMethodString( OperationText );
|
|
namcol.SetNumberOfEntries( militia.history.size( ) );
|
|
namcol.SetCallBackType( ColumnDataProvider::CDP_MILITIADETAIL );
|
|
|
|
TestTableTemplate<2>::getInstance( ).AddColumnDataProvider( namcol );
|
|
|
|
TestTableTemplate<2>::getInstance( ).CalcRows( );
|
|
|
|
BaseTable::Display();
|
|
}
|
|
}
|
|
|
|
void
|
|
MilitiaServiceRecordTable::SetRefresh( )
|
|
{
|
|
gfMilitiaWebsiteMainRedraw = TRUE;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////
|
|
MilitiaPersonalDataTable::MilitiaPersonalDataTable( )
|
|
: TestPanel( )
|
|
, mButtonFire(-1)
|
|
, mButtonFireCreated(FALSE)
|
|
{
|
|
}
|
|
|
|
void
|
|
MilitiaPersonalDataTable::Init( UINT16 sX, UINT16 sY, UINT16 sX_End, UINT16 sY_End )
|
|
{
|
|
SetColorLine( Get16BPPColor( FROMRGB( 128, 128, 128 ) ) );
|
|
SetColorLineShadow( Get16BPPColor( FROMRGB( 255, 255, 255 ) ) );
|
|
SetColorMarked( Get16BPPColor( FROMRGB( 200, 169, 87 ) ) );
|
|
SetColorHighLight( Get16BPPColor( FROMRGB( 235, 222, 171 ) ) );
|
|
|
|
TestPanel::Init( sX, sY, sX_End, sY_End );
|
|
}
|
|
|
|
////// callback for buttons ////////
|
|
void
|
|
MilitiaPersonalDataTableFireConfirmationCallback( UINT8 val )
|
|
{
|
|
if ( val == MSG_BOX_RETURN_YES )
|
|
{
|
|
MILITIA militia;
|
|
if ( GetMilitia( gusCurrentMilitia, &militia ) )
|
|
{
|
|
if ( !(militia.flagmask & (MILITIAFLAG_DEAD | MILITIAFLAG_FIRED | MILITIAFLAG_DESERTION )) )
|
|
{
|
|
militia.Fire();
|
|
|
|
UpdateMilitia( militia );
|
|
|
|
StrategicRemoveMilitiaFromSector( SECTORX( militia.sector ), SECTORY( militia.sector ), militia.militiarank, 1 );
|
|
|
|
ResetMilitia();
|
|
|
|
militiaindividualmainwidget.SetRefresh();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void MilitiaPersonalDataTableFireCallback( GUI_BUTTON *btn, INT32 reason )
|
|
{
|
|
if ( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
MILITIA militia;
|
|
if ( GetMilitia( gusCurrentMilitia, &militia ) )
|
|
{
|
|
if ( !(militia.flagmask & (MILITIAFLAG_DEAD | MILITIAFLAG_FIRED | MILITIAFLAG_DESERTION )) )
|
|
{
|
|
CHAR16 sString[256];
|
|
swprintf( sString, szIdividualMilitiaWebsiteText[1], militia.GetName( ) );
|
|
|
|
DoLowerScreenIndependantMessageBox( sString, MSG_BOX_FLAG_YESNO, MilitiaPersonalDataTableFireConfirmationCallback );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
////// callback for buttons ////////
|
|
|
|
void
|
|
MilitiaPersonalDataTable::Create( UINT16 sX, UINT16 sY, UINT16 sX_End, UINT16 sY_End )
|
|
{
|
|
Destroy( );
|
|
|
|
Init( sX, sY, sX_End, sY_End );
|
|
}
|
|
|
|
void
|
|
MilitiaPersonalDataTable::Destroy( )
|
|
{
|
|
if ( !IsInit( ) )
|
|
return;
|
|
|
|
if ( mButtonFireCreated )
|
|
{
|
|
RemoveButton( mButtonFire );
|
|
mButtonFireCreated = FALSE;
|
|
}
|
|
|
|
TestPanel::Destroy( );
|
|
}
|
|
|
|
void
|
|
MilitiaPersonalDataTable::Display( )
|
|
{
|
|
if ( !IsInit( ) )
|
|
return;
|
|
|
|
DestroyMouseRegions( );
|
|
|
|
MILITIA militia;
|
|
if ( GetMilitia( mMilitiaId, &militia ) )
|
|
{
|
|
CHAR16 sText[800];
|
|
swprintf( sText, L"" );
|
|
UINT16 usPosX = GetX( ) + 10;
|
|
UINT16 usPosY = GetY( ) + 10;
|
|
|
|
// show image of militia with correct visuals
|
|
{
|
|
VOBJECT_DESC VObjectDesc;
|
|
HVOBJECT hHandle;
|
|
UINT32 uiGraphicHandle;
|
|
BOOLEAN success = TRUE;
|
|
|
|
// load it
|
|
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
|
|
|
|
// Pick images based on body type
|
|
switch ( militia.bodytype )
|
|
{
|
|
case REGMALE: FilenameForBPP( "Laptop\\IMPSmallMercImages.sti", VObjectDesc.ImageFile ); break;
|
|
case BIGMALE: FilenameForBPP( "Laptop\\IMPBigMercImages.sti", VObjectDesc.ImageFile ); break;
|
|
case STOCKYMALE: FilenameForBPP( "Laptop\\IMPBigMercImages.sti", VObjectDesc.ImageFile ); break;
|
|
case REGFEMALE: FilenameForBPP( "Laptop\\IMPFemaleMercImages.sti", VObjectDesc.ImageFile ); break;
|
|
default:
|
|
success = FALSE;
|
|
break;
|
|
}
|
|
|
|
// only show images if they can be loaded
|
|
if ( success )
|
|
{
|
|
// safety check if loaded
|
|
CHECKV( AddVideoObject( &VObjectDesc, &uiGraphicHandle ) );
|
|
|
|
// Get it
|
|
GetVideoObject( &hHandle, uiGraphicHandle );
|
|
|
|
if ( hHandle )
|
|
{
|
|
UINT8 vest = GREENVEST;
|
|
UINT8 pants = BEIGEPANTS;
|
|
if ( militia.militiarank == REGULAR_MILITIA)
|
|
vest = JEANVEST;
|
|
else if ( militia.militiarank == ELITE_MILITIA)
|
|
vest = BLUEVEST;
|
|
|
|
// show background first
|
|
BltVideoObject( FRAME_BUFFER, hHandle, 0, usPosX, usPosY, VO_BLT_SRCTRANSPARENCY, NULL );
|
|
// show skin (1 - 4)
|
|
BltVideoObject( FRAME_BUFFER, hHandle, (militia.skin + 1), usPosX, usPosY, VO_BLT_SRCTRANSPARENCY, NULL );
|
|
// show head (5 - 9)
|
|
BltVideoObject( FRAME_BUFFER, hHandle, (militia.hair + 5), usPosX, usPosY, VO_BLT_SRCTRANSPARENCY, NULL );
|
|
// show vest (10 - 20)
|
|
BltVideoObject( FRAME_BUFFER, hHandle, (vest + 10), usPosX, usPosY, VO_BLT_SRCTRANSPARENCY, NULL );
|
|
// show pants (21 - 26)
|
|
BltVideoObject( FRAME_BUFFER, hHandle, (pants + 21), usPosX, usPosY, VO_BLT_SRCTRANSPARENCY, NULL );
|
|
|
|
DeleteVideoObjectFromIndex( uiGraphicHandle );
|
|
}
|
|
}
|
|
}
|
|
|
|
usPosX += 120;
|
|
|
|
SetFontShadow( NO_SHADOW );
|
|
|
|
if ( militia.flagmask & MILITIAFLAG_DEAD )
|
|
{
|
|
swprintf( sText, szIdividualMilitiaWebsiteText[5] );
|
|
DrawTextToScreen( sText, usPosX, usPosY + 5, GetWidth( ), FONT12ARIAL, FONT_MCOLOR_RED, FONT_MCOLOR_BLACK, FALSE, 0 );
|
|
usPosY += 20;
|
|
}
|
|
else if ( militia.flagmask & MILITIAFLAG_FIRED )
|
|
{
|
|
swprintf( sText, szIdividualMilitiaWebsiteText[6] );
|
|
DrawTextToScreen( sText, usPosX, usPosY + 5, GetWidth( ), FONT12ARIAL, FONT_MCOLOR_DKGRAY, FONT_MCOLOR_BLACK, FALSE, 0 );
|
|
usPosY += 20;
|
|
}
|
|
else if ( militia.flagmask & MILITIAFLAG_DESERTION )
|
|
{
|
|
swprintf( sText, szIdividualMilitiaWebsiteText[19] );
|
|
DrawTextToScreen( sText, usPosX, usPosY + 5, GetWidth(), FONT12ARIAL, FONT_MCOLOR_DKGRAY, FONT_MCOLOR_BLACK, FALSE, 0 );
|
|
usPosY += 20;
|
|
}
|
|
else
|
|
{
|
|
swprintf( sText, szIdividualMilitiaWebsiteText[7] );
|
|
DrawTextToScreen( sText, usPosX, usPosY + 5, GetWidth( ), FONT12ARIAL, FONT_MCOLOR_LTGREEN, FONT_MCOLOR_BLACK, FALSE, 0 );
|
|
usPosY += 20;
|
|
}
|
|
|
|
if ( gGameExternalOptions.fIndividualMilitia_ManageHealth )
|
|
{
|
|
swprintf( sText, szIdividualMilitiaWebsiteText[15], militia.healthratio );
|
|
|
|
DrawTextToScreen( sText, usPosX, usPosY + 5, GetWidth( ), FONT12ARIAL, 2, FONT_MCOLOR_BLACK, FALSE, 0 );
|
|
usPosY += 20;
|
|
}
|
|
|
|
swprintf( sText, szIdividualMilitiaWebsiteText[3], militia.GetWage( ), militia.age );
|
|
DrawTextToScreen( sText, usPosX, usPosY + 5, GetWidth( ), FONT12ARIAL, 2, FONT_MCOLOR_BLACK, FALSE, 0 );
|
|
usPosY += 20;
|
|
|
|
swprintf( sText, szIdividualMilitiaWebsiteText[4], militia.kills, militia.assists );
|
|
DrawTextToScreen( sText, usPosX, usPosY + 5, GetWidth( ), FONT12ARIAL, 2, FONT_MCOLOR_BLACK, FALSE, 0 );
|
|
usPosY += 20;
|
|
|
|
usPosY += 4;
|
|
usPosX -= 2;
|
|
|
|
// button for firing this guy
|
|
if ( mButtonFireCreated )
|
|
{
|
|
RemoveButton( mButtonFire );
|
|
mButtonFireCreated = FALSE;
|
|
}
|
|
|
|
// if we can still fire this guy, set up the button
|
|
if ( !(militia.flagmask & (MILITIAFLAG_DEAD | MILITIAFLAG_FIRED | MILITIAFLAG_DESERTION )) )
|
|
{
|
|
// we can only fire someone in sectors we control that are not in combat
|
|
// if we've managed to misplace a militia into an impassable sector (HOW???), we can at least fire them, too
|
|
if ( SectorOursAndPeaceful( SECTORX( militia.sector ), SECTORY( militia.sector ), 0 )
|
|
|| SectorIsImpassable( militia.sector ) )
|
|
{
|
|
mButtonFire = CreateTextButton( szIdividualMilitiaWebsiteText[8], FONT12ARIAL, FONT_YELLOW, FONT_BLACK, BUTTON_USE_DEFAULT,
|
|
usPosX, usPosY, 120, 20, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK, MilitiaPersonalDataTableFireCallback );
|
|
|
|
mButtonFireCreated = TRUE;
|
|
}
|
|
else
|
|
{
|
|
mButtonFire = CreateTextButton( szIdividualMilitiaWebsiteText[8], FONT12ARIAL, FONT_RED, FONT_BLACK, BUTTON_USE_DEFAULT,
|
|
usPosX, usPosY, 120, 20, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK, NULL );
|
|
|
|
mButtonFireCreated = TRUE;
|
|
}
|
|
}
|
|
|
|
SetFontShadow( NO_SHADOW );
|
|
}
|
|
|
|
BaseTable::Display( );
|
|
}
|
|
|
|
void
|
|
MilitiaPersonalDataTable::SetRefresh( )
|
|
{
|
|
gfMilitiaWebsiteMainRedraw = TRUE;
|
|
}
|
|
|
|
void
|
|
MilitiaPersonalDataTable::DestroyMouseRegions( )
|
|
{
|
|
if ( !IsInit( ) )
|
|
return;
|
|
|
|
if ( mButtonFireCreated )
|
|
{
|
|
RemoveButton( mButtonFire );
|
|
mButtonFireCreated = FALSE;
|
|
}
|
|
|
|
BaseTable::DestroyMouseRegions( );
|
|
}
|
|
|
|
/////////////////////////////////////////////
|
|
MilitiaPersonalInventoryTable::MilitiaPersonalInventoryTable( )
|
|
: TestPanel( )
|
|
{
|
|
}
|
|
|
|
void
|
|
MilitiaPersonalInventoryTable::Init( UINT16 sX, UINT16 sY, UINT16 sX_End, UINT16 sY_End )
|
|
{
|
|
SetColorLine( Get16BPPColor( FROMRGB( 128, 128, 128 ) ) );
|
|
SetColorLineShadow( Get16BPPColor( FROMRGB( 255, 255, 255 ) ) );
|
|
SetColorMarked( Get16BPPColor( FROMRGB( 200, 169, 87 ) ) );
|
|
SetColorHighLight( Get16BPPColor( FROMRGB( 235, 222, 171 ) ) );
|
|
|
|
TestPanel::Init( sX, sY, sX_End, sY_End );
|
|
}
|
|
|
|
void
|
|
MilitiaPersonalInventoryTable::Create( UINT16 sX, UINT16 sY, UINT16 sX_End, UINT16 sY_End )
|
|
{
|
|
Destroy( );
|
|
|
|
Init( sX, sY, sX_End, sY_End );
|
|
}
|
|
|
|
void
|
|
MilitiaPersonalInventoryTable::Destroy( )
|
|
{
|
|
if ( !IsInit( ) )
|
|
return;
|
|
|
|
TestPanel::Destroy( );
|
|
}
|
|
|
|
void
|
|
MilitiaPersonalInventoryTable::Display( )
|
|
{
|
|
if ( !IsInit( ) )
|
|
return;
|
|
|
|
DestroyMouseRegions( );
|
|
|
|
SetFontShadow( NO_SHADOW );
|
|
|
|
CHAR16 sText[800];
|
|
swprintf( sText, L"" );
|
|
UINT16 usPosX = GetX( ) + 10;
|
|
UINT16 usPosY = GetY( ) + 10;
|
|
|
|
SOLDIERTYPE* pSoldier = GetUsedSoldierToIndividualMilitia( mMilitiaId );
|
|
|
|
if ( pSoldier )
|
|
{
|
|
SetFontShadow( DEFAULT_SHADOW );
|
|
|
|
for ( UINT8 pocketIndex = HELMETPOS; pocketIndex < NUM_INV_SLOTS; ++pocketIndex )
|
|
{
|
|
OBJECTTYPE* pObj = &(pSoldier)->inv[pocketIndex];
|
|
|
|
if ( pObj == NULL || pObj->ubNumberOfObjects == NOTHING || pObj->usItem == NOTHING )
|
|
continue;
|
|
|
|
ColorFillVideoSurfaceArea( FRAME_BUFFER, usPosX, usPosY, usPosX + 60, usPosY + 23, Get16BPPColor( FROMRGB( 255, 255, 255 ) ) );
|
|
|
|
// do not use the pSoldier-pointer, as the displays look ugly (and some images might not be initialised here)
|
|
INVRenderItem( FRAME_BUFFER, NULL, pObj, usPosX, usPosY, 60, 23, DIRTYLEVEL2, NULL, (UINT8)0, FALSE, 0, 0 );
|
|
|
|
usPosY += 25;
|
|
|
|
if ( usPosY > GetY() + GetHeight() - 27 )
|
|
{
|
|
usPosX += 62;
|
|
usPosY = GetY( ) + 10;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MILITIA militia;
|
|
if( GetMilitia( mMilitiaId, &militia ) )
|
|
{
|
|
swprintf( sText, szIdividualMilitiaWebsiteText[16], militia.GetName( ) );
|
|
DrawTextToScreen( sText, usPosX, usPosY + 5, GetWidth( ), FONT12ARIAL, 2, FONT_MCOLOR_BLACK, FALSE, 0 );
|
|
usPosY += 20;
|
|
}
|
|
}
|
|
|
|
SetFontShadow( NO_SHADOW );
|
|
|
|
BaseTable::Display( );
|
|
}
|
|
|
|
void
|
|
MilitiaPersonalInventoryTable::SetRefresh( )
|
|
{
|
|
gfMilitiaWebsiteMainRedraw = TRUE;
|
|
}
|
|
|
|
void
|
|
MilitiaPersonalInventoryTable::DestroyMouseRegions( )
|
|
{
|
|
if ( !IsInit( ) )
|
|
return;
|
|
|
|
BaseTable::DestroyMouseRegions( );
|
|
}
|
|
|
|
/////
|
|
extern void GetFaceData( UINT32 aNum, UINT32& arImageLib, UINT16& arImage );
|
|
//extern void ItemImage( UINT32 usItem, UINT32& arImageLib, UINT16& arImage );
|
|
extern STR16 ItemLongNamegetter( UINT32 aNum );
|
|
|
|
MilitiaInidividualMainWidget::MilitiaInidividualMainWidget( )
|
|
: TestPanel( ),
|
|
mMilitiaId( 0 )
|
|
{
|
|
}
|
|
|
|
void
|
|
MilitiaInidividualMainWidget::Init( UINT16 sX, UINT16 sY, UINT16 sX_End, UINT16 sY_End )
|
|
{
|
|
SetColorLine( Get16BPPColor( FROMRGB( 128, 128, 128 ) ) );
|
|
SetColorLineShadow( Get16BPPColor( FROMRGB( 255, 255, 255 ) ) );
|
|
SetColorMarked( Get16BPPColor( FROMRGB( 200, 169, 87 ) ) );
|
|
SetColorHighLight( Get16BPPColor( FROMRGB( 235, 222, 171 ) ) );
|
|
|
|
BaseTable::Init( sX, sY, sX_End, sY_End );
|
|
}
|
|
|
|
void
|
|
MilitiaInidividualMainWidget::Create( UINT16 sX, UINT16 sY, UINT16 sX_End, UINT16 sY_End )
|
|
{
|
|
Destroy( );
|
|
|
|
Init( sX, sY, sX_End, sY_End );
|
|
|
|
TabBoxTemplate<1>::getInstance( ).Create( sX, sY + 30, sX_End, sY_End );
|
|
|
|
mPersonalDataPanel.Create( sX, sY + 50, sX_End, sY_End );
|
|
mPersonalDataPanel.SetName( szIdividualMilitiaWebsiteText[9] );
|
|
mPersonalDataPanel.SetColorLine( Get16BPPColor( FROMRGB( 128, 128, 128 ) ) );
|
|
mPersonalDataPanel.SetColorLineShadow( Get16BPPColor( FROMRGB( 255, 255, 255 ) ) );
|
|
mPersonalDataPanel.SetColorMarked( Get16BPPColor( FROMRGB( 200, 169, 87 ) ) );
|
|
mPersonalDataPanel.SetColorHighLight( Get16BPPColor( FROMRGB( 235, 222, 171 ) ) );
|
|
mPersonalData.Create( sX, sY + 50, sX_End, sY_End );
|
|
mPersonalDataPanel.RegisterMemberThingy( &mPersonalData );
|
|
|
|
mServiceRecordPanel.Create( sX, sY + 50, sX_End, sY_End );
|
|
mServiceRecordPanel.SetName( szIdividualMilitiaWebsiteText[10] );
|
|
mServiceRecordPanel.SetColorLine( Get16BPPColor( FROMRGB( 128, 128, 128 ) ) );
|
|
mServiceRecordPanel.SetColorLineShadow( Get16BPPColor( FROMRGB( 255, 255, 255 ) ) );
|
|
mServiceRecordPanel.SetColorMarked( Get16BPPColor( FROMRGB( 200, 169, 87 ) ) );
|
|
mServiceRecordPanel.SetColorHighLight( Get16BPPColor( FROMRGB( 235, 222, 171 ) ) );
|
|
mServiceRecord.Create( sX, sY + 50, sX_End, sY_End );
|
|
mServiceRecordPanel.RegisterMemberThingy( &mServiceRecord );
|
|
|
|
mItemPanel.Create( sX, sY + 50, sX_End, sY_End );
|
|
mItemPanel.SetName( szIdividualMilitiaWebsiteText[11] );
|
|
mItemPanel.SetColorLine( Get16BPPColor( FROMRGB( 128, 128, 128 ) ) );
|
|
mItemPanel.SetColorLineShadow( Get16BPPColor( FROMRGB( 255, 255, 255 ) ) );
|
|
mItemPanel.SetColorMarked( Get16BPPColor( FROMRGB( 200, 169, 87 ) ) );
|
|
mItemPanel.SetColorHighLight( Get16BPPColor( FROMRGB( 235, 222, 171 ) ) );
|
|
mItemsTable.Create( sX, sY + 50, sX_End, sY_End );
|
|
mItemPanel.RegisterMemberThingy( &mItemsTable );
|
|
|
|
TabBoxTemplate<1>::getInstance( ).RegisterMemberThingy( &mPersonalDataPanel );
|
|
TabBoxTemplate<1>::getInstance( ).RegisterMemberThingy( &mServiceRecordPanel );
|
|
TabBoxTemplate<1>::getInstance( ).RegisterMemberThingy( &mItemPanel );
|
|
|
|
RegisterMemberThingy( &TabBoxTemplate<1>::getInstance( ) );
|
|
}
|
|
|
|
template<> void TabBoxTemplate<1>::SetRefresh( ) { gfMilitiaWebsiteMainRedraw = TRUE; }
|
|
|
|
void
|
|
MilitiaInidividualMainWidget::Destroy( )
|
|
{
|
|
if ( !IsInit( ) )
|
|
return;
|
|
|
|
BaseTable::Destroy( );
|
|
}
|
|
|
|
void
|
|
MilitiaInidividualMainWidget::Display( )
|
|
{
|
|
if ( !IsInit( ) )
|
|
return;
|
|
|
|
DestroyMouseRegions( );
|
|
|
|
TestPanel::Display( );
|
|
|
|
SetFontShadow( NO_SHADOW );
|
|
|
|
MILITIA militia;
|
|
if ( GetMilitia( mMilitiaId, &militia ) )
|
|
{
|
|
CHAR16 sText[800];
|
|
swprintf( sText, L"" );
|
|
UINT16 usPosX = GetX( );
|
|
UINT16 usPosY = GetY( );
|
|
|
|
// face
|
|
UINT32 imagelib = 0;
|
|
UINT16 imageid = 0;
|
|
GetFaceData( mMilitiaId, imagelib, imageid );
|
|
|
|
BltVideoObjectFromIndex( FRAME_BUFFER, imagelib, imageid, usPosX + 4, usPosY + 4, VO_BLT_SRCTRANSPARENCY, NULL );
|
|
|
|
usPosX += 44;
|
|
usPosY += 8;
|
|
|
|
// name
|
|
swprintf( sText, L"%s - %s", militia.GetName( ), militia.GetSector( ) );
|
|
DrawTextToScreen( sText, usPosX, usPosY + 5, GetWidth( ), FONT12ARIAL, 2, FONT_MCOLOR_BLACK, FALSE, 0 );
|
|
|
|
usPosX += 7 * wcslen( sText );
|
|
|
|
/*// gun
|
|
ItemImage( mMilitiaId, imagelib, imageid );
|
|
BltVideoObjectFromIndex( FRAME_BUFFER, imagelib, imageid, usPosX + 4, usPosY - 3, VO_BLT_SRCTRANSPARENCY, NULL );
|
|
|
|
usPosX += 90;*/
|
|
|
|
//swprintf( sText, ItemLongNamegetter( mMilitiaId ) );
|
|
//DrawTextToScreen( sText, usPosX, usPosY + 5, GetWidth( ), FONT12ARIAL, 2, FONT_MCOLOR_BLACK, FALSE, 0 );
|
|
|
|
//usPosX += 7 * wcslen( sText );
|
|
usPosY += 30;
|
|
}
|
|
|
|
mCloseImage = LoadButtonImage( "INTERFACE\\skilltree.sti", 71, 71, 71, 71, 71 );
|
|
|
|
// save changes
|
|
mCloseButton = QuickCreateButton( mCloseImage,
|
|
GetX( ) + GetWidth( ) - 26, GetY( ) + 4,
|
|
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST,
|
|
MSYS_NO_CALLBACK,
|
|
CloseButtonCallback );
|
|
mCloseButtonDefined = TRUE;
|
|
}
|
|
|
|
void
|
|
MilitiaInidividualMainWidget::SetRefresh( )
|
|
{
|
|
gfMilitiaWebsiteMainRedraw = TRUE;
|
|
}
|
|
|
|
void
|
|
MilitiaInidividualMainWidget::DestroyMouseRegions( )
|
|
{
|
|
if ( mCloseButtonDefined )
|
|
{
|
|
RemoveButton( mCloseButton );
|
|
UnloadButtonImage( mCloseImage );
|
|
|
|
mCloseButtonDefined = FALSE;
|
|
}
|
|
|
|
TestPanel::DestroyMouseRegions( );
|
|
}
|
|
|
|
extern BOOLEAN gfMilitiaDetailsOpen;
|
|
|
|
void
|
|
MilitiaInidividualMainWidget::CloseButtonCallback( GUI_BUTTON * btn, INT32 iReason )
|
|
{
|
|
if ( iReason & MSYS_CALLBACK_REASON_INIT )
|
|
{
|
|
}
|
|
else if ( iReason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
militiaindividualmainwidget.SetMouseRegionActive( FALSE );
|
|
militiaindividualmainwidget.DestroyMouseRegions( );
|
|
|
|
TestTableTemplate<3>::getInstance( ).SetMouseRegionActive( TRUE );
|
|
|
|
gfMilitiaDetailsOpen = FALSE;
|
|
|
|
TestTableTemplate<3>::getInstance( ).SetRefresh( );
|
|
|
|
militiaindividualmainwidget.SetRefresh( );
|
|
}
|
|
else if ( iReason & MSYS_CALLBACK_REASON_RBUTTON_UP )
|
|
{
|
|
}
|
|
}
|
|
|
|
MilitiaInidividualMainWidget militiaindividualmainwidget;
|