mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-01 06:30:26 +00:00
Don't recalculate plan automatically with low GFHigh
While it's nice to have immediate response to gradient factor changes, there is an oddity that very low GFHigh values can cause infinite decompression if the last stop is at 6m. Robert fixed this and now errors out of deco after 48 hours, but if the user simply wants to edit their GFHigh from (for example) 75 to 70 and deletes the '5', we really don't want to trigger a recalculation for GFHigh of 7... Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
7d89f5d7ee
commit
3e00bac552
2 changed files with 33 additions and 5 deletions
|
@ -412,6 +412,8 @@ PlannerSettingsWidget::PlannerSettingsWidget(QWidget *parent, Qt::WindowFlags f)
|
||||||
connect(ui.decoStopSAC, SIGNAL(valueChanged(int)), this, SLOT(decoSacChanged(int)));
|
connect(ui.decoStopSAC, SIGNAL(valueChanged(int)), this, SLOT(decoSacChanged(int)));
|
||||||
connect(ui.gfhigh, SIGNAL(valueChanged(int)), plannerModel, SLOT(setGFHigh(int)));
|
connect(ui.gfhigh, SIGNAL(valueChanged(int)), plannerModel, SLOT(setGFHigh(int)));
|
||||||
connect(ui.gflow, SIGNAL(valueChanged(int)), plannerModel, SLOT(setGFLow(int)));
|
connect(ui.gflow, SIGNAL(valueChanged(int)), plannerModel, SLOT(setGFLow(int)));
|
||||||
|
connect(ui.gfhigh, SIGNAL(editingFinished()), plannerModel, SLOT(triggerGFHigh()));
|
||||||
|
connect(ui.gflow, SIGNAL(editingFinished()), plannerModel, SLOT(triggerGFLow()));
|
||||||
connect(ui.backgasBreaks, SIGNAL(toggled(bool)), this, SLOT(setBackgasBreaks(bool)));
|
connect(ui.backgasBreaks, SIGNAL(toggled(bool)), this, SLOT(setBackgasBreaks(bool)));
|
||||||
|
|
||||||
ui.bottomSAC->setValue(prefs.bottomsac / 1000.0);
|
ui.bottomSAC->setValue(prefs.bottomsac / 1000.0);
|
||||||
|
@ -667,7 +669,10 @@ int DivePlannerPointsModel::rowCount(const QModelIndex &parent) const
|
||||||
return divepoints.count();
|
return divepoints.count();
|
||||||
}
|
}
|
||||||
|
|
||||||
DivePlannerPointsModel::DivePlannerPointsModel(QObject *parent) : QAbstractTableModel(parent), mode(NOTHING)
|
DivePlannerPointsModel::DivePlannerPointsModel(QObject *parent) : QAbstractTableModel(parent),
|
||||||
|
mode(NOTHING),
|
||||||
|
tempGFHigh(100),
|
||||||
|
tempGFLow(100)
|
||||||
{
|
{
|
||||||
memset(&diveplan, 0, sizeof(diveplan));
|
memset(&diveplan, 0, sizeof(diveplan));
|
||||||
}
|
}
|
||||||
|
@ -699,15 +704,34 @@ void DivePlannerPointsModel::setDecoSac(int sac)
|
||||||
|
|
||||||
void DivePlannerPointsModel::setGFHigh(const int gfhigh)
|
void DivePlannerPointsModel::setGFHigh(const int gfhigh)
|
||||||
{
|
{
|
||||||
diveplan.gfhigh = gfhigh;
|
tempGFHigh = gfhigh;
|
||||||
|
// GFHigh <= 34 can cause infinite deco at 6m - don't trigger a recalculation
|
||||||
|
// for smaller GFHigh unless the user explicitly leaves the field
|
||||||
|
if (tempGFHigh > 34)
|
||||||
|
triggerGFHigh();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DivePlannerPointsModel::triggerGFHigh()
|
||||||
|
{
|
||||||
|
if (diveplan.gfhigh != tempGFHigh) {
|
||||||
|
diveplan.gfhigh = tempGFHigh;
|
||||||
plannerModel->emitDataChanged();
|
plannerModel->emitDataChanged();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void DivePlannerPointsModel::setGFLow(const int ghflow)
|
void DivePlannerPointsModel::setGFLow(const int ghflow)
|
||||||
{
|
{
|
||||||
diveplan.gflow = ghflow;
|
tempGFLow = ghflow;
|
||||||
|
triggerGFLow();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DivePlannerPointsModel::triggerGFLow()
|
||||||
|
{
|
||||||
|
if (diveplan.gflow != tempGFLow) {
|
||||||
|
diveplan.gflow = tempGFLow;
|
||||||
plannerModel->emitDataChanged();
|
plannerModel->emitDataChanged();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void DivePlannerPointsModel::setSurfacePressure(int pressure)
|
void DivePlannerPointsModel::setSurfacePressure(int pressure)
|
||||||
{
|
{
|
||||||
|
|
|
@ -65,7 +65,9 @@ slots:
|
||||||
int addStop(int millimeters = 0, int seconds = 0, struct gasmix *gas = 0, int ccpoint = 0, bool entered = true);
|
int addStop(int millimeters = 0, int seconds = 0, struct gasmix *gas = 0, int ccpoint = 0, bool entered = true);
|
||||||
void addCylinder_clicked();
|
void addCylinder_clicked();
|
||||||
void setGFHigh(const int gfhigh);
|
void setGFHigh(const int gfhigh);
|
||||||
|
void triggerGFHigh();
|
||||||
void setGFLow(const int ghflow);
|
void setGFLow(const int ghflow);
|
||||||
|
void triggerGFLow();
|
||||||
void setSurfacePressure(int pressure);
|
void setSurfacePressure(int pressure);
|
||||||
int getSurfacePressure();
|
int getSurfacePressure();
|
||||||
void setBottomSac(int sac);
|
void setBottomSac(int sac);
|
||||||
|
@ -103,6 +105,8 @@ private:
|
||||||
QVector<sample> backupSamples; // For editing added dives.
|
QVector<sample> backupSamples; // For editing added dives.
|
||||||
QVector<QPair<int, int> > oldGases;
|
QVector<QPair<int, int> > oldGases;
|
||||||
QDateTime startTime;
|
QDateTime startTime;
|
||||||
|
int tempGFHigh;
|
||||||
|
int tempGFLow;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DiveHandler : public QObject, public QGraphicsEllipseItem {
|
class DiveHandler : public QObject, public QGraphicsEllipseItem {
|
||||||
|
|
Loading…
Reference in a new issue