summaryrefslogtreecommitdiff
path: root/game/client/econ/backpack_panel.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/econ/backpack_panel.h')
-rw-r--r--game/client/econ/backpack_panel.h268
1 files changed, 268 insertions, 0 deletions
diff --git a/game/client/econ/backpack_panel.h b/game/client/econ/backpack_panel.h
new file mode 100644
index 0000000..49ea3c3
--- /dev/null
+++ b/game/client/econ/backpack_panel.h
@@ -0,0 +1,268 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef BACKPACK_PANEL_H
+#define BACKPACK_PANEL_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "base_loadout_panel.h"
+#include "tf_item_inspection_panel.h"
+
+#define BACKPACK_SLOTS_PER_PAGE 50
+#define BACKPACK_ROWS 5
+#define BACKPACK_COLUMNS (BACKPACK_SLOTS_PER_PAGE / BACKPACK_ROWS)
+#define BACKPACK_MAX_PAGES (MAX_NUM_BACKPACK_SLOTS / BACKPACK_SLOTS_PER_PAGE)
+
+class CDynamicRecipePanel;
+class CItemSlotPanel;
+class CStrangeCountTransferPanel;
+class CCollectionCraftingPanel;
+class CHalloweenOfferingPanel;
+class CCraftCommonStatClockPanel;
+class CTFStorePreviewItemPanel2;
+
+//-----------------------------------------------------------------------------
+// An inventory screen that handles displaying the backpack
+//-----------------------------------------------------------------------------
+class CBackpackPanel : public CBaseLoadoutPanel
+{
+ DECLARE_CLASS_SIMPLE( CBackpackPanel, CBaseLoadoutPanel );
+public:
+ CBackpackPanel( vgui::Panel *parent, const char *panelName );
+ virtual ~CBackpackPanel();
+
+ virtual const char *GetResFile( void ) { return "Resource/UI/econ/BackpackPanel.res"; }
+ virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE;
+ virtual void ApplySettings( KeyValues *inResourceData ) OVERRIDE;
+ virtual void PerformLayout( void ) OVERRIDE;
+ virtual void FireGameEvent( IGameEvent *event ) OVERRIDE;
+
+ virtual void UpdateModelPanels( void );
+ virtual int GetNumItemPanels( void ) { return BACKPACK_SLOTS_PER_PAGE; };
+ virtual void OnShowPanel( bool bVisible, bool bReturningFromArmory );
+ virtual void PostShowPanel( bool bVisible );
+ virtual bool UsesRarityControls( void ) { return true; }
+ virtual bool AllowSelection( void ) { return true; }
+ virtual bool AllowDragging( CItemModelPanel *panel ) { return true; }
+
+ virtual int GetNumSlotsPerPage( void ) OVERRIDE { return BACKPACK_SLOTS_PER_PAGE; }
+ virtual int GetNumColumns( void ) OVERRIDE { return BACKPACK_COLUMNS; }
+ virtual int GetNumRows( void ) OVERRIDE { return BACKPACK_ROWS; }
+ virtual int GetNumPages( void ) OVERRIDE;
+ virtual void SetCurrentPage( int nNewPage ) OVERRIDE;
+
+ virtual void AssignItemToPanel( CItemModelPanel *pPanel, int iIndex );
+
+ virtual void OnItemPanelEntered( vgui::Panel *panel ) OVERRIDE;
+ virtual void OpenContextMenu();
+ MESSAGE_FUNC_PTR( OnItemPanelMousePressed, "ItemPanelMousePressed", panel );
+ MESSAGE_FUNC_PTR( OnItemPanelMouseReleased, "ItemPanelMouseReleased", panel );
+ MESSAGE_FUNC_PTR( OnItemPanelMouseRightRelease, "ItemPanelMouseRightRelease", panel );
+ MESSAGE_FUNC_INT_INT( OnCursorMoved, "OnCursorMoved", x, y );
+ MESSAGE_FUNC_INT_INT( OnItemPanelCursorMoved, "ItemPanelCursorMoved", x, y );
+ MESSAGE_FUNC_PARAMS( OnConfirmDelete, "ConfirmDlgResult", data );
+ MESSAGE_FUNC_PARAMS( OnTextChanged, "TextChanged", data );
+ MESSAGE_FUNC_PARAMS( OnButtonChecked, "CheckButtonChecked", pData );
+ MESSAGE_FUNC( OnCancelSelection, "CancelSelection" );
+ MESSAGE_FUNC( DoTradeToPlayer, "DoTradeToPlayer" );
+ MESSAGE_FUNC( DoSellMarketplace, "DoSellMarketplace" );
+ MESSAGE_FUNC( DoDescription, "DoDescription" );
+ MESSAGE_FUNC( DoRename, "DoRename" );
+ MESSAGE_FUNC( DoDelete, "DoDelete" );
+ MESSAGE_FUNC( DoApplyOnItem, "Context_ApplyOnItem" );
+ MESSAGE_FUNC( DoUseConsumableItem, "Context_UseConsumableItem" );
+ MESSAGE_FUNC( DoUnwrapItem, "Context_UnwrapItem" );
+ MESSAGE_FUNC( DoDeliverItem, "Context_DeliverItem" );
+ MESSAGE_FUNC( DoApplyByItem, "Context_ApplyByItem" );
+ MESSAGE_FUNC( DoShuffle, "Context_Shuffle" );
+ MESSAGE_FUNC( DoEditSlot, "Context_EditSlot" );
+ MESSAGE_FUNC( DoRefurbishItem, "Context_RefurbishItem" );
+ MESSAGE_FUNC( DoGetItemFromStore, "Context_GetItemFromStore" );
+ MESSAGE_FUNC( DoOpenDuckLeaderboards, "Context_OpenDuckLeaderboards" );
+ MESSAGE_FUNC( DoInspectModel, "Context_InspectModel" );
+ MESSAGE_FUNC( DoBuyKeyAndOpenCrate, "Context_BuyKeyAndOpenCrate" );
+ MESSAGE_FUNC( DoOpenCrateWithKey, "Context_OpenCrateWithKey" );
+ MESSAGE_FUNC( DoStrangeCountTransfer, "Context_OpenStrangeCountTransfer" );
+ MESSAGE_FUNC( DoCraftUpCollection, "Context_CraftUpCollection" );
+ MESSAGE_FUNC( DoHalloweenOffering, "Context_HalloweenOffering" );
+ MESSAGE_FUNC( DoCraftCommonStatClock, "Context_CraftCommonStatClock" );
+ void DoEquipForClass( int nClass );
+ void DoPaint( int nPaintItemIndex, bool bUseStore, bool bUseMarket );
+ void DoStrangePart( int nStrangePartIndex, bool bUseMarket );
+ enum ESelection
+ {
+ SELECT_FIRST,
+ SELECT_ALL
+ };
+ bool AttemptToUseItem( item_definition_index_t iItemDefIndex );
+ void AttemptToShowItemInStore( item_definition_index_t iItemDefIndex );
+ void AttemptToShowItemInMarket( item_definition_index_t iItemDefIndex );
+ void GetSelectedPanels( ESelection eSelection, CUtlVector< CItemModelPanel* >& m_vecSelected ) const;
+ virtual void OnCommand( const char *command );
+ virtual void OnTick( void );
+ virtual void OnThink( void );
+ virtual void OnKeyCodePressed( vgui::KeyCode code ) OVERRIDE;
+ virtual void OnKeyCodeReleased( vgui::KeyCode code ) OVERRIDE;
+ virtual void OnKeyCodeTyped(vgui::KeyCode code) OVERRIDE;
+
+ virtual void OnMouseReleased(vgui::MouseCode code) OVERRIDE;
+ virtual void OnMouseMismatchedRelease( vgui::MouseCode code, Panel* pPressedPanel ) OVERRIDE;
+ virtual void OnMouseCaptureLost() OVERRIDE;
+
+ void OnItemContentsChanged( CEconItemView *pEconItemView );
+
+ virtual void OpenArmory( CEconItemView* item );
+
+ void ToggleSelectBackpackItemPanel( CItemModelPanel *pPanel );
+ void DeSelectAllBackpackItemPanels( void );
+
+ CEconItemView* GetComboBoxOverlayUISeletionItem() { return &m_ComboBoxOverlaySelectionItem; }
+ void SetComboBoxOverlaySelectionItem( const CEconItemView *pEconItemView ) { m_ComboBoxOverlaySelectionItem = *pEconItemView; }
+
+ void SetCurrentTransactionID( uint64 nTxnID );
+ void CheckForQuickOpenKey();
+
+ void MarkItemIDDirty( itemid_t itemID );
+
+ void OpenInspectModelPanelAndCopyItem( CEconItemView *pItemView );
+ CCollectionCraftingPanel *GetCollectionCraftPanel();
+
+protected:
+ virtual void StartDrag( int x, int y );
+ virtual void StopDrag( bool bSucceeded );
+ virtual bool CanDragTo( CItemModelPanel *pItemPanel, int iPanelIndex ) { return true; }
+ virtual void HandleDragTo( CItemModelPanel *pItemPanel, int iPanelIndex );
+ virtual int GetBackpackPosForPanelIndex( int iPanelIndex ) { return iPanelIndex + 1 + (GetCurrentPage() * GetNumSlotsPerPage()); }
+ virtual bool NeedsDerivedTickSignal( void ) { return false; }
+
+ int GetBackpackPositionForPanel( CItemModelPanel *pItemPanel );
+ virtual const char *GetGreyOutItemPanelReason( CItemModelPanel *pItemPanel );
+ virtual void SetBorderForItem( CItemModelPanel *pItemPanel, bool bMouseOver );
+ virtual bool IsIgnoringItemPanelEnters( void ) { return m_bDragging; }
+ virtual void AddNewItemPanel( int iPanelIndex );
+ virtual CItemModelPanel *GetItemPanelAtPos( int x, int y );
+ virtual void PositionItemPanel( CItemModelPanel *pPanel, int iIndex );
+
+ void CancelToolSelection( void );
+ void SetShowBaseItems( bool bShow );
+
+ virtual ConVar *GetExplanationConVar( void );
+ bool ShouldShowExplanations( void ) { return (!m_bItemsOnly && !InToolSelectionMode()); }
+
+ bool InToolSelectionMode() const { return m_eSelectionMode != StandardSelection; }
+ void SetupToolSelectionItem();
+ void HandleToolItemSelection( CEconItemView *pItem );
+
+ void ClearNameFilter( bool bUpdateModelPanels );
+ bool HasNameFilter() const { return m_wNameFilter.Count() > 0; }
+ const wchar_t* GetNameFilter() const { return HasNameFilter() ? m_wNameFilter.Base() : NULL; }
+ void UpdateFilteringItems();
+
+ int GetItemQualityForBorder( CItemModelPanel* pItemPanel ) const;
+
+ int GetNumMaxPages() const { return BACKPACK_MAX_PAGES; }
+ int GetPageButtonIndexAtPos( int x, int y );
+ void SetPageButtonTextColorBasedOnContents();
+
+ void AddPaintToContextMenu( Menu *pPaintSubMenu, item_definition_index_t iPaintDef, bool bAddCommerce );
+ void AddCommerceToContextMenu( Menu *pMenu, const char* pszActionFmt, item_definition_index_t iItemDefIndex, bool bAddMarket, bool bAddStore );
+ void AddCommerceSubmenus( Menu *pSubMenu, item_definition_index_t iItemDef, const char* pszActionFmt );
+ void DoGiftToPlayer( );
+
+protected:
+ vgui::TextEntry *m_pNameFilterTextEntry;
+ CUtlVector<wchar_t> m_wNameFilter;
+ float m_flFilterItemTime;
+ CUtlMap< int, CEconItemView*, int > m_mapFilteringItems;
+ CUtlMap< itemid_t, char > m_mapSeenItems;
+ bool m_bInitializedSeenItems;
+ CUtlVector< itemid_t > m_vecDirtyItems;
+
+ CExButton *m_pNextPageButton;
+ CExButton *m_pPrevPageButton;
+ CExButton *m_pShowExplanationsButton;
+ vgui::Label *m_pCurPageLabel;
+ vgui::ComboBox *m_pSortByComboBox;
+ vgui::ComboBox *m_pShowRarityComboBox;
+ vgui::CheckButton *m_pShowBaseItemsCheckbox;
+ CExButton *m_pDragToNextPageButton;
+ CExButton *m_pDragToPrevPageButton;
+ float m_flPreventDragPageSwitchUntil;
+ float m_flStartExplanationsAt;
+
+ // Dragging support
+ float m_flMouseDownTime;
+ int m_iMouseDownX;
+ int m_iMouseDownY;
+ CItemModelPanel *m_pItemDraggedFromPanel;
+ int m_iDraggedFromPage;
+ bool m_bMouseDownOnItemPanel;
+ bool m_bDragging;
+ CItemModelPanel *m_pMouseDragItemPanel;
+ int m_iDragOffsetX;
+ int m_iDragOffsetY;
+ CItemModelPanel *m_pPrevDragOverItemPanel;
+
+ // Deletion
+ vgui::EditablePanel *m_pConfirmDeleteDialog;
+
+ // Tool support
+ enum SelectionMode_t
+ {
+ StandardSelection,
+ ToolSelection,
+ };
+ SelectionMode_t m_eSelectionMode;
+ int m_nLastToolPage;
+ CEconItemView m_ToolSelectionItem;
+ CExButton *m_pCancelToolButton;
+ vgui::ScalableImagePanel *m_pToolIcon;
+
+ CEconItemView m_ComboBoxOverlaySelectionItem;
+
+ CExButton *m_pCraftButton;
+
+ // base items or backpack items
+ bool m_bShowBaseItems;
+
+ // positions of all our item panels, so we can handle drag & drop
+ struct backpackitempos_t
+ {
+ int x,y;
+ };
+ CUtlVector<backpackitempos_t> m_ItemModelPanelPos;
+
+ KeyValues *m_pPageButtonKVs;
+ int m_nNumActivePages;
+ CUtlVector< EditablePanel* > m_Pages;
+ CUtlVector<backpackitempos_t> m_PageButtonPos;
+
+ CDynamicRecipePanel* m_pDynamicRecipePanel;
+ CItemSlotPanel* m_pItemSlotPanel;
+ CUtlVector< item_definition_index_t > m_vecPaintCans;
+ CUtlVector< item_definition_index_t > m_vecStrangeParts;
+
+ DHANDLE<CStrangeCountTransferPanel> m_pStrangeToolPanel;
+ DHANDLE<CCollectionCraftingPanel> m_pCollectionCraftPanel;
+ DHANDLE<CHalloweenOfferingPanel> m_pHalloweenOfferingPanel;
+ DHANDLE<CCraftCommonStatClockPanel> m_pMannCoTradePanel; // Make this Panel Generic
+ CTFItemInspectionPanel *m_pInspectPanel;
+ CTFStorePreviewItemPanel2 *m_pInspectCosmeticPanel;
+ vgui::Menu *m_pContextMenu;
+ CEconItemViewHandle m_hQuickOpenCrate;
+ uint64 m_nQuickOpenTxn;
+
+ CPanelAnimationVarAliasType( int, m_iPageButtonYPos, "page_button_y", "0", "proportional_int" );
+ CPanelAnimationVarAliasType( int, m_iPageButtonXDelta, "page_button_x_delta", "0", "proportional_int" );
+ CPanelAnimationVarAliasType( int, m_iPageButtonYDelta, "page_button_y_delta", "0", "proportional_int" );
+ CPanelAnimationVarAliasType( int, m_iPageButtonPerRow, "page_button_per_row", "20", "int" );
+ CPanelAnimationVarAliasType( int, m_iPageButtonHeight, "page_button_height", "0", "proportional_int" );
+};
+
+#endif // BACKPACK_PANEL_H