summaryrefslogtreecommitdiffstats
path: root/stats/statsaxis.h
diff options
context:
space:
mode:
Diffstat (limited to 'stats/statsaxis.h')
-rw-r--r--stats/statsaxis.h85
1 files changed, 85 insertions, 0 deletions
diff --git a/stats/statsaxis.h b/stats/statsaxis.h
new file mode 100644
index 000000000..5c77189cc
--- /dev/null
+++ b/stats/statsaxis.h
@@ -0,0 +1,85 @@
+// SPDX-License-Identifier: GPL-2.0
+// Supported chart axes
+#ifndef STATS_AXIS_H
+#define STATS_AXIS_H
+
+#include <vector>
+#include <QBarCategoryAxis>
+#include <QCategoryAxis>
+#include <QValueAxis>
+
+namespace QtCharts {
+ class QChart;
+}
+
+class StatsAxis {
+public:
+ virtual ~StatsAxis();
+ virtual void updateLabels(const QtCharts::QChart *chart) = 0;
+ virtual QtCharts::QAbstractAxis *qaxis() = 0;
+ // Returns minimum and maximum of shown range, not of data points.
+ virtual std::pair<double, double> minMax() const;
+protected:
+ StatsAxis(bool horizontal);
+ int guessNumTicks(const QtCharts::QChart *chart, const QtCharts::QAbstractAxis *axis, const std::vector<QString> &strings) const;
+ bool horizontal;
+};
+
+// Small template that derives from a QChart-axis and defines
+// the corresponding virtual axis() accessor.
+template<typename QAxis>
+class StatsAxisTemplate : public StatsAxis, public QAxis
+{
+ using StatsAxis::StatsAxis;
+ QtCharts::QAbstractAxis *qaxis() override final {
+ return this;
+ }
+};
+
+class ValueAxis : public StatsAxisTemplate<QtCharts::QValueAxis> {
+public:
+ ValueAxis(double min, double max, int decimals, bool horizontal);
+private:
+ double min, max;
+ int decimals;
+ void updateLabels(const QtCharts::QChart *chart) override;
+ std::pair<double, double> minMax() const override;
+};
+
+class CountAxis : public ValueAxis {
+public:
+ CountAxis(int count, bool horizontal);
+private:
+ int count;
+ void updateLabels(const QtCharts::QChart *chart) override;
+};
+
+class CategoryAxis : public StatsAxisTemplate<QtCharts::QBarCategoryAxis> {
+public:
+ CategoryAxis(const std::vector<QString> &labels, bool horizontal);
+private:
+ void updateLabels(const QtCharts::QChart *chart);
+};
+
+struct HistogramAxisEntry {
+ QString name;
+ double value;
+ bool recommended;
+};
+
+class HistogramAxis : public StatsAxisTemplate<QtCharts::QCategoryAxis> {
+public:
+ HistogramAxis(std::vector<HistogramAxisEntry> bin_values, bool horizontal);
+private:
+ void updateLabels(const QtCharts::QChart *chart) override;
+ std::pair<double, double> minMax() const override;
+ std::vector<HistogramAxisEntry> bin_values;
+ int preferred_step;
+};
+
+class DateAxis : public HistogramAxis {
+public:
+ DateAxis(double from, double to, bool horizontal);
+};
+
+#endif