summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qt-ui/divelistview.cpp7
-rw-r--r--qt-ui/divelistview.h2
-rw-r--r--qt-ui/globe.cpp3
3 files changed, 8 insertions, 4 deletions
diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp
index cbd62408b..a37b6ba3b 100644
--- a/qt-ui/divelistview.cpp
+++ b/qt-ui/divelistview.cpp
@@ -47,16 +47,19 @@ void DiveListView::unselectDives()
selectionModel()->clearSelection();
}
-void DiveListView::selectDive(struct dive *dive, bool scrollto)
+void DiveListView::selectDive(struct dive *dive, bool scrollto, bool toggle)
{
QSortFilterProxyModel *m = qobject_cast<QSortFilterProxyModel*>(model());
QModelIndexList match = m->match(m->index(0,0), TreeItemDT::NR, dive->number, 1, Qt::MatchRecursive);
+ QFlags<QItemSelectionModel::SelectionFlag> flags;
QModelIndex idx = match.first();
QModelIndex parent = idx.parent();
if (parent.isValid())
expand(parent);
- selectionModel()->select( idx, QItemSelectionModel::Select | QItemSelectionModel::Rows);
+ flags = toggle ? QItemSelectionModel::Toggle : QItemSelectionModel::Select;
+ flags |= QItemSelectionModel::Rows;
+ selectionModel()->select( idx, flags);
if (scrollto)
scrollTo(idx, PositionAtCenter);
}
diff --git a/qt-ui/divelistview.h b/qt-ui/divelistview.h
index a9b986f97..c578baa17 100644
--- a/qt-ui/divelistview.h
+++ b/qt-ui/divelistview.h
@@ -27,7 +27,7 @@ public:
void reload(DiveTripModel::Layout layout, bool forceSort = true);
bool eventFilter(QObject* , QEvent* );
void unselectDives();
- void selectDive(struct dive *, bool scrollto = false);
+ void selectDive(struct dive *, bool scrollto = false, bool toggle = false);
void contextMenuEvent(QContextMenuEvent *event);
public slots:
diff --git a/qt-ui/globe.cpp b/qt-ui/globe.cpp
index 78283e49e..778118913 100644
--- a/qt-ui/globe.cpp
+++ b/qt-ui/globe.cpp
@@ -82,6 +82,7 @@ void GlobeGPS::mouseClicked(qreal lon, qreal lat, GeoDataCoordinates::Unit unit)
int idx;
struct dive *dive;
bool clear = !(QApplication::keyboardModifiers() && Qt::ControlModifier);
+ bool toggle = !clear;
bool first = true;
for_each_dive(idx, dive) {
long lat_diff, lon_diff;
@@ -100,7 +101,7 @@ void GlobeGPS::mouseClicked(qreal lon, qreal lat, GeoDataCoordinates::Unit unit)
mainWindow()->dive_list()->unselectDives();
clear = false;
}
- mainWindow()->dive_list()->selectDive(dive, first);
+ mainWindow()->dive_list()->selectDive(dive, first, toggle);
first = false;
}
}