mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-20 06:45:27 +00:00
c09382036f
We were using the QGraphicsScene machinery to zoom into the plot. This not only zoomed into the dive, but into the whole thing. In general, one couldn't see the axes anymore. Instead, adjust the range of the time-axis according to the zoom-level and position. Of course, the code isn't adapted to that and the result is comical. The chart features will have to be fixed one-by-one. Oh joy. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
101 lines
3.4 KiB
C++
101 lines
3.4 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
// Displays the dive profile. Used by the interactive profile widget
|
|
// and the printing/exporting code.
|
|
#ifndef PROFILESCENE_H
|
|
#define PROFILESCENE_H
|
|
|
|
#include "core/color.h"
|
|
#include "core/display.h"
|
|
|
|
#include <QGraphicsScene>
|
|
#include <QPainter>
|
|
#include <memory>
|
|
|
|
class DivePlannerPointsModel;
|
|
class DivePlotDataModel;
|
|
|
|
class AbstractProfilePolygonItem;
|
|
class DiveCalculatedCeiling;
|
|
class DiveCalculatedTissue;
|
|
class DiveCartesianAxis;
|
|
class DiveEventItem;
|
|
class DiveGasPressureItem;
|
|
class DiveHeartrateItem;
|
|
class DiveMeanDepthItem;
|
|
class DivePercentageItem;
|
|
class DivePixmaps;
|
|
class DiveProfileItem;
|
|
class DiveReportedCeiling;
|
|
class DiveTemperatureItem;
|
|
class DiveTextItem;
|
|
class PartialPressureGasItem;
|
|
class TankItem;
|
|
|
|
class ProfileScene : public QGraphicsScene {
|
|
public:
|
|
ProfileScene(double dpr, bool printMode, bool isGrayscale);
|
|
~ProfileScene();
|
|
|
|
void resize(QSizeF size);
|
|
void clear();
|
|
bool isPointOutOfBoundaries(const QPointF &point) const;
|
|
|
|
// If a plannerModel is passed, the deco-information is taken from there.
|
|
void plotDive(const struct dive *d, int dc, DivePlannerPointsModel *plannerModel = nullptr, bool inPlanner = false,
|
|
bool instant = false, bool calcMax = true, double zoom = 1.0, double zoomedPosition = 0.0);
|
|
|
|
void draw(QPainter *painter, const QRect &pos,
|
|
const struct dive *d, int dc,
|
|
DivePlannerPointsModel *plannerModel = nullptr, bool inPlanner = false);
|
|
|
|
const struct dive *d;
|
|
int dc;
|
|
private:
|
|
template<typename T, class... Args> T *createItem(const DiveCartesianAxis &vAxis, int vColumn, int z, Args&&... args);
|
|
PartialPressureGasItem *createPPGas(int column, color_index_t color, color_index_t colorAlert,
|
|
const double *thresholdSettingsMin, const double *thresholdSettingsMax);
|
|
void updateVisibility(bool diveHasHeartBeat); // Update visibility of non-interactive chart features according to preferences
|
|
void updateAxes(bool diveHasHeartBeat); // Update axes according to preferences
|
|
|
|
friend class ProfileWidget2; // For now, give the ProfileWidget full access to the objects on the scene
|
|
double dpr; // Device Pixel Ratio. A DPR of one corresponds to a "standard" PC screen.
|
|
bool printMode;
|
|
bool isGrayscale;
|
|
int maxtime;
|
|
int maxdepth;
|
|
|
|
DivePlotDataModel *dataModel;
|
|
struct plot_info plotInfo;
|
|
DiveCartesianAxis *profileYAxis;
|
|
DiveCartesianAxis *gasYAxis;
|
|
DiveCartesianAxis *temperatureAxis;
|
|
DiveCartesianAxis *timeAxis;
|
|
DiveCartesianAxis *cylinderPressureAxis;
|
|
DiveCartesianAxis *heartBeatAxis;
|
|
DiveCartesianAxis *percentageAxis;
|
|
std::vector<AbstractProfilePolygonItem *> profileItems;
|
|
DiveProfileItem *diveProfileItem;
|
|
DiveTemperatureItem *temperatureItem;
|
|
DiveMeanDepthItem *meanDepthItem;
|
|
DiveGasPressureItem *gasPressureItem;
|
|
QList<DiveEventItem *> eventItems;
|
|
DiveTextItem *diveComputerText;
|
|
DiveReportedCeiling *reportedCeiling;
|
|
PartialPressureGasItem *pn2GasItem;
|
|
PartialPressureGasItem *pheGasItem;
|
|
PartialPressureGasItem *po2GasItem;
|
|
PartialPressureGasItem *o2SetpointGasItem;
|
|
PartialPressureGasItem *ccrsensor1GasItem;
|
|
PartialPressureGasItem *ccrsensor2GasItem;
|
|
PartialPressureGasItem *ccrsensor3GasItem;
|
|
PartialPressureGasItem *ocpo2GasItem;
|
|
DiveCalculatedCeiling *diveCeiling;
|
|
DiveTextItem *decoModelParameters;
|
|
QList<DiveCalculatedTissue *> allTissues;
|
|
DiveHeartrateItem *heartBeatItem;
|
|
DivePercentageItem *percentageItem;
|
|
TankItem *tankItem;
|
|
std::shared_ptr<const DivePixmaps> pixmaps;
|
|
};
|
|
|
|
#endif
|