#ifndef DIVEPLANNER_H #define DIVEPLANNER_H #include #include #include class DiveHandler : public QGraphicsEllipseItem{ public: DiveHandler(); QGraphicsLineItem *from; QGraphicsLineItem *to; qreal time; qreal depth; }; class Ruler : public QGraphicsLineItem{ public: Ruler(); void setMinimum(double minimum); void setMaximum(double maximum); void setTickInterval(double interval); void setOrientation(Qt::Orientation orientation); void updateTicks(); double minimum() const; double maximum() const; qreal valueAt(const QPointF& p); qreal posAtValue(qreal value); private: Qt::Orientation orientation; QList ticks; double min; double max; double interval; double posBegin; double posEnd; }; class DivePlannerGraphics : public QGraphicsView { Q_OBJECT public: DivePlannerGraphics(QWidget* parent = 0); protected: virtual void mouseDoubleClickEvent(QMouseEvent* event); virtual void showEvent(QShowEvent* event); virtual void resizeEvent(QResizeEvent* event); virtual void mouseMoveEvent(QMouseEvent* event); virtual void mousePressEvent(QMouseEvent* event); virtual void mouseReleaseEvent(QMouseEvent* event); void clear_generated_deco(); void create_deco_stop(); bool isPointOutOfBoundaries(QPointF point); private: void moveActiveHandler(QPointF pos); QList lines; QList handles; QGraphicsLineItem *verticalLine; QGraphicsLineItem *horizontalLine; DiveHandler *activeDraggedHandler; Ruler *timeLine; QGraphicsSimpleTextItem *timeString; Ruler *depthLine; QGraphicsSimpleTextItem *depthString; }; namespace Ui{ class DivePlanner; } class DivePlanner : public QDialog{ Q_OBJECT public: static DivePlanner *instance(); struct dive* getDive(); private: DivePlanner(); Ui::DivePlanner *ui; }; #endif