aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tcanabrava@kde.org>2013-05-29 16:46:27 -0300
committerGravatar Tomaz Canabrava <tcanabrava@kde.org>2013-05-29 16:46:27 -0300
commit16d0a47853db6b3957805443cb7f4dd520c7af78 (patch)
tree02415cbbf0a4a9f7cbea8b7251ce01d033c8e450
parent9cc04c1ca65424bb0c32aad17be80dd6887b4c65 (diff)
downloadsubsurface-16d0a47853db6b3957805443cb7f4dd520c7af78.tar.gz
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 <tcanabrava@kde.org>
-rw-r--r--qt-ui/divelistview.cpp27
-rw-r--r--qt-ui/divelistview.h2
2 files changed, 24 insertions, 5 deletions
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 <QAction>
-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<struct dive*> 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<QSortFilterProxyModel*>(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);
diff --git a/qt-ui/divelistview.h b/qt-ui/divelistview.h
index 35c401a20..6f22597f6 100644
--- a/qt-ui/divelistview.h
+++ b/qt-ui/divelistview.h
@@ -35,6 +35,8 @@ Q_SIGNALS:
void currentDiveChanged(int divenr);
private:
bool mouseClickSelection;
+ int currentHeaderClicked;
+ DiveTripModel::Layout currentLayout;
};
#endif // DIVELISTVIEW_H