From b50d5b63adb0c10bf4eb48d0aef8c54864cd67ae Mon Sep 17 00:00:00 2001 From: "Robert C. Helling" Date: Sun, 12 Apr 2020 13:39:01 +0200 Subject: 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 --- qt-models/diveplannermodel.cpp | 22 +++++++++++++++------- qt-models/diveplannermodel.h | 1 + 2 files changed, 16 insertions(+), 7 deletions(-) (limited to 'qt-models') 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 diff --git a/qt-models/diveplannermodel.h b/qt-models/diveplannermodel.h index 4d0967a26..7866591a6 100644 --- a/qt-models/diveplannermodel.h +++ b/qt-models/diveplannermodel.h @@ -136,6 +136,7 @@ private: QDateTime startTime; int instanceCounter = 0; struct deco_state ds_after_previous_dives; + duration_t preserved_until; }; #endif -- cgit v1.2.3-70-g09d2