Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.

275 lines
7.3 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#include "inputsystem/iinputsystem.h"
#include "input.h"
#include "tf_textwindow.h"
#include <cdll_client_int.h>
#include <vgui/IScheme.h>
#include <vgui/ILocalize.h>
#include <vgui/ISurface.h>
#include <filesystem.h>
#include <KeyValues.h>
#include <convar.h>
#include <vgui_controls/ImageList.h>
#include <vgui_controls/Panel.h>
#include <vgui_controls/TextEntry.h>
#include <vgui_controls/Button.h>
#include <vgui_controls/BuildGroup.h>
#include <vgui_controls/ImagePanel.h>
#include "tf_controls.h"
#include "tf_shareddefs.h"
#include "IGameUIFuncs.h" // for key bindings
#include <igameresources.h>
extern IGameUIFuncs *gameuifuncs; // for key binding details
#include <game/client/iviewport.h>
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
using namespace vgui;
//-----------------------------------------------------------------------------
// Purpose: Constructor
//-----------------------------------------------------------------------------
CTFTextWindow::CTFTextWindow( IViewPort *pViewPort ) : CTextWindow( pViewPort )
{
m_pTFTextMessage = new CExRichText( this, "TFTextMessage" );
SetProportional( true );
}
//-----------------------------------------------------------------------------
// Purpose: Destructor
//-----------------------------------------------------------------------------
CTFTextWindow::~CTFTextWindow()
{
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTFTextWindow::ApplySchemeSettings( IScheme *pScheme )
{
Frame::ApplySchemeSettings( pScheme ); // purposely skipping the CTextWindow version
if ( ::input->IsSteamControllerActive() )
{
if ( m_bCustomSvrPage )
{
LoadControlSettings( "Resource/UI/TextWindowCustomServer_SC.res" );
}
else
{
LoadControlSettings( "Resource/UI/TextWindow_SC.res" );
}
SetMouseInputEnabled( false );
}
else
{
if ( m_bCustomSvrPage )
{
LoadControlSettings( "Resource/UI/TextWindowCustomServer.res" );
}
else
{
LoadControlSettings( "Resource/UI/TextWindow.res" );
}
SetMouseInputEnabled( true );
}
if ( m_pHTMLMessage )
{
m_pHTMLMessage->SetBgColor( pScheme->GetColor( "HTMLBackground", Color( 255, 0, 0, 255 ) ) );
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTFTextWindow::Reset( void )
{
Update();
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTFTextWindow::OnThink()
{
//Always hide the health... this needs to be done every frame because a message from the server keeps resetting this.
C_BasePlayer *pLocalPlayer = C_BasePlayer::GetLocalPlayer();
if ( pLocalPlayer )
{
pLocalPlayer->m_Local.m_iHideHUD |= HIDEHUD_HEALTH;
}
BaseClass::OnThink();
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTFTextWindow::SetData(KeyValues *data)
{
m_bCustomSvrPage = data->GetBool( "customsvr" );
InvalidateLayout( false, true );
BaseClass::SetData( data );
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTFTextWindow::Update()
{
CExLabel *pTitle = dynamic_cast<CExLabel *>( FindChildByName( "TFMessageTitle" ) );
if ( pTitle )
{
pTitle->SetText( m_szTitle );
}
if ( m_pTFTextMessage )
{
m_pTFTextMessage->SetVisible( false );
}
BaseClass::Update();
Panel *pOK = FindChildByName( "ok" );
if ( pOK )
{
pOK->RequestFocus();
}
}
//-----------------------------------------------------------------------------
// Purpose:
//---------------------------------------------------------------------------
void CTFTextWindow::SetVisible( bool state )
{
BaseClass::SetVisible( state );
if ( state )
{
Panel *pOK = FindChildByName( "ok" );
if ( pOK )
{
pOK->RequestFocus();
}
}
}
//-----------------------------------------------------------------------------
// Purpose: shows the text window
//-----------------------------------------------------------------------------
void CTFTextWindow::ShowPanel( bool bShow )
{
if ( IsVisible() == bShow )
return;
// Force use to reevaluate our scheme, in case Steam Controller stuff has changed.
InvalidateLayout( true, true );
BaseClass::ShowPanel( bShow );
if ( m_pViewPort )
{
m_pViewPort->ShowBackGround( false );
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTFTextWindow::OnKeyCodePressed( KeyCode code )
{
if ( code == KEY_XBUTTON_A || code == STEAMCONTROLLER_A )
{
OnCommand( "okay" );
}
else
{
BaseClass::OnKeyCodePressed( code );
}
}
//-----------------------------------------------------------------------------
// Purpose: The background is painted elsewhere, so we should do nothing
//-----------------------------------------------------------------------------
void CTFTextWindow::PaintBackground()
{
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTFTextWindow::OnCommand( const char *command )
{
BaseClass::OnCommand( command );
// Don't open up the mapinfo if it was a custom server html page
if ( !Q_strcmp( command, "okay" ) && !m_bCustomSvrPage )
{
m_pViewPort->ShowPanel( PANEL_MAPINFO, true );
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTFTextWindow::ShowText( const char *text )
{
ShowTitleLabel( true );
if ( m_pTFTextMessage )
{
m_pTFTextMessage->SetVisible( true );
m_pTFTextMessage->SetText( text );
m_pTFTextMessage->GotoTextStart();
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTFTextWindow::ShowURL( const char *URL, bool bAllowUserToDisable )
{
ShowTitleLabel( false );
BaseClass::ShowURL( URL, bAllowUserToDisable );
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTFTextWindow::ShowFile( const char *filename )
{
ShowTitleLabel( false ) ;
BaseClass::ShowFile( filename );
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTFTextWindow::ShowTitleLabel( bool show )
{
CExLabel *pTitle = dynamic_cast<CExLabel *>( FindChildByName( "TFMessageTitle" ) );
if ( pTitle )
{
pTitle->SetVisible( show );
}
}