Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.

171 lines
4.2 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef VGUI_VPROFPANEL_H
#define VGUI_VPROFPANEL_H
#ifdef _WIN32
#pragma once
#endif
#include <vgui_controls/TreeViewListControl.h>
#include <vgui_controls/Frame.h>
#include <vgui/IScheme.h>
//-----------------------------------------------------------------------------
// Forward declarations
//-----------------------------------------------------------------------------
class CVProfNode;
class CVProfile;
class CProfileHierarchyPanel : public vgui::CTreeViewListControl
{
DECLARE_CLASS_SIMPLE( CProfileHierarchyPanel, vgui::CTreeViewListControl );
public:
CProfileHierarchyPanel(vgui::Panel *parent, const char *panelName);
~CProfileHierarchyPanel();
struct PanelEntry_t
{
PanelEntry_t() :
label( 0 ),
dataname( UTL_INVAL_SYMBOL )
{
}
vgui::Label *label;
CUtlSymbol dataname;
};
struct ColumnPanels_t
{
ColumnPanels_t();
ColumnPanels_t( const ColumnPanels_t& src );
void AddColumn( int index, char const *name, vgui::Label *label );
void Refresh( KeyValues *kv );
int treeViewItem;
CUtlVector< PanelEntry_t > m_Columns;
};
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
virtual int AddItem( KeyValues *data, int parentItemIndex, ColumnPanels_t& columnPanels );
virtual void ModifyItem( KeyValues *data, int itemIndex );
virtual void SetItemColors( int id, const Color& fg, const Color& bg );
virtual void SetItemColumnColors( int id, int col, const Color& fg, const Color& bg );
virtual void PerformLayout();
virtual void RemoveAll();
virtual void PostChildPaint();
virtual void ExpandItem(int itemIndex, bool bExpand);
virtual bool IsItemExpanded( int itemIndex );
virtual KeyValues *GetItemData(int itemIndex);
public:
void HideAll();
static bool PanelsLessFunc( const ColumnPanels_t& lhs, const ColumnPanels_t& rhs )
{
return lhs.treeViewItem < rhs.treeViewItem;
}
CUtlRBTree< ColumnPanels_t, int > m_Panels;
vgui::HFont m_itemFont;
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CVProfPanel : public vgui::Frame
{
DECLARE_CLASS_SIMPLE( CVProfPanel, vgui::Frame );
public:
CVProfPanel( vgui::Panel *pParent, const char *pElementName );
~CVProfPanel();
void UpdateProfile( float filteredtime );
// Command handlers
void UserCmd_ShowVProf( void );
void UserCmd_HideVProf( void );
// Inherited from vgui::Frame
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
virtual void Close();
virtual void Paint();
virtual void OnTick( void );
virtual void OnCommand( const char *command );
void ExpandAll( void );
void CollapseAll( void );
void ExpandGroup( const char *pGroupName );
void Reset();
protected:
virtual void PerformLayout();
private:
MESSAGE_FUNC_PARAMS( OnTextChanged, "TextChanged", data );
MESSAGE_FUNC_PTR( OnCheckButtonChecked, "CheckButtonChecked", panel );
private:
void AddColumns( CProfileHierarchyPanel::ColumnPanels_t& cp );
void ExpandGroupRecursive( int nBudgetGroupID, CVProfNode *pNode );
void FillTree( KeyValues *pKeyValues, CVProfNode *pNode, int parent );
int UpdateVProfTreeEntry( KeyValues *pKeyValues, CVProfNode *pNode, int parent );
// Populates the budget group combo box
void PopulateBudgetGroupComboBox();
private:
int m_fShowVprofHeld;
CProfileHierarchyPanel *m_pHierarchy;
int m_RootItem;
vgui::ComboBox *m_pVProfCategory;
vgui::ComboBox *m_pVProfSort;
vgui::CheckButton *m_pHierarchicalView;
vgui::CheckButton *m_pVerbose;
int m_nLastBudgetGroupCount;
int m_nCurrentBudgetGroup;
bool m_bHierarchicalView;
vgui::Button *m_pStepForward;
vgui::Button *m_pStepBack;
vgui::Button *m_pGotoButton;
vgui::Label *m_pPlaybackLabel;
vgui::Button *m_pRedoSort;
vgui::ScrollBar *m_pPlaybackScroll;
int m_iLastPlaybackTick;
CVProfile *m_pVProfile;
};
//-----------------------------------------------------------------------------
// Global accessor
//-----------------------------------------------------------------------------
CVProfPanel *GetVProfPanel();
#endif // VGUI_VPROFPANEL_H