mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-30 22:20:21 +00:00
64b82b16a2
Up to now, we passed a "shiftPressed" flag to the individual selection functions. To be more general replace by a struct with "shift" and "ctrl" flags. While doing this: 1) Move the struct into a new statsselection file for better encapsulation. 2) Change shift to control in the scatter series, since individual selection of items is usually done with control, not shift. Shift usually means "select range". Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
59 lines
1.8 KiB
C++
59 lines
1.8 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
// A small custom box plot series, which displays quartiles.
|
|
// The QtCharts bar series were too inflexible with respect
|
|
// to placement of the bars.
|
|
#ifndef BOX_SERIES_H
|
|
#define BOX_SERIES_H
|
|
|
|
#include "chartitem.h"
|
|
#include "statsseries.h"
|
|
#include "statsvariables.h" // for StatsQuartiles
|
|
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
struct InformationBox;
|
|
|
|
class BoxSeries : public StatsSeries {
|
|
public:
|
|
BoxSeries(StatsView &view, StatsAxis *xAxis, StatsAxis *yAxis,
|
|
const QString &variable, const QString &unit, int decimals);
|
|
~BoxSeries();
|
|
|
|
void updatePositions() override;
|
|
bool hover(QPointF pos) override;
|
|
void unhighlight() override;
|
|
bool selectItemsUnderMouse(const QPointF &point, SelectionModifier modifier) override;
|
|
|
|
// Note: this expects that all items are added with increasing pos
|
|
// and that no bar is inside another bar, i.e. lowerBound and upperBound
|
|
// are ordered identically.
|
|
void append(double lowerBound, double upperBound, const StatsQuartiles &q, const QString &binName);
|
|
|
|
private:
|
|
// Get item under mouse pointer, or -1 if none
|
|
int getItemUnderMouse(const QPointF &f);
|
|
|
|
struct Item {
|
|
ChartItemPtr<ChartBoxItem> item;
|
|
double lowerBound, upperBound;
|
|
StatsQuartiles q;
|
|
QString binName;
|
|
bool selected;
|
|
Item(StatsView &view, BoxSeries *series, double lowerBound, double upperBound, const StatsQuartiles &q, const QString &binName);
|
|
~Item();
|
|
void updatePosition(BoxSeries *series);
|
|
void highlight(bool highlight);
|
|
};
|
|
|
|
QString variable, unit;
|
|
int decimals;
|
|
|
|
std::vector<QString> formatInformation(const Item &item) const;
|
|
ChartItemPtr<InformationBox> information;
|
|
std::vector<std::unique_ptr<Item>> items;
|
|
int highlighted; // -1: no item highlighted
|
|
void divesSelected(const QVector<dive *> &) override;
|
|
};
|
|
|
|
#endif
|