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.
462 lines
15 KiB
462 lines
15 KiB
//========= 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
|
|
|