//========= 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