summaryrefslogtreecommitdiffstats
path: root/desktop-widgets/command_divelist.cpp
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2018-07-30 10:33:25 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-10-11 16:22:27 -0700
commit63b65a7e20615d7e049ab09ae7dc6053d705c04b (patch)
tree870e1872e70cea37eabcedaea5564721cab79ed4 /desktop-widgets/command_divelist.cpp
parentec7d85835fb26ee9c0a9c780907441c312d7ac3f (diff)
downloadsubsurface-63b65a7e20615d7e049ab09ae7dc6053d705c04b.tar.gz
Undo: implement autogrouping of trips in DiveAdd
If the autogroup flag is set, search for appropriate trips in DiveAdd() and add the dive to this trip. If no trip exists, add a new trip. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets/command_divelist.cpp')
-rw-r--r--desktop-widgets/command_divelist.cpp25
1 files changed, 20 insertions, 5 deletions
diff --git a/desktop-widgets/command_divelist.cpp b/desktop-widgets/command_divelist.cpp
index bca6967e6..732932de3 100644
--- a/desktop-widgets/command_divelist.cpp
+++ b/desktop-widgets/command_divelist.cpp
@@ -289,16 +289,31 @@ static void moveDivesBetweenTrips(DivesToTrip &dives)
std::reverse(dives.divesToMove.begin(), dives.divesToMove.end());
}
-AddDive::AddDive(dive *d)
+AddDive::AddDive(dive *d, bool autogroup)
{
setText(tr("add dive"));
d->maxdepth.mm = 0;
fixup_dive(d);
- d->divetrip = nullptr; // TODO: consider autogroup == true
- int idx = dive_get_insertion_index(d);
- d->number = get_dive_nr_at_idx(idx);
+ d->divetrip = nullptr;
+
+ // Get an owning pointer to a copy of the dive
+ // Note: this destroys the old dive!
+ OwningDivePtr divePtr(clone_dive(d));
+
+ // If we alloc a new-trip for autogrouping, get an owning pointer to it.
+ OwningTripPtr allocTrip;
+ dive_trip *trip = nullptr;
+ if (autogroup) {
+ bool alloc;
+ trip = get_trip_for_new_dive(divePtr.get(), &alloc);
+ if (alloc)
+ allocTrip.reset(trip);
+ }
+
+ int idx = dive_get_insertion_index(divePtr.get());
+ divePtr->number = get_dive_nr_at_idx(idx);
- divesToAdd.push_back({ OwningDivePtr(clone_dive(d)), nullptr, d->divetrip, idx });
+ divesToAdd.push_back({ std::move(divePtr), std::move(allocTrip), trip, idx });
}
bool AddDive::workToBeDone()