mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-01 06:30:26 +00:00
c92bb9e021
In most cases this wouldn't really matter, but when planning very deep or very long dive with corresponding very long deco times, calculating the deco takes long enough to make this notable. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
148 lines
3.6 KiB
C++
148 lines
3.6 KiB
C++
#ifndef DIVEPLANNER_H
|
|
#define DIVEPLANNER_H
|
|
|
|
#include <QGraphicsView>
|
|
#include <QGraphicsPathItem>
|
|
#include <QDialog>
|
|
#include <QAbstractTableModel>
|
|
#include <QDateTime>
|
|
|
|
#include "dive.h"
|
|
|
|
class QListView;
|
|
class QModelIndex;
|
|
|
|
class DivePlannerPointsModel : public QAbstractTableModel {
|
|
Q_OBJECT
|
|
public:
|
|
static DivePlannerPointsModel *instance();
|
|
enum Sections {
|
|
REMOVE,
|
|
DEPTH,
|
|
DURATION,
|
|
RUNTIME,
|
|
GAS,
|
|
CCSETPOINT,
|
|
COLUMNS
|
|
};
|
|
enum Mode {
|
|
NOTHING,
|
|
PLAN,
|
|
ADD
|
|
};
|
|
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);
|
|
void setPlanMode(Mode mode);
|
|
bool isPlanner();
|
|
void createSimpleDive();
|
|
void clear();
|
|
Mode currentMode() const;
|
|
bool setRecalc(bool recalc);
|
|
bool recalcQ();
|
|
void tanksUpdated();
|
|
void rememberTanks();
|
|
bool tankInUse(struct gasmix gasmix);
|
|
void copyCylinders(struct dive *d);
|
|
void setupCylinders();
|
|
/**
|
|
* @return the row number.
|
|
*/
|
|
void editStop(int row, divedatapoint newData);
|
|
divedatapoint at(int row);
|
|
int size();
|
|
struct diveplan &getDiveplan();
|
|
QStringList &getGasList();
|
|
QVector<QPair<int, int> > collectGases(dive *d);
|
|
int lastEnteredPoint();
|
|
void removeDeco();
|
|
static bool addingDeco;
|
|
|
|
public
|
|
slots:
|
|
int addStop(int millimeters = 0, int seconds = 0, struct gasmix *gas = 0, int ccpoint = 0, bool entered = true);
|
|
void addCylinder_clicked();
|
|
void setGFHigh(const int gfhigh);
|
|
void setGFLow(const int ghflow);
|
|
void setSurfacePressure(int pressure);
|
|
void setBottomSac(int sac);
|
|
void setDecoSac(int sac);
|
|
void setStartTime(const QTime &t);
|
|
void setLastStop6m(bool value);
|
|
void setVerbatim(bool value);
|
|
void setDisplayRuntime(bool value);
|
|
void setDisplayDuration(bool value);
|
|
void setDisplayTransitions(bool value);
|
|
void createPlan();
|
|
void remove(const QModelIndex &index);
|
|
void cancelPlan();
|
|
void createTemporaryPlan();
|
|
void deleteTemporaryPlan();
|
|
void loadFromDive(dive *d);
|
|
void restoreBackupDive();
|
|
void emitDataChanged();
|
|
|
|
signals:
|
|
void planCreated();
|
|
void planCanceled();
|
|
void cylinderModelEdited();
|
|
|
|
private:
|
|
explicit DivePlannerPointsModel(QObject *parent = 0);
|
|
bool addGas(struct gasmix mix);
|
|
struct diveplan diveplan;
|
|
Mode mode;
|
|
bool recalc;
|
|
QVector<divedatapoint> divepoints;
|
|
struct dive *tempDive;
|
|
struct dive backupDive;
|
|
void deleteTemporaryPlan(struct divedatapoint *dp);
|
|
QVector<sample> backupSamples; // For editing added dives.
|
|
struct dive *stagingDive;
|
|
QVector<QPair<int, int> > oldGases;
|
|
};
|
|
|
|
class DiveHandler : public QObject, public QGraphicsEllipseItem {
|
|
Q_OBJECT
|
|
public:
|
|
DiveHandler();
|
|
|
|
protected:
|
|
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
|
|
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
|
|
signals:
|
|
void moved();
|
|
private:
|
|
int parentIndex();
|
|
public
|
|
slots:
|
|
void selfRemove();
|
|
void changeGas();
|
|
};
|
|
|
|
#include "ui_diveplanner.h"
|
|
|
|
class DivePlannerWidget : public QWidget {
|
|
Q_OBJECT
|
|
public:
|
|
explicit DivePlannerWidget(QWidget *parent = 0, Qt::WindowFlags f = 0);
|
|
|
|
public
|
|
slots:
|
|
void settingsChanged();
|
|
void atmPressureChanged(const QString &pressure);
|
|
void bottomSacChanged(const QString &bottomSac);
|
|
void decoSacChanged(const QString &decosac);
|
|
void printDecoPlan();
|
|
|
|
private:
|
|
Ui::DivePlanner ui;
|
|
};
|
|
|
|
QString dpGasToStr(const divedatapoint &p);
|
|
|
|
#endif // DIVEPLANNER_H
|