• 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
  • plugins
  • declarative
Tracking.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 2011 Dennis Nienhüser <earthwings@gentoo.org>
9 //
10 
11 #include "Tracking.h"
12 
13 #include "MarbleDeclarativeWidget.h"
14 #include "MarbleModel.h"
15 #include "PositionTracking.h"
16 #include "RenderPlugin.h"
17 #include "ViewportParams.h"
18 #include "AutoNavigation.h"
19 
20 #if QT_VERSION < 0x050000
21  #include <QDeclarativeItem>
22  typedef QDeclarativeItem QQuickItem;
23 #else
24  #include <QQuickItem>
25 #endif
26 
27 Tracking::Tracking( QObject* parent) : QObject( parent ),
28  m_showTrack( true ),
29  m_positionSource( 0 ),
30  m_positionMarker( 0 ),
31  m_marbleWidget( 0 ),
32  m_hasLastKnownPosition( false ),
33  m_autoNavigation( 0 ),
34  m_positionMarkerType( None )
35 {
36  connect( &m_lastKnownPosition, SIGNAL(longitudeChanged()), this, SLOT(setHasLastKnownPosition()) );
37  connect( &m_lastKnownPosition, SIGNAL(latitudeChanged()), this, SLOT(setHasLastKnownPosition()) );
38 }
39 
40 bool Tracking::showTrack() const
41 {
42  return m_showTrack;
43 }
44 
45 void Tracking::setShowTrack( bool show )
46 {
47  if ( show != m_showTrack ) {
48  if ( m_marbleWidget ) {
49  m_marbleWidget->model()->positionTracking()->setTrackVisible( show );
50  m_marbleWidget->update();
51  }
52 
53  m_showTrack = show;
54  emit showTrackChanged();
55  }
56 }
57 
58 PositionSource* Tracking::positionSource()
59 {
60  return m_positionSource;
61 }
62 
63 void Tracking::setPositionSource( PositionSource* source )
64 {
65  if ( source != m_positionSource ) {
66  m_positionSource = source;
67  if ( source ) {
68  connect( source, SIGNAL(positionChanged()),
69  this, SLOT(updatePositionMarker()) );
70  connect( source, SIGNAL(positionChanged()),
71  this, SLOT(updateLastKnownPosition()) );
72  connect( source, SIGNAL(hasPositionChanged()),
73  this, SLOT(updatePositionMarker()) );
74  connect( source, SIGNAL(positionChanged()),
75  this, SIGNAL(distanceChanged()) );
76  }
77  emit positionSourceChanged();
78  }
79 }
80 
81 MarbleWidget* Tracking::map()
82 {
83  return m_marbleWidget;
84 }
85 
86 void Tracking::setMap( MarbleWidget* widget )
87 {
88  if ( widget != m_marbleWidget ) {
89  m_marbleWidget = widget;
90 
91  if ( m_marbleWidget ) {
92  m_marbleWidget->model()->positionTracking()->setTrackVisible( showTrack() );
93  setShowPositionMarkerPlugin( m_positionMarkerType == Arrow );
94 
95  connect( m_marbleWidget, SIGNAL(visibleLatLonAltBoxChanged()), this, SLOT(updatePositionMarker()) );
96  connect( m_marbleWidget, SIGNAL(mapThemeChanged()), this, SLOT(updatePositionMarker()) );
97  }
98 
99  emit mapChanged();
100  }
101 }
102 
103 void Tracking::setPositionMarker( QObject* marker )
104 {
105  if ( marker != m_positionMarker ) {
106  m_positionMarker = marker;
107  emit positionMarkerChanged();
108  }
109 }
110 
111 QObject* Tracking::positionMarker()
112 {
113  return m_positionMarker;
114 }
115 
116 void Tracking::updatePositionMarker()
117 {
118  if ( m_marbleWidget && m_positionMarker && m_positionMarkerType == Circle ) {
119  Coordinate* position = 0;
120  bool visible = m_marbleWidget->model()->planetId() == "earth";
121  if ( m_positionSource && m_positionSource->hasPosition() ) {
122  position = m_positionSource->position();
123  } else if ( hasLastKnownPosition() ) {
124  position = lastKnownPosition();
125  } else {
126  visible = false;
127  }
128 
129  qreal x(0), y(0);
130  if ( position ) {
131  Marble::GeoDataCoordinates const pos( position->longitude(), position->latitude(), 0.0, GeoDataCoordinates::Degree );
132  visible = visible && m_marbleWidget->viewport()->screenCoordinates( pos.longitude(), pos.latitude(), x, y );
133  QQuickItem* item = qobject_cast<QQuickItem*>( m_positionMarker );
134  if ( item ) {
135  item->setVisible( visible );
136  if ( visible ) {
137  item->setX( x - item->width() / 2.0 );
138  item->setY( y - item->height() / 2.0 );
139  }
140  }
141  }
142  } else if ( m_positionMarkerType != Circle ) {
143  QQuickItem* item = qobject_cast<QQuickItem*>( m_positionMarker );
144  if ( item ) {
145  item->setVisible( false );
146  }
147  }
148 }
149 
150 void Tracking::updateLastKnownPosition()
151 {
152  if ( m_positionSource && m_positionSource->hasPosition() ) {
153  setLastKnownPosition( m_positionSource->position() );
154  }
155 }
156 
157 void Tracking::setHasLastKnownPosition()
158 {
159  if ( !m_hasLastKnownPosition ) {
160  m_hasLastKnownPosition = true;
161  emit hasLastKnownPositionChanged();
162  }
163 }
164 
165 void Tracking::setShowPositionMarkerPlugin( bool visible )
166 {
167  if ( m_marbleWidget ) {
168  QList<QObject*> const renderPlugins = m_marbleWidget->renderPlugins();
169  foreach( QObject* object, renderPlugins ) {
170  Marble::RenderPlugin* renderPlugin = qobject_cast<Marble::RenderPlugin*>( object );
171  Q_ASSERT( renderPlugin );
172  if ( renderPlugin->nameId() == "positionMarker" ) {
173  renderPlugin->setEnabled( true );
174  renderPlugin->setVisible( visible );
175  }
176  }
177  }
178 }
179 
180 bool Tracking::hasLastKnownPosition() const
181 {
182  return m_hasLastKnownPosition;
183 }
184 
185 Coordinate * Tracking::lastKnownPosition()
186 {
187  return &m_lastKnownPosition;
188 }
189 
190 void Tracking::setLastKnownPosition( Coordinate* lastKnownPosition )
191 {
192  if ( lastKnownPosition && *lastKnownPosition != m_lastKnownPosition ) {
193  m_lastKnownPosition.setCoordinates( lastKnownPosition->coordinates() );
194  emit lastKnownPositionChanged();
195  }
196 }
197 
198 bool Tracking::autoCenter() const
199 {
200  if ( m_autoNavigation ) {
201  return m_autoNavigation->recenterMode() != Marble::AutoNavigation::DontRecenter;
202  }
203 
204  return false;
205 }
206 
207 void Tracking::setAutoCenter( bool enabled )
208 {
209  if ( autoCenter() != enabled ) {
210  if ( enabled && !m_autoNavigation && m_marbleWidget ) {
211  m_autoNavigation = new Marble::AutoNavigation( m_marbleWidget->model(), m_marbleWidget->viewport(), this );
212  connect( m_autoNavigation, SIGNAL(zoomIn(FlyToMode)),
213  m_marbleWidget, SLOT(zoomIn()) );
214  connect( m_autoNavigation, SIGNAL(zoomOut(FlyToMode)),
215  m_marbleWidget, SLOT(zoomOut()) );
216  connect( m_autoNavigation, SIGNAL(centerOn(GeoDataCoordinates,bool)),
217  m_marbleWidget, SLOT(centerOn(GeoDataCoordinates)) );
218 
219  connect( m_marbleWidget, SIGNAL(visibleLatLonAltBoxChanged()),
220  m_autoNavigation, SLOT(inhibitAutoAdjustments()) );
221  }
222 
223  if ( m_autoNavigation ) {
224  m_autoNavigation->setRecenter( Marble::AutoNavigation::RecenterOnBorder );
225  }
226 
227  emit autoCenterChanged();
228  }
229 }
230 
231 bool Tracking::autoZoom() const
232 {
233  if ( m_autoNavigation ) {
234  return m_autoNavigation->autoZoom();
235  }
236 
237  return false;
238 }
239 
240 void Tracking::setAutoZoom( bool enabled )
241 {
242  if ( autoZoom() != enabled ) {
243  if ( enabled && !m_autoNavigation && m_marbleWidget ) {
244  m_autoNavigation = new Marble::AutoNavigation( m_marbleWidget->model(), m_marbleWidget->viewport(), this );
245  connect( m_autoNavigation, SIGNAL(zoomIn(FlyToMode)),
246  m_marbleWidget, SLOT(zoomIn()) );
247  connect( m_autoNavigation, SIGNAL(zoomOut(FlyToMode)),
248  m_marbleWidget, SLOT(zoomOut()) );
249  connect( m_autoNavigation, SIGNAL(centerOn(GeoDataCoordinates,bool)),
250  m_marbleWidget, SLOT(centerOn(GeoDataCoordinates)) );
251 
252  connect( m_marbleWidget, SIGNAL(visibleLatLonAltBoxChanged()),
253  m_autoNavigation, SLOT(inhibitAutoAdjustments()) );
254  }
255 
256  if ( m_autoNavigation ) {
257  m_autoNavigation->setAutoZoom( enabled );
258  }
259 
260  emit autoZoomChanged();
261  }
262 }
263 
264 Tracking::PositionMarkerType Tracking::positionMarkerType() const
265 {
266  return m_positionMarkerType;
267 }
268 
269 void Tracking::setPositionMarkerType( Tracking::PositionMarkerType type )
270 {
271  setShowPositionMarkerPlugin( type == Arrow );
272  if ( type != m_positionMarkerType ) {
273  m_positionMarkerType = type;
274  emit positionMarkerTypeChanged();
275  }
276 }
277 
278 double Tracking::distance() const
279 {
280  return m_marbleWidget ? m_marbleWidget->model()->positionTracking()->length( m_marbleWidget->model()->planetRadius() ) : 0.0;
281 }
282 
283 void Tracking::saveTrack( const QString &fileName )
284 {
285  if ( m_marbleWidget ) {
287  QString target = fileName.startsWith( QLatin1String( "file://" ) ) ? fileName.mid( 7 ) : fileName;
288  m_marbleWidget->model()->positionTracking()->saveTrack( target );
289  }
290 }
291 
292 void Tracking::openTrack(const QString &fileName)
293 {
294  if ( m_marbleWidget ) {
296  QString target = fileName.startsWith( QLatin1String( "file://" ) ) ? fileName.mid( 7 ) : fileName;
297  m_marbleWidget->model()->addGeoDataFile( target );
298  }
299 }
300 
301 void Tracking::clearTrack()
302 {
303  if ( m_marbleWidget ) {
304  m_marbleWidget->model()->positionTracking()->clearTrack();
305  }
306 }
307 
308 #include "Tracking.moc"
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
Tracking::autoCenterChanged
void autoCenterChanged()
Tracking::setAutoZoom
void setAutoZoom(bool enabled)
Definition: Tracking.cpp:240
Marble::AutoNavigation::autoZoom
bool autoZoom() const
Definition: AutoNavigation.cpp:386
Tracking::autoZoom
bool autoZoom() const
MarbleDeclarativeWidget.h
Tracking::setPositionMarker
void setPositionMarker(QObject *marker)
Definition: Tracking.cpp:103
MarbleModel.h
This file contains the headers for MarbleModel.
MarbleWidget::viewport
const Marble::ViewportParams * viewport() const
Definition: MarbleDeclarativeWidget.cpp:91
Tracking::saveTrack
void saveTrack(const QString &fileName)
Definition: Tracking.cpp:283
Marble::MarbleModel::planetId
QString planetId() const
Definition: MarbleModel.cpp:532
Coordinate::longitude
qreal longitude
Definition: Coordinate.h:32
Tracking::setPositionMarkerType
void setPositionMarkerType(PositionMarkerType type)
Definition: Tracking.cpp:269
PositionSource::hasPosition
bool hasPosition
Definition: PositionSource.h:32
Marble::AutoNavigation::DontRecenter
Definition: AutoNavigation.h:48
Marble::AutoNavigation::RecenterOnBorder
Enum Value RecenterOnBorder.
Definition: AutoNavigation.h:50
Tracking::distanceChanged
void distanceChanged()
Marble::AutoNavigation
Definition: AutoNavigation.h:27
Tracking::clearTrack
void clearTrack()
Definition: Tracking.cpp:301
QGraphicsItem::update
void update(const QRectF &rect)
Coordinate
Represents a coordinate with the properties of a name and coordinates.
Definition: Coordinate.h:28
Tracking::hasLastKnownPositionChanged
void hasLastKnownPositionChanged()
Tracking::positionMarkerType
PositionMarkerType positionMarkerType() const
Tracking::Arrow
Definition: Tracking.h:49
Marble::MarbleModel::addGeoDataFile
void addGeoDataFile(const QString &filename)
Handle file loading into the treeModel.
Definition: MarbleModel.cpp:725
Tracking::setPositionSource
void setPositionSource(PositionSource *source)
Definition: Tracking.cpp:63
Coordinate::latitude
qreal latitude
Definition: Coordinate.h:33
Marble::None
Definition: tools/osm-addresses/OsmParser.h:40
Tracking::distance
double distance() const
Tracking::setLastKnownPosition
void setLastKnownPosition(Coordinate *lastKnownPosition)
Definition: Tracking.cpp:190
AutoNavigation.h
Tracking::positionSourceChanged
void positionSourceChanged()
Tracking::positionMarkerTypeChanged
void positionMarkerTypeChanged()
Tracking::positionMarkerChanged
void positionMarkerChanged()
QObject
Marble::AutoNavigation::setRecenter
void setRecenter(CenterMode recenterMode)
For Auto Centering adjustment of map in Navigation Mode.
Definition: AutoNavigation.cpp:368
Marble::MarbleModel::positionTracking
PositionTracking * positionTracking() const
Definition: MarbleModel.cpp:512
QString::startsWith
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const
Tracking.h
Tracking::positionSource
PositionSource * positionSource()
Tracking::autoCenter
bool autoCenter() const
Tracking::showTrackChanged
void showTrackChanged()
PositionSource
Definition: PositionSource.h:25
Marble::ViewportParams::screenCoordinates
bool screenCoordinates(const qreal lon, const qreal lat, qreal &x, qreal &y) const
Get the screen coordinates corresponding to geographical coordinates in the map.
Definition: ViewportParams.cpp:357
Tracking::Circle
Definition: Tracking.h:48
Marble::AutoNavigation::setAutoZoom
void setAutoZoom(bool activate)
For Auto Zooming adjustment of map in Navigation Mode.
Definition: AutoNavigation.cpp:362
Marble::RenderPlugin::setVisible
void setVisible(bool visible)
settting visible
Definition: RenderPlugin.cpp:151
MarbleWidget::renderPlugins
QList< QObject * > renderPlugins
Definition: MarbleDeclarativeWidget.h:63
QString
QList< QObject * >
PositionSource::position
Coordinate position
Definition: PositionSource.h:33
Coordinate::setCoordinates
void setCoordinates(const Marble::GeoDataCoordinates &coordinates)
Change all coordinates at once.
Definition: Coordinate.cpp:65
Marble::RenderPlugin::nameId
QString nameId
Definition: RenderPlugin.h:48
Tracking::hasLastKnownPosition
bool hasLastKnownPosition() const
Coordinate::coordinates
Marble::GeoDataCoordinates coordinates() const
Change the altitude of the coordinate.
Definition: Coordinate.cpp:60
ViewportParams.h
This file contains the headers for ViewportParams.
Marble::PositionTracking::clearTrack
void clearTrack()
Removes all track segments which were recorded.
Definition: PositionTracking.cpp:288
Tracking::autoZoomChanged
void autoZoomChanged()
Marble::FlyToMode
FlyToMode
Describes possible flight mode (interpolation between source and target camera positions) ...
Definition: MarbleGlobal.h:173
Tracking::setShowTrack
void setShowTrack(bool show)
Definition: Tracking.cpp:45
Tracking::positionMarker
QObject * positionMarker()
Tracking::mapChanged
void mapChanged()
Tracking::lastKnownPosition
Coordinate * lastKnownPosition()
Marble::PositionTracking::setTrackVisible
void setTrackVisible(bool visible)
Toggles the visibility of the Position Tracking document.
Definition: PositionTracking.cpp:249
Tracking::showTrack
bool showTrack() const
Marble::RenderPlugin::setEnabled
void setEnabled(bool enabled)
settting enabled
Definition: RenderPlugin.cpp:139
QString::mid
QString mid(int position, int n) const
QLatin1String
Tracking::PositionMarkerType
PositionMarkerType
Definition: Tracking.h:46
RenderPlugin.h
Tracking::openTrack
void openTrack(const QString &fileName)
Definition: Tracking.cpp:292
Tracking::lastKnownPositionChanged
void lastKnownPositionChanged()
Tracking::map
MarbleWidget * map()
Tracking::setMap
void setMap(MarbleWidget *widget)
Definition: Tracking.cpp:86
Marble::PositionTracking::saveTrack
bool saveTrack(const QString &fileName)
Saves the track document to file.
Definition: PositionTracking.cpp:255
Marble::MarbleModel::planetRadius
qreal planetRadius() const
Definition: MarbleModel.cpp:522
QGraphicsItem::setX
void setX(qreal x)
QGraphicsItem::setY
void setY(qreal y)
QQuickItem
QDeclarativeItem QQuickItem
Definition: Tracking.cpp:22
QGraphicsItem::setVisible
void setVisible(bool visible)
QDeclarativeItem
MarbleWidget
Wraps a Marble::MarbleWidget, providing access to important properties and methods.
Definition: MarbleDeclarativeWidget.h:50
PositionTracking.h
MarbleWidget::model
Marble::MarbleModel * model()
Definition: MarbleDeclarativeWidget.cpp:86
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
Tracking::Tracking
Tracking(QObject *parent=0)
Definition: Tracking.cpp:27
Marble::RenderPlugin
The abstract class that creates a renderable item.
Definition: RenderPlugin.h:43
Marble::PositionTracking::length
qreal length(qreal planetRadius) const
Returns the total track length.
Definition: PositionTracking.cpp:379
Tracking::setAutoCenter
void setAutoCenter(bool enabled)
Definition: Tracking.cpp:207
Marble::AutoNavigation::recenterMode
AutoNavigation::CenterMode recenterMode() const
Definition: AutoNavigation.cpp:381
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:42 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