aboutsummaryrefslogtreecommitdiff
path: root/sp/src/game/client/replay/vgui/replaybrowseritemmanager.cpp
blob: 3776b7b9baaf8e2446d35f19a32b3579952ba041 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
//========= Copyright Valve Corporation, All rights reserved. ============//
//
//=======================================================================================//

#include "cbase.h"

#if defined( REPLAY_ENABLED )

#include "replaybrowseritemmanager.h"
#include "replaybrowserbasepage.h"
#include "replay/ireplaymoviemanager.h"
#include "replay/ireplaymanager.h"
#include "replay/ireplaymovie.h"

//-----------------------------------------------------------------------------

using namespace vgui;

//-----------------------------------------------------------------------------

extern IClientReplayContext *g_pClientReplayContext;
extern IReplayMovieManager *g_pReplayMovieManager;

//-----------------------------------------------------------------------------

class CReplayItemManager : public IReplayItemManager
{
public:
	virtual int GetItemCount()
	{
		return g_pReplayManager->GetReplayCount();
	}

	virtual void GetItems( CUtlLinkedList< IQueryableReplayItem *, int > &items )
	{
		g_pReplayManager->GetReplaysAsQueryableItems( items );
	}

	virtual IQueryableReplayItem *GetItem( ReplayItemHandle_t hItem )
	{
		return static_cast< CReplay * >( g_pReplayManager->GetReplay( (ReplayHandle_t)hItem ) );
	}

	virtual bool AreItemsMovies()
	{
		return false;
	}

	virtual void DeleteItem( Panel *pPage, ReplayItemHandle_t hItem, bool bNotifyUI )
	{
		g_pReplayManager->DeleteReplay( (ReplayHandle_t)hItem, bNotifyUI );
	}
};

//-----------------------------------------------------------------------------

class CMovieItemManager : public IReplayItemManager
{
public:
	virtual int GetItemCount()
	{
		return g_pReplayMovieManager->GetMovieCount();
	}

	virtual void GetItems( CUtlLinkedList< IQueryableReplayItem *, int > &items )
	{
		g_pReplayMovieManager->GetMoviesAsQueryableItems( items );
	}

	virtual IQueryableReplayItem *GetItem( ReplayItemHandle_t hItem )
	{
		return g_pReplayMovieManager->GetMovie( (ReplayHandle_t)hItem );
	}

	virtual bool AreItemsMovies()
	{
		return true;
	}

	virtual void DeleteItem( Panel *pPage, ReplayItemHandle_t hItem, bool bNotifyUI )
	{
		CReplayBrowserBasePage *pBasePage = static_cast< CReplayBrowserBasePage * >( pPage );

		// Free the lock so the file is deletable
		pBasePage->FreeDetailsPanelMovieLock();

		// Delete the entry & the file
		g_pReplayMovieManager->DeleteMovie( hItem );
	}
};

//-----------------------------------------------------------------------------

static CReplayItemManager s_ReplayItemManager;
static CMovieItemManager s_MovieItemManager;

//-----------------------------------------------------------------------------

IReplayItemManager *GetReplayItemManager()
{
	return &s_ReplayItemManager;
}

IReplayItemManager *GetReplayMovieItemManager()
{
	return &s_MovieItemManager;
}

IQueryableReplayItem *FindReplayItem( ReplayItemHandle_t hItem, IReplayItemManager **ppItemManager )
{
	static IReplayItemManager *s_pItemManagers[] = { &s_ReplayItemManager, &s_MovieItemManager };

	if ( ppItemManager )
	{
		*ppItemManager = NULL;
	}

	for ( int i = 0; i < 2; ++i )
	{
		IQueryableReplayItem *pItem = s_pItemManagers[ i ]->GetItem( hItem );
		if ( pItem )
		{
			if ( ppItemManager )
			{
				*ppItemManager = s_pItemManagers[ i ];
			}
			return pItem;
		}
	}
	return NULL;
}

#endif