diff options
Diffstat (limited to 'game/client/econ/backpack_panel.h')
| -rw-r--r-- | game/client/econ/backpack_panel.h | 268 |
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 |