diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index 075f12d4a..5883ea615 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -210,7 +210,7 @@ void DiveListView::selectionChanged(const QItemSelection& selected, const QItemS disconnect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(currentChanged(QModelIndex,QModelIndex))); Q_FOREACH(const QModelIndex& index, newSelected.indexes()) { - if(index.column() != 0) + if (index.column() != 0) continue; const QAbstractItemModel *model = index.model(); @@ -218,16 +218,42 @@ void DiveListView::selectionChanged(const QItemSelection& selected, const QItemS if (!dive) { // it's a trip! if (model->rowCount(index)) { QItemSelection selection; + struct dive *child = (struct dive*) model->data(index.child(0,0), TreeItemDT::DIVE_ROLE).value(); + while (child) { + select_dive(get_index_for_dive(child)); + child = child->next; + } selection.select(index.child(0,0), index.child(model->rowCount(index) -1 , 0)); selectionModel()->select(selection, QItemSelectionModel::Select | QItemSelectionModel::Rows); selectionModel()->setCurrentIndex(index, QItemSelectionModel::Select | QItemSelectionModel::NoUpdate); if (!isExpanded(index)) expand(index); } + } else { + select_dive(get_index_for_dive(dive)); + } + } + Q_FOREACH(const QModelIndex& index, newDeselected.indexes()) { + if (index.column() != 0) + continue; + const QAbstractItemModel *model = index.model(); + struct dive *dive = (struct dive*) model->data(index, TreeItemDT::DIVE_ROLE).value(); + if (!dive) { // it's a trip! + if (model->rowCount(index)) { + struct dive *child = (struct dive*) model->data(index.child(0,0), TreeItemDT::DIVE_ROLE).value(); + while (child) { + deselect_dive(get_index_for_dive(child)); + child = child->next; + } + } + } else { + deselect_dive(get_index_for_dive(dive)); } } QTreeView::selectionChanged(selectionModel()->selection(), newDeselected); connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(selectionChanged(QItemSelection,QItemSelection))); connect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(currentChanged(QModelIndex,QModelIndex))); + // now that everything is up to date, update the widgets + Q_EMIT currentDiveChanged(selected_dive); } diff --git a/qt-ui/globe.cpp b/qt-ui/globe.cpp index bf2369862..67a4fcd73 100644 --- a/qt-ui/globe.cpp +++ b/qt-ui/globe.cpp @@ -94,6 +94,8 @@ void GlobeGPS::centerOn(dive* dive) if (messageWidget->isVisible() && (!dive || dive_has_gps_location(dive))) { messageWidget->animatedHide(); } + if (!dive) + return; editingDiveCoords = 0; diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index e810dd6ee..55f11789f 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -272,6 +272,20 @@ void MainTab::updateDiveInfo(int dive) weightModel->clear(); addCylinder->setEnabled(false); addWeight->setEnabled(false); + ui->maximumDepthAllText->clear(); + ui->minimumDepthAllText->clear(); + ui->averageDepthAllText->clear(); + ui->maximumSacAllText->clear(); + ui->minimumSacAllText->clear(); + ui->averageSacAllText->clear(); + ui->divesAllText->clear(); + ui->maximumTemperatureAllText->clear(); + ui->minimumTemperatureAllText->clear(); + ui->averageTemperatureAllText->clear(); + ui->totalTimeAllText->clear(); + ui->averageTimeAllText->clear(); + ui->longestAllText->clear(); + ui->shortestAllText->clear(); } /* statisticsTab*/ /* we can access the stats_selection struct, but how do we ensure the relevant dives are selected diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp index d3cd951d8..5a33bd4d5 100644 --- a/qt-ui/mainwindow.cpp +++ b/qt-ui/mainwindow.cpp @@ -63,9 +63,11 @@ void MainWindow::refreshDisplay() void MainWindow::current_dive_changed(int divenr) { - select_dive(divenr); - ui->globe->centerOn(get_dive(selected_dive)); - redrawProfile(); + if (amount_selected && divenr >= 0) { + select_dive(divenr); + ui->globe->centerOn(get_dive(selected_dive)); + redrawProfile(); + } ui->InfoWidget->updateDiveInfo(divenr); }