[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