source-engine/gameui/CvarTextEntry.cpp

113 lines
2.2 KiB
C++
Raw Permalink Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#include "CvarTextEntry.h"
#include "EngineInterface.h"
#include <vgui/IVGui.h>
#include "IGameUIFuncs.h"
#include "tier1/KeyValues.h"
#include "tier1/convar.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
using namespace vgui;
static const int MAX_CVAR_TEXT = 64;
CCvarTextEntry::CCvarTextEntry( Panel *parent, const char *panelName, char const *cvarname )
: TextEntry( parent, panelName)
{
m_pszCvarName = cvarname ? strdup( cvarname ) : NULL;
m_pszStartValue[0] = 0;
if ( m_pszCvarName )
{
Reset();
}
AddActionSignalTarget( this );
}
CCvarTextEntry::~CCvarTextEntry()
{
if ( m_pszCvarName )
{
free( m_pszCvarName );
}
}
void CCvarTextEntry::ApplySchemeSettings(IScheme *pScheme)
{
BaseClass::ApplySchemeSettings(pScheme);
if (GetMaximumCharCount() < 0 || GetMaximumCharCount() > MAX_CVAR_TEXT)
{
SetMaximumCharCount(MAX_CVAR_TEXT - 1);
}
}
void CCvarTextEntry::ApplyChanges( bool immediate )
{
if ( !m_pszCvarName )
return;
char szText[ MAX_CVAR_TEXT ];
GetText( szText, MAX_CVAR_TEXT );
if ( !szText[ 0 ] )
return;
if ( immediate )
{
// set immediately - don't wait for the next frame
ConVarRef newCvar( m_pszCvarName );
newCvar.SetValue( szText );
}
else
{
char szCommand[ 256 ];
sprintf( szCommand, "%s \"%s\"\n", m_pszCvarName, szText );
engine->ClientCmd_Unrestricted( szCommand );
}
Q_strncpy( m_pszStartValue, szText, sizeof( m_pszStartValue ) );
}
void CCvarTextEntry::Reset()
{
// char *value = engine->pfnGetCvarString( m_pszCvarName );
ConVarRef var( m_pszCvarName );
if ( !var.IsValid() )
return;
const char *value = var.GetString();
if ( value && value[ 0 ] )
{
SetText( value );
Q_strncpy( m_pszStartValue, value, sizeof( m_pszStartValue ) );
}
}
bool CCvarTextEntry::HasBeenModified()
{
char szText[ MAX_CVAR_TEXT ];
GetText( szText, MAX_CVAR_TEXT );
return stricmp( szText, m_pszStartValue );
}
void CCvarTextEntry::OnTextChanged()
{
if ( !m_pszCvarName )
return;
if (HasBeenModified())
{
PostActionSignal(new KeyValues("ControlModified"));
}
}