summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2013-09-24 03:42:40 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-09-24 03:42:40 -0700
commit446ab45858b509e56029e5c1557a12ca3680a674 (patch)
tree129888e7d75600c63bd43cbb099e5901549c9b9b
parent2d40172d78436b8aef3eab238faabe2ce3f9830f (diff)
downloadsubsurface-446ab45858b509e56029e5c1557a12ca3680a674.tar.gz
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 <dirk@hohndel.org>
-rw-r--r--divelist.c24
-rw-r--r--divelist.h1
-rw-r--r--qt-ui/divelistview.cpp2
3 files changed, 26 insertions, 1 deletions
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