diff options
author | Willem Ferguson <willemferguson@zoology.up.ac.za> | 2018-01-15 14:51:47 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2018-01-19 12:38:11 +0200 |
commit | 9a8bab21c9996020b16f1dd140647efe8e262a42 (patch) | |
tree | ee4dd7b1e9207b152b8a73f306e14f9d9994ea12 /qt-models/diveplannermodel.cpp | |
parent | 7594e7ca7ffd413920b2513ddf0f8b03376cd557 (diff) | |
download | subsurface-9a8bab21c9996020b16f1dd140647efe8e262a42.tar.gz |
Improve profile display in planner
This patch allows the planner to save the last manually-entered
dive planner point of a dive plan. When the plan has been saved
and re-opened for edit, the time of the last-entered dive planner
point is used to ensure that dive planning continues from the same
point in the profile as was when the original dive plan was saved.
Mechanism:
1) In dive.h, create a new dc attribute dc->last_manual_time
with data type of duration_t.
2) In diveplanner.c, ensure that the last manually-entered
dive planner point is saved in dc->last_manual_time.
3) In save-xml.c, create a new XML attribute for the <divecomputer>
element, named last-manual-time. For dive plans, the element would
now look like:
<divecomputer model='planned dive' last-manual-time='31:17 min'>
4) In parse-xml.c, insert code that recognises the last-manual-time
XML attribute, reads the time value and assigns this time to
dc->last_manual_time.
5) In diveplannermodel.cpp, method DiveplannerPointModel::loadfromdive,
insert code that sets the appropriate boolean value to dp->entered
by comparing newtime (i.e. time of dp) with dc->last_manual_time.
6) Diveplannermodel.cpp also accepts profile data from normal dives in
the dive log, whether hand-entered or loaded from dive computer. It
looks like the reduction of dive points for dives with >100 points
continues to work ok.
The result is that when a dive plan is saved with manually entered
points up to e.g. 10 minutes into the dive, it can be re-opened for edit
in the dive planner and the planner re-creates the plan with manually
entered points up to 10 minutes. The rest of the points are "soft"
points, shaped by the deco calculations of the planner.
Improvements: Improve code for profile display in dive planner
This responds to #1052.
Change load-git.c and save-git.c so that the last-manual-time is
also saved in the git-format dive log.
Several stylistic changes in text for consistent C source code.
Improvement of dive planner profile display:
Do some simplification of my alterations to diveplannermodel.cpp
Two small style changes in planner.c and diveplannermodel.cpp
as requested ny @neolit123
Signed-off-by: Willem Ferguson <willemferguson@zoology.up.ac.za>
Diffstat (limited to 'qt-models/diveplannermodel.cpp')
-rw-r--r-- | qt-models/diveplannermodel.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/qt-models/diveplannermodel.cpp b/qt-models/diveplannermodel.cpp index b94894f2d..924812e22 100644 --- a/qt-models/diveplannermodel.cpp +++ b/qt-models/diveplannermodel.cpp @@ -82,7 +82,7 @@ void DivePlannerPointsModel::loadFromDive(dive *d) struct divecomputer *dc = &(d->dc); recalc = false; CylindersModel::instance()->updateDive(); - duration_t lasttime = {}; + duration_t lasttime = { 0 }; duration_t lastrecordedtime = {}; duration_t newtime = {}; free_dps(&diveplan); @@ -108,6 +108,8 @@ void DivePlannerPointsModel::loadFromDive(dive *d) int cylinderid = 0; last_sp.mbar = 0; for (int i = 0; i < plansamples - 1; i++) { + if (dc->last_manual_time.seconds && lasttime.seconds >= dc->last_manual_time.seconds) + break; while (j * plansamples <= i * dc->samples) { const sample &s = dc->sample[j]; if (s.time.seconds != 0 && (!hasMarkedSamples || s.manually_entered)) { @@ -130,7 +132,8 @@ void DivePlannerPointsModel::loadFromDive(dive *d) } } // make sure we get the last point right so the duration is correct - if (!hasMarkedSamples) addStop(0, d->dc.duration.seconds,cylinderid, last_sp.mbar, true); + if (!hasMarkedSamples && !dc->last_manual_time.seconds) + addStop(0, d->dc.duration.seconds,cylinderid, last_sp.mbar, true); recalc = oldRec; emitDataChanged(); } |