2014-01-14 16:30:13 +00:00
|
|
|
#ifndef PROFILEWIDGET2_H
|
|
|
|
#define PROFILEWIDGET2_H
|
|
|
|
|
|
|
|
#include <QGraphicsView>
|
|
|
|
|
|
|
|
// /* The idea of this widget is to display and edit the profile.
|
|
|
|
// * It has:
|
|
|
|
// * 1 - ToolTip / Legend item, displays every information of the current mouse position on it, plus the legends of the maps.
|
|
|
|
// * 2 - ToolBox, displays the QActions that are used to do special stuff on the profile ( like activating the plugins. )
|
|
|
|
// * 3 - Cartesian Axis for depth ( y )
|
|
|
|
// * 4 - Cartesian Axis for Gases ( y )
|
|
|
|
// * 5 - Cartesian Axis for Time ( x )
|
|
|
|
// *
|
|
|
|
// * It needs to be dynamic, things should *flow* on it, not just appear / disappear.
|
|
|
|
// */
|
|
|
|
#include "graphicsview-common.h"
|
2014-01-18 22:38:21 +00:00
|
|
|
#include "divelineitem.h"
|
2014-01-16 17:02:32 +00:00
|
|
|
|
2014-02-05 16:34:45 +00:00
|
|
|
class ToolTipItem;
|
2014-01-22 17:08:19 +00:00
|
|
|
class MeanDepthLine;
|
2014-01-21 19:34:36 +00:00
|
|
|
class DiveReportedCeiling;
|
2014-01-21 12:48:26 +00:00
|
|
|
class DiveTextItem;
|
2014-01-16 20:39:13 +00:00
|
|
|
class TemperatureAxis;
|
2014-01-16 17:02:32 +00:00
|
|
|
class DiveEventItem;
|
2014-01-15 14:00:23 +00:00
|
|
|
struct DivePlotDataModel;
|
|
|
|
struct DivePixmapItem;
|
|
|
|
struct DiveRectItem;
|
|
|
|
struct DepthAxis;
|
|
|
|
struct DiveCartesianAxis;
|
|
|
|
struct DiveProfileItem;
|
|
|
|
struct TimeAxis;
|
2014-01-14 16:30:13 +00:00
|
|
|
struct dive;
|
2014-01-15 14:00:23 +00:00
|
|
|
struct QStateMachine;
|
2014-01-16 14:32:45 +00:00
|
|
|
struct DiveCartesianPlane;
|
2014-01-16 20:39:13 +00:00
|
|
|
struct DiveTemperatureItem;
|
2014-01-16 17:02:32 +00:00
|
|
|
struct plot_info;
|
2014-01-17 17:34:15 +00:00
|
|
|
struct DiveGasPressureItem;
|
2014-01-21 16:59:19 +00:00
|
|
|
struct DiveCalculatedCeiling;
|
2014-01-21 19:34:36 +00:00
|
|
|
struct DiveReportedCeiling;
|
2014-01-22 21:22:07 +00:00
|
|
|
struct DiveCalculatedTissue;
|
2014-01-23 19:54:34 +00:00
|
|
|
struct PartialPressureGasItem;
|
2014-01-27 17:14:42 +00:00
|
|
|
struct PartialGasPressureAxis;
|
2014-02-07 16:14:36 +00:00
|
|
|
struct AbstractProfilePolygonItem;
|
2014-01-14 16:30:13 +00:00
|
|
|
|
|
|
|
class ProfileWidget2 : public QGraphicsView {
|
|
|
|
Q_OBJECT
|
2014-01-18 22:38:21 +00:00
|
|
|
void fixBackgroundPos();
|
2014-02-04 23:47:50 +00:00
|
|
|
void scrollViewTo(const QPoint& pos);
|
2014-02-07 16:59:58 +00:00
|
|
|
void setupSceneAndFlags();
|
|
|
|
void setupItemSizes();
|
|
|
|
void addItemsToScene();
|
|
|
|
void setupItemOnScene();
|
2014-01-14 16:30:13 +00:00
|
|
|
public:
|
|
|
|
enum State{ EMPTY, PROFILE, EDIT, ADD, PLAN, INVALID };
|
|
|
|
enum Items{BACKGROUND, PROFILE_Y_AXIS, GAS_Y_AXIS, TIME_AXIS, DEPTH_CONTROLLER, TIME_CONTROLLER, COLUMNS};
|
|
|
|
|
|
|
|
ProfileWidget2(QWidget *parent);
|
|
|
|
void plotDives(QList<dive*> dives);
|
2014-02-05 18:15:59 +00:00
|
|
|
virtual bool eventFilter(QObject*, QEvent*);
|
2014-02-07 16:14:36 +00:00
|
|
|
void setupItem( AbstractProfilePolygonItem *item, DiveCartesianAxis *hAxis, DiveCartesianAxis *vAxis, DivePlotDataModel *model, int vData, int hData, int zValue);
|
2014-01-14 16:30:13 +00:00
|
|
|
|
|
|
|
public slots: // Necessary to call from QAction's signals.
|
|
|
|
void settingsChanged();
|
|
|
|
protected:
|
|
|
|
virtual void resizeEvent(QResizeEvent* event);
|
2014-02-04 23:47:50 +00:00
|
|
|
virtual void wheelEvent(QWheelEvent* event);
|
|
|
|
virtual void mouseMoveEvent(QMouseEvent* event);
|
2014-01-14 16:30:13 +00:00
|
|
|
|
|
|
|
signals:
|
|
|
|
void startProfileState();
|
|
|
|
void startEmptyState();
|
2014-01-15 14:00:23 +00:00
|
|
|
private:
|
|
|
|
DivePlotDataModel *dataModel;
|
|
|
|
State currentState;
|
2014-02-04 23:47:50 +00:00
|
|
|
int zoomLevel;
|
2014-01-15 14:00:23 +00:00
|
|
|
DivePixmapItem *background ;
|
2014-02-05 16:34:45 +00:00
|
|
|
ToolTipItem *toolTipItem;
|
2014-01-16 17:02:32 +00:00
|
|
|
// All those here should probably be merged into one structure,
|
|
|
|
// So it's esyer to replicate for more dives later.
|
|
|
|
// In the meantime, keep it here.
|
|
|
|
struct plot_info *plotInfo;
|
2014-01-15 14:00:23 +00:00
|
|
|
DepthAxis *profileYAxis ;
|
2014-01-27 17:14:42 +00:00
|
|
|
PartialGasPressureAxis *gasYAxis;
|
2014-01-16 20:39:13 +00:00
|
|
|
TemperatureAxis *temperatureAxis;
|
2014-01-15 14:00:23 +00:00
|
|
|
TimeAxis *timeAxis;
|
|
|
|
DiveRectItem *depthController;
|
|
|
|
DiveRectItem *timeController;
|
|
|
|
DiveProfileItem *diveProfileItem;
|
2014-01-16 14:32:45 +00:00
|
|
|
DiveCartesianPlane *cartesianPlane;
|
2014-01-16 20:39:13 +00:00
|
|
|
DiveTemperatureItem *temperatureItem;
|
2014-01-17 16:28:59 +00:00
|
|
|
DiveCartesianAxis *cylinderPressureAxis;
|
2014-01-17 17:34:15 +00:00
|
|
|
DiveGasPressureItem *gasPressureItem;
|
2014-01-22 17:08:19 +00:00
|
|
|
MeanDepthLine *meanDepth;
|
2014-01-16 17:02:32 +00:00
|
|
|
QList<DiveEventItem*> eventItems;
|
2014-01-21 12:48:26 +00:00
|
|
|
DiveTextItem *diveComputerText;
|
2014-01-21 16:59:19 +00:00
|
|
|
DiveCalculatedCeiling *diveCeiling;
|
2014-01-22 21:22:07 +00:00
|
|
|
QList<DiveCalculatedTissue*> allTissues;
|
2014-01-21 19:34:36 +00:00
|
|
|
DiveReportedCeiling *reportedCeiling;
|
2014-01-23 19:54:34 +00:00
|
|
|
PartialPressureGasItem *pn2GasItem;
|
2014-01-23 19:59:14 +00:00
|
|
|
PartialPressureGasItem *pheGasItem;
|
2014-01-23 20:03:28 +00:00
|
|
|
PartialPressureGasItem *po2GasItem;
|
2014-01-14 16:30:13 +00:00
|
|
|
};
|
|
|
|
|
2014-01-18 22:38:21 +00:00
|
|
|
#endif
|