[Marble-commits] KDE/kdeedu/marble/src/lib/gps

Thibaut Gridel tgridel at free.fr
Wed Aug 4 19:36:37 CEST 2010


SVN commit 1159190 by tgridel:

PositionTracking: name the placemarks and improve tracking representation

 M  +24 -2     PositionTracking.cpp  
 M  +2 -0      PositionTracking.h  


--- trunk/KDE/kdeedu/marble/src/lib/gps/PositionTracking.cpp #1159189:1159190
@@ -28,12 +28,20 @@
     m_document     = new GeoDataDocument();
     m_document->setName("Position Tracking");
 
+    // First point is current position
     GeoDataPlacemark *placemark = new GeoDataPlacemark;
+    placemark->setName("Current Position");
+    placemark->setVisible(false);
+    m_document->append(placemark);
+
+    // Second point is position track
+    placemark = new GeoDataPlacemark;
     GeoDataMultiGeometry *multiGeometry = new GeoDataMultiGeometry;
     GeoDataLineString *lineString = new GeoDataLineString;
 
     multiGeometry->append(lineString);
     placemark->setGeometry(multiGeometry);
+    placemark->setName("Current Track");
     m_document->append(placemark);
 
     m_fileManager->addGeoDataDocument(m_document);
@@ -51,7 +59,6 @@
     if ( m_positionProvider && m_positionProvider->status() ==
         PositionProviderStatusAvailable )
     {
-
         GeoDataPlacemark *placemark = static_cast<GeoDataPlacemark*>(m_document->child(m_document->size()-1));
         GeoDataMultiGeometry *geometry = static_cast<GeoDataMultiGeometry*>(placemark->geometry());
         GeoDataLineString *lineString = static_cast<GeoDataLineString*>(geometry->child(geometry->size()-1));
@@ -61,12 +68,27 @@
         if ( !( m_gpsCurrentPosition ==
                 position ) )
         {
+            placemark = static_cast<GeoDataPlacemark*>(m_document->child(0));
+            placemark->setCoordinate(position);
             m_gpsCurrentPosition = position;
             emit gpsLocation( position, speed() );
         }
     }
 }
 
+
+void PositionTracking::setStatus( PositionProviderStatus status )
+{
+    if (status == PositionProviderStatusAvailable) {
+        GeoDataPlacemark *placemark = static_cast<GeoDataPlacemark*>(m_document->child(m_document->size()-1));
+        GeoDataMultiGeometry *multiGeometry = static_cast<GeoDataMultiGeometry*>(placemark->geometry());
+        GeoDataLineString *lineString = new GeoDataLineString;
+        multiGeometry->append(lineString);
+    }
+
+    emit statusChanged( status );
+}
+
 void PositionTracking::setPositionProviderPlugin( PositionProviderPlugin* plugin )
 {
     if ( m_positionProvider ) {
@@ -79,7 +101,7 @@
         m_positionProvider->setParent( this );
         mDebug() << "Initializing position provider:" << m_positionProvider->name();
         connect( m_positionProvider, SIGNAL( statusChanged( PositionProviderStatus ) ),
-                this, SIGNAL( statusChanged(PositionProviderStatus ) ) );
+                this, SLOT( setStatus(PositionProviderStatus) ) );
         connect( m_positionProvider, SIGNAL( positionChanged( GeoDataCoordinates,GeoDataAccuracy ) ),
                  this, SLOT( setPosition( GeoDataCoordinates,GeoDataAccuracy ) ) );
 
--- trunk/KDE/kdeedu/marble/src/lib/gps/PositionTracking.h #1159189:1159190
@@ -67,6 +67,8 @@
     void setPosition( GeoDataCoordinates position,
                           GeoDataAccuracy accuracy );
 
+    void setStatus( PositionProviderStatus status );
+
  private:
 
     GeoDataDocument     *m_document;


More information about the Marble-commits mailing list