| 
									
										
										
										
											2014-01-14 17:17:17 -02:00
										 |  |  | #ifndef DIVEPROFILEITEM_H
 | 
					
						
							|  |  |  | #define DIVEPROFILEITEM_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <QObject>
 | 
					
						
							|  |  |  | #include <QGraphicsPolygonItem>
 | 
					
						
							| 
									
										
										
										
											2014-02-04 17:34:16 -02:00
										 |  |  | #include <QModelIndex>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-17 17:54:47 -02:00
										 |  |  | #include "graphicsview-common.h"
 | 
					
						
							| 
									
										
										
										
											2014-01-22 15:08:19 -02:00
										 |  |  | #include "divelineitem.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-14 17:17:17 -02:00
										 |  |  | /* 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... | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-21 14:05:29 -02:00
										 |  |  | class DivePlotDataModel; | 
					
						
							| 
									
										
										
										
											2014-01-17 17:54:47 -02:00
										 |  |  | class DiveTextItem; | 
					
						
							| 
									
										
										
										
											2014-01-14 17:17:17 -02:00
										 |  |  | class DiveCartesianAxis; | 
					
						
							|  |  |  | class QAbstractTableModel; | 
					
						
							| 
									
										
										
										
											2014-01-21 13:27:08 -02:00
										 |  |  | struct plot_data; | 
					
						
							| 
									
										
										
										
											2014-01-14 17:17:17 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | class AbstractProfilePolygonItem : public QObject, public QGraphicsPolygonItem { | 
					
						
							| 
									
										
										
										
											2014-01-14 17:17:17 -02:00
										 |  |  | 	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: | 
					
						
							| 
									
										
										
										
											2014-01-16 16:21:23 -02:00
										 |  |  | 	AbstractProfilePolygonItem(); | 
					
						
							| 
									
										
										
										
											2014-01-14 17:17:17 -02:00
										 |  |  | 	void setVerticalAxis(DiveCartesianAxis *vertical); | 
					
						
							|  |  |  | 	void setHorizontalAxis(DiveCartesianAxis *horizontal); | 
					
						
							| 
									
										
										
										
											2014-01-21 14:05:29 -02:00
										 |  |  | 	void setModel(DivePlotDataModel *model); | 
					
						
							| 
									
										
										
										
											2014-01-14 17:17:17 -02:00
										 |  |  | 	void setHorizontalDataColumn(int column); | 
					
						
							|  |  |  | 	void setVerticalDataColumn(int column); | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) = 0; | 
					
						
							|  |  |  | 	virtual void clear() | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | public | 
					
						
							|  |  |  | slots: | 
					
						
							| 
									
										
										
										
											2014-05-21 13:50:26 -03:00
										 |  |  | 	virtual void settingsChanged(); | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	virtual void modelDataChanged(const QModelIndex &topLeft = QModelIndex(), const QModelIndex &bottomRight = QModelIndex()); | 
					
						
							|  |  |  | 	virtual void modelDataRemoved(const QModelIndex &parent, int from, int to); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 16:21:23 -02:00
										 |  |  | protected: | 
					
						
							| 
									
										
										
										
											2014-02-04 17:34:16 -02:00
										 |  |  | 	/* when the model emits a 'datachanged' signal, this method below should be used to check if the
 | 
					
						
							|  |  |  | 	 * modified data affects this particular item ( for example, when setting the '3m increment' | 
					
						
							|  |  |  | 	 * the data for Ceiling and tissues will be changed, and only those. so, the topLeft will be the CEILING | 
					
						
							|  |  |  | 	 * column and the bottomRight will have the TISSUE_16 column. this method takes the vDataColumn and hDataColumn | 
					
						
							|  |  |  | 	 * into consideration when returning 'true' for "yes, continue the calculation', and 'false' for | 
					
						
							|  |  |  | 	 * 'do not recalculate, we already have the right data. | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	bool shouldCalculateStuff(const QModelIndex &topLeft, const QModelIndex &bottomRight); | 
					
						
							| 
									
										
										
										
											2014-02-04 17:34:16 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-14 17:17:17 -02:00
										 |  |  | 	DiveCartesianAxis *hAxis; | 
					
						
							|  |  |  | 	DiveCartesianAxis *vAxis; | 
					
						
							| 
									
										
										
										
											2014-01-21 14:05:29 -02:00
										 |  |  | 	DivePlotDataModel *dataModel; | 
					
						
							| 
									
										
										
										
											2014-01-14 17:17:17 -02:00
										 |  |  | 	int hDataColumn; | 
					
						
							|  |  |  | 	int vDataColumn; | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	QList<DiveTextItem *> texts; | 
					
						
							| 
									
										
										
										
											2014-01-14 17:17:17 -02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | class DiveProfileItem : public AbstractProfilePolygonItem { | 
					
						
							| 
									
										
										
										
											2014-01-16 16:21:23 -02:00
										 |  |  | 	Q_OBJECT | 
					
						
							| 
									
										
										
										
											2014-01-21 13:27:08 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 16:21:23 -02:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2014-02-09 18:54:25 +01:00
										 |  |  | 	DiveProfileItem(); | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); | 
					
						
							|  |  |  | 	virtual void modelDataChanged(const QModelIndex &topLeft = QModelIndex(), const QModelIndex &bottomRight = QModelIndex()); | 
					
						
							| 
									
										
										
										
											2014-05-21 13:50:26 -03:00
										 |  |  | 	virtual void settingsChanged(); | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	void plot_depth_sample(struct plot_data *entry, QFlags<Qt::AlignmentFlag> flags, const QColor &color); | 
					
						
							| 
									
										
										
										
											2014-05-26 19:29:25 -03:00
										 |  |  | 	int maxCeiling(int row); | 
					
						
							| 
									
										
										
										
											2014-01-21 18:16:19 -02:00
										 |  |  | private: | 
					
						
							|  |  |  | 	unsigned int show_reported_ceiling; | 
					
						
							|  |  |  | 	unsigned int reported_ceiling_in_red; | 
					
						
							| 
									
										
										
										
											2014-05-26 19:29:25 -03:00
										 |  |  | 	QColor profileColor; | 
					
						
							| 
									
										
										
										
											2014-01-16 16:21:23 -02:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2014-01-14 17:17:17 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | class DiveTemperatureItem : public AbstractProfilePolygonItem { | 
					
						
							| 
									
										
										
										
											2014-01-16 18:39:13 -02:00
										 |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	DiveTemperatureItem(); | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	virtual void modelDataChanged(const QModelIndex &topLeft = QModelIndex(), const QModelIndex &bottomRight = QModelIndex()); | 
					
						
							|  |  |  | 	virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-17 17:54:47 -02:00
										 |  |  | private: | 
					
						
							|  |  |  | 	void createTextItem(int seconds, int mkelvin); | 
					
						
							| 
									
										
										
										
											2014-01-16 18:39:13 -02:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2014-01-17 11:07:52 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-23 15:28:31 -08:00
										 |  |  | class DiveHeartrateItem : public AbstractProfilePolygonItem { | 
					
						
							|  |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	DiveHeartrateItem(); | 
					
						
							|  |  |  | 	virtual void modelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); | 
					
						
							|  |  |  | 	virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); | 
					
						
							| 
									
										
										
										
											2014-05-21 13:50:26 -03:00
										 |  |  | 	virtual void settingsChanged(); | 
					
						
							| 
									
										
										
										
											2014-02-23 15:28:31 -08:00
										 |  |  | private: | 
					
						
							|  |  |  | 	void createTextItem(int seconds, int hr); | 
					
						
							| 
									
										
										
										
											2014-04-08 00:00:50 -04:00
										 |  |  | 	QString visibilityKey; | 
					
						
							| 
									
										
										
										
											2014-02-23 15:28:31 -08:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | class DiveGasPressureItem : public AbstractProfilePolygonItem { | 
					
						
							| 
									
										
										
										
											2014-01-17 15:34:15 -02:00
										 |  |  | 	Q_OBJECT | 
					
						
							| 
									
										
										
										
											2014-01-21 14:05:29 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-17 15:34:15 -02:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	virtual void modelDataChanged(const QModelIndex &topLeft = QModelIndex(), const QModelIndex &bottomRight = QModelIndex()); | 
					
						
							|  |  |  | 	virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-17 15:34:15 -02:00
										 |  |  | private: | 
					
						
							| 
									
										
										
										
											2014-06-01 21:02:42 -07:00
										 |  |  | 	void plotPressureValue(int mbar, int sec, QFlags<Qt::AlignmentFlag> align); | 
					
						
							|  |  |  | 	void plotGasValue(int mbar, int sec, QFlags<Qt::AlignmentFlag> align, struct gasmix gasmix); | 
					
						
							| 
									
										
										
										
											2014-01-17 15:34:15 -02:00
										 |  |  | 	QVector<QPolygonF> polygons; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2014-01-17 17:54:47 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | class DiveCalculatedCeiling : public AbstractProfilePolygonItem { | 
					
						
							| 
									
										
										
										
											2014-01-21 14:59:19 -02:00
										 |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2014-01-29 10:53:40 -02:00
										 |  |  | 	DiveCalculatedCeiling(); | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	virtual void modelDataChanged(const QModelIndex &topLeft = QModelIndex(), const QModelIndex &bottomRight = QModelIndex()); | 
					
						
							|  |  |  | 	virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); | 
					
						
							| 
									
										
										
										
											2014-05-21 13:50:26 -03:00
										 |  |  | 	virtual void settingsChanged(); | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-29 10:53:40 -02:00
										 |  |  | private: | 
					
						
							| 
									
										
										
										
											2014-02-04 17:34:16 -02:00
										 |  |  | 	bool is3mIncrement; | 
					
						
							| 
									
										
										
										
											2014-01-29 10:53:40 -02:00
										 |  |  | 	DiveTextItem *gradientFactor; | 
					
						
							| 
									
										
										
										
											2014-01-21 14:59:19 -02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | class DiveReportedCeiling : public AbstractProfilePolygonItem { | 
					
						
							| 
									
										
										
										
											2014-01-21 17:34:36 -02:00
										 |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	virtual void modelDataChanged(const QModelIndex &topLeft = QModelIndex(), const QModelIndex &bottomRight = QModelIndex()); | 
					
						
							|  |  |  | 	virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); | 
					
						
							| 
									
										
										
										
											2014-05-21 13:50:26 -03:00
										 |  |  | 	virtual void settingsChanged(); | 
					
						
							| 
									
										
										
										
											2014-01-21 17:34:36 -02:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2014-01-22 15:08:19 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-22 19:22:07 -02:00
										 |  |  | class DiveCalculatedTissue : public DiveCalculatedCeiling { | 
					
						
							|  |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	DiveCalculatedTissue(); | 
					
						
							| 
									
										
										
										
											2014-05-21 13:50:26 -03:00
										 |  |  | 	virtual void settingsChanged(); | 
					
						
							| 
									
										
										
										
											2014-01-22 19:22:07 -02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-22 15:08:19 -02:00
										 |  |  | class MeanDepthLine : public DiveLineItem { | 
					
						
							|  |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	MeanDepthLine(); | 
					
						
							|  |  |  | 	void setMeanDepth(int value); | 
					
						
							|  |  |  | 	void setLine(qreal x1, qreal y1, qreal x2, qreal y2); | 
					
						
							| 
									
										
										
										
											2014-02-12 14:41:59 -02:00
										 |  |  | 	void setAxis(DiveCartesianAxis *a); | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | public | 
					
						
							|  |  |  | slots: | 
					
						
							| 
									
										
										
										
											2014-02-12 14:41:59 -02:00
										 |  |  | 	void axisLineChanged(); | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-22 15:08:19 -02:00
										 |  |  | private: | 
					
						
							|  |  |  | 	int meanDepth; | 
					
						
							|  |  |  | 	DiveTextItem *leftText; | 
					
						
							|  |  |  | 	DiveTextItem *rightText; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2014-01-23 17:54:34 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | class PartialPressureGasItem : public AbstractProfilePolygonItem { | 
					
						
							| 
									
										
										
										
											2014-01-23 17:54:34 -02:00
										 |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	PartialPressureGasItem(); | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); | 
					
						
							|  |  |  | 	virtual void modelDataChanged(const QModelIndex &topLeft = QModelIndex(), const QModelIndex &bottomRight = QModelIndex()); | 
					
						
							| 
									
										
										
										
											2014-05-21 13:50:26 -03:00
										 |  |  | 	virtual void settingsChanged(); | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	void setThreshouldSettingsKey(const QString &threshouldSettingsKey); | 
					
						
							|  |  |  | 	void setVisibilitySettingsKey(const QString &setVisibilitySettingsKey); | 
					
						
							|  |  |  | 	void setColors(const QColor &normalColor, const QColor &alertColor); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-23 17:54:34 -02:00
										 |  |  | private: | 
					
						
							| 
									
										
										
										
											2014-03-15 19:00:58 +01:00
										 |  |  | 	QVector<QPolygonF> alertPolygons; | 
					
						
							| 
									
										
										
										
											2014-01-23 17:54:34 -02:00
										 |  |  | 	QString threshouldKey; | 
					
						
							| 
									
										
										
										
											2014-01-27 15:14:42 -02:00
										 |  |  | 	QString visibilityKey; | 
					
						
							|  |  |  | 	QColor normalColor; | 
					
						
							|  |  |  | 	QColor alertColor; | 
					
						
							| 
									
										
										
										
											2014-01-23 17:54:34 -02:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2014-02-11 19:14:46 +01:00
										 |  |  | #endif // DIVEPROFILEITEM_H
 |