subsurface/qt-ui/profile/tankitem.h
Dirk Hohndel fb371c0633 TankBar: don't risk dereferencing stale pointers
Basically we could end up in a situation where the plotInfo is no longer
valid, yet the model changes and triggers a redraw before the new data is
passed into the TankBar.

Instead of chasing that race condition it seemed much easier to just copy
the plot_data entries and the gas information in the dive.

Fixes #716

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-08-23 07:23:42 -07:00

39 lines
948 B
C++

#ifndef TANKITEM_H
#define TANKITEM_H
#include <QGraphicsItem>
#include <QModelIndex>
#include <QBrush>
#include "divelineitem.h"
#include "divecartesianaxis.h"
#include "dive.h"
class TankItem : public QObject, public QGraphicsRectItem
{
Q_OBJECT
Q_INTERFACES(QGraphicsItem)
public:
explicit TankItem(QObject *parent = 0);
void setHorizontalAxis(DiveCartesianAxis *horizontal);
void setData(DivePlotDataModel *model, struct plot_info *plotInfo, struct dive *d);
signals:
public slots:
virtual void modelDataChanged(const QModelIndex &topLeft = QModelIndex(), const QModelIndex &bottomRight = QModelIndex());
private:
void createBar(qreal x, qreal w, struct gasmix *gas);
DivePlotDataModel *dataModel;
DiveCartesianAxis *hAxis;
int hDataColumn;
struct dive diveCylinderStore;
struct plot_data *pInfoEntry;
int pInfoNr;
qreal yPos, height;
QBrush air, nitrox, trimix;
QList<QGraphicsRectItem *> rects;
};
#endif // TANKITEM_H