summaryrefslogtreecommitdiff
path: root/gameui/SaveGameBrowserDialog.h
diff options
context:
space:
mode:
Diffstat (limited to 'gameui/SaveGameBrowserDialog.h')
-rw-r--r--gameui/SaveGameBrowserDialog.h193
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