diff options
Diffstat (limited to 'qt-ui/diveplanner.h')
-rw-r--r-- | qt-ui/diveplanner.h | 113 |
1 files changed, 99 insertions, 14 deletions
diff --git a/qt-ui/diveplanner.h b/qt-ui/diveplanner.h index 7f33f044b..8dd8db3e3 100644 --- a/qt-ui/diveplanner.h +++ b/qt-ui/diveplanner.h @@ -4,6 +4,67 @@ #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 @@ -24,13 +85,8 @@ private: class DiveHandler : public QGraphicsEllipseItem{ public: DiveHandler(); - QGraphicsLineItem *from; - QGraphicsLineItem *to; - int sec; - int mm; protected: - void mousePressEvent(QGraphicsSceneMouseEvent* event); - + void mousePressEvent(QGraphicsSceneMouseEvent* event); }; class Ruler : public QGraphicsLineItem{ @@ -48,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 { @@ -71,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(); @@ -85,9 +141,13 @@ private slots: void keyRightAction(); void increaseTime(); void increaseDepth(); - void okClicked(); - void cancelClicked(); - + void decreaseTime(); + void decreaseDepth();; + 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); @@ -97,6 +157,15 @@ private: /* This is the user-entered handles. */ QList<DiveHandler *> handles; + /* this is the user-entered gases. + This must be a button, so the + user cna click to choose a new gas. + */ + QList<Button*> gases; + QListView *gasListView; + QStringListModel *gasChoices; + Button *currentGasChoice; + /* those are the lines that follows the mouse. */ QGraphicsLineItem *verticalLine; QGraphicsLineItem *horizontalLine; @@ -124,10 +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 |