aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tcanabrava@kde.org>2013-11-22 00:22:57 -0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-11-22 07:40:32 -0800
commitabc81fbd01062fd2673dc44ff0f887fdf16d127f (patch)
tree93f00872364b0a961e4bdc7873981a660ab5c8be
parent6fd0087a275f9e66aadfe890cecb84a7cab0ce61 (diff)
downloadsubsurface-abc81fbd01062fd2673dc44ff0f887fdf16d127f.tar.gz
Disables zooming by double click and context menu on marble.
Marble is a weird piece of Qt software, it seems that it wasn't thought of being a library when first written. Most of its features are not achieved by subclassing && overriding one of Qt default methods, instead we need to eventFilter for almost everything ( which is a pain, and a bit error prone - see our combo box delegate *puke*. ) This one's ready, only one thing though - if we want to implement our own context menu, we will need to use the eventFilter, and not the contextMenuEvent. Fixes #291 [Dirk Hohndel: this does not disable the context menu for me...] Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--qt-ui/globe.cpp20
-rw-r--r--qt-ui/globe.h3
2 files changed, 21 insertions, 2 deletions
diff --git a/qt-ui/globe.cpp b/qt-ui/globe.cpp
index 846eabb1d..0dde6019c 100644
--- a/qt-ui/globe.cpp
+++ b/qt-ui/globe.cpp
@@ -38,6 +38,7 @@ GlobeGPS::GlobeGPS(QWidget* parent) : MarbleWidget(parent), loadedDives(0)
foundGoogleMap = true;
if (!foundGoogleMap) {
subsurfaceDataPath = getSubsurfaceDataPath("marbledata");
+ qDebug() << subsurfaceDataPath;
if (subsurfaceDataPath != "")
MarbleDirs::setMarbleDataPath(subsurfaceDataPath);
}
@@ -67,6 +68,25 @@ GlobeGPS::GlobeGPS(QWidget* parent) : MarbleWidget(parent), loadedDives(0)
fixZoomTimer = new QTimer();
connect(fixZoomTimer, SIGNAL(timeout()), this, SLOT(fixZoom()));
fixZoomTimer->setSingleShot(true);
+ installEventFilter(this);
+}
+
+bool GlobeGPS::eventFilter(QObject *obj, QEvent *ev)
+{
+ // This disables Zooming when a double click occours on the scene.
+ if (ev->type() == QEvent::MouseButtonDblClick)
+ return true;
+ // This disables the Marble's Context Menu
+ // we need to move this to our 'contextMenuEvent'
+ // if we plan to do a different one in the future.
+ if (ev->type() == QEvent::ContextMenu)
+ return true;
+ if (ev->type() == QEvent::MouseButtonPress){
+ QMouseEvent *e = static_cast<QMouseEvent*>(ev);
+ if(e->button() == Qt::RightButton)
+ return true;
+ }
+ return QObject::eventFilter(obj,ev );
}
void GlobeGPS::mouseClicked(qreal lon, qreal lat, GeoDataCoordinates::Unit unit)
diff --git a/qt-ui/globe.h b/qt-ui/globe.h
index c44e9b591..b9cd398e3 100644
--- a/qt-ui/globe.h
+++ b/qt-ui/globe.h
@@ -20,11 +20,10 @@ public:
void repopulateLabels();
void centerOn(struct dive* dive);
void diveEditMode();
-
+ bool eventFilter(QObject*, QEvent*);
protected:
/* reimp */ void resizeEvent(QResizeEvent *event);
/* reimp */ void mousePressEvent(QMouseEvent* event);
-
private:
void prepareForGetDiveCoordinates(struct dive* dive);
GeoDataDocument *loadedDives;