summaryrefslogtreecommitdiffstats
path: root/desktop-widgets/divelistview.cpp
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2018-08-14 09:12:21 -0400
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-10-11 16:22:27 -0700
commit3c6cdfd8c02e215f98986cbb74b33f58e47fe632 (patch)
tree206a1eb2bb427df36abe4b08160673dde9bf667b /desktop-widgets/divelistview.cpp
parentb16be29595f09daa422c2c07075d3b8b60e7fad9 (diff)
downloadsubsurface-3c6cdfd8c02e215f98986cbb74b33f58e47fe632.tar.gz
Dive list: propagate current-item to frontend
The command-objects select a current item, but this selection was not propagated to the front-end. The current item is the base for keyboard-navigation through the dive-list and therefore should be set correctly. It took some experimentation to get the flags right: QItemSelectionModel::Current Hopefully, these are the correct flags across all supported Qt versions! Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets/divelistview.cpp')
-rw-r--r--desktop-widgets/divelistview.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/desktop-widgets/divelistview.cpp b/desktop-widgets/divelistview.cpp
index 4bfc6ea60..eb65e9e6e 100644
--- a/desktop-widgets/divelistview.cpp
+++ b/desktop-widgets/divelistview.cpp
@@ -45,6 +45,7 @@ DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelec
setSelectionMode(ExtendedSelection);
header()->setContextMenuPolicy(Qt::ActionsContextMenu);
connect(DiveTripModel::instance(), &DiveTripModel::selectionChanged, this, &DiveListView::diveSelectionChanged);
+ connect(DiveTripModel::instance(), &DiveTripModel::newCurrentDive, this, &DiveListView::currentDiveChanged);
header()->setStretchLastSection(true);
@@ -207,6 +208,21 @@ void DiveListView::diveSelectionChanged(const QVector<QModelIndex> &indexes, boo
}
}
+void DiveListView::currentDiveChanged(QModelIndex index)
+{
+ // Transform the index into a local index, since
+ // there might be sorting or filtering in effect.
+ MultiFilterSortModel *m = MultiFilterSortModel::instance();
+ QModelIndex localIndex = m->mapFromSource(index);
+
+ // Then, set the currently activated row.
+ // Note, we have to use the QItemSelectionModel::Current mode to avoid
+ // changing our selection (in contrast to Qt's documentation, which
+ // instructs to use QItemSelectionModel::NoUpdate, which results in
+ // funny side-effects).
+ selectionModel()->setCurrentIndex(localIndex, QItemSelectionModel::Current);
+}
+
// If rows are added, check which of these rows is a trip and expand the first column
void DiveListView::rowsInserted(const QModelIndex &parent, int start, int end)
{