[PATCH] Make a map ctrl-click toggle the selection state

Linus Torvalds torvalds at linux-foundation.org
Fri Jun 7 18:29:37 PDT 2013


From: Linus Torvalds <torvalds at linux-foundation.org>
Date: Fri, 7 Jun 2013 18:25:30 -0700
Subject: [PATCH] Make a map ctrl-click toggle the selection state

This way the map selection works like normal selections do.  Except we
don't do "ranged" selections (shift-click) for fairly obvious reasons.

Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
---
 qt-ui/divelistview.cpp | 7 +++++--
 qt-ui/divelistview.h   | 2 +-
 qt-ui/globe.cpp        | 3 ++-
 3 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp
index cbd62408ba4a..a37b6ba3bcbc 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 a9b986f97061..c578baa17ea3 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 78283e49ee29..778118913fc8 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;
 	}
 }
-- 
1.8.3.rc2



More information about the subsurface mailing list