diff options
Diffstat (limited to 'gameui/SaveGameBrowserDialog.h')
| -rw-r--r-- | gameui/SaveGameBrowserDialog.h | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/gameui/SaveGameBrowserDialog.h b/gameui/SaveGameBrowserDialog.h new file mode 100644 index 0000000..1e66f26 --- /dev/null +++ b/gameui/SaveGameBrowserDialog.h @@ -0,0 +1,193 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#ifndef SAVEGAMEBROWSERDIALOG_H +#define SAVEGAMEBROWSERDIALOG_H +#ifdef _WIN32 +#pragma once +#endif + +#include "vgui/IScheme.h" +#include "vgui/ILocalize.h" +#include "vgui/ISurface.h" +#include "vgui/ISystem.h" +#include "vgui/IVGui.h" + +#include "vgui_controls/ImagePanel.h" +#include "vgui_controls/KeyRepeat.h" + +#include "BasePanel.h" + +class CSaveGameBrowserDialog; + +using namespace vgui; + +//----------------------------------------------------------------------------- +// Purpose: selectable item with screenshot for an individual chapter in the dialog +//----------------------------------------------------------------------------- +class CGameSavePanel : public vgui::EditablePanel +{ + DECLARE_CLASS_SIMPLE( CGameSavePanel, vgui::EditablePanel ); + +public: + + CGameSavePanel( CSaveGameBrowserDialog *parent, SaveGameDescription_t *pSaveDesc, bool bCommandPanel = false ); + ~CGameSavePanel( void ); + + virtual void ApplySchemeSettings( IScheme *pScheme ); + + bool IsAutoSaveType( void ) { return ( Q_stristr( m_SaveInfo.szType, "autosave" ) != 0 ); } + + const SaveGameDescription_t *GetSaveInfo( void ) { return ( const SaveGameDescription_t * ) &m_SaveInfo; } + void SetDescription( SaveGameDescription_t *pDesc ); + +protected: + + SaveGameDescription_t m_SaveInfo; // Stored internally for easy access + + ImagePanel *m_pLevelPicBorder; + ImagePanel *m_pLevelPic; + ImagePanel *m_pCommentaryIcon; + Label *m_pChapterTitle; + Label *m_pTime; + Label *m_pElapsedTime; + Label *m_pType; + + Color m_TextColor; + Color m_DisabledColor; + Color m_SelectedColor; + Color m_FillColor; + + bool m_bNewSavePanel; +}; + +// Slot indices in new game menu +#define INVALID_INDEX -1 +#define SLOT_OFFLEFT 0 +#define SLOT_LEFT 1 +#define SLOT_CENTER 2 +#define SLOT_RIGHT 3 +#define SLOT_OFFRIGHT 4 +#define NUM_SLOTS 5 + +//----------------------------------------------------------------------------- +// Purpose: Handles starting a new game, skill and chapter selection +//----------------------------------------------------------------------------- +class CSaveGameBrowserDialog : public vgui::Frame +{ + DECLARE_CLASS_SIMPLE( CSaveGameBrowserDialog, vgui::Frame ); + +public: + MESSAGE_FUNC( FinishScroll, "FinishScroll" ); + MESSAGE_FUNC( FinishDelete, "FinishDelete" ); + MESSAGE_FUNC( FinishInsert, "FinishInsert" ); + MESSAGE_FUNC( FinishOverwriteFadeDown, "FinishOverwriteFadeDown" ); + MESSAGE_FUNC( CloseAfterSave, "CloseAfterSave" ); + + CSaveGameBrowserDialog(vgui::Panel *parent ); + ~CSaveGameBrowserDialog(); + + virtual void OnKeyCodePressed( vgui::KeyCode code ); + + virtual void Activate( void ); + virtual void ApplySettings( KeyValues *inResourceData ); + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void OnClose( void ); + virtual void PaintBackground(); + virtual void PerformSelectedAction( void ); + virtual void PerformDeletion( void ); + virtual void UpdateFooterOptions( void ); + virtual void SortSaveGames( SaveGameDescription_t *pSaves, unsigned int nNumSaves ); + virtual void OnThink( void ); + virtual void OnKeyCodeReleased( vgui::KeyCode code ); + virtual void OnDoneScanningSaveGames( void ) {} + virtual void RefreshSaveGames( void ); + + unsigned int GetNumPanels( void ) { return m_SavePanels.Count(); } + bool HasActivePanels( void ) { return ( m_SavePanels.Count() != 0 ); } + CGameSavePanel *GetActivePanel( void ); + int GetActivePanelIndex( void ) { return m_iSelectedSave; } + CFooterPanel *GetFooterPanel( void ) { return m_pFooter; } + const SaveGameDescription_t *GetPanelSaveDecription( int idx ) { return ( IsValidPanel(idx) ? m_SavePanels[idx]->GetSaveInfo() : NULL ); } + const SaveGameDescription_t *GetActivePanelSaveDescription( void ) { return GetPanelSaveDecription( m_iSelectedSave ); } + + uint GetStorageSpaceUsed( void ) { return m_nUsedStorageSpace; } + + void SetSelectedSaveIndex( int index ); + void SetSelectedSave( const char *chapter ); + void AddPanel( CGameSavePanel *pPanel ) { m_SavePanels.AddToHead( pPanel ); } + + void RemoveActivePanel( void ); + void AnimateInsertNewPanel( const SaveGameDescription_t *pDesc ); + void AnimateOverwriteActivePanel( const SaveGameDescription_t *pNewDesc ); + + void SetControlDisabled( bool bState ) { m_bControlDisabled = bState; } + + // Xbox: Defined values are also used to shift the slot indices + enum EScrollDirection + { + SCROLL_RIGHT = -1, + SCROLL_NONE = 0, + SCROLL_LEFT = 1 + }; + EScrollDirection m_ScrollDirection; + +protected: + + bool m_bFilterAutosaves; + CKeyRepeatHandler m_KeyRepeat; + + bool ParseSaveData( char const *pszFileName, char const *pszShortName, SaveGameDescription_t *save ); + +private: + + CUtlVector<CGameSavePanel *> m_SavePanels; + int m_iSelectedSave; + float m_ScrollSpeedSlow; + float m_ScrollSpeedFast; + int m_nDeletedPanel; // Panel being subtracted + int m_nAddedPanel; // Panel being added + SaveGameDescription_t m_NewSaveGameDesc; // Held for panel animations + uint m_nUsedStorageSpace; // Amount of disk space used by save games + + vgui::Panel *m_pCenterBg; + CFooterPanel *m_pFooter; + + // Xbox + void ScrollSelectionPanels( EScrollDirection dir ); + void PreScroll( EScrollDirection dir ); + void PostScroll( EScrollDirection dir ); + void SetFastScroll( bool fast ); + void ContinueScrolling( void ); + void AnimateSelectionPanels( void ); + void ShiftPanelIndices( int offset ); + bool IsValidPanel( const int idx ); + void InitPanelIndexForDisplay( const int idx ); + void UpdateMenuComponents( EScrollDirection dir ); + void ScanSavedGames( bool bIgnoreAutosave ); + void LayoutPanels( void ); + + // "No Save Games" label + void ShowNoSaveGameUI( void ); + void HideNoSaveGameUI( void ); + void PerformSlideAction( int nPanelIndex, int nNextPanelIndex ); + void AnimateDialogStart( void ); + + int m_nCenterBgTallDefault; + int m_PanelXPos[ NUM_SLOTS ]; + int m_PanelYPos[ NUM_SLOTS ]; + float m_PanelAlpha[ NUM_SLOTS ]; + int m_PanelIndex[ NUM_SLOTS ]; + float m_ScrollSpeed; + int m_ButtonPressed; + int m_ScrollCt; + bool m_bScrolling : 1; + bool m_bSaveGameIsCorrupt : 1; + bool m_bControlDisabled : 1; +}; + + +#endif // SAVEGAMEBROWSERDIALOG_H
\ No newline at end of file |