From 16d0a47853db6b3957805443cb7f4dd520c7af78 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Wed, 29 May 2013 16:46:27 -0300 Subject: Fixed the regression of selection not being stored from table to tree This fixes the regression that I caused in the last commit, where the selection was being correctly reestored from tree-to-table, but it was incorrectly being restored from table-to-tree. I also added a bit of speedup on the view while changing columns. Signed-off-by: Tomaz Canabrava --- qt-ui/divelistview.cpp | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'qt-ui/divelistview.cpp') diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index 5c2bfca70..46daa0f12 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -16,7 +16,7 @@ #include -DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelection(false) +DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelection(false), currentHeaderClicked(-1) { setUniformRowHeights(true); setItemDelegateForColumn(TreeItemDT::RATING, new StarWidgetsDelegate()); @@ -29,6 +29,16 @@ DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelec void DiveListView::headerClicked(int i ) { + if (currentHeaderClicked == i){ + sortByColumn(i); + return; + } + + if (currentLayout == (i == (int) TreeItemDT::NR ? DiveTripModel::TREE : DiveTripModel::LIST)){ + sortByColumn(i); + return; + } + QItemSelection oldSelection = selectionModel()->selection(); QList currentSelectedDives; Q_FOREACH(const QModelIndex& index , oldSelection.indexes()){ @@ -44,20 +54,27 @@ void DiveListView::headerClicked(int i ) // clear the model, repopulate with new indexes. reload( i == (int) TreeItemDT::NR ? DiveTripModel::TREE : DiveTripModel::LIST, false); selectionModel()->clearSelection(); + sortByColumn(i, Qt::DescendingOrder); + + QSortFilterProxyModel *m = qobject_cast(model()); // repopulat the selections. Q_FOREACH(struct dive *d, currentSelectedDives){ - QModelIndexList match = model()->match(model()->index(0,0), TreeItemDT::NR, d->number, 1, Qt::MatchRecursive); + QModelIndexList match = m->match(m->index(0,0), TreeItemDT::NR, d->number, 1, Qt::MatchRecursive); QModelIndex idx = match.first(); + if (i == (int) TreeItemDT::NR && idx.parent().isValid() ){ // Tree Mode Activated. + QModelIndex parent = idx.parent(); + expand(parent); + } selectionModel()->select( idx, QItemSelectionModel::Select | QItemSelectionModel::Rows); } - - // sort. - sortByColumn(i); } void DiveListView::reload(DiveTripModel::Layout layout, bool forceSort) { + DiveTripModel::Layout oldLayout = currentLayout; + currentLayout = layout; + header()->setClickable(true); connect(header(), SIGNAL(sectionPressed(int)), this, SLOT(headerClicked(int)), Qt::UniqueConnection); -- cgit v1.2.3-70-g09d2