From 6f74618d9c3907765633f6b6e17eb2ba5cd8f931 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Mon, 13 May 2013 21:39:49 -0500 Subject: Speed fixes Signed-off-by: Tomaz Canabrava Signed-off-by: Dirk Hohndel --- qt-ui/divelistview.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'qt-ui') diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index af0ef8b0c..2b579e1f0 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -50,25 +50,33 @@ void DiveListView::selectionChanged(const QItemSelection& selected, const QItemS struct dive *dive = (struct dive*) model->data(index, TreeItemDT::DIVE_ROLE).value(); if (!dive) { // is's a trip! if (model->rowCount(index)) { - expand(index); // leave this - even if it looks like it shouldn't be here. looks like I'v found a Qt bug. + expand(index); // leave this - even if it looks like it shouldn't be here. looks like I'v found a Qt bug. + // the subselection is removed, but the painting is not. this cleans the area. } } } + QList parents; Q_FOREACH(const QModelIndex& index, selected.indexes()) { const QAbstractItemModel *model = index.model(); struct dive *dive = (struct dive*) model->data(index, TreeItemDT::DIVE_ROLE).value(); if (!dive) { // is's a trip! if (model->rowCount(index)) { - expand(index); QItemSelection selection; 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 { - expand(index.parent()); + else if (!parents.contains(index.parent())){ + parents.push_back(index.parent()); } } + + Q_FOREACH(const QModelIndex& index, parents){ + expand(index); + } } -- cgit v1.2.3-70-g09d2