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.
119 lines
2.5 KiB
119 lines
2.5 KiB
//========= 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
|
|
|