You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
216 lines
5.6 KiB
216 lines
5.6 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//=============================================================================// |
|
|
|
#include "cbase.h" |
|
|
|
#if defined( REPLAY_ENABLED ) |
|
|
|
#include "vgui/IInput.h" |
|
#include "vgui/ISurface.h" |
|
#include "vgui_controls/TextEntry.h" |
|
|
|
#include "replaybrowserbasepage.h" |
|
#include "replaybrowserdetailspanel.h" |
|
#include "replaybrowsermainpanel.h" |
|
#include "replaybrowserlistpanel.h" |
|
#include "replay/ireplaymoviemanager.h" |
|
#include "replay/ireplaymanager.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include <tier0/memdbgon.h> |
|
|
|
//----------------------------------------------------------------------------- |
|
|
|
extern IReplayMovieManager *g_pReplayMovieManager; |
|
|
|
//----------------------------------------------------------------------------- |
|
|
|
CReplayBrowserBasePage::CReplayBrowserBasePage( Panel *pParent ) |
|
: BaseClass( pParent, "BasePage" ) |
|
{ |
|
m_pReplayList = new CReplayListPanel( this, "ReplayList" ); |
|
m_pReplayList->SetFirstColumnWidth( 0 ); |
|
|
|
m_pSearchTextEntry = new vgui::TextEntry( this, "SearchTextEntry" ); |
|
m_pSearchTextEntry->SelectAllOnFocusAlways( true ); |
|
m_pSearchTextEntry->AddActionSignalTarget( this ); |
|
m_pSearchTextEntry->SetCatchEnterKey( true ); |
|
|
|
InvalidateLayout( true, true ); |
|
|
|
m_pReplayList->AddReplaysToList(); |
|
|
|
ivgui()->AddTickSignal( GetVPanel(), 100 ); |
|
} |
|
|
|
CReplayBrowserBasePage::~CReplayBrowserBasePage() |
|
{ |
|
ivgui()->RemoveTickSignal( GetVPanel() ); |
|
} |
|
|
|
void CReplayBrowserBasePage::OnTick() |
|
{ |
|
if ( !IsVisible() ) |
|
return; |
|
|
|
int nCursorX, nCursorY; |
|
input()->GetCursorPos( nCursorX, nCursorY ); |
|
|
|
if ( input()->IsMouseDown( MOUSE_LEFT ) && |
|
!m_pSearchTextEntry->IsWithin( nCursorX, nCursorY ) && |
|
m_pSearchTextEntry->HasFocus() ) |
|
{ |
|
RequestFocus(); |
|
} |
|
} |
|
|
|
void CReplayBrowserBasePage::ApplySchemeSettings( vgui::IScheme *pScheme ) |
|
{ |
|
BaseClass::ApplySchemeSettings( pScheme ); |
|
|
|
LoadControlSettings( "resource/ui/replaybrowser/basepage.res", "GAME" ); |
|
|
|
m_pSearchTextEntry->SetText( "#Replay_SearchText" ); |
|
} |
|
|
|
void CReplayBrowserBasePage::OnPageShow() |
|
{ |
|
BaseClass::OnPageShow(); |
|
m_pSearchTextEntry->SetText( "#Replay_SearchText" ); |
|
} |
|
|
|
void CReplayBrowserBasePage::OnSelectionStarted() |
|
{ |
|
PostActionSignal( new KeyValues("SelectionUpdate", "open", 1 ) ); |
|
} |
|
|
|
void CReplayBrowserBasePage::OnSelectionEnded() |
|
{ |
|
PostActionSignal( new KeyValues("SelectionUpdate", "open", 0 ) ); |
|
} |
|
|
|
void CReplayBrowserBasePage::CleanupUIForReplayItem( ReplayItemHandle_t hReplayItem ) |
|
{ |
|
m_pReplayList->CleanupUIForReplayItem( hReplayItem ); |
|
} |
|
|
|
void CReplayBrowserBasePage::AddReplay( ReplayHandle_t hReplay ) |
|
{ |
|
m_pReplayList->AddReplayItem( hReplay ); |
|
} |
|
|
|
void CReplayBrowserBasePage::DeleteReplay( ReplayHandle_t hReplayItem ) |
|
{ |
|
IReplayItemManager *pItemManager; |
|
if ( FindReplayItem( hReplayItem, &pItemManager ) ) |
|
{ |
|
ReplayUI_GetBrowserPanel()->AttemptToDeleteReplayItem( this, hReplayItem, pItemManager, -1 ); |
|
} |
|
} |
|
|
|
void CReplayBrowserBasePage::OnCancelSelection() |
|
{ |
|
} |
|
|
|
void CReplayBrowserBasePage::GoBack() |
|
{ |
|
DeleteDetailsPanelAndShowReplayList(); |
|
} |
|
|
|
void CReplayBrowserBasePage::OnReplayItemDeleted( KeyValues *pParams ) |
|
{ |
|
GoBack(); |
|
} |
|
|
|
void CReplayBrowserBasePage::OnTextChanged( KeyValues *data ) |
|
{ |
|
wchar_t wszText[256]; |
|
m_pSearchTextEntry->GetText( wszText, ARRAYSIZE( wszText ) ); |
|
m_pReplayList->ApplyFilter( wszText ); |
|
InvalidateLayout(); |
|
} |
|
|
|
void CReplayBrowserBasePage::OnCommand( const char *pCommand ) |
|
{ |
|
// User wants details on a replay? |
|
if ( !V_strnicmp( pCommand, "details", 7 ) ) |
|
{ |
|
// Get rid of preview panel |
|
m_pReplayList->ClearPreviewPanel(); |
|
|
|
QueryableReplayItemHandle_t hReplayItem = (QueryableReplayItemHandle_t)atoi( pCommand + 7 ); |
|
IReplayItemManager *pItemManager; |
|
IQueryableReplayItem *pReplayItem = FindReplayItem( hReplayItem, &pItemManager ); Assert( pReplayItem ); |
|
if ( pReplayItem ) |
|
{ |
|
// Get performance |
|
int iPerformance = -1; |
|
const char *pPerformanceStr = V_strstr( pCommand + 8, "_" ); |
|
if ( pPerformanceStr ) |
|
{ |
|
iPerformance = atoi( pPerformanceStr + 1 ); |
|
} |
|
|
|
m_hReplayDetailsPanel = vgui::SETUP_PANEL( new CReplayDetailsPanel( this, hReplayItem, iPerformance, pItemManager ) ); |
|
m_hReplayDetailsPanel->SetVisible( true ); |
|
m_hReplayDetailsPanel->MoveToFront(); |
|
|
|
m_pReplayList->SetVisible( false ); |
|
|
|
surface()->PlaySound( "replay\\showdetails.wav" ); |
|
} |
|
} |
|
|
|
// "back" button was hit in details panel? |
|
else if ( FStrEq( pCommand, "back" ) ) |
|
{ |
|
GoBack(); |
|
} |
|
|
|
BaseClass::OnCommand( pCommand ); |
|
} |
|
|
|
void CReplayBrowserBasePage::DeleteDetailsPanelAndShowReplayList() |
|
{ |
|
// Delete the panel |
|
if ( m_hReplayDetailsPanel ) |
|
{ |
|
m_hReplayDetailsPanel->MarkForDeletion(); |
|
m_hReplayDetailsPanel = NULL; |
|
} |
|
|
|
m_pReplayList->SetVisible( true ); |
|
} |
|
|
|
void CReplayBrowserBasePage::PerformLayout() |
|
{ |
|
BaseClass::PerformLayout(); |
|
|
|
if ( m_pSearchTextEntry ) |
|
{ |
|
const bool bHasReplays = g_pReplayManager && g_pReplayManager->GetReplayCount(); |
|
const bool bHasMovies = g_pReplayMovieManager && g_pReplayMovieManager->GetMovieCount(); |
|
int aListPos[2]; |
|
m_pReplayList->GetPos( aListPos[0], aListPos[1] ); |
|
m_pSearchTextEntry->SetPos( aListPos[0] + m_pReplayList->GetWide() - m_pSearchTextEntry->GetWide(), YRES( 5 ) ); |
|
m_pSearchTextEntry->SetVisible( bHasReplays || bHasMovies ); |
|
} |
|
|
|
// Invalidate the list too, because we might be laying out due to a replay being removed from the list. |
|
m_pReplayList->InvalidateLayout(); |
|
} |
|
|
|
void CReplayBrowserBasePage::FreeDetailsPanelMovieLock() |
|
{ |
|
m_hReplayDetailsPanel->FreeMovieFileLock(); |
|
} |
|
|
|
bool CReplayBrowserBasePage::IsDetailsViewOpen() |
|
{ |
|
return m_hReplayDetailsPanel.Get() != NULL && m_hReplayDetailsPanel->IsVisible(); |
|
} |
|
|
|
#endif |