diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2013-09-23 21:57:28 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-09-23 21:57:28 -0700 |
commit | be418458dbf4299ef289b2790ac36e3efa3b5261 (patch) | |
tree | 6867b015b11d323407955c5845b1461faec8bc18 | |
parent | c6140c6e21aeff4c6e27e67bee407a1c3f552b18 (diff) | |
download | subsurface-be418458dbf4299ef289b2790ac36e3efa3b5261.tar.gz |
Add "merge selected dives" to dive list popup menu
This is fairly straight forward. What I dislike is the check for the magic
number of "14 indeces". I'm sure there's a better way to tell if more than
one dive is selected...
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | divelist.c | 18 | ||||
-rw-r--r-- | divelist.h | 2 | ||||
-rw-r--r-- | qt-ui/divelistview.cpp | 18 | ||||
-rw-r--r-- | qt-ui/divelistview.h | 1 |
4 files changed, 30 insertions, 9 deletions
diff --git a/divelist.c b/divelist.c index 6e3fc598e..baf0428e0 100644 --- a/divelist.c +++ b/divelist.c @@ -25,7 +25,7 @@ * void clear_trip_indexes(void) * void delete_single_dive(int idx) * void add_single_dive(int idx, struct dive *dive) - * void merge_dive_index(int i, struct dive *a) + * void merge_two_dives(struct dive *a, struct dive *b) * void select_dive(int idx) * void deselect_dive(int idx) * void mark_divelist_changed(int changed) @@ -916,22 +916,24 @@ void add_single_dive(int idx, struct dive *dive) } } -void merge_dive_index(int i, struct dive *a) +struct dive *merge_two_dives(struct dive *a, struct dive *b) { - struct dive *b = get_dive(i+1); struct dive *res; + int i,j; + if (!a || !b) + return NULL; + i = get_index_for_dive(a); + j = get_index_for_dive(b); res = merge_dives(a, b, b->when - a->when, FALSE); if (!res) - return; + return NULL; add_single_dive(i, res); delete_single_dive(i+1); - delete_single_dive(i+1); -#if USE_GTK_UI - dive_list_update_dives(); -#endif + delete_single_dive(j); mark_divelist_changed(TRUE); + return res; } void select_dive(int idx) diff --git a/divelist.h b/divelist.h index ef90c4283..1485dd97b 100644 --- a/divelist.h +++ b/divelist.h @@ -43,7 +43,7 @@ extern dive_trip_t *find_matching_trip(timestamp_t when); 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 void merge_dive_index(int i, struct dive *a); +extern struct dive *merge_two_dives(struct dive *a, struct dive *b); 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 639e988fd..a1436bf2d 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -290,6 +290,22 @@ void DiveListView::selectionChanged(const QItemSelection& selected, const QItemS Q_EMIT currentDiveChanged(selected_dive); } +void DiveListView::mergeDives() +{ + int i; + struct dive *dive, *maindive = NULL; + + for_each_dive(i, dive) { + if (dive->selected) { + if (!maindive) + maindive = dive; + else + maindive = merge_two_dives(maindive, dive); + } + } + mainWindow()->refreshDisplay(); +} + void DiveListView::merge_trip(const QModelIndex &a, int offset) { int i = a.row() + offset; @@ -384,6 +400,8 @@ void DiveListView::contextMenuEvent(QContextMenuEvent *event) } if (d) popup.addAction(tr("delete dive"), this, SLOT(deleteDive())); + if (selectionModel()->selection().indexes().count() > 14) + popup.addAction(tr("merge selected dives"), this, SLOT(mergeDives())); // "collapse all" really closes all trips, // "collapse" keeps the trip with the selected dive open QAction * actionTaken = popup.exec(event->globalPos()); diff --git a/qt-ui/divelistview.h b/qt-ui/divelistview.h index 1faa3613a..1287349f4 100644 --- a/qt-ui/divelistview.h +++ b/qt-ui/divelistview.h @@ -42,6 +42,7 @@ public slots: void fixMessyQtModelBehaviour(); void mergeTripAbove(); void mergeTripBelow(); + void mergeDives(); signals: void currentDiveChanged(int divenr); |