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.
274 lines
7.3 KiB
274 lines
7.3 KiB
//========= 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 ); |
|
} |
|
}
|
|
|