summaryrefslogtreecommitdiffstats
path: root/qt-ui/divelistview.cpp
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2013-05-31 21:05:33 +0900
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-06-02 20:31:04 +0900
commite88a9aa83eacaa6a003ca440947fa20c9b598834 (patch)
tree4ac2b3afe0f9705c41fdc43f9aaf8987029841fc /qt-ui/divelistview.cpp
parent9a65798daf3dc0e7991305ce759d42d40d2dc98c (diff)
downloadsubsurface-e88a9aa83eacaa6a003ca440947fa20c9b598834.tar.gz
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>
Diffstat (limited to 'qt-ui/divelistview.cpp')
-rw-r--r--qt-ui/divelistview.cpp28
1 files changed, 27 insertions, 1 deletions
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<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);
}