aboutsummaryrefslogtreecommitdiffstats
path: root/stats/statsaxis.h
diff options
context:
space:
mode:
Diffstat (limited to 'stats/statsaxis.h')
-rw-r--r--stats/statsaxis.h40
1 files changed, 24 insertions, 16 deletions
diff --git a/stats/statsaxis.h b/stats/statsaxis.h
index 9d46f753a..02662ddd9 100644
--- a/stats/statsaxis.h
+++ b/stats/statsaxis.h
@@ -2,15 +2,20 @@
#ifndef STATS_AXIS_H
#define STATS_AXIS_H
+#include "chartitem.h"
+#include "statshelper.h"
+
#include <memory>
#include <vector>
#include <QFont>
-#include <QGraphicsSimpleTextItem>
-#include <QGraphicsLineItem>
-class QGraphicsScene;
+class StatsView;
+class ChartLineItem;
+class QFontMetrics;
-class StatsAxis : public QGraphicsLineItem {
+// The labels and the title of the axis are rendered into a pixmap.
+// The ticks and the baseline are realized as individual ChartLineItems.
+class StatsAxis : public ChartPixmapItem {
public:
virtual ~StatsAxis();
// Returns minimum and maximum of shown range, not of data points.
@@ -30,22 +35,25 @@ public:
std::vector<double> ticksPositions() const; // Positions in screen coordinates
protected:
- StatsAxis(const QString &title, bool horizontal, bool labelsBetweenTicks);
+ StatsAxis(StatsView &view, const QString &title, bool horizontal, bool labelsBetweenTicks);
+
+ ChartItemPtr<ChartLineItem> line;
+ QString title;
+ double titleWidth;
struct Label {
- std::unique_ptr<QGraphicsSimpleTextItem> label;
+ QString label;
+ int width;
double pos;
- Label(const QString &name, double pos, QGraphicsScene *scene, const QFont &font);
};
std::vector<Label> labels;
- void addLabel(const QString &label, double pos);
+ void addLabel(const QFontMetrics &fm, const QString &label, double pos);
virtual void updateLabels() = 0;
virtual std::pair<QString, QString> getFirstLastLabel() const = 0;
struct Tick {
- std::unique_ptr<QGraphicsLineItem> item;
+ ChartItemPtr<ChartLineItem> item;
double pos;
- Tick(double pos, QGraphicsScene *scene);
};
std::vector<Tick> ticks;
void addTick(double pos);
@@ -55,9 +63,9 @@ protected:
bool labelsBetweenTicks; // When labels are between ticks, they can be moved closer to the axis
QFont labelFont, titleFont;
- std::unique_ptr<QGraphicsSimpleTextItem> title;
double size; // width for horizontal, height for vertical
double zeroOnScreen;
+ QPointF offset; // Offset of the label and title pixmap with respect to the (0,0) position.
double min, max;
double labelWidth; // Maximum width of labels
private:
@@ -66,7 +74,7 @@ private:
class ValueAxis : public StatsAxis {
public:
- ValueAxis(const QString &title, double min, double max, int decimals, bool horizontal);
+ ValueAxis(StatsView &view, const QString &title, double min, double max, int decimals, bool horizontal);
private:
double min, max;
int decimals;
@@ -76,7 +84,7 @@ private:
class CountAxis : public ValueAxis {
public:
- CountAxis(const QString &title, int count, bool horizontal);
+ CountAxis(StatsView &view, const QString &title, int count, bool horizontal);
private:
int count;
void updateLabels() override;
@@ -85,7 +93,7 @@ private:
class CategoryAxis : public StatsAxis {
public:
- CategoryAxis(const QString &title, const std::vector<QString> &labels, bool horizontal);
+ CategoryAxis(StatsView &view, const QString &title, const std::vector<QString> &labels, bool horizontal);
private:
std::vector<QString> labelsText;
void updateLabels();
@@ -100,7 +108,7 @@ struct HistogramAxisEntry {
class HistogramAxis : public StatsAxis {
public:
- HistogramAxis(const QString &title, std::vector<HistogramAxisEntry> bin_values, bool horizontal);
+ HistogramAxis(StatsView &view, const QString &title, std::vector<HistogramAxisEntry> bin_values, bool horizontal);
private:
void updateLabels() override;
std::pair<QString, QString> getFirstLastLabel() const override;
@@ -110,7 +118,7 @@ private:
class DateAxis : public HistogramAxis {
public:
- DateAxis(const QString &title, double from, double to, bool horizontal);
+ DateAxis(StatsView &view, const QString &title, double from, double to, bool horizontal);
};
#endif