summaryrefslogtreecommitdiffstats
path: root/qt-ui
diff options
context:
space:
mode:
Diffstat (limited to 'qt-ui')
-rw-r--r--qt-ui/divelistview.cpp4
-rw-r--r--qt-ui/downloadfromdivecomputer.cpp17
-rw-r--r--qt-ui/mainwindow.cpp11
-rw-r--r--qt-ui/mainwindow.h3
4 files changed, 30 insertions, 5 deletions
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<dive_trip_t *> DiveListView::selectedTrips()
@@ -211,6 +213,8 @@ void DiveListView::selectDive(int i, bool scrollto, bool toggle)
QSortFilterProxyModel *m = qobject_cast<QSortFilterProxyModel *>(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();