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