summaryrefslogtreecommitdiff
path: root/game/client/tf/vgui/tf_controls.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/tf/vgui/tf_controls.h')
-rw-r--r--game/client/tf/vgui/tf_controls.h308
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