summaryrefslogtreecommitdiff
path: root/gameui/matchmaking/basedialog.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /gameui/matchmaking/basedialog.cpp
downloadarchived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.tar.xz
archived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.zip
Diffstat (limited to 'gameui/matchmaking/basedialog.cpp')
-rw-r--r--gameui/matchmaking/basedialog.cpp295
1 files changed, 295 insertions, 0 deletions
diff --git a/gameui/matchmaking/basedialog.cpp b/gameui/matchmaking/basedialog.cpp
new file mode 100644
index 0000000..be65718
--- /dev/null
+++ b/gameui/matchmaking/basedialog.cpp
@@ -0,0 +1,295 @@
+//========= 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 );