summaryrefslogtreecommitdiffstats
path: root/profile-widget/profilewidget2.h
diff options
context:
space:
mode:
Diffstat (limited to 'profile-widget/profilewidget2.h')
-rw-r--r--profile-widget/profilewidget2.h211
1 files changed, 211 insertions, 0 deletions
diff --git a/profile-widget/profilewidget2.h b/profile-widget/profilewidget2.h
new file mode 100644
index 000000000..f11ec5be1
--- /dev/null
+++ b/profile-widget/profilewidget2.h
@@ -0,0 +1,211 @@
+#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 "divelineitem.h"
+#include "diveprofileitem.h"
+#include "display.h"
+
+class RulerItem2;
+struct dive;
+struct plot_info;
+class ToolTipItem;
+class DiveMeanDepth;
+class DiveReportedCeiling;
+class DiveTextItem;
+class TemperatureAxis;
+class DiveEventItem;
+class DivePlotDataModel;
+class DivePixmapItem;
+class DiveRectItem;
+class DepthAxis;
+class DiveCartesianAxis;
+class DiveProfileItem;
+class TimeAxis;
+class DiveTemperatureItem;
+class DiveHeartrateItem;
+class PercentageItem;
+class DiveGasPressureItem;
+class DiveCalculatedCeiling;
+class DiveCalculatedTissue;
+class PartialPressureGasItem;
+class PartialGasPressureAxis;
+class AbstractProfilePolygonItem;
+class TankItem;
+class DiveHandler;
+class QGraphicsSimpleTextItem;
+class QModelIndex;
+class DivePictureItem;
+
+class ProfileWidget2 : public QGraphicsView {
+ Q_OBJECT
+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 = 0);
+ void resetZoom();
+ void plotDive(struct dive *d = 0, bool force = false);
+ virtual bool eventFilter(QObject *, QEvent *);
+ void setupItem(AbstractProfilePolygonItem *item, DiveCartesianAxis *hAxis, DiveCartesianAxis *vAxis, DivePlotDataModel *model, int vData, int hData, int zValue);
+ void setPrintMode(bool mode, bool grayscale = false);
+ bool getPrintMode();
+ bool isPointOutOfBoundaries(const QPointF &point) const;
+ bool isPlanner();
+ bool isAddOrPlanner();
+ double getFontPrintScale();
+ void setFontPrintScale(double scale);
+ void clearHandlers();
+ void recalcCeiling();
+ void setToolTipVisibile(bool visible);
+ State currentState;
+
+signals:
+ void fontPrintScaleChanged(double scale);
+
+public
+slots: // Necessary to call from QAction's signals.
+ void settingsChanged();
+ void setEmptyState();
+ void setProfileState();
+ void setPlanState();
+ void setAddState();
+ void changeGas();
+ void addSetpointChange();
+ void addBookmark();
+ void hideEvents();
+ void unhideEvents();
+ void removeEvent();
+ void editName();
+ void makeFirstDC();
+ void deleteCurrentDC();
+ void pointInserted(const QModelIndex &parent, int start, int end);
+ void pointsRemoved(const QModelIndex &, int start, int end);
+ void plotPictures();
+ void setReplot(bool state);
+ void replot(dive *d = 0);
+
+ /* this is called for every move on the handlers. maybe we can speed up this a bit? */
+ void recreatePlannedDive();
+
+ /* key press handlers */
+ void keyEscAction();
+ void keyDeleteAction();
+ void keyUpAction();
+ void keyDownAction();
+ void keyLeftAction();
+ void keyRightAction();
+
+ void divePlannerHandlerClicked();
+ void divePlannerHandlerReleased();
+
+protected:
+ virtual ~ProfileWidget2();
+ virtual void resizeEvent(QResizeEvent *event);
+ virtual void wheelEvent(QWheelEvent *event);
+ virtual void mouseMoveEvent(QMouseEvent *event);
+ virtual void contextMenuEvent(QContextMenuEvent *event);
+ virtual void mouseDoubleClickEvent(QMouseEvent *event);
+ virtual void mousePressEvent(QMouseEvent *event);
+ virtual void mouseReleaseEvent(QMouseEvent *event);
+
+private: /*methods*/
+ void fixBackgroundPos();
+ void scrollViewTo(const QPoint &pos);
+ void setupSceneAndFlags();
+ void setupItemSizes();
+ void addItemsToScene();
+ void setupItemOnScene();
+ void disconnectTemporaryConnections();
+ struct plot_data *getEntryFromPos(QPointF pos);
+
+private:
+ DivePlotDataModel *dataModel;
+ int zoomLevel;
+ qreal zoomFactor;
+ DivePixmapItem *background;
+ QString backgroundFile;
+ ToolTipItem *toolTipItem;
+ bool isPlotZoomed;
+ bool replotEnabled;
+ // 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;
+ DepthAxis *profileYAxis;
+ PartialGasPressureAxis *gasYAxis;
+ TemperatureAxis *temperatureAxis;
+ TimeAxis *timeAxis;
+ DiveProfileItem *diveProfileItem;
+ DiveTemperatureItem *temperatureItem;
+ DiveMeanDepthItem *meanDepthItem;
+ DiveCartesianAxis *cylinderPressureAxis;
+ DiveGasPressureItem *gasPressureItem;
+ QList<DiveEventItem *> eventItems;
+ DiveTextItem *diveComputerText;
+ DiveCalculatedCeiling *diveCeiling;
+ DiveTextItem *gradientFactor;
+ QList<DiveCalculatedTissue *> allTissues;
+ DiveReportedCeiling *reportedCeiling;
+ PartialPressureGasItem *pn2GasItem;
+ PartialPressureGasItem *pheGasItem;
+ PartialPressureGasItem *po2GasItem;
+ PartialPressureGasItem *o2SetpointGasItem;
+ PartialPressureGasItem *ccrsensor1GasItem;
+ PartialPressureGasItem *ccrsensor2GasItem;
+ PartialPressureGasItem *ccrsensor3GasItem;
+ DiveCartesianAxis *heartBeatAxis;
+ DiveHeartrateItem *heartBeatItem;
+ DiveCartesianAxis *percentageAxis;
+ QList<DivePercentageItem *> allPercentages;
+ DiveAmbPressureItem *ambPressureItem;
+ DiveGFLineItem *gflineItem;
+ DiveLineItem *mouseFollowerVertical;
+ DiveLineItem *mouseFollowerHorizontal;
+ RulerItem2 *rulerItem;
+ TankItem *tankItem;
+ bool isGrayscale;
+ bool printMode;
+
+ //specifics for ADD and PLAN
+ QList<DiveHandler *> handles;
+ QList<QGraphicsSimpleTextItem *> gases;
+ QList<DivePictureItem *> pictures;
+ void repositionDiveHandlers();
+ int fixHandlerIndex(DiveHandler *activeHandler);
+ friend class DiveHandler;
+ QHash<Qt::Key, QAction *> actionsForKeys;
+ bool shouldCalculateMaxTime;
+ bool shouldCalculateMaxDepth;
+ int maxtime;
+ int maxdepth;
+ double fontPrintScale;
+};
+
+#endif // PROFILEWIDGET2_H