diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index 6fd5dee10..e6eff5fc4 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -189,6 +189,8 @@ void DiveListView::selectTrip(dive_trip_t *trip) void DiveListView::unselectDives() { selectionModel()->clearSelection(); + if (amount_selected != 0) + qDebug() << "selection information inconsistent"; } QList DiveListView::selectedTrips() @@ -211,6 +213,8 @@ void DiveListView::selectDive(int i, bool scrollto, bool toggle) QSortFilterProxyModel *m = qobject_cast(model()); QModelIndexList match = m->match(m->index(0, 0), DiveTripModel::DIVE_IDX, i, 2, Qt::MatchRecursive); QItemSelectionModel::SelectionFlags flags; + if (match.isEmpty()) + return; QModelIndex idx = match.first(); flags = toggle ? QItemSelectionModel::Toggle : QItemSelectionModel::Select; flags |= QItemSelectionModel::Rows; diff --git a/qt-ui/downloadfromdivecomputer.cpp b/qt-ui/downloadfromdivecomputer.cpp index 8c0f81aa5..a341a0c37 100644 --- a/qt-ui/downloadfromdivecomputer.cpp +++ b/qt-ui/downloadfromdivecomputer.cpp @@ -382,8 +382,23 @@ void DownloadFromDCWidget::onDownloadThreadFinished() // down in the dive_table for (int i = dive_table.nr - 1; i >= previousLast; i--) delete_single_dive(i); - } else { + } else if (dive_table.nr) { + int i; + struct dive *d; + // remember the last downloaded dive (on most dive computers this will be the chronologically + // first new dive) and select it again after processing all the dives + MainWindow::instance()->dive_list()->unselectDives(); + get_dive(dive_table.nr - 1)->selected = true; process_dives(true, preferDownloaded()); + // after process_dives does any merging or resorting needed, we need + // to recreate the model for the dive list so we can select the newest dive + MainWindow::instance()->recreateDiveList(); + for_each_dive(i, d) { + if (d->selected) + break; + } + d->selected = false; + MainWindow::instance()->dive_list()->selectDive(i, true); } } else if (currentState == CANCELLING || currentState == CANCELLED){ if (import_thread_cancelled) { diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp index f37b1c25d..efa50bc0c 100644 --- a/qt-ui/mainwindow.cpp +++ b/qt-ui/mainwindow.cpp @@ -124,14 +124,14 @@ MainWindow *MainWindow::instance() } // this gets called after we download dives from a divecomputer -void MainWindow::refreshDisplay(bool recreateDiveList) +void MainWindow::refreshDisplay(bool doRecreateDiveList) { showError(get_error_string()); ui.InfoWidget->reload(); TankInfoModel::instance()->update(); ui.globe->reload(); - if (recreateDiveList) - ui.ListWidget->reload(DiveTripModel::CURRENT); + if (doRecreateDiveList) + recreateDiveList(); ui.ListWidget->setFocus(); WSInfoModel::instance()->updateInfo(); // refresh the yearly stats if the window has an instance @@ -143,6 +143,11 @@ void MainWindow::refreshDisplay(bool recreateDiveList) } } +void MainWindow::recreateDiveList() +{ + ui.ListWidget->reload(DiveTripModel::CURRENT); +} + void MainWindow::current_dive_changed(int divenr) { if (divenr >= 0) { diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h index 60081e957..d6775c602 100644 --- a/qt-ui/mainwindow.h +++ b/qt-ui/mainwindow.h @@ -152,7 +152,8 @@ protected: public slots: void readSettings(); - void refreshDisplay(bool recreateDiveList = true); + void refreshDisplay(bool doRecreateDiveList = true); + void recreateDiveList(); void showProfile(); void editCurrentDive();