historical/toontown-classic.git/panda/include/pStatGraph.h
2024-01-16 11:20:27 -06:00

121 lines
3 KiB
C++

/**
* PANDA 3D SOFTWARE
* Copyright (c) Carnegie Mellon University. All rights reserved.
*
* All use of this software is subject to the terms of the revised BSD
* license. You should have received a copy of this license along
* with this source code in a file named "LICENSE."
*
* @file pStatGraph.h
* @author drose
* @date 2000-07-19
*/
#ifndef PSTATGRAPH_H
#define PSTATGRAPH_H
#include "pandatoolbase.h"
#include "pStatMonitor.h"
#include "pStatClientData.h"
#include "luse.h"
#include "vector_int.h"
#include "pmap.h"
class PStatView;
/**
* This is an abstract base class for several different kinds of graphs that
* have a few things in common, like labels and guide bars.
*/
class PStatGraph {
public:
PStatGraph(PStatMonitor *monitor, int xsize, int ysize);
virtual ~PStatGraph();
INLINE PStatMonitor *get_monitor() const;
INLINE int get_num_labels() const;
INLINE int get_label_collector(int n) const;
INLINE std::string get_label_name(int n) const;
INLINE LRGBColor get_label_color(int n) const;
INLINE void set_target_frame_rate(double frame_rate);
INLINE double get_target_frame_rate() const;
INLINE int get_xsize() const;
INLINE int get_ysize() const;
enum GuideBarStyle {
GBS_normal,
GBS_target,
GBS_user,
};
class GuideBar {
public:
GuideBar(double height, const std::string &label, GuideBarStyle style);
GuideBar(const GuideBar &copy);
double _height;
std::string _label;
GuideBarStyle _style;
};
enum GuideBarUnits {
GBU_hz = 0x0001,
GBU_ms = 0x0002,
GBU_named = 0x0004,
GBU_show_units = 0x0008,
};
int get_num_guide_bars() const;
const GuideBar &get_guide_bar(int n) const;
int get_num_user_guide_bars() const;
GuideBar get_user_guide_bar(int n) const;
void move_user_guide_bar(int n, double height);
int add_user_guide_bar(double height);
void remove_user_guide_bar(int n);
int find_user_guide_bar(double from_height, double to_height) const;
INLINE void set_guide_bar_units(int unit_mask);
INLINE int get_guide_bar_units() const;
INLINE void set_guide_bar_unit_name(const std::string &unit_name);
INLINE const std::string &get_guide_bar_unit_name() const;
static std::string format_number(double value);
static std::string format_number(double value, int guide_bar_units,
const std::string &unit_name = std::string());
protected:
virtual void normal_guide_bars()=0;
void update_guide_bars(int num_bars, double scale);
GuideBar make_guide_bar(double value, GuideBarStyle style = GBS_normal) const;
bool _labels_changed;
bool _guide_bars_changed;
PT(PStatMonitor) _monitor;
double _target_frame_rate;
int _xsize;
int _ysize;
// Table of the collectors that should be drawn as labels, in order from
// bottom to top.
typedef vector_int Labels;
Labels _labels;
typedef pvector<GuideBar> GuideBars;
GuideBars _guide_bars;
int _guide_bar_units;
std::string _unit_name;
};
#include "pStatGraph.I"
#endif