summaryrefslogtreecommitdiff
path: root/game/client/tf/vgui/tf_textwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/tf/vgui/tf_textwindow.cpp')
-rw-r--r--game/client/tf/vgui/tf_textwindow.cpp274
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 );
+ }
+}