diff options
Diffstat (limited to 'game/client/tf/vgui/tf_textwindow.cpp')
| -rw-r--r-- | game/client/tf/vgui/tf_textwindow.cpp | 274 |
1 files changed, 274 insertions, 0 deletions
diff --git a/game/client/tf/vgui/tf_textwindow.cpp b/game/client/tf/vgui/tf_textwindow.cpp new file mode 100644 index 0000000..2734860 --- /dev/null +++ b/game/client/tf/vgui/tf_textwindow.cpp @@ -0,0 +1,274 @@ +//========= 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 ); + } +} |