aboutsummaryrefslogtreecommitdiffstats
path: root/stats/scatterseries.h
diff options
context:
space:
mode:
Diffstat (limited to 'stats/scatterseries.h')
-rw-r--r--stats/scatterseries.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/stats/scatterseries.h b/stats/scatterseries.h
new file mode 100644
index 000000000..335fb828c
--- /dev/null
+++ b/stats/scatterseries.h
@@ -0,0 +1,53 @@
+// SPDX-License-Identifier: GPL-2.0
+// A small custom scatter series, where every item represents a dive
+// The original QScatterSeries was buggy and distinctly slower
+#ifndef SCATTER_SERIES_H
+#define SCATTER_SERIES_H
+
+#include "statsseries.h"
+
+#include <memory>
+#include <vector>
+#include <QGraphicsRectItem>
+
+class QGraphicsPixmapItem;
+class InformationBox;
+struct StatsVariable;
+struct dive;
+
+class ScatterSeries : public StatsSeries {
+public:
+ ScatterSeries(QtCharts::QChart *chart, StatsAxis *xAxis, StatsAxis *yAxis,
+ const StatsVariable &varX, const StatsVariable &varY);
+ ~ScatterSeries();
+
+ void updatePositions() override;
+ bool hover(QPointF pos) override;
+ void unhighlight() override;
+
+ // Note: this expects that all items are added with increasing pos!
+ void append(dive *d, double pos, double value);
+
+private:
+ // Get items under mouse.
+ // Super weird: this function can't be const, because QChart::mapToValue takes
+ // a non-const reference!?
+ std::vector<int> getItemsUnderMouse(const QPointF &f);
+
+ struct Item {
+ std::unique_ptr<QGraphicsPixmapItem> item;
+ dive *d;
+ double pos, value;
+ Item(QtCharts::QChart *chart, ScatterSeries *series, dive *d, double pos, double value);
+ void updatePosition(QtCharts::QChart *chart, ScatterSeries *series);
+ void highlight(bool highlight);
+ };
+
+ std::unique_ptr<InformationBox> information;
+ std::vector<Item> items;
+ std::vector<int> highlighted;
+ const StatsVariable &varX;
+ const StatsVariable &varY;
+};
+
+#endif