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.
215 lines
8.6 KiB
215 lines
8.6 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef ITEM_SELECTION_PANEL_H |
|
#define ITEM_SELECTION_PANEL_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "vgui_controls/EditablePanel.h" |
|
#include "econ_controls.h" |
|
#include "vgui_controls/ScrollableEditablePanel.h" |
|
#include "backpack_panel.h" |
|
#include "base_loadout_panel.h" |
|
|
|
class CItemModelPanel; |
|
|
|
#define SELECTION_DISPLAY_SLOTS_PER_PAGE 18 |
|
#define SELECTION_DISPLAY_ROWS 3 |
|
#define SELECTION_DISPLAY_COLUMNS (SELECTION_DISPLAY_SLOTS_PER_PAGE / SELECTION_DISPLAY_ROWS) |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
struct item_stack_type_t |
|
{ |
|
item_stack_type_t() : m_nDefIndex( INVALID_ITEM_DEF_INDEX ), m_nQuality( (uint8)-1 ) { } |
|
item_stack_type_t( item_definition_index_t nDefIndex, uint8 nQuality ) : m_nDefIndex( nDefIndex ), m_nQuality( nQuality ) { } |
|
|
|
bool operator<( const item_stack_type_t& other ) const { return m_nDefIndex < other.m_nDefIndex || m_nQuality < other.m_nQuality; } |
|
bool operator==( const item_stack_type_t& other ) const { return m_nDefIndex == other.m_nDefIndex && m_nQuality == other.m_nQuality; } |
|
|
|
item_definition_index_t m_nDefIndex; |
|
uint8 m_nQuality; |
|
}; |
|
|
|
class CItemSelectionPanel : public CBaseLoadoutPanel |
|
{ |
|
DECLARE_CLASS_SIMPLE( CItemSelectionPanel, CBaseLoadoutPanel ); |
|
public: |
|
CItemSelectionPanel(Panel *parent); |
|
virtual ~CItemSelectionPanel(); |
|
|
|
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); |
|
virtual void ApplySettings( KeyValues *inResourceData ); |
|
virtual void PerformLayout( void ); |
|
virtual void OnThink( void ); |
|
virtual void OnCommand( const char *command ); |
|
virtual void OnClose( void ); |
|
virtual void SetVisible( bool bState ); |
|
virtual bool ShouldDeleteOnClose( void ) { return true; } |
|
virtual void OnKeyCodePressed( vgui::KeyCode code ) OVERRIDE; |
|
virtual void OnKeyCodeReleased( vgui::KeyCode code ) OVERRIDE; |
|
virtual void OnKeyCodeTyped( vgui::KeyCode code) OVERRIDE; |
|
MESSAGE_FUNC_PARAMS( OnButtonChecked, "CheckButtonChecked", pData ); |
|
|
|
virtual int GetNumItemPanels( void ) { return m_bShowingEntireBackpack ? BACKPACK_SLOTS_PER_PAGE : SELECTION_DISPLAY_SLOTS_PER_PAGE; }; |
|
virtual void PositionItemPanel( CItemModelPanel *pPanel, int iIndex ); |
|
virtual bool AllowSelection( void ) { return true; } |
|
virtual bool AllowDragging( CItemModelPanel *panel ) { return false; } |
|
|
|
virtual int GetNumSlotsPerPage( void ) OVERRIDE { return m_bShowingEntireBackpack ? BACKPACK_SLOTS_PER_PAGE : SELECTION_DISPLAY_SLOTS_PER_PAGE; } |
|
virtual int GetNumColumns( void ) OVERRIDE { return m_bShowingEntireBackpack ? BACKPACK_COLUMNS : SELECTION_DISPLAY_COLUMNS; } |
|
virtual int GetNumRows( void ) OVERRIDE { return m_bShowingEntireBackpack ? BACKPACK_ROWS : SELECTION_DISPLAY_ROWS; } |
|
virtual int GetNumPages( void ) OVERRIDE; |
|
virtual void SetCurrentPage( int nNewPage ) OVERRIDE; |
|
|
|
void UpdateModelPanels( void ); |
|
virtual void ApplyKVsToItemPanels( void ); |
|
virtual void CreateItemPanels( void ); |
|
|
|
void ShowDuplicateCounts( bool bShow ) { m_bShowDuplicates = bShow; } |
|
void UpdateDuplicateCounts( void ); |
|
|
|
MESSAGE_FUNC_PTR( OnItemPanelMousePressed, "ItemPanelMousePressed", panel ); |
|
MESSAGE_FUNC_PTR( OnItemPanelMouseReleased, "ItemPanelMouseReleased", panel ); |
|
MESSAGE_FUNC_PARAMS( OnTextChanged, "TextChanged", data ); |
|
|
|
// Derived panels need to override these with the custom selection behavior |
|
virtual const char *GetSchemeFile( void ) = 0; |
|
virtual bool ShouldItemPanelBeVisible( CItemModelPanel *pPanel, int iPanelIndex ) = 0; |
|
virtual void UpdateModelPanelsForSelection( void ) = 0; |
|
virtual const char *GetItemNotSelectableReason( const CEconItemView *pItem ) const = 0; |
|
|
|
virtual bool DisableItemSelectionFromGrayedOutPanels( void ) const { return false; } |
|
void NotifySelectionReturned( CItemModelPanel *pItemPanel ); |
|
void SetCaller( Panel* pCaller ) { m_pCaller = pCaller; } |
|
|
|
virtual bool DisplayOnlyAllowUniqueQualityCheckbox() const { return false; } |
|
|
|
protected: |
|
void PostMessageSelectionReturned( itemid_t ulItemID ); |
|
|
|
bool m_bShowingEntireBackpack; |
|
|
|
KeyValues *m_pSelectionItemModelPanelKVs; |
|
KeyValues *m_pDuplicateLabelKVs; |
|
vgui::CheckButton *m_pOnlyAllowUniqueQuality; |
|
CExButton *m_pShowBackpack; |
|
CExButton *m_pShowSelection; |
|
bool m_bForceBackpack; |
|
|
|
CExButton *m_pNextPageButton; |
|
CExButton *m_pPrevPageButton; |
|
vgui::Label *m_pCurPageLabel; |
|
vgui::Label *m_pNoItemsInSelectionLabel; |
|
|
|
int m_iItemsInSelection; |
|
|
|
bool m_bShowDuplicates; |
|
CUtlVector<CExLabel*> m_pDuplicateCountLabels; |
|
|
|
typedef CUtlMap< item_stack_type_t, int > DuplicateCountsMap_t; |
|
DuplicateCountsMap_t m_DuplicateCounts; // A map of item def indices to item counts. Derived classes should fill this out. |
|
|
|
bool m_bGotMousePressed; |
|
|
|
Panel *m_pCaller; |
|
vgui::TextEntry *m_pNameFilterTextEntry; |
|
CUtlVector<wchar_t> m_wNameFilter; |
|
float m_flFilterItemTime; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class CEquipSlotItemSelectionPanel : public CItemSelectionPanel |
|
{ |
|
public: |
|
DECLARE_CLASS_SIMPLE( CEquipSlotItemSelectionPanel, CItemSelectionPanel ); |
|
public: |
|
CEquipSlotItemSelectionPanel(Panel *parent, int iClass, int iSlot); |
|
|
|
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); |
|
virtual void PerformLayout( void ); |
|
|
|
virtual const char *GetSchemeFile( void ) { return "Resource/UI/ItemSelectionPanel.res"; } |
|
virtual bool ShouldItemPanelBeVisible( CItemModelPanel *pPanel, int iPanelIndex ); |
|
virtual void UpdateModelPanelsForSelection( void ); |
|
virtual const char *GetItemNotSelectableReason( const CEconItemView *pItem ) const; |
|
|
|
virtual bool DisableItemSelectionFromGrayedOutPanels( void ) const { return true; } |
|
|
|
void OnBackPressed(); |
|
|
|
protected: |
|
int m_iClass; // Class of the player we're selecting an item for |
|
int m_iSlot; // Slot on the player that we're selecting an item for |
|
|
|
itemid_t m_iCurrentItemID; |
|
|
|
vgui::Label *m_pWeaponLabel; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Selection panel that uses an Item Criteria block to do selection |
|
//----------------------------------------------------------------------------- |
|
class CItemCriteriaSelectionPanel : public CItemSelectionPanel |
|
{ |
|
DECLARE_CLASS_SIMPLE( CItemCriteriaSelectionPanel, CItemSelectionPanel ); |
|
public: |
|
CItemCriteriaSelectionPanel(Panel *parent, const CItemSelectionCriteria *pCriteria, itemid_t pExceptions[] = NULL, int iNumExceptions = 0 ); |
|
|
|
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); |
|
void UpdateExceptions( itemid_t pExceptions[], int iNumExceptions ); |
|
|
|
virtual const char *GetSchemeFile( void ) { return "Resource/UI/ItemSelectionPanel.res"; } |
|
virtual bool ShouldItemPanelBeVisible( CItemModelPanel *pPanel, int iPanelIndex ); |
|
virtual void UpdateModelPanelsForSelection( void ); |
|
virtual const char *GetItemNotSelectableReason( const CEconItemView *pItem ) const; |
|
|
|
protected: |
|
const CItemSelectionCriteria *m_pCriteria; |
|
CUtlVector<itemid_t> m_Exceptions; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Selection panel for crafting |
|
//----------------------------------------------------------------------------- |
|
class CCraftingItemSelectionPanel : public CItemCriteriaSelectionPanel |
|
{ |
|
DECLARE_CLASS_SIMPLE( CCraftingItemSelectionPanel, CItemCriteriaSelectionPanel ); |
|
public: |
|
CCraftingItemSelectionPanel(Panel *parent ); |
|
|
|
virtual const char *GetItemNotSelectableReason( const CEconItemView *pItem ) const; |
|
virtual bool ShouldDeleteOnClose( void ) { return false; } |
|
|
|
void UpdateOnShow( const CItemSelectionCriteria *pCriteria, bool bForceBackpack, itemid_t pExceptions[] = NULL, int iNumExceptions = 0 ); |
|
|
|
virtual bool DisplayOnlyAllowUniqueQualityCheckbox() const { return true; } |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class CAccountSlotItemSelectionPanel : public CEquipSlotItemSelectionPanel |
|
{ |
|
DECLARE_CLASS_SIMPLE( CAccountSlotItemSelectionPanel, CEquipSlotItemSelectionPanel ); |
|
public: |
|
CAccountSlotItemSelectionPanel( Panel *pParent, int iSlot, const char *pszTitleToken ); |
|
|
|
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE; |
|
|
|
virtual const char *GetItemNotSelectableReason( const CEconItemView *pItem ) const OVERRIDE; |
|
|
|
protected: |
|
const char * m_pszTitleToken; |
|
}; |
|
|
|
#endif // ITEM_SELECTION_PANEL_H
|
|
|