hl2_src-leak-2017/src/game/client/game_controls/mouseoverhtmlbutton.h

120 lines
2.5 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef MOUSEOVERHTMLBUTTON_H
#define MOUSEOVERHTMLBUTTON_H
#ifdef _WIN32
#pragma once
#endif
//-----------------------------------------------------------------------------
// Purpose: Triggers a new html page when the mouse goes over the button
//-----------------------------------------------------------------------------
class MouseOverHTMLButton : public vgui::Button
{
public:
MouseOverHTMLButton(vgui::Panel *parent, const char *panelName, vgui::HTML *html, const char *page) :
Button( parent, panelName, "MouseOverHTMLButton")
{
m_pHTML = html;
m_iClass = 0;
m_iIndex = -1;
m_bAddShortCut = true;
if ( page )
{
Q_strncpy( m_sPage, page, sizeof( m_sPage ) );
}
else
{
memset(m_sPage, 0x0, sizeof( m_sPage ) );
}
}
void SetClass(int pClass, int index) { m_iClass = pClass; m_iIndex = index;}
int GetClass() { return m_iClass; }
void SetAddHotKey( bool state ) { m_bAddShortCut = state; }
void SetPage( const char *page )
{
if ( page )
{
Q_strncpy( m_sPage, page, sizeof( m_sPage ) );
}
else
{
memset(m_sPage, 0x0, sizeof( m_sPage ) );
}
}
void SetHTML( vgui::HTML *html)
{
m_pHTML = html;
}
private:
virtual void OnCursorEntered()
{
Button::OnCursorEntered();
if ( m_pHTML && strlen(m_sPage) > 0 )
{
m_pHTML->OpenURL(m_sPage);
}
}
virtual void SetText(const char *text)
{
if ( m_iIndex != -1 )
{
wchar_t newText[ 128 ];
wchar_t localizeText[ 128 ];
wchar_t *ansiLocal;
if ( text[0] == '#' && ( ansiLocal = g_pVGuiLocalize->Find( text ) ) )
{
// wcsncpy will crash if ansiLocal is null... *sigh*
wcsncpy(localizeText, ansiLocal, sizeof(localizeText)/sizeof(wchar_t));
}
else
{
g_pVGuiLocalize->ConvertANSIToUnicode( text, localizeText, sizeof( localizeText ) );
}
if ( m_bAddShortCut )
{
#ifdef WIN32
_snwprintf( newText, sizeof( newText )/ sizeof( wchar_t ), L"&%i %s", m_iIndex, localizeText);
#else
_snwprintf( newText, sizeof( newText )/ sizeof( wchar_t ), L"&%i %S", m_iIndex, localizeText);
#endif
}
else
{
memcpy( newText, localizeText, sizeof( newText ) );
}
Button::SetText( newText );
}
else
{
Button::SetText( text );
}
}
vgui::HTML *m_pHTML;
char m_sPage[ 255 ];
int m_iClass;
int m_iIndex;
bool m_bAddShortCut;
};
#endif // MOUSEOVERHTMLBUTTON_H