[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