diff options
author | Rick Walsh <rickmwalsh@gmail.com> | 2016-07-06 22:40:35 +1000 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2016-07-09 12:08:25 -0700 |
commit | f08b0e0e3ec088dfc6cc3084283de34a4fc78005 (patch) | |
tree | d97bf8c4d55572765d72230e00f09d1f16785a73 /qt-models/diveplannermodel.cpp | |
parent | ae9e147314231e3396252d892a7702886acfb5ae (diff) | |
download | subsurface-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.cpp | 19 |
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; |