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.
309 lines
9.6 KiB
309 lines
9.6 KiB
5 years ago
|
//========= 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
|