source-engine/game/client/replay/vgui/replaybrowserdetailspanel.h

463 lines
15 KiB
C
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef REPLAYBROWSER_DETAILSPANEL_H
#define REPLAYBROWSER_DETAILSPANEL_H
#ifdef _WIN32
#pragma once
#endif
#include <game/client/iviewport.h>
#include "vgui_controls/EditablePanel.h"
#include "vgui_controls/ScrollableEditablePanel.h"
#include "replay/iqueryablereplayitem.h"
#include "replay/ireplaymovie.h"
#include "replay/replayhandle.h"
#include "replay/gamedefs.h"
#include "econ/econ_controls.h"
using namespace vgui;
//-----------------------------------------------------------------------------
#define NUM_CLASSES_IN_LOADOUT_PANEL (TF_LAST_NORMAL_CLASS-1) // We don't allow unlockables for the civilian
//-----------------------------------------------------------------------------
// Purpose: Forward declarations
//-----------------------------------------------------------------------------
class CExLabel;
class CExButton;
class CTFReplay;
class CReplayPerformance;
class IReplayItemManager;
//-----------------------------------------------------------------------------
// Purpose: A panel containing 2 labels: one key, one value
//-----------------------------------------------------------------------------
class CKeyValueLabelPanel : public EditablePanel
{
DECLARE_CLASS_SIMPLE( CKeyValueLabelPanel, EditablePanel );
public:
CKeyValueLabelPanel( Panel *pParent, const char *pKey, const char *pValue );
CKeyValueLabelPanel( Panel *pParent, const char *pKey, const wchar_t *pValue );
virtual void ApplySchemeSettings( IScheme *pScheme );
virtual void PerformLayout();
int GetHeight() const;
int GetValueHeight() const;
void SetValue( const wchar_t *pValue );
private:
CExLabel *m_pLabels[2];
};
//-----------------------------------------------------------------------------
// Purpose: Base details panel with left/top padding and black border
//-----------------------------------------------------------------------------
class CBaseDetailsPanel : public EditablePanel
{
DECLARE_CLASS_SIMPLE( CBaseDetailsPanel, EditablePanel );
public:
CBaseDetailsPanel( Panel *pParent, const char *pName, ReplayHandle_t hReplay );
virtual void ApplySchemeSettings( IScheme *pScheme );
virtual void PerformLayout();
int GetMarginSize() const { return XRES(6); }
bool ShouldShow() const { return m_bShouldShow; }
protected:
EditablePanel *GetInset() { return m_pInsetPanel; }
ReplayHandle_t m_hReplay;
bool m_bShouldShow;
private:
EditablePanel *m_pInsetPanel; // padding on left/top
};
//-----------------------------------------------------------------------------
// Purpose: Score panel - contains score & any records from the round
//-----------------------------------------------------------------------------
class CRecordsPanel : public CBaseDetailsPanel
{
DECLARE_CLASS_SIMPLE( CRecordsPanel, CBaseDetailsPanel );
public:
CRecordsPanel( Panel *pParent, ReplayHandle_t hReplay );
virtual void ApplySchemeSettings( IScheme *pScheme );
virtual void PerformLayout();
private:
ImagePanel *m_pClassImage;
};
//-----------------------------------------------------------------------------
// Purpose: Stats panel
//-----------------------------------------------------------------------------
class CStatsPanel : public CBaseDetailsPanel
{
DECLARE_CLASS_SIMPLE( CStatsPanel, CBaseDetailsPanel );
public:
CStatsPanel( Panel *pParent, ReplayHandle_t hReplay );
virtual void ApplySchemeSettings( IScheme *pScheme );
virtual void PerformLayout();
private:
CKeyValueLabelPanel *m_paStatLabels[ REPLAY_MAX_DISPLAY_GAMESTATS ];
};
//-----------------------------------------------------------------------------
// Purpose: Dominations panel
//-----------------------------------------------------------------------------
class CDominationsPanel : public CBaseDetailsPanel
{
DECLARE_CLASS_SIMPLE( CDominationsPanel, CBaseDetailsPanel );
public:
CDominationsPanel( Panel *pParent, ReplayHandle_t hReplay );
virtual void ApplySchemeSettings( IScheme *pScheme );
virtual void PerformLayout();
ImagePanel *m_pNumDominationsImage;
CUtlVector< ImagePanel * > m_vecDominationImages;
};
//-----------------------------------------------------------------------------
// Purpose: Kills panel
//-----------------------------------------------------------------------------
class CKillsPanel : public CBaseDetailsPanel
{
DECLARE_CLASS_SIMPLE( CKillsPanel, CBaseDetailsPanel );
public:
CKillsPanel( Panel *pParent, ReplayHandle_t hReplay );
virtual void ApplySchemeSettings( IScheme *pScheme );
virtual void PerformLayout();
CKeyValueLabelPanel *m_pKillLabels;
CUtlVector< ImagePanel * > m_vecKillImages;
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CBasicLifeInfoPanel : public CBaseDetailsPanel
{
DECLARE_CLASS_SIMPLE( CBasicLifeInfoPanel, CBaseDetailsPanel );
public:
CBasicLifeInfoPanel( Panel *pParent, ReplayHandle_t hReplay );
virtual void ApplySchemeSettings( IScheme *pScheme );
virtual void PerformLayout();
private:
CKeyValueLabelPanel *m_pKilledByLabels;
CKeyValueLabelPanel *m_pMapLabels;
CKeyValueLabelPanel *m_pLifeLabels;
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CMovieInfoPanel : public CBaseDetailsPanel
{
DECLARE_CLASS_SIMPLE( CMovieInfoPanel, CBaseDetailsPanel );
public:
CMovieInfoPanel( Panel *pParent, ReplayHandle_t hReplay, QueryableReplayItemHandle_t hMovie,
IReplayItemManager *pItemManager );
virtual void ApplySchemeSettings( IScheme *pScheme );
virtual void PerformLayout();
private:
CKeyValueLabelPanel *m_pRenderTimeLabels;
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CYouTubeInfoPanel : public CBaseDetailsPanel
{
DECLARE_CLASS_SIMPLE( CYouTubeInfoPanel, CBaseDetailsPanel );
public:
CYouTubeInfoPanel( Panel *pParent );
virtual void PerformLayout();
void SetInfo( const wchar_t *pInfo );
private:
CKeyValueLabelPanel *m_pLabels;
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CTitleEditPanel : public EditablePanel
{
DECLARE_CLASS_SIMPLE( CTitleEditPanel, EditablePanel );
public:
CTitleEditPanel( Panel *pParent, QueryableReplayItemHandle_t hReplayItem, IReplayItemManager *pItemManager );
~CTitleEditPanel();
virtual void ApplySchemeSettings( IScheme *pScheme );
virtual void PerformLayout();
virtual void PaintBackground();
virtual void OnKeyCodeTyped(vgui::KeyCode code);
virtual void OnTick();
bool m_bMouseOver;
TextEntry *m_pTitleEntry;
ImagePanel *m_pHeaderLine;
CExLabel *m_pClickToEditLabel;
CExLabel *m_pCaratLabel;
QueryableReplayItemHandle_t m_hReplayItem;
IReplayItemManager *m_pItemManager;
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CReplayScreenshotSlideshowPanel;
class CPlaybackPanel : public EditablePanel
{
DECLARE_CLASS_SIMPLE( CPlaybackPanel, EditablePanel );
public:
CPlaybackPanel( Panel *pParent );
~CPlaybackPanel();
virtual void FreeMovieMaterial() {}
protected:
virtual void ApplySchemeSettings( IScheme *pScheme );
virtual void PerformLayout();
inline int GetMarginSize() { return 9; }
inline int GetViewWidth() { return GetWide() - 2 * GetMarginSize(); }
inline int GetViewHeight() { return GetTall() - 2 * GetMarginSize(); }
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CPlaybackPanelSlideshow : public CPlaybackPanel
{
DECLARE_CLASS_SIMPLE( CPlaybackPanelSlideshow, CPlaybackPanel );
public:
CPlaybackPanelSlideshow( Panel *pParent, ReplayHandle_t hReplay );
virtual void ApplySchemeSettings( IScheme *pScheme );
virtual void PerformLayout();
private:
ReplayHandle_t m_hReplay;
CExLabel *m_pNoScreenshotLabel;
CReplayScreenshotSlideshowPanel *m_pScreenshotImage;
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CMoviePlayerPanel;
class CPlaybackPanelMovie : public CPlaybackPanel
{
DECLARE_CLASS_SIMPLE( CPlaybackPanelMovie, CPlaybackPanel );
public:
CPlaybackPanelMovie( Panel *pParent, ReplayHandle_t hReplay );
virtual void ApplySchemeSettings( IScheme *pScheme );
virtual void PerformLayout();
virtual void FreeMovieMaterial();
private:
CExLabel *m_pLoadingLabel;
CMoviePlayerPanel *m_pMoviePlayerPanel;
ReplayHandle_t m_hMovie;
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CCutImagePanel : public CExImageButton
{
DECLARE_CLASS_SIMPLE( CCutImagePanel, CExImageButton );
public:
CCutImagePanel( Panel *pParent, const char *pName );
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
virtual void SetSelected( bool bState );
private:
virtual IBorder *GetBorder( bool bDepressed, bool bArmed, bool bSelected, bool bKeyFocus );
IBorder *m_pSelectedBorder;
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CReplayDetailsPanel;
class CCutsPanel : public CBaseDetailsPanel
{
DECLARE_CLASS_SIMPLE( CCutsPanel, CBaseDetailsPanel );
public:
CCutsPanel( Panel *pParent, ReplayHandle_t hReplay, int iPerformance );
~CCutsPanel();
virtual void ApplySchemeSettings( IScheme *pScheme );
virtual void PerformLayout();
virtual void OnCommand( const char *pCommand );
virtual void ApplySettings( KeyValues *pInResourceData );
void OnPerformanceDeleted( int iPerformance );
CPanelAnimationVarAliasType( int, m_nCutButtonWidth, "cut_button_width", "0", "proportional_xpos" );
CPanelAnimationVarAliasType( int, m_nCutButtonHeight, "cut_button_height", "0", "proportional_ypos" );
CPanelAnimationVarAliasType( int, m_nCutButtonBuffer, "cut_button_buffer", "0", "proportional_xpos" );
CPanelAnimationVarAliasType( int, m_nCutButtonSpace, "cut_button_space", "0", "proportional_xpos" );
CPanelAnimationVarAliasType( int, m_nCutButtonSpaceWide, "cut_button_space_wide", "0", "proportional_xpos" );
CPanelAnimationVarAliasType( int, m_nTopMarginHeight, "top_margin_height", "0", "proportional_ypos" );
CPanelAnimationVarAliasType( int, m_nNameLabelTopMargin, "name_label_top_margin", "0", "proportional_ypos" );
CPanelAnimationVarAliasType( int, m_nButtonStartY, "button_start_y", "0", "proportional_ypos" );
void UpdateNameLabel( int iPerformance );
private:
void SelectButtonFromPerformance( int iPerformance );
void SetPage( int iPage, int iButtonToSelect = 0 );
int ButtonToPerformance( int iButton ) const;
int PerformanceToButton( int iPerformance ) const;
const CReplayPerformance *GetPerformance( int iPerformance ) const;
virtual void OnTick();
struct ButtonInfo_t
{
CExImageButton *m_pButton;
CExButton *m_pAddToRenderQueueButton;
int m_iPerformance;
};
enum Consts_t
{
BUTTONS_PER_PAGE = 4
};
ButtonInfo_t m_aButtons[ BUTTONS_PER_PAGE ];
EditablePanel *m_pVerticalLine;
CExLabel *m_pNoCutsLabel;
CExLabel *m_pOriginalLabel;
CExLabel *m_pCutsLabel;
CExLabel *m_pNameLabel;
CExButton *m_pPrevButton;
CExButton *m_pNextButton;
int m_iPage;
int m_nVisibleButtons;
vgui::DHANDLE< CReplayDetailsPanel > m_hDetailsPanel;
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class IReplayItemManager;
class CConfirmDialog;
class CYouTubeGetStatsHandler;
class CReplayDetailsPanel : public EditablePanel
{
DECLARE_CLASS_SIMPLE( CReplayDetailsPanel, EditablePanel );
public:
CReplayDetailsPanel( Panel *pParent, QueryableReplayItemHandle_t hReplayItem, int iPerformance, IReplayItemManager *pItemManager );
~CReplayDetailsPanel();
virtual void ApplySchemeSettings( IScheme *pScheme );
virtual void PerformLayout();
virtual void OnMousePressed( MouseCode code );
virtual void OnKeyCodeTyped( KeyCode code );
virtual void OnCommand( const char *pCommand );
virtual void OnMessage( const KeyValues* pParams, VPANEL hFromPanel );
EditablePanel *GetInset() { return m_pInsetPanel; }
void ShowRenderDialog();
void FreeMovieFileLock();
void ShowExportDialog();
static void OnPlayerWarningDlgConfirm( bool bConfirmed, void *pContext );
enum eYouTubeStatus
{
kYouTubeStatus_Private,
kYouTubeStatus_RetrievingInfo,
kYouTubeStatus_RetrievedInfo,
kYouTubeStatus_CouldNotRetrieveInfo,
kYouTubeStatus_NotUploaded
};
void SetYouTubeStatus( eYouTubeStatus status );
EditablePanel *m_pInsetPanel; // Parent to most child panels listed here - narrower than screen width
EditablePanel *m_pInfoPanel; // Container for info panels
ScrollableEditablePanel *m_pScrollPanel;
CPlaybackPanel *m_pPlaybackPanel; // Contains screenshot, playback button
CRecordsPanel *m_pRecordsPanel; // Contains score, records
CStatsPanel *m_pStatsPanel; // Contains stats
CDominationsPanel *m_pDominationsPanel; // Dominations
CBasicLifeInfoPanel *m_pBasicInfoPanel; // Killed by, map, life
CKillsPanel *m_pKillsPanel; // # kills, kill class icons
CYouTubeInfoPanel *m_pYouTubeInfoPanel; // YouTube Info
CCutsPanel *m_pCutsPanel; // Buttons for performances
CUtlVector< CBaseDetailsPanel* > m_vecInfoPanels; // List of panels on the right
CTitleEditPanel *m_pTitleEditPanel;
CExButton *m_pBackButton;
CExButton *m_pDeleteButton;
CExButton *m_pRenderButton;
CExButton *m_pPlayButton;
CExButton *m_pExportMovie;
CExButton *m_pYouTubeUpload;
CExButton *m_pYouTubeView;
CExButton *m_pYouTubeShareURL;
CExImageButton *m_pShowRenderInfoButton;
QueryableReplayItemHandle_t m_hReplayItem;
ReplayHandle_t m_hReplay;
IReplayItemManager *m_pItemManager;
int m_iSelectedPerformance; // Which performance to play/render/delete
CYouTubeGetStatsHandler *m_pYouTubeResponseHandler;
vgui::FileOpenDialog *m_hExportMovieDialog;
private:
void ShowRenderInfo();
MESSAGE_FUNC_PARAMS( OnConfirmDisconnect, "ConfirmDlgResult", data );
MESSAGE_FUNC_CHARPTR( OnFileSelected, "FileSelected", fullpath );
CPanelAnimationVarAliasType( int, m_nMarginWidth, "margin_width", "0", "proportional_xpos" );
void GoBack();
void ShowPlayConfirmationDialog();
};
#endif // REPLAYBROWSER_DETAILSPANEL_H