154 lines
4.4 KiB
C++
154 lines
4.4 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//=============================================================================
|
|
|
|
#ifndef GRAPHPANEL_H
|
|
#define GRAPHPANEL_H
|
|
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include <KeyValues.h>
|
|
|
|
#include <vgui_controls/Frame.h>
|
|
#include <vgui_controls/PHandle.h>
|
|
#include <vgui_controls/ListPanel.h>
|
|
#include <vgui_controls/PropertyPage.h>
|
|
#include <vgui_controls/Image.h>
|
|
#include <vgui_controls/ImagePanel.h>
|
|
#include <vgui/IScheme.h>
|
|
|
|
#include "RemoteServer.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Dialog for displaying information about a game server
|
|
//-----------------------------------------------------------------------------
|
|
class CGraphPanel : public vgui::PropertyPage, public IServerDataResponse
|
|
{
|
|
DECLARE_CLASS_SIMPLE( CGraphPanel, vgui::PropertyPage );
|
|
public:
|
|
CGraphPanel(vgui::Panel *parent, const char *name);
|
|
~CGraphPanel();
|
|
|
|
// property page handlers
|
|
virtual void OnPageShow();
|
|
virtual void OnPageHide();
|
|
|
|
void PerformLayout();
|
|
|
|
protected:
|
|
// callback for receiving server data
|
|
virtual void OnServerDataResponse(const char *value, const char *response);
|
|
|
|
// called every frame to update stats page
|
|
virtual void OnTick();
|
|
|
|
private:
|
|
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
|
|
|
|
typedef enum { SECONDS, MINUTES, HOURS } intervals;
|
|
struct Points_t
|
|
{
|
|
float cpu; // the percent CPU usage
|
|
float in; // the ingoing bandwidth in kB/sec
|
|
float out; // the outgoing bandwidth in kB/sec
|
|
float time; // the time this was recorded
|
|
float fps; // the FPS of the server
|
|
float ping; // the ping of the server
|
|
float players; // the number of players currently on the server
|
|
};
|
|
|
|
// internal class for holding the graph picture
|
|
class CGraphsImage: public vgui::Image
|
|
{
|
|
public:
|
|
CGraphsImage();
|
|
using Image::DrawLine;
|
|
using Image::SetPos;
|
|
bool AddPoint(Points_t p);
|
|
void RemovePoints() { points.RemoveAll(); }
|
|
void SaveSize(int x1,int y1) { x=x1;y=y1; SetSize(x1,y1);}
|
|
|
|
void SetDraw(bool cpu_in,bool fps_in,bool net_in,bool net_out,bool ping_in,bool players_in);
|
|
void SetScale(intervals time);
|
|
void SetBgColor(Color col) { bgColor=col; }
|
|
void SetAxisColor(Color col) { lineColor=col; }
|
|
|
|
// return the pre-defined colors of each graph type
|
|
Color GetCPUColor() { return CPUColor; }
|
|
Color GetFPSColor() { return FPSColor; }
|
|
Color GetInColor() { return NetInColor; }
|
|
Color GetOutColor() { return NetOutColor; }
|
|
Color GetPlayersColor() { return PlayersColor; }
|
|
Color GetPingColor() { return PingColor; }
|
|
|
|
// return the limits of various graphs
|
|
void GetFPSLimits(float &max, float &min) { min=minFPS; max=maxFPS; }
|
|
void GetInLimits(float &max, float &min) { min=minIn; max=maxIn; }
|
|
void GetOutLimits(float &max, float &min) { min=minOut; max=maxOut; }
|
|
void GetPingLimits(float &max, float &min) { min=minPing; max=maxPing; }
|
|
void GetPlayerLimits(float &max, float &min) { min=minPlayers; max=maxPlayers; }
|
|
|
|
virtual void Paint();
|
|
|
|
private:
|
|
|
|
void AvgPoint(Points_t p);
|
|
void CheckBounds(Points_t p);
|
|
|
|
CUtlVector<Points_t> points;
|
|
|
|
int x,y; // the size
|
|
float maxIn,minIn,maxOut,minOut; // max and min bandwidths
|
|
float maxFPS,minFPS;
|
|
float minPing,maxPing;
|
|
float maxPlayers,minPlayers;
|
|
|
|
bool cpu,fps,net_i,ping,net_o,players;
|
|
intervals timeBetween;
|
|
Points_t avgPoint;
|
|
int numAvgs;
|
|
Color bgColor,lineColor;
|
|
|
|
// colors for the various graphs, set in graphpanel.cpp
|
|
static Color CPUColor;
|
|
static Color FPSColor;
|
|
static Color NetInColor;
|
|
static Color NetOutColor;
|
|
static Color PlayersColor;
|
|
static Color PingColor;
|
|
};
|
|
friend CGraphsImage; // so it can use the intervals enum
|
|
|
|
vgui::Label *GetLabel(const char *name);
|
|
void SetAxisLabels(Color c,char *max,char *mid,char *min);
|
|
|
|
// msg handlers
|
|
MESSAGE_FUNC( OnCheckButton, "CheckButtonChecked" );
|
|
MESSAGE_FUNC_PTR_CHARPTR( OnTextChanged, "TextChanged", panel, text );
|
|
MESSAGE_FUNC( OnClearButton, "clear" );
|
|
|
|
// GUI elements
|
|
CGraphsImage *m_pGraphs;
|
|
vgui::ImagePanel *m_pGraphsPanel;
|
|
|
|
vgui::Button *m_pClearButton;
|
|
|
|
vgui::CheckButton *m_pInButton;
|
|
vgui::CheckButton *m_pOutButton;
|
|
vgui::CheckButton *m_pFPSButton;
|
|
vgui::CheckButton *m_pCPUButton;
|
|
vgui::CheckButton *m_pPINGButton;
|
|
vgui::CheckButton *m_pPlayerButton;
|
|
|
|
vgui::ComboBox *m_pTimeCombo;
|
|
vgui::ComboBox *m_pVertCombo;
|
|
|
|
float m_flNextStatsUpdateTime;
|
|
};
|
|
|
|
#endif // GRAPHPANEL_H
|