[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/extragear/graphics/digikam/worldmapwidget2
From:       Michael Georg Hansen <mike () mghansen ! de>
Date:       2010-02-20 20:40:28
Message-ID: 1266698428.905154.9657.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1093416 by mghansen:

Support for looking up altitudes via geonames.org.



 M  +3 -0      CMakeLists.txt  
 M  +37 -1     demo/mainwindow.cpp  
 M  +5 -0      demo/mainwindow.h  
 A             lib/altitude-backend.cpp   [License: GPL (v2+)]
 A             lib/altitude-backend.h   [License: GPL (v2+)]
 A             lib/backend-altitude-geonames.cpp   [License: GPL (v2+)]
 A             lib/backend-altitude-geonames.h   [License: GPL (v2+)]
 M  +26 -4     lib/worldmapwidget2.cpp  
 M  +3 -1      lib/worldmapwidget2.h  
 M  +23 -1     lib/worldmapwidget2_primitives.h  


--- branches/extragear/graphics/digikam/worldmapwidget2/CMakeLists.txt \
#1093415:1093416 @@ -46,6 +46,9 @@
     lib/html_widget.cpp
     lib/markermodel.cpp
     lib/worldmapwidget2_primitives.cpp
+    lib/altitude-backend.cpp
+
+    lib/backend-altitude-geonames.cpp
 )
 
 SET( backend_marble_sources
--- branches/extragear/graphics/digikam/worldmapwidget2/demo/mainwindow.cpp \
#1093415:1093416 @@ -125,6 +125,9 @@
     connect(d->mapWidget, SIGNAL(signalSingleMarkersMoved(const QList<int>&)),
             this, SLOT(slotSingleMarkersMoved(const QList<int>&)));
 
+    connect(d->mapWidget, SIGNAL(signalAltitudeLookupReady(const \
WMW2::WMWAltitudeLookup::List&)), +            this, \
SLOT(slotAltitudeLookupReady(const WMW2::WMWAltitudeLookup::List&))); +
 //     d->mapWidget->resize(d->mapWidget->width(), 200);
     d->splitter->addWidget(d->mapWidget);
     d->splitter->setCollapsible(0, false);
@@ -410,7 +413,8 @@
 {
     kDebug()<<"markers moved: "<<markerIndices;
 
-    // update the treewidget items:
+    // update the treewidget items and prepare altitude lookups
+    WMWAltitudeLookup::List altitudeQueries;
     for (int i=0; i<markerIndices.count(); ++i)
     {
         const WMWMarker& myMarker = \
d->mapWidget->getSingleMarker(markerIndices.at(i)); @@ -420,5 +424,37 @@
             continue;
 
         treeItem->setText(1, myMarker.coordinates.geoUrl());
+
+        WMWAltitudeLookup myLookup;
+        myLookup.coordinates = myMarker.coordinates;
+        myLookup.data = QVariant(markerIndices.at(i));
+        altitudeQueries << myLookup;
     }
+
+    if (!altitudeQueries.isEmpty())
+    {
+        d->mapWidget->queryAltitudes(altitudeQueries, "geonames");
+    }
 }
+
+void MainWindow::slotAltitudeLookupReady(const WMWAltitudeLookup::List& altitudes)
+{
+    for (int i=0; i<altitudes.count(); ++i)
+    {
+        const WMWAltitudeLookup& myLookup = altitudes.at(i);
+
+        const int markerIndex = myLookup.data.toInt();
+        kDebug()<<markerIndex;
+
+        // TODO: this is problematic if a marker was removed in between
+        WMWMarker& myMarker = d->mapWidget->getSingleMarker(markerIndex);
+        myMarker.coordinates = myLookup.coordinates;
+
+        QTreeWidgetItem* const treeItem = myMarker.data.value<QTreeWidgetItem*>();
+        if (!treeItem)
+            continue;
+
+        treeItem->setText(1, myMarker.coordinates.geoUrl());
+
+    }
+}
--- branches/extragear/graphics/digikam/worldmapwidget2/demo/mainwindow.h \
#1093415:1093416 @@ -25,6 +25,10 @@
 #include <kmainwindow.h>
 #include <kurl.h>
 
+// local includes
+
+#include <worldmapwidget2_primitives.h>
+
 class KCmdLineArgs;
 
 class MainWindowPrivate;
@@ -50,6 +54,7 @@
     void slotImageLoadingBunchReady();
     void slotGroupableMarkersMoved(const QList<int>& markerIndices);
     void slotSingleMarkersMoved(const QList<int>& markerIndices);
+    void slotAltitudeLookupReady(const WMW2::WMWAltitudeLookup::List& altitudes);
 
 private:
     MainWindowPrivate* const d;
--- branches/extragear/graphics/digikam/worldmapwidget2/lib/worldmapwidget2.cpp \
#1093415:1093416 @@ -45,6 +45,7 @@
 #include "backend-googlemaps.h"
 #include "backend-osm.h"
 #include "markermodel.h"
+#include "backend-altitude-geonames.h"
 
 namespace WMW2 {
 
@@ -64,7 +65,8 @@
 {
 public:
     WorldMapWidget2Private()
-    : loadedBackends(),
+    : loadedAltitudeBackends(),
+      loadedBackends(),
       currentBackend(0),
       currentBackendReady(false),
       currentBackendName(),
@@ -77,7 +79,8 @@
       controlWidget(0)
     {
     }
-    
+
+    QList<AltitudeBackend*> loadedAltitudeBackends;
     QList<MapBackend*> loadedBackends;
     MapBackend* currentBackend;
     bool currentBackendReady;
@@ -107,6 +110,11 @@
     d->loadedBackends.append(new BackendGoogleMaps(s, this));
     d->loadedBackends.append(new BackendMarble(s, this));
     d->loadedBackends.append(new BackendOSM(s, this));
+
+    AltitudeBackend* const geonamesBackend = new BackendAltitudeGeonames(s, this);
+    d->loadedAltitudeBackends.append(geonamesBackend);
+    connect(geonamesBackend, SIGNAL(signalAltitudes(const \
WMW2::WMWAltitudeLookup::List)), +            this, \
SIGNAL(signalAltitudeLookupReady(const WMW2::WMWAltitudeLookup::List)));  }
 
 WorldMapWidget2::~WorldMapWidget2()
@@ -979,10 +987,10 @@
     return s->markerModel->markerList.at(markerIndex);
 }
 
-WMWMarker WorldMapWidget2::getSingleMarker(const int markerIndex)
+WMWMarker& WorldMapWidget2::getSingleMarker(const int markerIndex)
 {
     WMW2_ASSERT(markerIndex<s->markerList.count());
-    return s->markerList.at(markerIndex);
+    return s->markerList[markerIndex];
 }
 
 void WorldMapWidget2::slotMarkersMoved(const QIntList& markerIndices)
@@ -990,5 +998,19 @@
     emit(signalSingleMarkersMoved(markerIndices));
 }
 
+bool WorldMapWidget2::queryAltitudes(const WMWAltitudeLookup::List& queryItems, \
const QString& backendName) +{
+    for (int i=0; i<d->loadedAltitudeBackends.count(); ++i)
+    {
+        AltitudeBackend* const altitudeBackend = d->loadedAltitudeBackends.at(i);
+
+        if (altitudeBackend->backendName() == backendName)
+        {
+            return altitudeBackend->queryAltitudes(queryItems);
+        }
+    }
+    return false;
+}
+
 } /* WMW2 */
 
--- branches/extragear/graphics/digikam/worldmapwidget2/lib/worldmapwidget2.h \
#1093415:1093416 @@ -60,7 +60,7 @@
 
     void addClusterableMarkers(const WMWMarker::List& markerList);
     WMWMarker getClusterableMarker(const int markerIndex);
-    WMWMarker getSingleMarker(const int markerIndex);
+    WMWMarker& getSingleMarker(const int markerIndex);
     void addSingleMarkers(const WMWMarker::List& markerList);
     void updateMarkers();
     void updateClusters();
@@ -69,6 +69,7 @@
                        Qt::PenStyle *strokeStyle, QString *labelText, QColor \
*labelColor) const;  
     QString convertZoomToBackendZoom(const QString& someZoom, const QString& \
targetBackend) const; +    bool queryAltitudes(const WMWAltitudeLookup::List& \
queryItems, const QString& backendName = "");  
 public Q_SLOTS:
     void slotZoomIn();
@@ -79,6 +80,7 @@
 Q_SIGNALS:
     void signalSingleMarkersMoved(const QList<int>& markerIndices);
     void signalGroupableMarkersMoved(const QList<int>& markerIndices);
+    void signalAltitudeLookupReady(const WMW2::WMWAltitudeLookup::List& altitudes);
 
 protected:
     void applyCacheToBackend();
--- branches/extragear/graphics/digikam/worldmapwidget2/lib/worldmapwidget2_primitives.h \
#1093415:1093416 @@ -104,7 +104,12 @@
         hasAlt = true;
         alt = inAlt;
     }
-    
+
+    void clearAlt()
+    {
+        hasAlt = false;
+    }
+
     QString altString() const { return QString::number(alt, 'g', 12); }
     QString latString() const { return QString::number(lat, 'g', 12); }
     QString lonString() const { return QString::number(lon, 'g', 12); }
@@ -121,6 +126,11 @@
         }
     }
 
+    bool sameLonLatAs(const WMWGeoCoordinate& other) const
+    {
+        return (lat==other.lat)&&(lon==other.lon);
+    }
+
     static WMWGeoCoordinate fromGeoUrl(const QString& url, bool* const parsedOkay = \
0)  {
         // parse geo:-uri according to (only partially implemented):
@@ -280,6 +290,17 @@
 bool WMWHelperParseBoundsString(const QString& boundsString, QPair<WMWGeoCoordinate, \
WMWGeoCoordinate>* const boundsCoordinates);  WMWGeoCoordinate::PairList \
WMWHelperNormalizeBounds(const WMWGeoCoordinate::Pair& boundsPair);  
+// primitives for altitude lookup:
+class WMWAltitudeLookup
+{
+public:
+    WMWGeoCoordinate coordinates;
+    QVariant data;
+
+    typedef QList<WMWAltitudeLookup> List;
+};
+
+
 } /* WMW2 */
 
 inline QDebug operator<<(QDebug debugOut, const WMW2::WMWGeoCoordinate& coordinate)
@@ -299,5 +320,6 @@
 
 Q_DECLARE_METATYPE(WMW2::WMWGeoCoordinate::Pair)
 Q_DECLARE_METATYPE(WMW2::WMWGeoCoordinate::PairList)
+Q_DECLARE_METATYPE(WMW2::WMWAltitudeLookup)
 
 #endif /* WORLDMAPWIDGET2_PRIMITIVES_H */


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic