8#include "MarbleWidgetInputHandler.h"
15#include "MarbleGlobal.h"
16#include "MarbleDebug.h"
20#include "AbstractDataPluginItem.h"
21#include "MarbleAbstractPresenter.h"
22#include "MarbleWidgetPopupMenu.h"
23#include "PopupLayer.h"
24#include "RenderPlugin.h"
25#include "RoutingLayer.h"
30class MarbleWidgetInputHandlerPrivate
32 class MarbleWidgetSelectionRubber :
public AbstractSelectionRubber
35 explicit MarbleWidgetSelectionRubber(MarbleWidget *widget)
41 void show()
override { m_rubberBand.
show(); }
42 void hide()
override { m_rubberBand.
hide(); }
43 bool isVisible()
const override {
return m_rubberBand.
isVisible(); }
44 const QRect &geometry()
const override {
return m_rubberBand.
geometry(); }
45 void setGeometry(
const QRect &geometry)
override { m_rubberBand.
setGeometry(geometry); }
52 MarbleWidgetInputHandlerPrivate(MarbleWidgetInputHandler *handler, MarbleWidget *widget,
53 MarbleAbstractPresenter *presenter)
54 : m_inputHandler(handler)
55 ,m_marbleWidget(widget)
56 ,m_marblePresenter(presenter)
57 ,m_selectionRubber(widget)
58 ,m_debugModeEnabled(false)
60 for(RenderPlugin *renderPlugin: widget->renderPlugins())
62 if(renderPlugin->isInitialized())
64 installPluginEventFilter(renderPlugin);
70 void setCursor(
const QCursor &cursor)
77 if (m_marbleWidget->popupLayer()->eventFilter(o, e))
82 if (m_marbleWidget->routingLayer()->
eventFilter(o, e))
90 void installPluginEventFilter(RenderPlugin *renderPlugin)
95 MarbleWidgetInputHandler *m_inputHandler;
96 MarbleWidget *m_marbleWidget;
97 MarbleAbstractPresenter *m_marblePresenter;
98 MarbleWidgetSelectionRubber m_selectionRubber;
99 bool m_debugModeEnabled;
100 bool m_pinchDetected =
false;
101 bool m_panDetected =
false;
105void MarbleWidgetInputHandler::setCursor(
const QCursor &cursor)
107 d->setCursor(cursor);
110bool MarbleWidgetInputHandler::handleKeyPress(
QKeyEvent *event)
112 if (d->m_debugModeEnabled) {
114 switch(
event->key()) {
116 d->m_marbleWidget->setLevelToDebug(0);
119 d->m_marbleWidget->setLevelToDebug(1);
122 d->m_marbleWidget->setLevelToDebug(2);
125 d->m_marbleWidget->setLevelToDebug(3);
128 d->m_marbleWidget->setLevelToDebug(4);
131 d->m_marbleWidget->setLevelToDebug(5);
134 d->m_marbleWidget->setLevelToDebug(6);
137 d->m_marbleWidget->setLevelToDebug(7);
140 d->m_marbleWidget->setLevelToDebug(8);
143 d->m_marbleWidget->setLevelToDebug(9);
146 d->m_marbleWidget->setLevelToDebug(d->m_marbleWidget->levelToDebug() + 1);
149 d->m_marbleWidget->setLevelToDebug(d->m_marbleWidget->levelToDebug() - 1);
153 switch(
event->key()) {
155 MarbleDebug::setEnabled(!MarbleDebug::isEnabled());
158 d->m_marbleWidget->setShowRuntimeTrace(!d->m_marbleWidget->showRuntimeTrace());
161 d->m_marbleWidget->setShowDebugPlacemarks(!d->m_marbleWidget->showDebugPlacemarks());
164 d->m_marbleWidget->setShowDebugPolygons(!d->m_marbleWidget->showDebugPolygons());
167 d->m_marbleWidget->setShowDebugBatchRender(!d->m_marbleWidget->showDebugBatchRender());
170 d->m_marbleWidget->setDebugLevelTags(!d->m_marbleWidget->debugLevelTags());
175 return MarbleDefaultInputHandler::handleKeyPress(
event);
178bool MarbleWidgetInputHandler::handleTouch(
QTouchEvent *event)
182 if (
event->touchPoints().count() == 1)
184 QTouchEvent::TouchPoint p =
event->touchPoints().at(0);
187 d->m_pinchDetected =
false;
188 d->m_panDetected =
false;
191 handleMouseEvent(&press);
195 if (!d->m_pinchDetected)
197 d->m_panDetected =
true;
200 handleMouseEvent(&move);
206 if (d->m_pinchDetected || d->m_panDetected)
211 handleMouseEvent(&release);
213 if (d->m_pinchDetected || d->m_panDetected)
215 if (d->m_pinchDetected)
216 stopInertialEarthRotation();
225bool MarbleWidgetInputHandler::handleGesture(
QGestureEvent *e)
228 if (pinch && !d->m_panDetected)
230 d->m_pinchDetected =
true;
231 handlePinchGesture(pinch);
238void MarbleWidgetInputHandler::handlePinchGesture(
QPinchGesture *pinch)
242 switch (pinch->
state())
254 if (scaleFactor > 1.0)
256 else if (scaleFactor < 1.0)
270 restoreViewContext();
275AbstractSelectionRubber *MarbleWidgetInputHandler::selectionRubber()
277 return &d->m_selectionRubber;
280bool MarbleWidgetInputHandler::layersEventFilter(
QObject *o,
QEvent *e)
282 return d->layersEventFilter(
o, e);
285void MarbleWidgetInputHandler::installPluginEventFilter(RenderPlugin *renderPlugin)
290MarbleWidgetInputHandler::MarbleWidgetInputHandler(MarbleAbstractPresenter *marblePresenter, MarbleWidget *widget)
291 : MarbleDefaultInputHandler(marblePresenter)
292 ,d(new MarbleWidgetInputHandlerPrivate(this, widget, marblePresenter))
296void MarbleWidgetInputHandler::setDebugModeEnabled(
bool enabled)
298 d->m_debugModeEnabled = enabled;
302void MarbleWidgetInputHandler::showLmbMenu(
int x,
int y)
304 if (isMouseButtonPopupEnabled(
Qt::LeftButton) && !d->m_pinchDetected && !d->m_panDetected)
306 d->m_marbleWidget->popupMenu()->showLmbMenu(x, y);
307 toolTipTimer()->stop();
311void MarbleWidgetInputHandler::showRmbMenu(
int x,
int y)
315 d->m_marbleWidget->popupMenu()->showRmbMenu(x, y);
319void MarbleWidgetInputHandler::openItemToolTip()
321 if (lastToolTipItem())
324 lastToolTipItem()->toolTip(),
326 lastToolTipItem()->containsRect(toolTipPosition()).toRect());
332#include "moc_MarbleWidgetInputHandler.cpp"
This file contains the headers for MarbleMap.
This file contains the headers for ViewportParams.
bool eventFilter(QObject *obj, QEvent *event) override
Overriding QWidget, used to make the layer interactive.
KIOCORE_EXPORT CopyJob * move(const QList< QUrl > &src, const QUrl &dest, JobFlags flags=DefaultFlags)
QAction * zoom(const QObject *recvr, const char *slot, QObject *parent)
Binds a QML item to a specific geodetic location in screen coordinates.
@ Animation
animated view (e.g. while rotating the globe)
QGesture * gesture(Qt::GestureType type) const const
bool blockSignals(bool block)
virtual bool event(QEvent *e)
void installEventFilter(QObject *filterObj)
T qobject_cast(QObject *object)
void setGeometry(const QRect &rect)
QTextStream & center(QTextStream &stream)
void showText(const QPoint &pos, const QString &text, QWidget *w, const QRect &rect, int msecDisplayTime)