Undo: consider dive site in AddDive()

If a dive site was added for a new dive, remove it on undo.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2019-03-03 17:10:09 +01:00 committed by Dirk Hohndel
parent 2134d99d0c
commit a2be015a43
8 changed files with 49 additions and 16 deletions

View file

@ -5,6 +5,7 @@
#include "desktop-widgets/divelistview.h"
#include "core/divelist.h"
#include "core/display.h" // for amount_selected
#include "core/qthelper.h"
#include "core/subsurface-qt/DiveListNotifier.h"
#include "qt-models/filtermodels.h"
@ -489,7 +490,7 @@ void DiveListBase::redo()
finishWork();
}
AddDive::AddDive(dive *d, bool autogroup, bool newNumber)
AddDive::AddDive(dive *d, const QString &newDS, bool autogroup, bool newNumber)
{
setText(tr("add dive"));
// By convention, d is "displayed dive" and can be overwritten.
@ -497,6 +498,14 @@ AddDive::AddDive(dive *d, bool autogroup, bool newNumber)
d->dc.maxdepth.mm = 0;
fixup_dive(d);
// Create new dive site if requested.
if (!newDS.isEmpty()) {
struct dive_site *ds = alloc_dive_site();
ds->name = copy_qstring(newDS);
d->dive_site = ds;
divesToAdd.sites.emplace_back(ds);
}
// Get an owning pointer to a copied or moved dive
// Note: if move is true, this destroys the old dive!
OwningDivePtr divePtr(clone_dive(d));