diff options
author | Basel Hashisho <basel.hashisho@nokia.com> | 2012-02-17 12:07:01 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-09 16:04:55 +0100 |
commit | 53e5f30e06091f5b05c9283657e454bc45896075 (patch) | |
tree | a9a5be51418b008f61165b510f1d87aa748a020e /src/location/maps/qgeomappingmanager.cpp | |
parent | f61e60ec2d66e181caf9e81b126936075e6fca5d (diff) | |
download | qtlocation-53e5f30e06091f5b05c9283657e454bc45896075.tar.gz |
Refactoring of QtLocation API
Refactoring QGeoMap, QGeoMappingManager, QGeoMappingManagerEngine
Introducing QGeoMapData, QGeoTiledMap, QGeoTiledMappingManagerEngine, QGeoTileFetcher
QGeoMap: Container for QGeoMapData
QGeoMapData: No tiles data/functionality
QGeoTiledMapData: Implements tiles data/functionality.
QGeoMappingManager: Looses tiles-related data/functionality.
QGeoMappingManagerEngine => QGeoMappingManagerEngine (no tiles
data/functionality) QGeoTiledMappingManagerEngine (implements
tiles-related data/functionality).
QGeoTileFetcher: Implements tile fetching functionality from tiles
provider.
This commit compiles and runs through mapviewer example. Tests also were adjusted to
fit refactored architecture.
Change-Id: Id2b62d62d5cd4aaca8295c67e44c009cde636462
Reviewed-by: Alex <alex.blasche@nokia.com>
Diffstat (limited to 'src/location/maps/qgeomappingmanager.cpp')
-rw-r--r-- | src/location/maps/qgeomappingmanager.cpp | 251 |
1 files changed, 17 insertions, 234 deletions
diff --git a/src/location/maps/qgeomappingmanager.cpp b/src/location/maps/qgeomappingmanager.cpp index 13eba293..d142fa37 100644 --- a/src/location/maps/qgeomappingmanager.cpp +++ b/src/location/maps/qgeomappingmanager.cpp @@ -43,13 +43,10 @@ #include "qgeomappingmanager_p.h" #include "qgeomappingmanagerengine.h" #include "qgeotiledmapreply.h" +#include "qgeocameracapabilities_p.h" #include "qgeomap_p.h" -#include "qgeomap_p_p.h" -#include "qgeocameracapabilities_p.h" -#include "qgeotilecache_p.h" -#include "qgeotilespec.h" #include <QTimer> #include <QNetworkProxy> @@ -57,9 +54,6 @@ QT_BEGIN_NAMESPACE -#define Q_SHARED_D(type) \ - QSharedPointer< type > d = d_ptr; - /*! \class QGeoMappingManager \inmodule QtLocation @@ -87,44 +81,11 @@ QGeoMappingManager::QGeoMappingManager(QGeoMappingManagerEngine *engine, QObject qFatal("The mapping manager engine that was set for this mapping manager was NULL."); } - d_ptr->thread= new QThread; - - qRegisterMetaType<QGeoTileSpec>(); - - connect(d_ptr->engine, - SIGNAL(tileFinished(QGeoTileSpec,QByteArray,QString)), - this, - SLOT(engineTileFinished(QGeoTileSpec,QByteArray,QString)), - Qt::QueuedConnection); - connect(d_ptr->engine, - SIGNAL(tileError(QGeoTileSpec,QString)), - this, - SLOT(engineTileError(QGeoTileSpec,QString)), - Qt::QueuedConnection); - connect(d_ptr->engine, SIGNAL(initialized()), this, - SIGNAL(initialized())); - - d_ptr->engine->moveToThread(d_ptr->thread); - - connect(d_ptr->thread, - SIGNAL(started()), - d_ptr->engine, - SLOT(threadStarted())); - - connect(d_ptr->thread, - SIGNAL(finished()), - d_ptr->engine, - SLOT(threadFinished())); - - connect(d_ptr->engine, - SIGNAL(destroyed()), - d_ptr->thread, - SLOT(deleteLater())); - - QTimer::singleShot(0, d_ptr->thread, SLOT(start())); + SIGNAL(initialized()), + Qt::QueuedConnection); } /*! @@ -132,6 +93,7 @@ QGeoMappingManager::QGeoMappingManager(QGeoMappingManagerEngine *engine, QObject */ QGeoMappingManager::~QGeoMappingManager() { + delete d_ptr; } /*! @@ -150,9 +112,7 @@ QGeoMappingManager::~QGeoMappingManager() */ QString QGeoMappingManager::managerName() const { - Q_SHARED_D(QGeoMappingManagerPrivate); - if (!d) return QString(); - return d->engine->managerName(); + return d_ptr->engine->managerName(); } /*! @@ -164,180 +124,27 @@ QString QGeoMappingManager::managerName() const */ int QGeoMappingManager::managerVersion() const { - Q_SHARED_D(QGeoMappingManagerPrivate); - if (!d) return 0; return d_ptr->engine->managerVersion(); } -void QGeoMappingManager::registerMap(QGeoMap *map) -{ - Q_SHARED_D(QGeoMappingManagerPrivate); - if (!d) return; - - QGeoTileCache *cache = map->tileCache(); - QSet<QGeoMap*> maps = d->caches.value(cache); - maps.insert(map); - d->caches.insert(cache, maps); -} - -void QGeoMappingManager::deregisterMap(QGeoMap *map) -{ - Q_SHARED_D(QGeoMappingManagerPrivate); - if (!d) return; - - QGeoTileCache *cache = map->tileCache(); - QSet<QGeoMap*> maps = d->caches.value(cache); - maps.remove(map); - if (maps.isEmpty()) { - d->caches.remove(cache); - } else { - d->caches.insert(cache, maps); - } - - // clear any tileHash / mapHash entries - d->mapHash.remove(map); - - QHash<QGeoTileSpec, QSet<QGeoMap*> > newTileHash = d->tileHash; - typedef QHash<QGeoTileSpec, QSet<QGeoMap*> >::const_iterator h_iter; - h_iter hi = d->tileHash.constBegin(); - h_iter hend = d->tileHash.constEnd(); - for (; hi != hend; ++hi) { - QSet<QGeoMap*> maps = hi.value(); - if (maps.contains(map)) { - maps.remove(map); - if (maps.isEmpty()) - newTileHash.remove(hi.key()); - else - newTileHash.insert(hi.key(), maps); - } - } - d->tileHash = newTileHash; -} - -void QGeoMappingManager::updateTileRequests(QGeoMap *map, - const QSet<QGeoTileSpec> &tilesAdded, - const QSet<QGeoTileSpec> &tilesRemoved) -{ - Q_SHARED_D(QGeoMappingManagerPrivate); - if (!d) return; - - typedef QSet<QGeoTileSpec>::const_iterator tile_iter; - - // add and remove tiles from tileset for this map - - QSet<QGeoTileSpec> oldTiles = d->mapHash.value(map); - - tile_iter rem = tilesRemoved.constBegin(); - tile_iter remEnd = tilesRemoved.constEnd(); - for (; rem != remEnd; ++rem) { - oldTiles.remove(*rem); - } - - tile_iter add = tilesAdded.constBegin(); - tile_iter addEnd = tilesAdded.constEnd(); - for (; add != addEnd; ++add) { - oldTiles.insert(*add); - } - - d->mapHash.insert(map, oldTiles); - - // add and remove map from mapset for the tiles - - QSet<QGeoTileSpec> reqTiles; - QSet<QGeoTileSpec> cancelTiles; - - rem = tilesRemoved.constBegin(); - for (; rem != remEnd; ++rem) { - QSet<QGeoMap*> mapSet = d->tileHash.value(*rem); - mapSet.remove(map); - if (mapSet.isEmpty()) { - cancelTiles.insert(*rem); - d->tileHash.remove(*rem); - } else { - d->tileHash.insert(*rem, mapSet); - } - } - - add = tilesAdded.constBegin(); - for (; add != addEnd; ++add) { - QSet<QGeoMap*> mapSet = d->tileHash.value(*add); - if (mapSet.isEmpty()) { - reqTiles.insert(*add); - } - mapSet.insert(map); - d->tileHash.insert(*add, mapSet); - } - - cancelTiles -= reqTiles; - - QMetaObject::invokeMethod(d->engine, "updateTileRequests", - Qt::QueuedConnection, - Q_ARG(QSet<QGeoTileSpec>, reqTiles), - Q_ARG(QSet<QGeoTileSpec>, cancelTiles)); -} - -void QGeoMappingManager::engineTileFinished(const QGeoTileSpec &spec, const QByteArray &bytes, const QString &format) +QGeoCameraCapabilities QGeoMappingManager::cameraCapabilities() const { - Q_SHARED_D(QGeoMappingManagerPrivate); - if (!d) return; - - QSet<QGeoTileCache*> caches; - - QSet<QGeoMap*> maps = d->tileHash.value(spec); - - typedef QSet<QGeoMap*>::const_iterator map_iter; - - map_iter map = maps.constBegin(); - map_iter mapEnd = maps.constEnd(); - for (; map != mapEnd; ++map) { - caches.insert((*map)->tileCache()); - - QSet<QGeoTileSpec> tileSet = d->mapHash.value(*map); - tileSet.remove(spec); - if (tileSet.isEmpty()) - d->mapHash.remove(*map); - else - d->mapHash.insert(*map, tileSet); - } - - d->tileHash.remove(spec); - - typedef QSet<QGeoTileCache*>::const_iterator cache_iter; - - cache_iter cache = caches.constBegin(); - cache_iter cacheEnd = caches.constEnd(); - for (; cache != cacheEnd; ++cache) { - (*cache)->insert(spec, bytes, format, d->engine->cacheHint()); - } - - map = maps.constBegin(); - for (; map != mapEnd; ++map) { - (*map)->d_ptr->tileFetched(spec); - } + return d_ptr->engine->cameraCapabilities(); } -void QGeoMappingManager::engineTileError(const QGeoTileSpec &spec, const QString &errorString) +/*! + Returns a new QGeoMap instance which will be managed by this manager. +*/ +QGeoMap *QGeoMappingManager::createMap(QObject *parent) { - emit tileError(spec, errorString); + QGeoMapData *mapData = d_ptr->engine->createMapData(); + QGeoMap *map = new QGeoMap(mapData); + return map; } QList<QGeoMapType> QGeoMappingManager::supportedMapTypes() const { - Q_SHARED_D(QGeoMappingManagerPrivate); - if (!d) return QList<QGeoMapType>(); - return d->engine->supportedMapTypes(); -} - -/*! - Returns the length of the edge of the tiles returned by this manager. - - The tiles are assumed to be square. -*/ -int QGeoMappingManager::tileSize() const -{ - Q_SHARED_D(QGeoMappingManagerPrivate); - if (!d) return -1; - return d->engine->tileSize(); + return d_ptr->engine->supportedMapTypes(); } /*! @@ -347,19 +154,7 @@ int QGeoMappingManager::tileSize() const */ bool QGeoMappingManager::isInitialized() const { - Q_SHARED_D(QGeoMappingManagerPrivate); - if (!d) return false; - return d->engine->isInitialized(); -} - -/*! - Returns the camera capabilities supported by this manager. -*/ -QGeoCameraCapabilities QGeoMappingManager::cameraCapabilities() const -{ - Q_SHARED_D(QGeoMappingManagerPrivate); - if (!d) return QGeoCameraCapabilities(); - return d->engine->cameraCapabilities(); + return d_ptr->engine->isInitialized(); } /*! @@ -372,9 +167,7 @@ QGeoCameraCapabilities QGeoMappingManager::cameraCapabilities() const */ void QGeoMappingManager::setLocale(const QLocale &locale) { - Q_SHARED_D(QGeoMappingManagerPrivate); - if (!d) return; - d->engine->setLocale(locale); + d_ptr->engine->setLocale(locale); } /*! @@ -383,18 +176,9 @@ void QGeoMappingManager::setLocale(const QLocale &locale) */ QLocale QGeoMappingManager::locale() const { - Q_SHARED_D(QGeoMappingManagerPrivate); - if (!d) return QLocale(); return d_ptr->engine->locale(); } -QGeoMappingManager::CacheAreas QGeoMappingManager::cacheHint() const -{ - Q_SHARED_D(QGeoMappingManagerPrivate); - if (!d) return QGeoMappingManager::CacheAreas(); - return d_ptr->engine->cacheHint(); -} - /******************************************************************************* *******************************************************************************/ @@ -403,7 +187,6 @@ QGeoMappingManagerPrivate::QGeoMappingManagerPrivate() QGeoMappingManagerPrivate::~QGeoMappingManagerPrivate() { - thread->quit(); } #include "moc_qgeomappingmanager.cpp" |