diff options
author | Robert C. Helling <helling@atdotde.de> | 2020-04-12 13:39:01 +0200 |
---|---|---|
committer | bstoeger <32835590+bstoeger@users.noreply.github.com> | 2020-04-13 09:42:29 +0200 |
commit | b50d5b63adb0c10bf4eb48d0aef8c54864cd67ae (patch) | |
tree | b26ff02f4fd9c61826538184639b92af1512d5e3 /qt-models/diveplannermodel.cpp | |
parent | 1690ba7c0cd3f95f0681152236342a31b2262796 (diff) | |
download | subsurface-b50d5b63adb0c10bf4eb48d0aef8c54864cd67ae.tar.gz |
Preserve events when editing dive in planner
The planner does not know about events except gas
changes. But if the dive comes from the log, we
should preserve the dive computer events. At least
those that happend before we started to delete
waypoints to let the planner take over.
Signed-off-by: Robert C. Helling <helling@atdotde.de>
Diffstat (limited to 'qt-models/diveplannermodel.cpp')
-rw-r--r-- | qt-models/diveplannermodel.cpp | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/qt-models/diveplannermodel.cpp b/qt-models/diveplannermodel.cpp index 09d08c79a..f9823c12d 100644 --- a/qt-models/diveplannermodel.cpp +++ b/qt-models/diveplannermodel.cpp @@ -150,6 +150,7 @@ void DivePlannerPointsModel::loadFromDive(dive *d) addStop(0, d->dc.duration.seconds,cylinderid, last_sp.mbar, true, current_divemode); recalc = oldRec; DiveTypeSelectionModel::instance()->repopulate(); + preserved_until = d->duration; emitDataChanged(); } @@ -844,10 +845,13 @@ void DivePlannerPointsModel::remove(const QModelIndex &index) int i; int rows = rowCount(); if (QApplication::keyboardModifiers() & Qt::ControlModifier) { + preserved_until.seconds = divepoints.at(index.row()).time; beginRemoveRows(QModelIndex(), index.row(), rows - 1); for (i = rows - 1; i >= index.row(); i--) divepoints.remove(i); } else { + if (index.row() == rows -1) + preserved_until.seconds = divepoints.at(rows - 1).time; beginRemoveRows(QModelIndex(), index.row(), index.row()); divepoints.remove(index.row()); } @@ -916,6 +920,7 @@ void DivePlannerPointsModel::clear() endRemoveRows(); } cylinders.clear(); + preserved_until.seconds = 0; setRecalc(oldRecalc); } @@ -1219,17 +1224,20 @@ void DivePlannerPointsModel::createPlan(bool replanCopy) #if not defined(SUBSURFACE_MOBILE) && not defined(SUBSURFACE_TESTING) Command::addDive(&displayed_dive, autogroup, true); #endif // SUBSURFACE_MOBILE SUBSURFACE_TESTING - } else if (replanCopy) { - // we were planning an old dive and save as a new dive - displayed_dive.id = dive_getUniqID(); // Things will break horribly if we create dives with the same id. + } else { + copy_events_until(current_dive, &displayed_dive, preserved_until.seconds); + if (replanCopy) { + // we were planning an old dive and save as a new dive + displayed_dive.id = dive_getUniqID(); // Things will break horribly if we create dives with the same id. #if not defined(SUBSURFACE_MOBILE) && not defined(SUBSURFACE_TESTING) - Command::addDive(&displayed_dive, false, false); + Command::addDive(&displayed_dive, false, false); #endif // SUBSURFACE_MOBILE SUBSURFACE_TESTING - } else { - // we were planning an old dive and rewrite the plan + } else { + // we were planning an old dive and rewrite the plan #if not defined(SUBSURFACE_MOBILE) && not defined(SUBSURFACE_TESTING) - Command::replanDive(&displayed_dive); + Command::replanDive(&displayed_dive); #endif // SUBSURFACE_MOBILE SUBSURFACE_TESTING + } } // Remove and clean the diveplan, so we don't delete |