Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.

160 lines
4.9 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef TF_ITEM_CARD_PANEL_H
#define TF_ITEM_CARD_PANEL_H
#ifdef _WIN32
#pragma once
#endif
#include <vgui_controls/Panel.h>
#include <vgui_controls/EditablePanel.h>
#include "item_model_panel.h"
#include "tf_controls.h"
class CEconItemView;
class CEmbeddedItemModelPanel;
namespace vgui
{
class ScrollBar;
class ImagePanel;
}
class CIconPanel;
using namespace vgui;
//-----------------------------------------------------------------------------
// Purpose: A simple container that contains repeating elements with common
// and individual characteristics
//-----------------------------------------------------------------------------
class CRepeatingContainer : public EditablePanel
{
DECLARE_CLASS_SIMPLE( CRepeatingContainer, EditablePanel );
public:
CRepeatingContainer( Panel *pParent, const char *pszName );
virtual ~CRepeatingContainer();
virtual void ApplySettings( KeyValues *inResourceData ) OVERRIDE;
virtual void PerformLayout() OVERRIDE;
Panel* GetRepeatingChild( int nIndex ) const { return m_vecChildren[ nIndex ]; }
private:
enum ELayoutMethod_t
{
METHOD_EVEN,
METHOD_STEP,
};
CUtlVector< Panel* > m_vecChildren;
ELayoutMethod_t m_eLayoutMethod;
CPanelAnimationVarAliasType( int, m_iXStep, "x_step", "0", "proportional_xpos" );
};
//-----------------------------------------------------------------------------
// Purpose: A representation of an econ item as a collectible card
//-----------------------------------------------------------------------------
class CTFItemCardPanel : public EditablePanel
{
DECLARE_CLASS_SIMPLE( CTFItemCardPanel, EditablePanel );
public:
CTFItemCardPanel( Panel *parent, const char *name );
virtual ~CTFItemCardPanel( void );
virtual void ApplySchemeSettings( IScheme *pScheme ) OVERRIDE;
virtual void ApplySettings( KeyValues *inResourceData ) OVERRIDE;
virtual void PerformLayout( void ) OVERRIDE;
virtual void SetVisible( bool bVisible ) OVERRIDE;
virtual void SetMouseInputEnabled( bool state ) OVERRIDE;
void SetItem( CEconItemView* pItem );
CEconItemView* GetItem() { return m_pItem; }
void PinCard( bool bPin );
bool IsPinned() const { return m_bPinned; }
private:
void UpdateDescription();
void UpdateModelOrIcon();
void LoadResFileForCurrentItem();
template < class T >
T* FindAndVerifyControl( Panel* pParent, const char* pszPanelName );
CEconItemView* m_pItem;
ImagePanel *m_pDropShadow;
CExImageButton *m_pCloseButton;
ImagePanel *m_pBackground;
ImagePanel *m_pGrime;
ImagePanel *m_pRarityBackgroundOverlay;
EditablePanel *m_pMainContainer;
EditablePanel *m_pCardTop;
CEmbeddedItemModelPanel *m_pItemModel;
EditablePanel *m_pRarityContainer;
Label *m_pItemName;
Label *m_pRarityName;
EditablePanel *m_pInfoContainer;
Label *m_pClassLabel;
CRepeatingContainer *m_pClassIconContainer;
Label *m_pTypeLabel;
Label *m_pTypeLabelValue;
Label *m_pExteriorLabel;
Label *m_pExteriorLabelValue;
EditablePanel *m_pBottomContainer;
CExScrollingEditablePanel *m_pBottomScrollingContainer;
Label *m_pAttribsLabel;
Label *m_pEquipSlotLabel;
bool m_bAllControlsValid;
bool m_bPinned;
CPanelAnimationVarAliasType( int, m_iShadowOffset, "shadowoffset", "5", "proportional_int" );
};
//-----------------------------------------------------------------------------
// Purpose: Item model panel tooltip. Calls setvisible on the controlled panel
// and positions it below/above the current panel.
//-----------------------------------------------------------------------------
class CItemCardPanelToolTip : public vgui::BaseTooltip
{
DECLARE_CLASS_SIMPLE( CItemCardPanelToolTip, vgui::BaseTooltip );
public:
CItemCardPanelToolTip(vgui::Panel *parent, const char *text = NULL);
void SetText(const char *text) { return; }
const char *GetText() { return NULL; }
virtual void PerformLayout();
virtual void ShowTooltip( vgui::Panel *currentPanel );
virtual void HideTooltip();
void SetupPanels( vgui::Panel *pParentPanel, CTFItemCardPanel *pMouseOverItemPanel ) { m_pParentPanel = pParentPanel; m_pMouseOverItemPanel = pMouseOverItemPanel; }
void SetPositioningStrategy( itempanel_tooltip_strategies_t iStrat ) { m_iPositioningStrategy = iStrat; }
private:
void GetPosition( itempanel_tooltippos_t iTooltipPosition, CItemModelPanel *pItemPanel, int iItemX, int iItemY, int *iXPos, int *iYPos );
bool ValidatePosition( CItemModelPanel *pItemPanel, int iItemX, int iItemY, int *iXPos, int *iYPos );
private:
CTFItemCardPanel *m_pMouseOverItemPanel; // This is the tooltip panel we make visible. Must be a CItemModelPanel.
vgui::Panel *m_pParentPanel; // This is the panel that we send item entered/exited messages to
vgui::DHANDLE<CItemModelPanel> m_hCurrentPanel;
itempanel_tooltip_strategies_t m_iPositioningStrategy;
bool m_bHorizontalPreferLeft;
};
#endif // TF_ITEM_CARD_PANEL_H