summaryrefslogtreecommitdiffstats
path: root/qt-models/diveplannermodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt-models/diveplannermodel.cpp')
-rw-r--r--qt-models/diveplannermodel.cpp45
1 files changed, 22 insertions, 23 deletions
diff --git a/qt-models/diveplannermodel.cpp b/qt-models/diveplannermodel.cpp
index b2d71d1ef..bab57e0df 100644
--- a/qt-models/diveplannermodel.cpp
+++ b/qt-models/diveplannermodel.cpp
@@ -7,6 +7,7 @@
#include "core/device.h"
#include "core/qthelper.h"
#include "core/settings/qPrefDivePlanner.h"
+#include "desktop-widgets/command.h"
#include "core/gettextfromc.h"
#include <QApplication>
#include <QTextDocument>
@@ -1110,15 +1111,9 @@ void DivePlannerPointsModel::createPlan(bool replanCopy)
computeVariations(plan_copy, &ds_after_previous_dives);
free(cache);
- if (!current_dive || displayed_dive.id != current_dive->id) {
- // we were planning a new dive, not re-planning an existing on
- record_dive(clone_dive(&displayed_dive));
- } else if (current_dive && displayed_dive.id == current_dive->id) {
- // we are replanning a dive - make sure changes are reflected
- // correctly in the dive structure and copy it back into the dive table
- displayed_dive.maxdepth.mm = 0;
- displayed_dive.dc.maxdepth.mm = 0;
- fixup_dive(&displayed_dive);
+
+ // Fixup planner notes.
+ if (current_dive && displayed_dive.id == current_dive->id) {
// Try to identify old planner output and remove only this part
// Treat user provided text as plain text.
QTextDocument notesDocument;
@@ -1134,24 +1129,28 @@ void DivePlannerPointsModel::createPlan(bool replanCopy)
oldnotes.append(displayed_dive.notes);
displayed_dive.notes = copy_qstring(oldnotes);
// If we save as new create a copy of the dive here
- if (replanCopy) {
- struct dive *copy = alloc_dive();
- copy_dive(current_dive, copy);
- copy->id = 0;
- copy->selected = false;
- copy->divetrip = NULL;
- if (current_dive->divetrip)
- add_dive_to_trip(copy, current_dive->divetrip);
- record_dive(copy);
- }
+ }
+
+ setPlanMode(NOTHING);
+ planCreated(); // This signal will exit the profile from planner state. This must be *before* adding the dive,
+ // so that the Undo-commands update the display accordingly (see condition in updateDiveInfo().
+
+ // Now, add or modify the dive.
+ if (!current_dive || displayed_dive.id != current_dive->id) {
+ // we were planning a new dive, not re-planning an existing one
+ displayed_dive.divetrip = nullptr; // Should not be necessary, just in case!
+ Command::addDive(&displayed_dive, autogroup, true);
+ } 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.
+ Command::addDive(&displayed_dive, false, false);
+ } else {
+ // we were planning an old dive and rewrite the plan
+ mark_divelist_changed(true);
copy_dive(&displayed_dive, current_dive);
}
- mark_divelist_changed(true);
- sort_table(&dive_table);
// Remove and clean the diveplan, so we don't delete
// the dive by mistake.
free_dps(&diveplan);
- setPlanMode(NOTHING);
- planCreated();
}