mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-22 14:16:50 +00:00
296 lines
8.2 KiB
C++
296 lines
8.2 KiB
C++
//========= 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 );
|