aboutsummaryrefslogtreecommitdiff
path: root/sp/src/game/client/replay/vgui/replaybrowsermainpanel.cpp
diff options
context:
space:
mode:
authorJørgen P. Tjernø <[email protected]>2013-12-02 19:31:46 -0800
committerJørgen P. Tjernø <[email protected]>2013-12-02 19:46:31 -0800
commitf56bb35301836e56582a575a75864392a0177875 (patch)
treede61ddd39de3e7df52759711950b4c288592f0dc /sp/src/game/client/replay/vgui/replaybrowsermainpanel.cpp
parentMark some more files as text. (diff)
downloadsource-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz
source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip
Fix line endings. WHAMMY.
Diffstat (limited to 'sp/src/game/client/replay/vgui/replaybrowsermainpanel.cpp')
-rw-r--r--sp/src/game/client/replay/vgui/replaybrowsermainpanel.cpp896
1 files changed, 448 insertions, 448 deletions
diff --git a/sp/src/game/client/replay/vgui/replaybrowsermainpanel.cpp b/sp/src/game/client/replay/vgui/replaybrowsermainpanel.cpp
index 8d04b945..2dcc6893 100644
--- a/sp/src/game/client/replay/vgui/replaybrowsermainpanel.cpp
+++ b/sp/src/game/client/replay/vgui/replaybrowsermainpanel.cpp
@@ -1,449 +1,449 @@
-//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-//=============================================================================//
-
-
-#include "cbase.h"
-
-#if defined( REPLAY_ENABLED )
-
-#include "replaybrowsermainpanel.h"
-#include "replaybrowserbasepage.h"
-#include "confirm_delete_dialog.h"
-#include "vgui_controls/PropertySheet.h"
-#include "vgui_controls/TextImage.h"
-#include "vgui/IInput.h"
-#include "vgui/ISurface.h"
-#include "ienginevgui.h"
-#include "replay/ireplaymanager.h"
-#include "replay/ireplaymoviemanager.h"
-#include "econ/econ_controls.h"
-
-// memdbgon must be the last include file in a .cpp file!!!
-#include <tier0/memdbgon.h>
-
-//-----------------------------------------------------------------------------
-// Purpose: Replay deletion confirmation dialog
-//-----------------------------------------------------------------------------
-class CConfirmDeleteReplayDialog : public CConfirmDeleteDialog
-{
- DECLARE_CLASS_SIMPLE( CConfirmDeleteReplayDialog, CConfirmDeleteDialog );
-public:
- CConfirmDeleteReplayDialog( Panel *pParent, IReplayItemManager *pItemManager, int iPerformance )
- : BaseClass( pParent )
- {
- m_pTextId = iPerformance >= 0 ? "#Replay_DeleteEditConfirm" : pItemManager->AreItemsMovies() ? "#Replay_DeleteMovieConfirm" : "#Replay_DeleteReplayConfirm";
- }
-
- const wchar_t *GetText()
- {
- return g_pVGuiLocalize->Find( m_pTextId );
- }
-
- const char *m_pTextId;
-};
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-CReplayBrowserPanel::CReplayBrowserPanel( Panel *parent )
-: PropertyDialog(parent, "ReplayBrowser"),
- m_pConfirmDeleteDialog( NULL )
-{
- // Clear out delete info
- V_memset( &m_DeleteInfo, 0, sizeof( m_DeleteInfo ) );
-
- // Replay browser is parented to the game UI panel
- vgui::VPANEL gameuiPanel = enginevgui->GetPanel( PANEL_GAMEUIDLL );
- SetParent( gameuiPanel );
-
- SetMoveable( false );
- SetSizeable( false );
-
- vgui::HScheme scheme = vgui::scheme()->LoadSchemeFromFileEx( enginevgui->GetPanel( PANEL_CLIENTDLL ), "resource/ClientScheme.res", "ClientScheme");
- SetScheme(scheme);
- SetProportional( true );
-
- // Setup page
- m_pReplaysPage = new CReplayBrowserBasePage( this );
- m_pReplaysPage->AddActionSignalTarget( this );
-
- AddPage( m_pReplaysPage, "#Replay_MyReplays" );
-
- m_pReplaysPage->SetVisible( true );
-
- ListenForGameEvent( "gameui_hidden" );
-
- // Create this now, so that it can be the default button (if created in .res file, it fights with PropertyDialog's OkButton & generates asserts)
- CExButton *pCloseButton = new CExButton( this, "BackButton", "" );
- GetFocusNavGroup().SetDefaultButton(pCloseButton);
-
- m_flTimeOpened = 0.0f;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-CReplayBrowserPanel::~CReplayBrowserPanel()
-{
- if ( m_pConfirmDeleteDialog )
- {
- m_pConfirmDeleteDialog->MarkForDeletion();
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CReplayBrowserPanel::ApplySchemeSettings( vgui::IScheme *pScheme )
-{
- BaseClass::ApplySchemeSettings( pScheme );
-
- LoadControlSettings( "resource/ui/replaybrowser/mainpanel.res", "GAME" );
-
- SetOKButtonVisible(false);
- SetCancelButtonVisible(false);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CReplayBrowserPanel::PerformLayout( void )
-{
- if ( GetVParent() )
- {
- int w,h;
- vgui::ipanel()->GetSize( GetVParent(), w, h );
- SetBounds(0,0,w,h);
- }
-
- BaseClass::PerformLayout();
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CReplayBrowserPanel::ShowPanel(bool bShow, ReplayHandle_t hReplayDetails/*=REPLAY_HANDLE_INVALID*/,
- int iPerformance/*=-1*/ )
-{
- if ( bShow )
- {
- GetPropertySheet()->SetActivePage( m_pReplaysPage );
- InvalidateLayout( false, true );
- Activate();
-
- m_flTimeOpened = gpGlobals->realtime;
- }
- else
- {
- PostMessage( m_pReplaysPage, new KeyValues("CancelSelection") );
- }
-
- SetVisible( bShow );
- m_pReplaysPage->SetVisible( bShow );
-
- if ( hReplayDetails != REPLAY_HANDLE_INVALID )
- {
- char szDetails[32];
- V_snprintf( szDetails, sizeof( szDetails ), "details%i_%i", (int)hReplayDetails, iPerformance );
- m_pReplaysPage->OnCommand( szDetails );
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CReplayBrowserPanel::FireGameEvent( IGameEvent *event )
-{
- const char * type = event->GetName();
-
- if ( Q_strcmp(type, "gameui_hidden") == 0 )
- {
- ShowPanel( false );
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CReplayBrowserPanel::OnCommand( const char *command )
-{
- if ( !Q_stricmp( command, "back" ) )
- {
- if ( m_pReplaysPage->IsDetailsViewOpen() )
- {
- m_pReplaysPage->DeleteDetailsPanelAndShowReplayList();
- }
- else
- {
- // Close the main panel
- ShowPanel( false );
-
- // TODO: Properly manage the browser so that we don't have to recreate it ever time its opened
- MarkForDeletion();
-
- // If we're connected to a game server, we also close the game UI.
- if ( engine->IsInGame() )
- {
- engine->ClientCmd_Unrestricted( "gameui_hide" );
- }
- }
- }
-
- BaseClass::OnCommand( command );
-}
-
-void CReplayBrowserPanel::OnKeyCodeTyped(vgui::KeyCode code)
-{
- if ( code == KEY_ESCAPE )
- {
- ShowPanel( false );
- }
- else
- {
- BaseClass::OnKeyCodeTyped( code );
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CReplayBrowserPanel::OnKeyCodePressed(vgui::KeyCode code)
-{
- if ( GetBaseButtonCode( code ) == KEY_XBUTTON_B )
- {
- ShowPanel( false );
- }
- else if ( code == KEY_ENTER )
- {
- // do nothing, the default is to close the panel!
- }
- else
- {
- BaseClass::OnKeyCodePressed( code );
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CReplayBrowserPanel::ShowDeleteReplayDenialDlg()
-{
- ShowMessageBox( "#Replay_DeleteDenialTitle", "#Replay_DeleteDenialText", "#GameUI_OK" );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CReplayBrowserPanel::AttemptToDeleteReplayItem( Panel *pHandler, ReplayItemHandle_t hReplayItem,
- IReplayItemManager *pItemManager, int iPerformance )
-{
- IQueryableReplayItem *pItem = pItemManager->GetItem( hReplayItem );
- CGenericClassBasedReplay *pReplay = ToGenericClassBasedReplay( pItem->GetItemReplay() );
-
- // If this is an actual replay the user is trying to delete, only allow it
- // if the replay says it's OK. Don't execute this code for performances.
- if ( !pItemManager->AreItemsMovies() && iPerformance < 0 && !pReplay->ShouldAllowDelete() )
- {
- ShowDeleteReplayDenialDlg();
- return;
- }
-
- // Otherwise, show the confirm delete dlg
- vgui::surface()->PlaySound( "replay\\replaydialog_warn.wav" );
- ConfirmReplayItemDelete( pHandler, hReplayItem, pItemManager, iPerformance );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CReplayBrowserPanel::ConfirmReplayItemDelete( Panel *pHandler, ReplayItemHandle_t hReplayItem,
- IReplayItemManager *pItemManager, int iPerformance )
-{
- CConfirmDeleteReplayDialog *pConfirm = vgui::SETUP_PANEL( new CConfirmDeleteReplayDialog( this, pItemManager, iPerformance ) );
- if ( pConfirm )
- {
- // Cache replay and handler for later
- m_DeleteInfo.m_hReplayItem = hReplayItem;
- m_DeleteInfo.m_pItemManager = pItemManager;
- m_DeleteInfo.m_hHandler = pHandler->GetVPanel();
- m_DeleteInfo.m_iPerformance = iPerformance;
-
- // Display the panel!
- pConfirm->Show();
-
- // Cache confirm dialog ptr
- m_pConfirmDeleteDialog = pConfirm;
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CReplayBrowserPanel::OnConfirmDelete( KeyValues *data )
-{
- // Clear confirm ptr
- m_pConfirmDeleteDialog = NULL;
-
- // User confirmed delete?
- int nConfirmed = data->GetInt( "confirmed", 0 );
- if ( !nConfirmed )
- return;
-
- // Get the replay from the dialog
- ReplayItemHandle_t hReplayItem = m_DeleteInfo.m_hReplayItem;
-
- // Post actions signal to the handler
- KeyValues *pMsg = new KeyValues( "ReplayItemDeleted" );
- pMsg->SetInt( "replayitem", (int)hReplayItem );
- pMsg->SetInt( "perf", m_DeleteInfo.m_iPerformance );
- PostMessage( m_DeleteInfo.m_hHandler, pMsg );
-
- // Delete actual replay item
- if ( m_DeleteInfo.m_iPerformance < 0 )
- {
- // Cleanup UI related to the replay/movie
- CleanupUIForReplayItem( hReplayItem );
-
- // Delete the replay/movie
- m_DeleteInfo.m_pItemManager->DeleteItem( GetActivePage(), hReplayItem, false );
- }
-
- vgui::surface()->PlaySound( "replay\\deleted_take.wav" );
-
- // Clear delete info
- V_memset( &m_DeleteInfo, 0, sizeof( m_DeleteInfo ) );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CReplayBrowserPanel::OnSaveReplay( ReplayHandle_t hNewReplay )
-{
- // Verify that the handle is valid
- Assert( g_pReplayManager->GetReplay( hNewReplay ) );
-
- m_pReplaysPage->AddReplay( hNewReplay );
- m_pReplaysPage->Repaint();
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CReplayBrowserPanel::OnDeleteReplay( ReplayHandle_t hDeletedReplay )
-{
- // Verify that the handle is valid
- Assert( g_pReplayManager->GetReplay( hDeletedReplay ) );
-
- DeleteReplay( hDeletedReplay );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CReplayBrowserPanel::DeleteReplay( ReplayHandle_t hReplay )
-{
- m_pReplaysPage->DeleteReplay( hReplay );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CReplayBrowserPanel::CleanupUIForReplayItem( ReplayItemHandle_t hReplayItem )
-{
- if ( GetActivePage() == m_pReplaysPage )
- {
- m_pReplaysPage->CleanupUIForReplayItem( hReplayItem );
- }
-}
-
-static vgui::DHANDLE<CReplayBrowserPanel> g_ReplayBrowserPanel;
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-CReplayBrowserPanel *ReplayUI_OpenReplayBrowserPanel( ReplayHandle_t hReplayDetails,
- int iPerformance )
-{
- if ( !g_ReplayBrowserPanel.Get() )
- {
- g_ReplayBrowserPanel = vgui::SETUP_PANEL( new CReplayBrowserPanel( NULL ) );
- g_ReplayBrowserPanel->InvalidateLayout( false, true );
- }
-
- engine->ClientCmd_Unrestricted( "gameui_activate" );
- g_ReplayBrowserPanel->ShowPanel( true, hReplayDetails, iPerformance );
-
- extern IReplayMovieManager *g_pReplayMovieManager;
- if ( g_pReplayMovieManager->GetMovieCount() > 0 )
- {
- // Fire a message the game DLL can intercept (for achievements, etc).
- IGameEvent *event = gameeventmanager->CreateEvent( "browse_replays" );
- if ( event )
- {
- gameeventmanager->FireEventClientSide( event );
- }
- }
-
- return g_ReplayBrowserPanel;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-CReplayBrowserPanel *ReplayUI_GetBrowserPanel( void )
-{
- return g_ReplayBrowserPanel.Get();
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void ReplayUI_CloseReplayBrowser()
-{
- if ( g_ReplayBrowserPanel )
- {
- g_ReplayBrowserPanel->MarkForDeletion();
- g_ReplayBrowserPanel = NULL;
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void ReplayUI_ReloadBrowser( ReplayHandle_t hReplay/*=REPLAY_HANDLE_INVALID*/,
- int iPerformance/*=-1*/ )
-{
- delete g_ReplayBrowserPanel.Get();
- g_ReplayBrowserPanel = NULL;
- ReplayUI_OpenReplayBrowserPanel( hReplay, iPerformance );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-CON_COMMAND_F( open_replaybrowser, "Open the replay browser.", FCVAR_CLIENTDLL )
-{
- ReplayUI_OpenReplayBrowserPanel( REPLAY_HANDLE_INVALID, -1 );
- g_ReplayBrowserPanel->InvalidateLayout( false, true );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-CON_COMMAND_F( replay_reloadbrowser, "Reloads replay data and display replay browser", FCVAR_CLIENTDLL | FCVAR_CLIENTCMD_CAN_EXECUTE )
-{
- ReplayUI_ReloadBrowser();
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-CON_COMMAND_F( replay_hidebrowser, "Hides replay browser", FCVAR_CLIENTDLL )
-{
- ReplayUI_CloseReplayBrowser();
-}
-
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+
+#include "cbase.h"
+
+#if defined( REPLAY_ENABLED )
+
+#include "replaybrowsermainpanel.h"
+#include "replaybrowserbasepage.h"
+#include "confirm_delete_dialog.h"
+#include "vgui_controls/PropertySheet.h"
+#include "vgui_controls/TextImage.h"
+#include "vgui/IInput.h"
+#include "vgui/ISurface.h"
+#include "ienginevgui.h"
+#include "replay/ireplaymanager.h"
+#include "replay/ireplaymoviemanager.h"
+#include "econ/econ_controls.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include <tier0/memdbgon.h>
+
+//-----------------------------------------------------------------------------
+// Purpose: Replay deletion confirmation dialog
+//-----------------------------------------------------------------------------
+class CConfirmDeleteReplayDialog : public CConfirmDeleteDialog
+{
+ DECLARE_CLASS_SIMPLE( CConfirmDeleteReplayDialog, CConfirmDeleteDialog );
+public:
+ CConfirmDeleteReplayDialog( Panel *pParent, IReplayItemManager *pItemManager, int iPerformance )
+ : BaseClass( pParent )
+ {
+ m_pTextId = iPerformance >= 0 ? "#Replay_DeleteEditConfirm" : pItemManager->AreItemsMovies() ? "#Replay_DeleteMovieConfirm" : "#Replay_DeleteReplayConfirm";
+ }
+
+ const wchar_t *GetText()
+ {
+ return g_pVGuiLocalize->Find( m_pTextId );
+ }
+
+ const char *m_pTextId;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CReplayBrowserPanel::CReplayBrowserPanel( Panel *parent )
+: PropertyDialog(parent, "ReplayBrowser"),
+ m_pConfirmDeleteDialog( NULL )
+{
+ // Clear out delete info
+ V_memset( &m_DeleteInfo, 0, sizeof( m_DeleteInfo ) );
+
+ // Replay browser is parented to the game UI panel
+ vgui::VPANEL gameuiPanel = enginevgui->GetPanel( PANEL_GAMEUIDLL );
+ SetParent( gameuiPanel );
+
+ SetMoveable( false );
+ SetSizeable( false );
+
+ vgui::HScheme scheme = vgui::scheme()->LoadSchemeFromFileEx( enginevgui->GetPanel( PANEL_CLIENTDLL ), "resource/ClientScheme.res", "ClientScheme");
+ SetScheme(scheme);
+ SetProportional( true );
+
+ // Setup page
+ m_pReplaysPage = new CReplayBrowserBasePage( this );
+ m_pReplaysPage->AddActionSignalTarget( this );
+
+ AddPage( m_pReplaysPage, "#Replay_MyReplays" );
+
+ m_pReplaysPage->SetVisible( true );
+
+ ListenForGameEvent( "gameui_hidden" );
+
+ // Create this now, so that it can be the default button (if created in .res file, it fights with PropertyDialog's OkButton & generates asserts)
+ CExButton *pCloseButton = new CExButton( this, "BackButton", "" );
+ GetFocusNavGroup().SetDefaultButton(pCloseButton);
+
+ m_flTimeOpened = 0.0f;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CReplayBrowserPanel::~CReplayBrowserPanel()
+{
+ if ( m_pConfirmDeleteDialog )
+ {
+ m_pConfirmDeleteDialog->MarkForDeletion();
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CReplayBrowserPanel::ApplySchemeSettings( vgui::IScheme *pScheme )
+{
+ BaseClass::ApplySchemeSettings( pScheme );
+
+ LoadControlSettings( "resource/ui/replaybrowser/mainpanel.res", "GAME" );
+
+ SetOKButtonVisible(false);
+ SetCancelButtonVisible(false);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CReplayBrowserPanel::PerformLayout( void )
+{
+ if ( GetVParent() )
+ {
+ int w,h;
+ vgui::ipanel()->GetSize( GetVParent(), w, h );
+ SetBounds(0,0,w,h);
+ }
+
+ BaseClass::PerformLayout();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CReplayBrowserPanel::ShowPanel(bool bShow, ReplayHandle_t hReplayDetails/*=REPLAY_HANDLE_INVALID*/,
+ int iPerformance/*=-1*/ )
+{
+ if ( bShow )
+ {
+ GetPropertySheet()->SetActivePage( m_pReplaysPage );
+ InvalidateLayout( false, true );
+ Activate();
+
+ m_flTimeOpened = gpGlobals->realtime;
+ }
+ else
+ {
+ PostMessage( m_pReplaysPage, new KeyValues("CancelSelection") );
+ }
+
+ SetVisible( bShow );
+ m_pReplaysPage->SetVisible( bShow );
+
+ if ( hReplayDetails != REPLAY_HANDLE_INVALID )
+ {
+ char szDetails[32];
+ V_snprintf( szDetails, sizeof( szDetails ), "details%i_%i", (int)hReplayDetails, iPerformance );
+ m_pReplaysPage->OnCommand( szDetails );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CReplayBrowserPanel::FireGameEvent( IGameEvent *event )
+{
+ const char * type = event->GetName();
+
+ if ( Q_strcmp(type, "gameui_hidden") == 0 )
+ {
+ ShowPanel( false );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CReplayBrowserPanel::OnCommand( const char *command )
+{
+ if ( !Q_stricmp( command, "back" ) )
+ {
+ if ( m_pReplaysPage->IsDetailsViewOpen() )
+ {
+ m_pReplaysPage->DeleteDetailsPanelAndShowReplayList();
+ }
+ else
+ {
+ // Close the main panel
+ ShowPanel( false );
+
+ // TODO: Properly manage the browser so that we don't have to recreate it ever time its opened
+ MarkForDeletion();
+
+ // If we're connected to a game server, we also close the game UI.
+ if ( engine->IsInGame() )
+ {
+ engine->ClientCmd_Unrestricted( "gameui_hide" );
+ }
+ }
+ }
+
+ BaseClass::OnCommand( command );
+}
+
+void CReplayBrowserPanel::OnKeyCodeTyped(vgui::KeyCode code)
+{
+ if ( code == KEY_ESCAPE )
+ {
+ ShowPanel( false );
+ }
+ else
+ {
+ BaseClass::OnKeyCodeTyped( code );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CReplayBrowserPanel::OnKeyCodePressed(vgui::KeyCode code)
+{
+ if ( GetBaseButtonCode( code ) == KEY_XBUTTON_B )
+ {
+ ShowPanel( false );
+ }
+ else if ( code == KEY_ENTER )
+ {
+ // do nothing, the default is to close the panel!
+ }
+ else
+ {
+ BaseClass::OnKeyCodePressed( code );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CReplayBrowserPanel::ShowDeleteReplayDenialDlg()
+{
+ ShowMessageBox( "#Replay_DeleteDenialTitle", "#Replay_DeleteDenialText", "#GameUI_OK" );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CReplayBrowserPanel::AttemptToDeleteReplayItem( Panel *pHandler, ReplayItemHandle_t hReplayItem,
+ IReplayItemManager *pItemManager, int iPerformance )
+{
+ IQueryableReplayItem *pItem = pItemManager->GetItem( hReplayItem );
+ CGenericClassBasedReplay *pReplay = ToGenericClassBasedReplay( pItem->GetItemReplay() );
+
+ // If this is an actual replay the user is trying to delete, only allow it
+ // if the replay says it's OK. Don't execute this code for performances.
+ if ( !pItemManager->AreItemsMovies() && iPerformance < 0 && !pReplay->ShouldAllowDelete() )
+ {
+ ShowDeleteReplayDenialDlg();
+ return;
+ }
+
+ // Otherwise, show the confirm delete dlg
+ vgui::surface()->PlaySound( "replay\\replaydialog_warn.wav" );
+ ConfirmReplayItemDelete( pHandler, hReplayItem, pItemManager, iPerformance );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CReplayBrowserPanel::ConfirmReplayItemDelete( Panel *pHandler, ReplayItemHandle_t hReplayItem,
+ IReplayItemManager *pItemManager, int iPerformance )
+{
+ CConfirmDeleteReplayDialog *pConfirm = vgui::SETUP_PANEL( new CConfirmDeleteReplayDialog( this, pItemManager, iPerformance ) );
+ if ( pConfirm )
+ {
+ // Cache replay and handler for later
+ m_DeleteInfo.m_hReplayItem = hReplayItem;
+ m_DeleteInfo.m_pItemManager = pItemManager;
+ m_DeleteInfo.m_hHandler = pHandler->GetVPanel();
+ m_DeleteInfo.m_iPerformance = iPerformance;
+
+ // Display the panel!
+ pConfirm->Show();
+
+ // Cache confirm dialog ptr
+ m_pConfirmDeleteDialog = pConfirm;
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CReplayBrowserPanel::OnConfirmDelete( KeyValues *data )
+{
+ // Clear confirm ptr
+ m_pConfirmDeleteDialog = NULL;
+
+ // User confirmed delete?
+ int nConfirmed = data->GetInt( "confirmed", 0 );
+ if ( !nConfirmed )
+ return;
+
+ // Get the replay from the dialog
+ ReplayItemHandle_t hReplayItem = m_DeleteInfo.m_hReplayItem;
+
+ // Post actions signal to the handler
+ KeyValues *pMsg = new KeyValues( "ReplayItemDeleted" );
+ pMsg->SetInt( "replayitem", (int)hReplayItem );
+ pMsg->SetInt( "perf", m_DeleteInfo.m_iPerformance );
+ PostMessage( m_DeleteInfo.m_hHandler, pMsg );
+
+ // Delete actual replay item
+ if ( m_DeleteInfo.m_iPerformance < 0 )
+ {
+ // Cleanup UI related to the replay/movie
+ CleanupUIForReplayItem( hReplayItem );
+
+ // Delete the replay/movie
+ m_DeleteInfo.m_pItemManager->DeleteItem( GetActivePage(), hReplayItem, false );
+ }
+
+ vgui::surface()->PlaySound( "replay\\deleted_take.wav" );
+
+ // Clear delete info
+ V_memset( &m_DeleteInfo, 0, sizeof( m_DeleteInfo ) );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CReplayBrowserPanel::OnSaveReplay( ReplayHandle_t hNewReplay )
+{
+ // Verify that the handle is valid
+ Assert( g_pReplayManager->GetReplay( hNewReplay ) );
+
+ m_pReplaysPage->AddReplay( hNewReplay );
+ m_pReplaysPage->Repaint();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CReplayBrowserPanel::OnDeleteReplay( ReplayHandle_t hDeletedReplay )
+{
+ // Verify that the handle is valid
+ Assert( g_pReplayManager->GetReplay( hDeletedReplay ) );
+
+ DeleteReplay( hDeletedReplay );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CReplayBrowserPanel::DeleteReplay( ReplayHandle_t hReplay )
+{
+ m_pReplaysPage->DeleteReplay( hReplay );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CReplayBrowserPanel::CleanupUIForReplayItem( ReplayItemHandle_t hReplayItem )
+{
+ if ( GetActivePage() == m_pReplaysPage )
+ {
+ m_pReplaysPage->CleanupUIForReplayItem( hReplayItem );
+ }
+}
+
+static vgui::DHANDLE<CReplayBrowserPanel> g_ReplayBrowserPanel;
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CReplayBrowserPanel *ReplayUI_OpenReplayBrowserPanel( ReplayHandle_t hReplayDetails,
+ int iPerformance )
+{
+ if ( !g_ReplayBrowserPanel.Get() )
+ {
+ g_ReplayBrowserPanel = vgui::SETUP_PANEL( new CReplayBrowserPanel( NULL ) );
+ g_ReplayBrowserPanel->InvalidateLayout( false, true );
+ }
+
+ engine->ClientCmd_Unrestricted( "gameui_activate" );
+ g_ReplayBrowserPanel->ShowPanel( true, hReplayDetails, iPerformance );
+
+ extern IReplayMovieManager *g_pReplayMovieManager;
+ if ( g_pReplayMovieManager->GetMovieCount() > 0 )
+ {
+ // Fire a message the game DLL can intercept (for achievements, etc).
+ IGameEvent *event = gameeventmanager->CreateEvent( "browse_replays" );
+ if ( event )
+ {
+ gameeventmanager->FireEventClientSide( event );
+ }
+ }
+
+ return g_ReplayBrowserPanel;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CReplayBrowserPanel *ReplayUI_GetBrowserPanel( void )
+{
+ return g_ReplayBrowserPanel.Get();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void ReplayUI_CloseReplayBrowser()
+{
+ if ( g_ReplayBrowserPanel )
+ {
+ g_ReplayBrowserPanel->MarkForDeletion();
+ g_ReplayBrowserPanel = NULL;
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void ReplayUI_ReloadBrowser( ReplayHandle_t hReplay/*=REPLAY_HANDLE_INVALID*/,
+ int iPerformance/*=-1*/ )
+{
+ delete g_ReplayBrowserPanel.Get();
+ g_ReplayBrowserPanel = NULL;
+ ReplayUI_OpenReplayBrowserPanel( hReplay, iPerformance );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CON_COMMAND_F( open_replaybrowser, "Open the replay browser.", FCVAR_CLIENTDLL )
+{
+ ReplayUI_OpenReplayBrowserPanel( REPLAY_HANDLE_INVALID, -1 );
+ g_ReplayBrowserPanel->InvalidateLayout( false, true );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CON_COMMAND_F( replay_reloadbrowser, "Reloads replay data and display replay browser", FCVAR_CLIENTDLL | FCVAR_CLIENTCMD_CAN_EXECUTE )
+{
+ ReplayUI_ReloadBrowser();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CON_COMMAND_F( replay_hidebrowser, "Hides replay browser", FCVAR_CLIENTDLL )
+{
+ ReplayUI_CloseReplayBrowser();
+}
+
#endif \ No newline at end of file