From 09b7fcbcf4e26d19529486ddd2a0e672e60dce32 Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Sat, 2 May 2020 14:34:40 +0200 Subject: selection: add selection flag for trips In analogy to dives add a selection flag for trips. The reason being that search for a selected trip can be painfully slow when we do it through Qt's proxy model. Make sure to deselect trips when they are removed from the core. Signed-off-by: Berthold Stoeger --- commands/command_divelist.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'commands') diff --git a/commands/command_divelist.cpp b/commands/command_divelist.cpp index 83ae2fbca..8f769514a 100644 --- a/commands/command_divelist.cpp +++ b/commands/command_divelist.cpp @@ -13,6 +13,14 @@ namespace Command { +// Helper function that takes care to unselect trips that are removed from the backend +static void remove_trip_from_backend(dive_trip *trip) +{ + if (trip->selected) + deselect_trip(trip); + remove_trip(trip, &trip_table); // Remove trip from backend +} + // This helper function removes a dive, takes ownership of the dive and adds it to a DiveToAdd structure. // If the trip the dive belongs to becomes empty, it is removed and added to the tripsToAdd vector. // It is crucial that dives are added in reverse order of deletion, so that the indices are correctly @@ -32,7 +40,7 @@ DiveToAdd DiveListBase::removeDive(struct dive *d, std::vector &t diveSiteCountChanged(d->dive_site); res.site = unregister_dive_from_dive_site(d); if (res.trip && res.trip->dives.nr == 0) { - remove_trip(res.trip, &trip_table); // Remove trip from backend + remove_trip_from_backend(res.trip); // Remove trip from backend tripsToAdd.emplace_back(res.trip); // Take ownership of trip } @@ -265,7 +273,7 @@ static OwningTripPtr moveDiveToTrip(DiveToTrip &diveToTrip) // Remove dive from trip - if this is the last dive in the trip, remove the whole trip. dive_trip *trip = unregister_dive_from_trip(diveToTrip.dive); if (trip && trip->dives.nr == 0) { - remove_trip(trip, &trip_table); // Remove trip from backend + remove_trip_from_backend(trip); // Remove trip from backend res.reset(trip); } -- cgit v1.2.3-70-g09d2