mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-01 06:30:26 +00:00
c99089e1fa
This commit is rather big, and I forgot to cut it in pieces. The first part creates a new 'calculate_gas_information' that will not fill the profile_info->maxpp member ( that should be removed from it as soon as the new dialog is finished ). The reason for that is that all of the profile data will be calculated and the graph needs to update dynamically, so whenever the settings changes, I ask for the model which is the biggest graph and replot only the ones we need. The second part adds a new animation function 'animdelete' to fade-out and delete the item when it's done. the old function 'hide' did just that but a hide shouldn't delete anything. The third part is preferenes awareness for the PP graphs. I created two new functions that receive the settings key for visibility and use the QSettings to show / hide them. This also works quite well for the axis; if no graph is visible, the axis will also hide itself. The fourth part is colors. The pp graphs now have the correct colors. And a bit of code cleanup too. Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
142 lines
4.2 KiB
C++
142 lines
4.2 KiB
C++
#ifndef DIVEPROFILEITEM_H
|
|
#define DIVEPROFILEITEM_H
|
|
|
|
#include <QObject>
|
|
#include <QGraphicsPolygonItem>
|
|
#include "graphicsview-common.h"
|
|
#include "divelineitem.h"
|
|
|
|
/* This is the Profile Item, it should be used for quite a lot of things
|
|
on the profile view. The usage should be pretty simple:
|
|
|
|
DiveProfileItem *profile = new DiveProfileItem();
|
|
profile->setVerticalAxis( profileYAxis );
|
|
profile->setHorizontalAxis( timeAxis );
|
|
profile->setModel( DiveDataModel );
|
|
profile->setHorizontalDataColumn( DiveDataModel::TIME );
|
|
profile->setVerticalDataColumn( DiveDataModel::DEPTH );
|
|
scene()->addItem(profile);
|
|
|
|
This is a generically item and should be used as a base for others, I think...
|
|
*/
|
|
|
|
class DivePlotDataModel;
|
|
class DiveTextItem;
|
|
class DiveCartesianAxis;
|
|
class QAbstractTableModel;
|
|
struct plot_data;
|
|
|
|
class AbstractProfilePolygonItem : public QObject, public QGraphicsPolygonItem{
|
|
Q_OBJECT
|
|
Q_PROPERTY(QPointF pos WRITE setPos READ pos)
|
|
Q_PROPERTY(qreal x WRITE setX READ x)
|
|
Q_PROPERTY(qreal y WRITE setY READ y)
|
|
public:
|
|
AbstractProfilePolygonItem();
|
|
void setVerticalAxis(DiveCartesianAxis *vertical);
|
|
void setHorizontalAxis(DiveCartesianAxis *horizontal);
|
|
void setModel(DivePlotDataModel *model);
|
|
void setHorizontalDataColumn(int column);
|
|
void setVerticalDataColumn(int column);
|
|
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0) = 0;
|
|
public slots:
|
|
virtual void preferencesChanged();
|
|
virtual void modelDataChanged();
|
|
protected:
|
|
DiveCartesianAxis *hAxis;
|
|
DiveCartesianAxis *vAxis;
|
|
DivePlotDataModel *dataModel;
|
|
int hDataColumn;
|
|
int vDataColumn;
|
|
QList<DiveTextItem*> texts;
|
|
};
|
|
|
|
class DiveProfileItem : public AbstractProfilePolygonItem{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0);
|
|
virtual void modelDataChanged();
|
|
virtual void preferencesChanged();
|
|
void plot_depth_sample(struct plot_data *entry,QFlags<Qt::AlignmentFlag> flags,const QColor& color);
|
|
private:
|
|
unsigned int show_reported_ceiling;
|
|
unsigned int reported_ceiling_in_red;
|
|
};
|
|
|
|
class DiveTemperatureItem : public AbstractProfilePolygonItem{
|
|
Q_OBJECT
|
|
public:
|
|
DiveTemperatureItem();
|
|
virtual void modelDataChanged();
|
|
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0);
|
|
private:
|
|
void createTextItem(int seconds, int mkelvin);
|
|
};
|
|
|
|
class DiveGasPressureItem : public AbstractProfilePolygonItem{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
virtual void modelDataChanged();
|
|
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0);
|
|
private:
|
|
void plot_pressure_value(int mbar, int sec, QFlags<Qt::AlignmentFlag> align);
|
|
void plot_gas_value(int mbar, int sec, QFlags<Qt::AlignmentFlag> align, int o2, int he);
|
|
QVector<QPolygonF> polygons;
|
|
};
|
|
|
|
class DiveCalculatedCeiling : public AbstractProfilePolygonItem{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
virtual void modelDataChanged();
|
|
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0);
|
|
};
|
|
|
|
class DiveReportedCeiling : public AbstractProfilePolygonItem{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
virtual void modelDataChanged();
|
|
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0);
|
|
virtual void preferencesChanged();
|
|
};
|
|
|
|
class DiveCalculatedTissue : public DiveCalculatedCeiling {
|
|
Q_OBJECT
|
|
public:
|
|
DiveCalculatedTissue();
|
|
void preferencesChanged();
|
|
};
|
|
|
|
class MeanDepthLine : public DiveLineItem {
|
|
Q_OBJECT
|
|
public:
|
|
MeanDepthLine();
|
|
void setMeanDepth(int value);
|
|
void setLine(qreal x1, qreal y1, qreal x2, qreal y2);
|
|
private:
|
|
int meanDepth;
|
|
DiveTextItem *leftText;
|
|
DiveTextItem *rightText;
|
|
};
|
|
|
|
class PartialPressureGasItem : public AbstractProfilePolygonItem{
|
|
Q_OBJECT
|
|
public:
|
|
PartialPressureGasItem();
|
|
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0);
|
|
virtual void modelDataChanged();
|
|
virtual void preferencesChanged();
|
|
void setThreshouldSettingsKey(const QString& threshouldSettingsKey);
|
|
void setVisibilitySettingsKey(const QString& setVisibilitySettingsKey);
|
|
void setColors(const QColor& normalColor, const QColor& alertColor);
|
|
private:
|
|
QPolygonF alertPoly;
|
|
QString threshouldKey;
|
|
QString visibilityKey;
|
|
QColor normalColor;
|
|
QColor alertColor;
|
|
};
|
|
#endif
|