diff options
-rw-r--r-- | divelist.c | 19 | ||||
-rw-r--r-- | divelist.h | 1 | ||||
-rw-r--r-- | qt-ui/divelistview.cpp | 10 |
3 files changed, 21 insertions, 9 deletions
diff --git a/divelist.c b/divelist.c index e600a6cd2..ca2e9827f 100644 --- a/divelist.c +++ b/divelist.c @@ -864,6 +864,25 @@ void select_dives_in_trip(struct dive_trip *trip) select_dive(get_divenr(dive)); } +/* This only gets called with non-NULL trips. + * It does not combine notes or location, just picks the first one + * (or the second one if the first one is empty */ +void combine_trips(struct dive_trip *trip_a, struct dive_trip *trip_b) +{ + if (same_string(trip_a->location, "") && trip_b->location) { + free(trip_a->location); + trip_a->location = strdup(trip_b->location); + } + if (same_string(trip_a->notes, "") && trip_b->notes) { + free(trip_a->notes); + trip_a->notes = strdup(trip_b->notes); + } + /* this also removes the dives from trip_b and eventually + * calls delete_trip(trip_b) when the last dive has been moved */ + while (trip_b->dives) + add_dive_to_trip(trip_b->dives, trip_a); +} + void mark_divelist_changed(int changed) { dive_list_changed = changed; diff --git a/divelist.h b/divelist.h index 389a26930..4eafd5dd4 100644 --- a/divelist.h +++ b/divelist.h @@ -32,6 +32,7 @@ extern void select_dive(int idx); extern void deselect_dive(int idx); extern void select_dives_in_trip(struct dive_trip *trip); extern void deselect_dives_in_trip(struct dive_trip *trip); +extern void combine_trips(struct dive_trip *trip_a, struct dive_trip *trip_b); extern void find_new_trip_start_time(dive_trip_t *trip); extern struct dive *first_selected_dive(); extern struct dive *last_selected_dive(); diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index 1f716ed57..77a51343b 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -535,17 +535,9 @@ void DiveListView::merge_trip(const QModelIndex &a, int offset) dive_trip_t *trip_a = (dive_trip_t *)a.data(DiveTripModel::TRIP_ROLE).value<void *>(); dive_trip_t *trip_b = (dive_trip_t *)b.data(DiveTripModel::TRIP_ROLE).value<void *>(); - // TODO: merge_trip on the C code? some part of this needs to stay ( getting the trips from the model, - // but not the algorithm. if (trip_a == trip_b || !trip_a || !trip_b) return; - - if (!trip_a->location && trip_b->location) - trip_a->location = strdup(trip_b->location); - if (!trip_a->notes && trip_b->notes) - trip_a->notes = strdup(trip_b->notes); - while (trip_b->dives) - add_dive_to_trip(trip_b->dives, trip_a); + combine_trips(trip_a, trip_b); rememberSelection(); reload(currentLayout, false); fixMessyQtModelBehaviour(); |