subsurface/stats/scatterseries.h
Berthold Stoeger d7878dad36 statistics: pass view to series
The series were passed a pointer to the QGraphicsScene to add
their item. In the future these items will be replaced by
QSGNodes. To add these, the series need a reference to the StatsView.
Therefore pass it in the constructor. Once everything is
replaces by QSGNodes, remove the QGraphicsScene member.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2021-01-20 08:47:18 +01:00

52 lines
1.4 KiB
C++

// 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 QGraphicsScene;
struct InformationBox;
struct StatsVariable;
struct dive;
class ScatterSeries : public StatsSeries {
public:
ScatterSeries(QGraphicsScene *scene, StatsView &view, 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.
std::vector<int> getItemsUnderMouse(const QPointF &f) const;
struct Item {
std::unique_ptr<QGraphicsPixmapItem> item;
dive *d;
double pos, value;
Item(QGraphicsScene *scene, ScatterSeries *series, dive *d, double pos, double value);
void updatePosition(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