diff options
Diffstat (limited to 'qt-ui/divelistview.cpp')
-rw-r--r-- | qt-ui/divelistview.cpp | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index da4229de8..7689f06a9 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -495,25 +495,23 @@ void DiveListView::deleteDive() struct dive *d = (struct dive *) contextMenuIndex.data(DiveTripModel::DIVE_ROLE).value<void*>(); if (!d) return; - // after a dive is deleted the ones following it move forward in the dive_table - // so instead of using the for_each_dive macro I'm using an explicit for loop - // to make this easier to understand - for (i = 0; i < dive_table.nr; i++) { - d = get_dive(i); - if (!d->selected) - continue; - delete_single_dive(i); - i--; // so the next dive isn't skipped... it's now #i - } + + QSortFilterProxyModel *proxy = qobject_cast<QSortFilterProxyModel*>(model()); + DiveTripModel *realModel = qobject_cast<DiveTripModel*>(proxy->sourceModel()); + realModel->deleteSelectedDives(); + + struct dive* next_dive = 0; if (amount_selected == 0) { - if (i > 0) - select_dive(nr - 1); - else + if (i > 0){ + next_dive = get_dive(nr -1); + } + else{ mainWindow()->cleanUpEmpty(); + } } mark_divelist_changed(TRUE); - mainWindow()->refreshDisplay(); - reload(currentLayout, false); + if (next_dive) + selectDive(next_dive); } void DiveListView::testSlot() |