aboutsummaryrefslogtreecommitdiffstats
path: root/qt-models/diveplannermodel.cpp
diff options
context:
space:
mode:
authorGravatar Rick Walsh <rickmwalsh@gmail.com>2016-07-06 22:40:35 +1000
committerGravatar Dirk Hohndel <dirk@hohndel.org>2016-07-09 12:08:25 -0700
commitf08b0e0e3ec088dfc6cc3084283de34a4fc78005 (patch)
treed97bf8c4d55572765d72230e00f09d1f16785a73 /qt-models/diveplannermodel.cpp
parentae9e147314231e3396252d892a7702886acfb5ae (diff)
downloadsubsurface-f08b0e0e3ec088dfc6cc3084283de34a4fc78005.tar.gz
Planner: automate calculation of best mix for max depth
Add option to calculate the best mix portion of O2 and He for the dive's max depth if the user enters * in the MOD and MND cylinder fields. Gas portions are automatically recalculated if the max depth of the dive changes. Signed-off-by: Rick Walsh <rickmwalsh@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-models/diveplannermodel.cpp')
-rw-r--r--qt-models/diveplannermodel.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/qt-models/diveplannermodel.cpp b/qt-models/diveplannermodel.cpp
index f44d94c17..0364a596b 100644
--- a/qt-models/diveplannermodel.cpp
+++ b/qt-models/diveplannermodel.cpp
@@ -41,6 +41,7 @@ void DivePlannerPointsModel::createSimpleDive()
addStop(M_OR_FT(5, 15), 42 * 60, 0, cylinderid, true);
addStop(M_OR_FT(5, 15), 45 * 60, 0, cylinderid, true);
}
+ updateMaxDepth();
}
void DivePlannerPointsModel::setupStartTime()
@@ -136,6 +137,19 @@ void DivePlannerPointsModel::setupCylinders()
CylindersModel::instance()->copyFromDive(&displayed_dive);
}
+// Update the dive's maximum depth. Returns true if max depth changed
+bool DivePlannerPointsModel::updateMaxDepth()
+{
+ int prevMaxDepth = displayed_dive.maxdepth.mm;
+ displayed_dive.maxdepth.mm = 0;
+ for (int i = 0; i < rowCount(); i++) {
+ divedatapoint p = at(i);
+ if (p.depth > displayed_dive.maxdepth.mm)
+ displayed_dive.maxdepth.mm = p.depth;
+ }
+ return (displayed_dive.maxdepth.mm != prevMaxDepth);
+}
+
QStringList &DivePlannerPointsModel::getGasList()
{
static QStringList list;
@@ -257,8 +271,11 @@ bool DivePlannerPointsModel::setData(const QModelIndex &index, const QVariant &v
divedatapoint &p = divepoints[index.row()];
switch (index.column()) {
case DEPTH:
- if (value.toInt() >= 0)
+ if (value.toInt() >= 0) {
p.depth = units_to_depth(value.toInt());
+ if (updateMaxDepth())
+ CylindersModel::instance()->updateBestMixes();
+ }
break;
case RUNTIME:
p.time = value.toInt() * 60;