OSCAR-code/oscar/Graphs/gYAxis.h

198 lines
5.9 KiB
C
Raw Normal View History

2014-08-17 12:56:05 +00:00
/* gYAxis Header
*
* Copyright (c) 2019-2024 The OSCAR Team
* Copyright (C) 2011-2018 Mark Watkins
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file COPYING in the main directory of the source code
* for more details. */
2011-06-26 08:30:44 +00:00
#ifndef GYAXIS_H
#define GYAXIS_H
#include <QImage>
#include "Graphs/layer.h"
/*! \class gXGrid
\brief Draws the horizintal major/minor grids over graphs
*/
class gXGrid: public Layer
{
public:
//! \brief Constructs an gXGrid object with default settings, and col for line colour.
gXGrid(QColor col = QColor("black"));
2011-08-25 10:38:42 +00:00
virtual ~gXGrid();
//! \brief Draw the horizontal lines by adding the to the Vertex GLbuffers
virtual void paint(QPainter &painter, gGraph &w, const QRegion &region);
2011-08-25 10:38:42 +00:00
//! \brief set the visibility status of Major lines
void setShowMinorLines(bool b) { m_show_minor_lines = b; }
//! \brief set the visibility status of Minor lines
void setShowMajorLines(bool b) { m_show_major_lines = b; }
//! \brief Returns the visibility status of minor lines
2011-08-25 10:38:42 +00:00
bool showMinorLines() { return m_show_minor_lines; }
//! \brief Returns the visibility status of Major lines
2011-08-25 10:38:42 +00:00
bool showMajorLines() { return m_show_major_lines; }
virtual Layer * Clone() {
gXGrid * grid = new gXGrid();
Layer::CloneInto(grid);
CloneInto(grid);
return grid;
}
void CloneInto(gXGrid * layer) {
layer->m_show_major_lines = m_show_major_lines;
layer->m_show_minor_lines = m_show_minor_lines;
layer->m_major_color = m_major_color;
layer->m_minor_color = m_minor_color;
}
protected:
2011-08-25 10:38:42 +00:00
bool m_show_major_lines;
bool m_show_minor_lines;
QColor m_major_color;
QColor m_minor_color;
};
/*! \class gYAxis
\brief Draws the YAxis tick markers, and numeric labels
*/
class gYAxis: public Layer
2011-06-26 08:30:44 +00:00
{
public:
//! \brief Left Margin space in pixels
static const int Margin = 60;
public:
//! \brief Construct a gYAxis object, with QColor col for tickers & text
gYAxis(QColor col = Qt::black);
virtual ~gYAxis();
//! \brief Draw the horizontal tickers display
virtual void paint(QPainter &painter, gGraph &w, const QRegion &region);
//! \brief Sets the visibility status of minor ticks
void SetShowMinorTicks(bool b) { m_show_minor_ticks = b; }
//! \brief Sets the visibility status of Major ticks
void SetShowMajorTicks(bool b) { m_show_major_ticks = b; }
//! \brief Returns the visibility status of Minor ticks
bool ShowMinorTicks() { return m_show_minor_ticks; }
//! \brief Returns the visibility status of Major ticks
bool ShowMajorTicks() { return m_show_major_ticks; }
//! \brief Formats the ticker value.. Override to implement other types
virtual const QString Format(EventDataType v, int dp);
virtual int minimumWidth();
//! \brief Set the scale of the Y axis values.. Values can be multiplied by this to convert formats
void SetScale(float f) { m_yaxis_scale = f; }
//! \brief Returns the scale of the Y axis values..
// Values can be multiplied by this to convert formats
float Scale() { return m_yaxis_scale; }
2011-09-05 13:26:10 +00:00
protected:
bool m_show_minor_ticks;
bool m_show_major_ticks;
float m_yaxis_scale;
QColor m_line_color;
QColor m_text_color;
virtual bool mouseMoveEvent(QMouseEvent *event, gGraph *graph);
virtual bool mouseDoubleClickEvent(QMouseEvent *event, gGraph *graph);
2011-09-05 13:26:10 +00:00
QImage m_image;
virtual Layer * Clone() {
gYAxis * yaxis = new gYAxis();
Layer::CloneInto(yaxis);
CloneInto(yaxis);
return yaxis;
}
void CloneInto(gYAxis * layer) {
layer->m_show_major_ticks = m_show_major_ticks;
layer->m_show_minor_ticks = m_show_minor_ticks;
layer->m_line_color = m_line_color;
layer->m_text_color = m_text_color;
layer->m_image = m_image;
}
2011-06-26 08:30:44 +00:00
};
/*! \class gYAxisTime
\brief Draws the YAxis tick markers, and labels in time format
*/
class gYAxisTime: public gYAxis
{
public:
//! \brief Construct a gYAxisTime object, with QColor col for tickers & times
gYAxisTime(bool hr12 = true, QColor col = Qt::black) : gYAxis(col), show_12hr(hr12) {}
virtual ~gYAxisTime() {}
protected:
//! \brief Overrides gYAxis Format to display Time format
virtual const QString Format(EventDataType v, int dp);
//! \brief Whether to format as 12 or 24 hour times
bool show_12hr;
virtual Layer * Clone() {
gYAxisTime * yaxis = new gYAxisTime();
Layer::CloneInto(yaxis);
CloneInto(yaxis);
return yaxis;
}
void CloneInto(gYAxisTime * layer) {
gYAxis::CloneInto(layer);
layer->show_12hr = show_12hr;
}
};
/*! \class gYAxisWeight
\brief Draws the YAxis tick markers, and labels in weight format
*/
class gYAxisWeight: public gYAxis
{
public:
//! \brief Construct a gYAxisWeight object, with QColor col for tickers & weight values
gYAxisWeight(UnitSystem us = US_Metric, QColor col = Qt::black) : gYAxis(col), m_unitsystem(us) {}
virtual ~gYAxisWeight() {}
//! \brief Returns the current UnitSystem displayed (eg, US_Metric (the rest of the world), US_English (American) )
UnitSystem unitSystem() { return m_unitsystem; }
//! \brief Set the unit system displayed by this YTicker
void setUnitSystem(UnitSystem us) { m_unitsystem = us; }
protected:
//! \brief Overrides gYAxis Format to display Time format
virtual const QString Format(EventDataType v, int dp);
UnitSystem m_unitsystem;
virtual Layer * Clone() {
gYAxisWeight * yaxis = new gYAxisWeight();
Layer::CloneInto(yaxis);
CloneInto(yaxis);
return yaxis;
}
void CloneInto(gYAxisWeight * layer) {
gYAxis::CloneInto(layer);
layer->m_unitsystem = m_unitsystem;
}
};
2011-06-26 08:30:44 +00:00
#endif // GYAXIS_H