You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
295 lines
8.2 KiB
295 lines
8.2 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: All matchmaking dialogs inherit from this |
|
// |
|
//=============================================================================// |
|
|
|
#include "vgui_controls/Label.h" |
|
#include "GameUI_Interface.h" |
|
#include "KeyValues.h" |
|
#include "basedialog.h" |
|
#include "BasePanel.h" |
|
#include "matchmakingbasepanel.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
//--------------------------------------------------------- |
|
// CBaseDialog |
|
//--------------------------------------------------------- |
|
CBaseDialog::CBaseDialog( vgui::Panel *pParent, const char *pName ) : BaseClass( pParent, pName ) |
|
{ |
|
SetTitleBarVisible( false ); |
|
SetCloseButtonVisible( false ); |
|
SetSizeable( false ); |
|
|
|
m_pParent = pParent; |
|
m_Menu.SetParent( this ); |
|
|
|
m_pTitle = new vgui::Label( this, "DialogTitle", "" ); |
|
m_pFooterInfo = NULL; |
|
|
|
m_nBorderWidth = 0; |
|
m_nButtonGap = -1; |
|
} |
|
|
|
CBaseDialog::~CBaseDialog() |
|
{ |
|
delete m_pTitle; |
|
|
|
if ( m_pFooterInfo ) |
|
{ |
|
m_pFooterInfo->deleteThis(); |
|
} |
|
} |
|
|
|
//--------------------------------------------------------- |
|
// Purpose: Activate the dialog |
|
//--------------------------------------------------------- |
|
void CBaseDialog::Activate( void ) |
|
{ |
|
BaseClass::Activate(); |
|
|
|
InvalidateLayout( false, false ); |
|
} |
|
|
|
//--------------------------------------------------------- |
|
// Purpose: Set the title and menu positions |
|
//--------------------------------------------------------- |
|
void CBaseDialog::PerformLayout( void ) |
|
{ |
|
BaseClass::PerformLayout(); |
|
|
|
m_pTitle->SizeToContents(); |
|
|
|
int menux, menuy; |
|
m_Menu.GetPos( menux, menuy ); |
|
|
|
int autoWide = m_Menu.GetWide() + m_nBorderWidth * 2; |
|
int autoTall = menuy + m_Menu.GetTall() + m_nBorderWidth; |
|
autoWide = max( autoWide, GetWide() ); |
|
autoTall = max( autoTall, GetTall() ); |
|
|
|
SetSize( autoWide, autoTall ); |
|
|
|
if ( m_pFooterInfo && m_pParent ) |
|
{ |
|
CMatchmakingBasePanel *pBasePanel = dynamic_cast< CMatchmakingBasePanel* >( m_pParent ); |
|
if ( pBasePanel ) |
|
{ |
|
// the base panel is our parent |
|
pBasePanel->SetFooterButtons( this, m_pFooterInfo, m_nButtonGap ); |
|
} |
|
} |
|
|
|
if ( m_Menu.GetActiveItemIndex() == -1 ) |
|
{ |
|
m_Menu.SetFocus( 0 ); |
|
} |
|
} |
|
|
|
//--------------------------------------------------------- |
|
// Purpose: Setup sizes and positions |
|
//--------------------------------------------------------- |
|
void CBaseDialog::ApplySettings( KeyValues *inResourceData ) |
|
{ |
|
BaseClass::ApplySettings( inResourceData ); |
|
|
|
m_nBorderWidth = inResourceData->GetInt( "borderwidth", 0 ); |
|
|
|
KeyValues *pFooter = inResourceData->FindKey( "Footer" ); |
|
if ( pFooter ) |
|
{ |
|
m_pFooterInfo = pFooter->MakeCopy(); |
|
} |
|
|
|
m_nButtonGap = inResourceData->GetInt( "footer_buttongap", -1 ); |
|
} |
|
|
|
//--------------------------------------------------------- |
|
// Purpose: Setup colors and fonts |
|
//--------------------------------------------------------- |
|
void CBaseDialog::ApplySchemeSettings( vgui::IScheme *pScheme ) |
|
{ |
|
BaseClass::ApplySchemeSettings( pScheme ); |
|
|
|
SetPaintBackgroundType( 2 ); |
|
|
|
m_pTitle->SetFgColor( pScheme->GetColor( "MatchmakingDialogTitleColor", Color( 200, 184, 151, 255 ) ) ); |
|
|
|
char szResourceName[MAX_PATH]; |
|
Q_snprintf( szResourceName, sizeof( szResourceName ), "%s.res", GetName() ); |
|
KeyValues *pKeys = BasePanel()->GetConsoleControlSettings()->FindKey( szResourceName ); |
|
LoadControlSettings( "NULL", NULL, pKeys ); |
|
} |
|
|
|
//----------------------------------------------------------------- |
|
// Purpose: Set the resource file to load this dialog's settings |
|
//----------------------------------------------------------------- |
|
void CBaseDialog::OnClose() |
|
{ |
|
// Hide the rather ugly fade out |
|
SetAlpha( 0 ); |
|
BaseClass::OnClose(); |
|
} |
|
|
|
//----------------------------------------------------------------- |
|
// Purpose: Change properties of a menu item |
|
//----------------------------------------------------------------- |
|
void CBaseDialog::OverrideMenuItem( KeyValues *pKeys ) |
|
{ |
|
// Do nothing |
|
} |
|
|
|
//----------------------------------------------------------------- |
|
// Purpose: Swap the order of two menu items |
|
//----------------------------------------------------------------- |
|
void CBaseDialog::SwapMenuItems( int iOne, int iTwo ) |
|
{ |
|
// Do nothing |
|
} |
|
|
|
//----------------------------------------------------------------- |
|
// Purpose: Send key presses to the dialog's menu |
|
//----------------------------------------------------------------- |
|
void CBaseDialog::OnKeyCodePressed( vgui::KeyCode code ) |
|
{ |
|
if ( code == KEY_XBUTTON_START ) |
|
{ |
|
m_KeyRepeat.Reset(); |
|
if ( GameUI().IsInLevel() ) |
|
{ |
|
m_pParent->OnCommand( "ResumeGame" ); |
|
} |
|
return; |
|
} |
|
|
|
m_KeyRepeat.KeyDown( code ); |
|
|
|
// Send down to the menu |
|
if ( !m_Menu.HandleKeyCode( code ) ) |
|
{ |
|
if ( code == KEY_XBUTTON_B ) |
|
{ |
|
OnCommand( "DialogClosing" ); |
|
SetDeleteSelfOnClose( true ); |
|
} |
|
else |
|
{ |
|
BaseClass::OnKeyCodePressed( code ); |
|
} |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CBaseDialog::OnKeyCodeReleased( vgui::KeyCode code ) |
|
{ |
|
m_KeyRepeat.KeyUp( code ); |
|
|
|
BaseClass::OnKeyCodeReleased( code ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CBaseDialog::HandleKeyRepeated( vgui::KeyCode code ) |
|
{ |
|
m_Menu.HandleKeyCode( code ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CBaseDialog::OnThink() |
|
{ |
|
vgui::KeyCode code = m_KeyRepeat.KeyRepeated(); |
|
if ( code ) |
|
{ |
|
if ( HasFocus() ) |
|
{ |
|
HandleKeyRepeated( code ); |
|
} |
|
else |
|
{ |
|
// This can happen because of the slight delay after selecting a |
|
// menu option and the resulting action. The selection caused the |
|
// key repeater to be reset, but the player can press a movement |
|
// key before the action occurs, leaving us with a key repeating |
|
// on this dialog even though it no longer has focus. |
|
m_KeyRepeat.Reset(); |
|
} |
|
} |
|
|
|
BaseClass::OnThink(); |
|
} |
|
|
|
//----------------------------------------------------------------- |
|
// Purpose: Forward commands to the matchmaking base panel |
|
//----------------------------------------------------------------- |
|
void CBaseDialog::OnCommand( const char *pCommand ) |
|
{ |
|
m_KeyRepeat.Reset(); |
|
m_pParent->OnCommand( pCommand ); |
|
} |
|
|
|
|
|
//--------------------------------------------------------------------- |
|
// Helper object to display the map picture and descriptive text |
|
//--------------------------------------------------------------------- |
|
CScenarioInfoPanel::CScenarioInfoPanel( vgui::Panel *parent, const char *pName ) : BaseClass( parent, pName ) |
|
{ |
|
m_pMapImage = new vgui::ImagePanel( this, "MapImage" ); |
|
m_pTitle = new CPropertyLabel( this, "Title", "" ); |
|
m_pSubtitle = new CPropertyLabel( this, "Subtitle", "" ); |
|
|
|
m_pDescOne = new CPropertyLabel( this, "DescOne", "" ); |
|
m_pDescTwo = new CPropertyLabel( this, "DescTwo", "" ); |
|
m_pDescThree = new CPropertyLabel( this, "DescThree", "" ); |
|
|
|
m_pValueTwo = new CPropertyLabel( this, "ValueTwo", "" ); |
|
m_pValueThree = new CPropertyLabel( this, "ValueThree", "" ); |
|
} |
|
CScenarioInfoPanel::~CScenarioInfoPanel() |
|
{ |
|
delete m_pMapImage; |
|
delete m_pTitle; |
|
delete m_pSubtitle; |
|
delete m_pDescOne; |
|
delete m_pDescTwo; |
|
delete m_pDescThree; |
|
delete m_pValueTwo; |
|
delete m_pValueThree; |
|
} |
|
|
|
void CScenarioInfoPanel::PerformLayout( void ) |
|
{ |
|
BaseClass::PerformLayout(); |
|
} |
|
|
|
void CScenarioInfoPanel::ApplySettings( KeyValues *pResourceData ) |
|
{ |
|
BaseClass::ApplySettings( pResourceData ); |
|
} |
|
|
|
void CScenarioInfoPanel::ApplySchemeSettings( vgui::IScheme *pScheme ) |
|
{ |
|
BaseClass::ApplySchemeSettings( pScheme ); |
|
|
|
Color fontColor = pScheme->GetColor( "MatchmakingDialogTitleColor", Color( 0, 0, 0, 255 ) ); |
|
m_pTitle->SetFgColor( fontColor ); |
|
m_pSubtitle->SetFgColor( fontColor ); |
|
m_pDescOne->SetFgColor( fontColor ); |
|
m_pDescTwo->SetFgColor( fontColor ); |
|
m_pDescThree->SetFgColor( fontColor ); |
|
m_pValueTwo->SetFgColor( fontColor ); |
|
m_pValueThree->SetFgColor( fontColor ); |
|
|
|
SetPaintBackgroundType( 2 ); |
|
|
|
KeyValues *pKeys = BasePanel()->GetConsoleControlSettings()->FindKey( "ScenarioInfoPanel.res" ); |
|
ApplySettings( pKeys ); |
|
} |
|
|
|
DECLARE_BUILD_FACTORY( CScenarioInfoPanel );
|
|
|