|
|
//========= 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
|