summaryrefslogtreecommitdiff
path: root/gameui/LoadGameDialog_Xbox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gameui/LoadGameDialog_Xbox.cpp')
-rw-r--r--gameui/LoadGameDialog_Xbox.cpp219
1 files changed, 219 insertions, 0 deletions
diff --git a/gameui/LoadGameDialog_Xbox.cpp b/gameui/LoadGameDialog_Xbox.cpp
new file mode 100644
index 0000000..742a0ea
--- /dev/null
+++ b/gameui/LoadGameDialog_Xbox.cpp
@@ -0,0 +1,219 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#include "BasePanel.h"
+#include "LoadGameDialog.h"
+
+#include "winlite.h"
+#include "vgui/ISurface.h"
+
+#include "EngineInterface.h"
+#include "GameUI_Interface.h"
+#include "ixboxsystem.h"
+#include "filesystem.h"
+
+#include "SaveGameBrowserDialog.h"
+
+using namespace vgui;
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include <tier0/memdbgon.h>
+
+CLoadGameDialogXbox::CLoadGameDialogXbox( vgui::Panel *parent ) : BaseClass( parent )
+{
+ m_bFilterAutosaves = false;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CLoadGameDialogXbox::ApplySchemeSettings( vgui::IScheme *pScheme )
+{
+ BaseClass::ApplySchemeSettings( pScheme );
+
+ vgui::Label *pTitle = (Label *) FindChildByName( "TitleLabel" );
+ if ( pTitle )
+ {
+ pTitle->SetText( "#GameUI_LoadGame" );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CLoadGameDialogXbox::PerformSelectedAction( void )
+{
+ BaseClass::PerformSelectedAction();
+
+ if ( !GetNumPanels() )
+ return;
+
+ SetControlDisabled( true );
+
+ // Warn the player if they're already in a map
+ if ( !GameUI().HasSavedThisMenuSession() && GameUI().IsInLevel() && engine->GetMaxClients() == 1 )
+ {
+ BasePanel()->ShowMessageDialog( MD_SAVE_BEFORE_LOAD, this );
+ }
+ else
+ {
+ // Otherwise just do it
+ OnCommand( "LoadGame" );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CLoadGameDialogXbox::PerformDeletion( void )
+{
+ // Cannot delete autosaves!
+ CGameSavePanel *pPanel = GetActivePanel();
+ if ( pPanel == NULL || ( pPanel && pPanel->IsAutoSaveType() ) )
+ return;
+
+ BaseClass::PerformDeletion();
+
+ SetControlDisabled( true );
+
+ vgui::surface()->PlaySound( "UI/buttonclickrelease.wav" );
+ BasePanel()->ShowMessageDialog( MD_DELETE_SAVE_CONFIRM, this );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : bNewSaveSelected -
+//-----------------------------------------------------------------------------
+void CLoadGameDialogXbox::UpdateFooterOptions( void )
+{
+ CFooterPanel *pFooter = GetFooterPanel();
+
+ // Show available buttons
+ pFooter->ClearButtons();
+
+ // Make sure we have panels to show
+ if ( HasActivePanels() )
+ {
+ pFooter->AddNewButtonLabel( "#GameUI_Load", "#GameUI_Icons_A_BUTTON" );
+
+ // Don't allow deletions of autosaves!
+ CGameSavePanel *pPanel = GetActivePanel();
+ if ( pPanel && pPanel->IsAutoSaveType() == false )
+ {
+ pFooter->AddNewButtonLabel( "#GameUI_Delete", "#GameUI_Icons_X_BUTTON" );
+ }
+ }
+
+ // Always allow storage devices changes and cancelling
+ pFooter->AddNewButtonLabel( "#GameUI_Close", "#GameUI_Icons_B_BUTTON" );
+ pFooter->AddNewButtonLabel( "#GameUI_Console_StorageChange", "#GameUI_Icons_Y_BUTTON" );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : *command -
+//-----------------------------------------------------------------------------
+void CLoadGameDialogXbox::OnCommand( const char *command )
+{
+ m_KeyRepeat.Reset();
+
+ if ( !Q_stricmp( command, "LoadGame" ) )
+ {
+ // Must have an active panel to perform this action
+ if ( GetNumPanels() == 0 )
+ {
+ SetControlDisabled( false );
+ return;
+ }
+
+ const SaveGameDescription_t *pSave = GetActivePanelSaveDescription();
+
+ // Load the saved game
+ char szCmd[ 256 ];
+ Q_snprintf( szCmd, sizeof( szCmd ), "xload %s", pSave->szShortName );
+ engine->ClientCmd_Unrestricted( szCmd );
+
+ // Ignore all other input while we're open
+ OnClose();
+ }
+ else if ( !Q_stricmp( command, "DeleteGame" ) )
+ {
+ // Must have an active panel to perform this action
+ if ( GetNumPanels() == 0 )
+ {
+ SetControlDisabled( false );
+ return;
+ }
+
+ // Delete the game they've selected
+ const SaveGameDescription_t *pSave = GetActivePanelSaveDescription();
+ DeleteSaveGame( pSave );
+ RemoveActivePanel();
+ }
+ else if ( !Q_stricmp( command, "RefreshSaveGames" ) )
+ {
+ // FIXME: At this point the rug has been pulled out from undereath us!
+ RefreshSaveGames();
+ }
+ else if ( !Q_stricmp( command, "LoadGameCancelled" ) )
+ {
+ SetControlDisabled( false );
+ }
+ else if ( !Q_stricmp( command, "ReleaseModalWindow" ) )
+ {
+ vgui::surface()->RestrictPaintToSinglePanel( NULL );
+ }
+ else if ( !Q_stricmp( command, "DeleteGameCancelled" ) )
+ {
+ SetControlDisabled( false );
+ }
+ else
+ {
+ BaseClass::OnCommand(command);
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: deletes an existing save game
+//-----------------------------------------------------------------------------
+void CLoadGameDialogXbox::DeleteSaveGame( const SaveGameDescription_t *pSaveDesc )
+{
+ if ( pSaveDesc == NULL )
+ {
+ SetControlDisabled( false );
+ return;
+ }
+
+ // If we're deleting our more recent save game, we need to make sure we setup the engine to properly load the last most recent
+ if ( Q_stristr( engine->GetMostRecentSaveGame(), pSaveDesc->szShortName ) )
+ {
+ // We must have at least two active save games that we know about
+ if ( GetNumPanels() > 1 )
+ {
+ // The panels are sorted by how recent they are, so the first element is the most recent
+ const SaveGameDescription_t *pDesc = GetPanelSaveDecription( 0 );
+ if ( pDesc == pSaveDesc )
+ {
+ // If we're deleting our most recent, we need to pick the next most recent
+ pDesc = GetPanelSaveDecription( 1 );
+ }
+
+ // Remember this filename for the next time we need to reload
+ if ( pDesc )
+ {
+ engine->SetMostRecentSaveGame( pDesc->szShortName );
+ }
+ }
+ }
+
+ // Delete the save game file
+ g_pFullFileSystem->RemoveFile( pSaveDesc->szFileName, "MOD" );
+
+ vgui::surface()->PlaySound( "UI/buttonclick.wav" );
+
+ // Return control
+ SetControlDisabled( false );
+}