mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-29 17:43:01 +00:00
463 lines
15 KiB
C++
463 lines
15 KiB
C++
//========= 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
|