summaryrefslogtreecommitdiff
path: root/game/client/econ/item_selection_panel.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/econ/item_selection_panel.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/client/econ/item_selection_panel.h')
-rw-r--r--game/client/econ/item_selection_panel.h215
1 files changed, 215 insertions, 0 deletions
diff --git a/game/client/econ/item_selection_panel.h b/game/client/econ/item_selection_panel.h
new file mode 100644
index 0000000..f0ba474
--- /dev/null
+++ b/game/client/econ/item_selection_panel.h
@@ -0,0 +1,215 @@
+//========= 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