|
|
//========= 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 );
|