diff options
Diffstat (limited to 'qt-ui/diveplanner.h')
-rw-r--r-- | qt-ui/diveplanner.h | 92 |
1 files changed, 81 insertions, 11 deletions
diff --git a/qt-ui/diveplanner.h b/qt-ui/diveplanner.h index 2239e013d..8dd8db3e3 100644 --- a/qt-ui/diveplanner.h +++ b/qt-ui/diveplanner.h @@ -4,11 +4,68 @@ #include <QGraphicsView> #include <QGraphicsPathItem> #include <QDialog> +#include <QAbstractTableModel> +#include <QDateTime> + +#include "dive.h" + +namespace Ui{ + class DivePlanner; +}; class QListView; class QStringListModel; class QModelIndex; +// Return a Model containing the air types. +QStringListModel *airTypes(); + +class DivePlannerPointsModel : public QAbstractTableModel{ + Q_OBJECT +public: + static DivePlannerPointsModel* instance(); + enum Sections{REMOVE, DEPTH, DURATION, GAS, CCSETPOINT, COLUMNS}; + virtual int columnCount(const QModelIndex& parent = QModelIndex()) const; + virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; + virtual int rowCount(const QModelIndex& parent = QModelIndex()) const; + virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); + virtual Qt::ItemFlags flags(const QModelIndex& index) const; + void removeSelectedPoints(const QVector<int>& rows); + + /** + * @return the row number. + */ + void editStop(int row, divedatapoint newData ); + divedatapoint at(int row); + struct diveplan getDiveplan(); +public slots: + int addStop(int meters = 0, int minutes = 0,const QString& gas = QString(), int ccpoint = 0 ); + void setGFHigh(short gfhigh); + void setGFLow(short ghflow); + void setSurfacePressure(int pressure); + void setBottomSac(int sac); + void setDecoSac(int sac); + void setStartTime(const QTime& t); + void setLastStop6m(bool value); + void createPlan(); + void remove(const QModelIndex& index); + void cancelPlan(); + void createTemporaryPlan(); + void deleteTemporaryPlan(); + +signals: + void planCreated(); + void planCanceled(); + +private: + explicit DivePlannerPointsModel(QObject* parent = 0); + struct diveplan diveplan; + QVector<divedatapoint> divepoints; + struct dive *tempDive; + void deleteTemporaryPlan(struct divedatapoint *dp); +}; + class Button : public QObject, public QGraphicsRectItem { Q_OBJECT public: @@ -28,10 +85,8 @@ private: class DiveHandler : public QGraphicsEllipseItem{ public: DiveHandler(); - int sec; - int mm; protected: - void mousePressEvent(QGraphicsSceneMouseEvent* event); + void mousePressEvent(QGraphicsSceneMouseEvent* event); }; class Ruler : public QGraphicsLineItem{ @@ -49,16 +104,19 @@ public: qreal percentAt(const QPointF& p); qreal posAtValue(qreal value); void setColor(const QColor& color); + void setTextColor(const QColor& color); private: Qt::Orientation orientation; QList<QGraphicsLineItem*> ticks; + QList<QGraphicsSimpleTextItem*> labels; double min; double max; double interval; double posBegin; double posEnd; double tickSize; + QColor textColor; }; class DivePlannerGraphics : public QGraphicsView { @@ -72,10 +130,7 @@ protected: virtual void mouseMoveEvent(QMouseEvent* event); virtual void mousePressEvent(QMouseEvent* event); virtual void mouseReleaseEvent(QMouseEvent* event); - - void createDecoStops(); bool isPointOutOfBoundaries(const QPointF& point); - void deleteTemporaryDivePlan(struct divedatapoint* dp); qreal fromPercent(qreal percent, Qt::Orientation orientation); private slots: void keyEscAction(); @@ -88,11 +143,11 @@ private slots: void increaseDepth(); void decreaseTime(); void decreaseDepth();; - void okClicked(); - void cancelClicked(); + void createDecoStops(); void prepareSelectGas(); void selectGas(const QModelIndex& index); - + void pointInserted(const QModelIndex&, int start, int end); + void pointsRemoved(const QModelIndex&, int start, int end); private: void moveActiveHandler(const QPointF& pos); @@ -138,11 +193,26 @@ private: Button *plusDepth; // adds 10 meters to the depth ruler. Button *lessTime; // remove 10 minutes to the time ruler. Button *lessDepth; // remove 10 meters to the depth ruler. - Button *okBtn; // accepts, and creates a new dive based on the plan. - Button *cancelBtn; // rejects, and clears the dive plan. int minMinutes; // this holds the minimum duration of the dive. int dpMaxTime; // this is the time of the dive calculated by the deco. }; +class DivePlannerWidget : public QWidget { + Q_OBJECT +public: + explicit DivePlannerWidget(QWidget* parent = 0, Qt::WindowFlags f = 0); + +public slots: + void startTimeChanged(const QTime& time); + void atmPressureChanged(const QString& pressure); + void bottomSacChanged(const QString& bottomSac); + void decoSacChanged(const QString& decosac); + void gflowChanged(const QString& gflow); + void gfhighChanged(const QString& gfhigh); + void lastStopChanged(bool checked); +private: + Ui::DivePlanner *ui; +}; + #endif |