diff options
Diffstat (limited to 'game/client/tf/vgui/tf_controls.h')
| -rw-r--r-- | game/client/tf/vgui/tf_controls.h | 308 |
1 files changed, 308 insertions, 0 deletions
diff --git a/game/client/tf/vgui/tf_controls.h b/game/client/tf/vgui/tf_controls.h new file mode 100644 index 0000000..d888ef6 --- /dev/null +++ b/game/client/tf/vgui/tf_controls.h @@ -0,0 +1,308 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef TF_CONTROLS_H +#define TF_CONTROLS_H +#ifdef _WIN32 +#pragma once +#endif + +#include <vgui/IScheme.h> +#include <vgui/KeyCode.h> +#include <KeyValues.h> +#include <vgui/IVGui.h> +#include <vgui_controls/ScrollBar.h> +#include <vgui_controls/EditablePanel.h> +#include <vgui_controls/Button.h> +#include <vgui_controls/Label.h> +#include <vgui_controls/RichText.h> +#include "utlvector.h" +#include "vgui_controls/PHandle.h" +#include <vgui_controls/Tooltip.h> +#include "econ_controls.h" +#include "sc_hinticon.h" +#if defined( TF_CLIENT_DLL ) +#include "tf_shareddefs.h" +#include "tf_imagepanel.h" +#endif +#include <vgui_controls/Frame.h> +#include <../common/GameUI/scriptobject.h> +#include <vgui/KeyCode.h> +#include <vgui_controls/Tooltip.h> +#include <vgui_controls/CheckButton.h> + +wchar_t* LocalizeNumberWithToken( const char* pszLocToken, int nValue ); + +//----------------------------------------------------------------------------- +// Purpose: Xbox-specific panel that displays button icons text labels +//----------------------------------------------------------------------------- +class CTFFooter : public vgui::EditablePanel +{ + DECLARE_CLASS_SIMPLE( CTFFooter, vgui::EditablePanel ); + +public: + CTFFooter( Panel *parent, const char *panelName ); + virtual ~CTFFooter(); + + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void ApplySettings( KeyValues *pResourceData ); + virtual void Paint( void ); + virtual void PaintBackground( void ); + + void ShowButtonLabel( const char *name, bool show = true ); + void AddNewButtonLabel( const char *name, const char *text, const char *icon ); + void ClearButtons(); + +private: + struct FooterButton_t + { + bool bVisible; + char name[MAX_PATH]; + wchar_t text[MAX_PATH]; + wchar_t icon[3]; // icon can be one or two characters + }; + + CUtlVector< FooterButton_t* > m_Buttons; + + bool m_bPaintBackground; // fill the background? + int m_nButtonGap; // space between buttons + int m_FooterTall; // height of the footer + int m_ButtonOffsetFromTop; // how far below the top the buttons should be drawn + int m_ButtonSeparator; // space between the button icon and text + int m_TextAdjust; // extra adjustment for the text (vertically)...text is centered on the button icon and then this value is applied + bool m_bCenterHorizontal; // center buttons horizontally? + int m_ButtonPinRight; // if not centered, this is the distance from the right margin that we use to start drawing buttons (right to left) + + char m_szTextFont[64]; // font for the button text + char m_szButtonFont[64]; // font for the button icon + char m_szFGColor[64]; // foreground color (text) + char m_szBGColor[64]; // background color (fill color) + + vgui::HFont m_hButtonFont; + vgui::HFont m_hTextFont; +}; + +//----------------------------------------------------------------------------- +// Purpose: Tooltip for the main menu. Isn't a panel, it just wraps the +// show/hide/position handling for the embedded panel. +//----------------------------------------------------------------------------- +class CMainMenuToolTip : public vgui::BaseTooltip +{ + DECLARE_CLASS_SIMPLE( CMainMenuToolTip, vgui::BaseTooltip ); +public: + CMainMenuToolTip(vgui::Panel *parent, const char *text = NULL) : vgui::BaseTooltip( parent, text ) + { + m_pEmbeddedPanel = NULL; + } + virtual ~CMainMenuToolTip() {} + + virtual void SetText(const char *text); + const char *GetText() { return NULL; } + + virtual void HideTooltip(); + virtual void PerformLayout(); + + void SetEmbeddedPanel( vgui::EditablePanel *pPanel ) + { + m_pEmbeddedPanel = pPanel; + } + +protected: + vgui::EditablePanel *m_pEmbeddedPanel; +}; + +//----------------------------------------------------------------------------- +// Purpose: Simple TF-styled text tooltip +//----------------------------------------------------------------------------- +class CTFTextToolTip : public CMainMenuToolTip +{ + DECLARE_CLASS_SIMPLE( CTFTextToolTip, CMainMenuToolTip ); +public: + CTFTextToolTip(vgui::Panel *parent, const char *text = NULL) : CMainMenuToolTip( parent, text ) + { + } + virtual void PerformLayout(); + virtual void PositionWindow( vgui::Panel *pTipPanel ); + virtual void SetText(const char *text) + { + _isDirty = true; + BaseClass::SetText( text ); + } +}; + + +//----------------------------------------------------------------------------- +// Purpose: Displays a TF specific list of options +// This is essentially a TF-styled version of the GameUI Advanced Multiplayer Options Dialog +//----------------------------------------------------------------------------- +class CTFAdvancedOptionsDialog : public vgui::EditablePanel +{ + DECLARE_CLASS_SIMPLE( CTFAdvancedOptionsDialog, vgui::EditablePanel ); + +public: + CTFAdvancedOptionsDialog(vgui::Panel *parent); + ~CTFAdvancedOptionsDialog(); + + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void ApplySettings( KeyValues *pResourceData ); + + void Deploy( void ); + +private: + + void CreateControls(); + void DestroyControls(); + void GatherCurrentValues(); + void SaveValues(); + + virtual void OnCommand( const char *command ); + virtual void OnClose(); + virtual void OnKeyCodeTyped(vgui::KeyCode code); + virtual void OnKeyCodePressed(vgui::KeyCode code); + +private: + CInfoDescription *m_pDescription; + mpcontrol_t *m_pList; + vgui::PanelListPanel *m_pListPanel; + CTFTextToolTip *m_pToolTip; + vgui::EditablePanel *m_pToolTipEmbeddedPanel; + + CPanelAnimationVarAliasType( int, m_iControlW, "control_w", "0", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_iControlH, "control_h", "0", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_iSliderW, "slider_w", "0", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_iSliderH, "slider_h", "0", "proportional_int" ); +}; + +//----------------------------------------------------------------------------- +// Purpose: Scrollable panel where you can define children within the .res file +//----------------------------------------------------------------------------- +class CExScrollingEditablePanel : public vgui::EditablePanel +{ + DECLARE_CLASS_SIMPLE( CExScrollingEditablePanel, vgui::EditablePanel ); +public: + CExScrollingEditablePanel( Panel *pParent, const char *pszName ); + virtual ~CExScrollingEditablePanel(); + + virtual void ApplySettings( KeyValues *inResourceData ) OVERRIDE; + virtual void PerformLayout() OVERRIDE; + virtual void OnSizeChanged( int newWide, int newTall ) OVERRIDE; + + MESSAGE_FUNC( OnScrollBarSliderMoved, "ScrollBarSliderMoved" ); + virtual void OnMouseWheeled( int delta ) OVERRIDE; // respond to mouse wheel events + void ResetScrollAmount() { m_nLastScrollValue = 0; m_pScrollBar->SetValue(0); } +protected: + + void ShiftChildren( int nDistance ); + + vgui::ScrollBar *m_pScrollBar; + int m_nLastScrollValue; + bool m_bUseMouseWheelToScroll; + CPanelAnimationVarAliasType( int, m_iScrollStep, "scroll_step", "10", "proportional_xpos" ); + CPanelAnimationVarAliasType( int, m_iBottomBuffer, "bottom_buffer", "0", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_bRestrictWidth, "restrict_width", "1", "proportional_int" ); +}; + +//----------------------------------------------------------------------------- +// An extension of CExScrollingEditablePanel where panels can be added to form +// a list. +//----------------------------------------------------------------------------- +class CScrollableList : public CExScrollingEditablePanel +{ + DECLARE_CLASS_SIMPLE( CScrollableList, CExScrollingEditablePanel ); +public: + CScrollableList( Panel* pParent, const char* pszName ) + : CExScrollingEditablePanel( pParent, pszName ) + {} + + virtual ~CScrollableList(); + + virtual void PerformLayout() OVERRIDE; + + void AddPanel( Panel* pPanel, int nGap ); + void ClearAutoLayoutPanels(); + +private: + + struct LayoutInfo_t + { + Panel* m_pPanel; + int m_nGap; + }; + + CUtlVector< LayoutInfo_t > m_vecAutoLayoutPanels; +}; + +//----------------------------------------------------------------------------- +// A checkbox where keyvalue data can be stored and retrieved (typically in OnCheckButtonChecked) +// so that you don't need a pointer to the checkbox in order to determine WHICH +// checkbox got checked. +//----------------------------------------------------------------------------- +class CExCheckButton : public vgui::CheckButton +{ + DECLARE_CLASS_SIMPLE( CExCheckButton, vgui::CheckButton ); +public: + CExCheckButton( Panel* pParent, const char* pszName ) + : BaseClass( pParent, pszName, NULL ) + , m_pKVData( NULL ) + {} + + virtual ~CExCheckButton() + { + if ( m_pKVData ) + m_pKVData->deleteThis(); + } + + void SetData( KeyValues* pKVData ) + { + if ( m_pKVData ) + { + m_pKVData->deleteThis(); + m_pKVData = NULL; + } + + m_pKVData = pKVData; + } + + KeyValues* GetData() const + { + return m_pKVData; + } + +private: + KeyValues *m_pKVData; +}; + +class CExpandablePanel : public vgui::EditablePanel +{ + DECLARE_CLASS_SIMPLE( CExpandablePanel, vgui::EditablePanel ); +public: + CExpandablePanel( Panel* pParent, const char* pszName ); + + virtual void OnCommand( const char *command ) OVERRIDE; + virtual void OnThink() OVERRIDE; + + virtual void OnToggleCollapse( bool bIsExpanded ) {} + + void SetCollapsed( bool bCollapsed ); + void ToggleCollapse(); + bool BIsExpanded() const { return m_bExpanded; } + void SetExpandedHeight( int nNewHeight ); + float GetPercentAnimated() const; + +protected: + + CPanelAnimationVarAliasType( float, m_flResizeTime, "resize_time", "0.4", "float" ); + CPanelAnimationVarAliasType( int, m_nCollapsedHeight, "collapsed_height", "17", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_nExpandedHeight, "expanded_height", "50", "proportional_int" ); + +private: + + bool m_bExpanded; + float m_flAnimEndTime; +}; + +#endif // TF_CONTROLS_H |