mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
Once again try to fix the selection
Things got broken. Again. We no longer kept track of the selected dives in our structures which broke statistics. This attempts to fix that, but appears to still have a bug when selecting trips. Sometimes this results in 0 dives being selected according to our data structures, while Qt happily shows all dives of the trip as seected. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
9a65798daf
commit
e88a9aa83e
4 changed files with 48 additions and 4 deletions
|
@ -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<void*>();
|
||||
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<void*>();
|
||||
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<void*>();
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue