summaryrefslogtreecommitdiff
path: root/common/vgui/vgui_basebudgetpanel.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/vgui/vgui_basebudgetpanel.h')
-rw-r--r--common/vgui/vgui_basebudgetpanel.h145
1 files changed, 145 insertions, 0 deletions
diff --git a/common/vgui/vgui_basebudgetpanel.h b/common/vgui/vgui_basebudgetpanel.h
new file mode 100644
index 0000000..27115bc
--- /dev/null
+++ b/common/vgui/vgui_basebudgetpanel.h
@@ -0,0 +1,145 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#ifndef VGUI_BASEBUDGETPANEL_H
+#define VGUI_BASEBUDGETPANEL_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include <vgui_controls/Frame.h>
+#include <vgui/IScheme.h>
+#include "vgui_budgethistorypanel.h"
+#include "vgui_budgetbargraphpanel.h"
+#include "utlsymbol.h"
+//#include "hudelement.h"
+
+
+#define BUDGET_HISTORY_COUNT 1024
+
+class CBudgetGroupInfo
+{
+public:
+ CUtlSymbol m_Name;
+ Color m_Color;
+};
+
+// Derived classes supply this configuration data with OnConfigDataChanged.
+class CBudgetPanelConfigData
+{
+public:
+ // NOTE: nothing can ever be removed from this list once you've called
+ // OnConfigDataChanged. Elements can only be added to it.
+ CUtlVector<CBudgetGroupInfo> m_BudgetGroupInfo;
+
+ float m_flHistoryRange;
+ float m_flBottomOfHistoryFraction;
+ CUtlVector<float> m_HistoryLabelValues; // A label will be placed at each of these values.
+
+ // How much range the bar graph represents.
+ float m_flBarGraphRange;
+
+ // Controls how many labels are shown.
+ float m_flTimeLabelInterval;
+ int m_nLinesPerTimeLabel; // How many vertical lines per time label?
+
+ // How translucent is the background.
+ float m_flBackgroundAlpha;
+
+ // Where to position it on the screen.
+ int m_xCoord;
+ int m_yCoord;
+ int m_Width;
+ int m_Height;
+};
+
+
+class CBaseBudgetPanel : public vgui::Panel
+{
+ typedef vgui::Panel BaseClass;
+
+public:
+ CBaseBudgetPanel( vgui::Panel *pParent, const char *pElementName );
+ ~CBaseBudgetPanel();
+
+ // This should be called when starting up and whenever this data changes.
+ void OnConfigDataChanged( const CBudgetPanelConfigData &data );
+
+ // Call this to reset everything.
+ virtual void ResetAll();
+
+ // The derived class should implement this and set the text in the time labels.
+ virtual void SetTimeLabelText() {}
+ virtual void SetHistoryLabelText() {}
+
+ virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
+ virtual void Paint();
+ virtual void PaintBackground();
+ virtual void PerformLayout();
+ void MarkAsDedicatedServer() { m_bDedicated = true; } // plays nicer as part of a vgui window setup
+ bool IsDedicated() const { return m_bDedicated; }
+
+ const double *GetBudgetGroupData( int &nGroups, int &nSamplesPerGroup, int &nSampleOffset ) const;
+
+ void GetGraphLabelScreenSpaceTopAndBottom( int id, int &top, int &bottom );
+
+ // What percentage is the specified value of the (bargraph) range?
+ float GetBudgetGroupPercent( float value );
+
+ // Get the current config data.
+ const CBudgetPanelConfigData& GetConfigData() const;
+
+ // Returns the number of budget groups in the last OnConfigDataChanged call.
+ int GetNumCachedBudgetGroups() const;
+
+ // (Used by dedicated server, mark everything for a repaint).
+ void MarkForFullRepaint();
+
+protected:
+ void UpdateWindowGeometry();
+ void ClearTimesForAllGroupsForThisFrame( void );
+ void ClearAllTimesForGroup( int groupID );
+ void Rebuild( const CBudgetPanelConfigData &data );
+
+protected:
+ int m_BudgetHistoryOffset;
+
+ // This defines all the positioning, label names, etc.
+ CBudgetPanelConfigData m_ConfigData;
+
+ CUtlVector<vgui::Label *> m_GraphLabels;
+ CUtlVector<vgui::Label *> m_TimeLabels;
+ CUtlVector<vgui::Label *> m_HistoryLabels;
+
+ CBudgetHistoryPanel *m_pBudgetHistoryPanel;
+ CBudgetBarGraphPanel *m_pBudgetBarGraphPanel;
+
+ struct BudgetGroupTimeData_t
+ {
+ double m_Time[BUDGET_HISTORY_COUNT];
+ };
+ CUtlVector<BudgetGroupTimeData_t> m_BudgetGroupTimes; // [m_CachedNumBudgetGroups][BUDGET_HISTORY_COUNT]
+ int m_CachedNumTimeLabels;
+ vgui::HFont m_hFont;
+
+ bool m_bDedicated;
+};
+
+
+inline const CBudgetPanelConfigData& CBaseBudgetPanel::GetConfigData() const
+{
+ return m_ConfigData;
+}
+
+inline int CBaseBudgetPanel::GetNumCachedBudgetGroups() const
+{
+ return m_ConfigData.m_BudgetGroupInfo.Count();
+}
+
+
+#endif // VGUI_BASEBUDGETPANEL_H