From 446ab45858b509e56029e5c1557a12ca3680a674 Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Tue, 24 Sep 2013 03:42:40 -0700 Subject: Only offer to merge dives if they are consecutive in the divelist You cannot merge dives if there is another, unselected dive "between" them. Signed-off-by: Dirk Hohndel --- divelist.c | 24 ++++++++++++++++++++++++ divelist.h | 1 + qt-ui/divelistview.cpp | 2 +- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/divelist.c b/divelist.c index baf0428e0..777c53ba2 100644 --- a/divelist.c +++ b/divelist.c @@ -916,6 +916,30 @@ void add_single_dive(int idx, struct dive *dive) } } +bool consecutive_selected() +{ + struct dive *d; + int i; + bool consecutive = TRUE; + bool firstfound = FALSE; + bool lastfound = FALSE; + + if (amount_selected == 0 || amount_selected == 1) + return TRUE; + + for_each_dive(i, d) { + if (d->selected) { + if (!firstfound) + firstfound = TRUE; + else if (lastfound) + consecutive = FALSE; + } else if (firstfound) { + lastfound = TRUE; + } + } + return consecutive; +} + struct dive *merge_two_dives(struct dive *a, struct dive *b) { struct dive *res; diff --git a/divelist.h b/divelist.h index 1485dd97b..af52a0368 100644 --- a/divelist.h +++ b/divelist.h @@ -44,6 +44,7 @@ extern void remove_dive_from_trip(struct dive *dive); extern dive_trip_t *create_and_hookup_trip_from_dive(struct dive *dive); extern void autogroup_dives(void); extern struct dive *merge_two_dives(struct dive *a, struct dive *b); +extern bool consecutive_selected(); extern void select_dive(int idx); extern void deselect_dive(int idx); diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index ddd10e219..383307613 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -400,7 +400,7 @@ void DiveListView::contextMenuEvent(QContextMenuEvent *event) } if (d) popup.addAction(tr("delete dive"), this, SLOT(deleteDive())); - if (amount_selected > 1) + if (amount_selected > 1 && consecutive_selected()) popup.addAction(tr("merge selected dives"), this, SLOT(mergeDives())); // "collapse all" really closes all trips, // "collapse" keeps the trip with the selected dive open -- cgit v1.2.3-70-g09d2