• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

marble

  • sources
  • kde-4.14
  • kdeedu
  • marble
  • src
  • lib
  • marble
MarbleWidgetInputHandler.cpp
Go to the documentation of this file.
1 //
2 // This file is part of the Marble Virtual Globe.
3 //
4 // This program is free software licensed under the GNU LGPL. You can
5 // find a copy of this license in LICENSE.txt in the top directory of
6 // the source code.
7 //
8 // Copyright 2006-2007 Torsten Rahn <tackat@kde.org>
9 // Copyright 2007 Inge Wallin <ingwa@kde.org>
10 // Copyright 2014 Adam Dabrowski <adamdbrw@gmail.com>
11 //
12 
13 #include "MarbleWidgetInputHandler.h"
14 
15 #include <QRubberBand>
16 #include <QToolTip>
17 #include <QTimer>
18 
19 #include "MarbleGlobal.h"
20 #include "MarbleDebug.h"
21 #include "MarbleWidget.h"
22 #include "AbstractDataPluginItem.h"
23 #include "MarbleWidgetPopupMenu.h"
24 #include "PopupLayer.h"
25 #include "RenderPlugin.h"
26 #include "RoutingLayer.h"
27 
28 namespace Marble
29 {
30 
31 class MarbleWidgetInputHandlerPrivate
32 {
33  class MarbleWidgetSelectionRubber : public AbstractSelectionRubber
34  {
35  public:
36  MarbleWidgetSelectionRubber(MarbleWidget *widget)
37  : m_rubberBand(QRubberBand::Rectangle, widget)
38  {
39  m_rubberBand.hide();
40  }
41 
42  void show() { m_rubberBand.show(); }
43  void hide() { m_rubberBand.hide(); }
44  bool isVisible() const { return m_rubberBand.isVisible(); }
45  const QRect &geometry() const { return m_rubberBand.geometry(); }
46  void setGeometry(const QRect &geometry) { m_rubberBand.setGeometry(geometry); }
47 
48  private:
49  QRubberBand m_rubberBand;
50  };
51 
52  public:
53  MarbleWidgetInputHandlerPrivate(MarbleWidgetInputHandler *handler, MarbleWidget *widget)
54  : m_inputHandler(handler)
55  ,m_marbleWidget(widget)
56  ,m_selectionRubber(widget)
57  {
58  foreach(RenderPlugin *renderPlugin, widget->renderPlugins())
59  {
60  if(renderPlugin->isInitialized())
61  {
62  installPluginEventFilter(renderPlugin);
63  }
64  }
65  m_marbleWidget->grabGesture(Qt::PinchGesture);
66  }
67 
68  void setCursor(const QCursor &cursor)
69  {
70  m_marbleWidget->setCursor(cursor);
71  }
72 
73  bool layersEventFilter(QObject *o, QEvent *e)
74  { //FIXME - this should go up in hierarchy to MarbleInputHandler
75  if (m_marbleWidget->popupLayer()->eventFilter(o, e))
76  {
77  return true;
78  }
79 
80  if (m_marbleWidget->routingLayer()->eventFilter(o, e))
81  {
82  return true;
83  }
84 
85  return false;
86  }
87 
88  void installPluginEventFilter(RenderPlugin *renderPlugin)
89  {
90  m_marbleWidget->installEventFilter(renderPlugin);
91  }
92 
93  MarbleWidgetInputHandler *m_inputHandler;
94  MarbleWidget *m_marbleWidget;
95  MarbleWidgetSelectionRubber m_selectionRubber;
96 };
97 
98 
99 void MarbleWidgetInputHandler::setCursor(const QCursor &cursor)
100 {
101  d->setCursor(cursor);
102 }
103 
104 AbstractSelectionRubber *MarbleWidgetInputHandler::selectionRubber()
105 {
106  return &d->m_selectionRubber;
107 }
108 
109 bool MarbleWidgetInputHandler::layersEventFilter(QObject *o, QEvent *e)
110 {
111  return d->layersEventFilter(o, e);
112 }
113 
114 void MarbleWidgetInputHandler::installPluginEventFilter(RenderPlugin *renderPlugin)
115 {
116  d->installPluginEventFilter(renderPlugin);
117 }
118 
119 MarbleWidgetInputHandler::MarbleWidgetInputHandler(MarbleAbstractPresenter *marblePresenter, MarbleWidget *widget)
120  : MarbleDefaultInputHandler(marblePresenter)
121  ,d(new MarbleWidgetInputHandlerPrivate(this, widget))
122 {
123 }
124 
125 //FIXME - these should be moved to superclass and popupMenu should be abstracted in MarbleAbstractPresenter
126 void MarbleWidgetInputHandler::showLmbMenu(int x, int y)
127 {
128  if (isMouseButtonPopupEnabled(Qt::LeftButton))
129  {
130  d->m_marbleWidget->popupMenu()->showLmbMenu(x, y);
131  toolTipTimer()->stop();
132  }
133 }
134 
135 void MarbleWidgetInputHandler::showRmbMenu(int x, int y)
136 {
137  if (isMouseButtonPopupEnabled(Qt::RightButton))
138  {
139  d->m_marbleWidget->popupMenu()->showRmbMenu(x, y);
140  }
141 }
142 
143 void MarbleWidgetInputHandler::openItemToolTip()
144 {
145  if (!lastToolTipItem().isNull())
146  {
147  QToolTip::showText(d->m_marbleWidget->mapToGlobal(toolTipPosition()),
148  lastToolTipItem()->toolTip(),
149  d->m_marbleWidget,
150  lastToolTipItem()->containsRect(toolTipPosition()).toRect());
151  }
152 }
153 
154 }
155 
156 #include "MarbleWidgetInputHandler.moc"
QEvent
Marble::MarbleInputHandler::isMouseButtonPopupEnabled
bool isMouseButtonPopupEnabled(Qt::MouseButton mouseButton) const
Return whether the left mouse button popup menu is active.
Definition: MarbleInputHandler.cpp:101
Marble::MarbleDefaultInputHandler::lastToolTipItem
QPointer< AbstractDataPluginItem > lastToolTipItem()
Definition: MarbleInputHandler.cpp:840
Marble::dgml::handler
static GeoTagHandlerRegistrar handler(GeoParser::QualifiedName(dgmlTag_DownloadPolicy, dgmlTag_nameSpace20), new DgmlDownloadPolicyTagHandler)
QToolTip::showText
void showText(const QPoint &pos, const QString &text, QWidget *w)
MarbleDebug.h
QRubberBand
Marble::MarbleWidget
A widget class that displays a view of the earth.
Definition: MarbleWidget.h:104
MarbleWidgetInputHandler.h
Marble::MarbleWidgetInputHandler::MarbleWidgetInputHandler
MarbleWidgetInputHandler(MarbleAbstractPresenter *marblePresenter, MarbleWidget *marbleWidget)
Definition: MarbleWidgetInputHandler.cpp:119
QRect
QObject
RoutingLayer.h
MarbleWidgetPopupMenu.h
MarbleWidget::renderPlugins
QList< QObject * > renderPlugins
Definition: MarbleDeclarativeWidget.h:63
MarbleGlobal.h
Marble::MarbleDefaultInputHandler::toolTipTimer
QTimer * toolTipTimer()
Definition: MarbleInputHandler.cpp:845
QTimer::stop
void stop()
PopupLayer.h
RenderPlugin.h
Marble::MarbleAbstractPresenter
Definition: MarbleAbstractPresenter.h:26
MarbleWidget.h
This file contains the headers for MarbleWidget.
Marble::MarbleDefaultInputHandler
Definition: MarbleInputHandler.h:115
MarbleWidget
Wraps a Marble::MarbleWidget, providing access to important properties and methods.
Definition: MarbleDeclarativeWidget.h:50
Marble::MarbleDefaultInputHandler::toolTipPosition
QPoint toolTipPosition()
Definition: MarbleInputHandler.cpp:850
QCursor
AbstractDataPluginItem.h
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:40 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

marble

Skip menu "marble"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal