diff options
author | Vladimir Bezkorovainyi <vladimir.bezkorovainyi@nokia.com> | 2011-07-18 15:46:44 +0200 |
---|---|---|
committer | Vladimir Bezkorovainyi <vladimir.bezkorovainyi@nokia.com> | 2011-07-18 15:46:44 +0200 |
commit | 89acced935f68268741050902909884d3b3c7567 (patch) | |
tree | 4781c003242a481fbf824d42ce4e4860b7036bab /plugins/geoservices | |
parent | 58ab2e766476402479afd3e7b696782726146035 (diff) |
add possibility to specify logo position from command-line
Diffstat (limited to 'plugins/geoservices')
4 files changed, 78 insertions, 14 deletions
diff --git a/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp b/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp index 3e8297dff5..ef0f4d55b4 100755 --- a/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp +++ b/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp @@ -167,6 +167,26 @@ namespace { return first.width() * first.height() < second.width() * second.height(); } + + int GetLogoPosition(QString positionName) + { + typedef std::map<QString, int> KnownPositionsType; + static KnownPositionsType knownPositions; + if (knownPositions.empty()) + { + knownPositions.insert(std::make_pair("top.left", TopLeft)); + knownPositions.insert(std::make_pair("left.top", TopLeft)); + knownPositions.insert(std::make_pair("top.right", ShiftedRight)); + knownPositions.insert(std::make_pair("right.top", ShiftedRight)); + knownPositions.insert(std::make_pair("bottom.left", ShiftedRight | ShiftedDown)); + knownPositions.insert(std::make_pair("left.bottom", ShiftedRight | ShiftedDown)); + knownPositions.insert(std::make_pair("bottom.right", ShiftedDown)); + knownPositions.insert(std::make_pair("right.bottom", ShiftedDown)); + } + + KnownPositionsType::const_iterator found = knownPositions.find(positionName); + return found == knownPositions.end() ? ShiftedDown : found->second; + } } QGeoMappingManagerEngineNokia::QGeoMappingManagerEngineNokia(const QMap<QString, QVariant> ¶meters, QGeoServiceProvider::Error *error, QString *errorString) @@ -174,7 +194,8 @@ QGeoMappingManagerEngineNokia::QGeoMappingManagerEngineNokia(const QMap<QString, m_cache(0), m_host("maptile.maps.svc.ovi.com"), m_token(QGeoServiceProviderFactoryNokia::defaultToken), - m_referer(QGeoServiceProviderFactoryNokia::defaultReferer) + m_referer(QGeoServiceProviderFactoryNokia::defaultReferer), + m_logoPosition(ShiftedDown) { Q_UNUSED(error) Q_UNUSED(errorString) @@ -216,6 +237,12 @@ QGeoMappingManagerEngineNokia::QGeoMappingManagerEngineNokia(const QMap<QString, else if (parameters.contains("token")) { m_token = parameters.value("token").toString(); } + + if (parameters.contains("logo.position")) + { + m_logoPosition = GetLogoPosition(parameters.value("logo.position").toString()); + } + #ifdef DISK_CACHE_ENABLED QString cacheDir; if (parameters.contains("mapping.cache.directory")) @@ -406,3 +433,8 @@ void QGeoMappingManagerEngineNokia::setupServiceInfo() setMaximumZoomLevel(maxZoomLevel); setSupportedMapTypes(types); } + +int QGeoMappingManagerEngineNokia::logoPosition() const +{ + return m_logoPosition; +} diff --git a/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h b/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h index 5335804ce5..ea09459dd4 100644 --- a/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h +++ b/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h @@ -71,6 +71,8 @@ public: QGeoMapData* createMapData(); QGeoTiledMapReply* getTileImage(const QGeoTiledMapRequest &request); + int logoPosition() const; + private: Q_DISABLE_COPY(QGeoMappingManagerEngineNokia) @@ -90,6 +92,7 @@ private: QString m_host; QString m_token; QString m_referer; + int m_logoPosition; }; #endif diff --git a/plugins/geoservices/nokia/qgeotiledmapdata_nokia.cpp b/plugins/geoservices/nokia/qgeotiledmapdata_nokia.cpp index 9f1605b957..a666458fe6 100644 --- a/plugins/geoservices/nokia/qgeotiledmapdata_nokia.cpp +++ b/plugins/geoservices/nokia/qgeotiledmapdata_nokia.cpp @@ -57,13 +57,31 @@ QTM_USE_NAMESPACE +namespace +{ + void AdjustLogo(const QRect &windowRect, QRect &logoRect, int position) + { + logoRect.moveTo(windowRect.topLeft()); + if (position & ShiftedRight) + { + logoRect.moveRight(windowRect.x() + windowRect.width()); + } + + if (position & ShiftedDown) + { + logoRect.moveBottom(windowRect.y() + windowRect.height()); + } + } +} + /*! Constructs a new tiled map data object, which stores the map data required by \a geoMap and makes use of the functionality provided by \a engine. */ QGeoTiledMapDataNokia::QGeoTiledMapDataNokia(QGeoMappingManagerEngineNokia *engine) : QGeoTiledMapData(engine), - watermark(":/images/watermark.png") + watermark(":/images/watermark.png"), + m_logoPosition(engine->logoPosition()) { m_networkManager = new QNetworkAccessManager(this); connect(m_networkManager, SIGNAL(finished(QNetworkReply*)), SLOT(copyrightReplyFinished(QNetworkReply*))); @@ -185,22 +203,18 @@ QString QGeoTiledMapDataNokia::getViewCopyright() /*! \reimp */ -void QGeoTiledMapDataNokia::paintProviderNotices(QPainter *painter, const QStyleOptionGraphicsItem *option) +void QGeoTiledMapDataNokia::paintProviderNotices(QPainter *painter, const QStyleOptionGraphicsItem *) { - QRect viewport = painter->combinedTransform().inverted().mapRect(painter->viewport()); - - painter->drawPixmap( - viewport.bottomLeft()+QPoint(5,-5-watermark.height()), - watermark - ); + const int offset = 5; + QRect viewport = painter->combinedTransform().inverted().mapRect(painter->viewport()); QString copyrightText = getViewCopyright(); if (copyrightText != lastCopyrightText || lastViewport != viewport) { lastCopyrightText = copyrightText; lastViewport = viewport; - QRect maxBoundingRect(QPoint(viewport.left()+10+watermark.width(), viewport.top()), QPoint(viewport.right()-5, viewport.bottom()-5)); + QRect maxBoundingRect(QPoint(viewport.left()+10+watermark.width(), viewport.top()), QPoint(viewport.right()-offset, viewport.bottom()-offset)); QFont font = painter->font(); font.setPixelSize(12); @@ -237,9 +251,16 @@ void QGeoTiledMapDataNokia::paintProviderNotices(QPainter *painter, const QStyle ); } } + viewport.adjust(offset, offset, -offset, -offset); + + QRect watermarkViewRect(viewport), copyrightViewRect(viewport); + watermarkViewRect.setWidth(watermarkViewRect.width() - lastCopyrightRect.width()); + copyrightViewRect.adjust(watermark.width(), 0, 0, 0); + + QRect watermarkRect(watermark.rect()), copyrightRect(lastCopyrightRect); + AdjustLogo(watermarkViewRect, watermarkRect, m_logoPosition); + AdjustLogo(copyrightViewRect, copyrightRect, m_logoPosition); - painter->drawPixmap( - lastCopyrightRect, - lastCopyright - ); + painter->drawPixmap(watermarkRect, watermark); + painter->drawPixmap(copyrightRect, lastCopyright); } diff --git a/plugins/geoservices/nokia/qgeotiledmapdata_nokia.h b/plugins/geoservices/nokia/qgeotiledmapdata_nokia.h index f35fc63953..cb2ae1bb3f 100644 --- a/plugins/geoservices/nokia/qgeotiledmapdata_nokia.h +++ b/plugins/geoservices/nokia/qgeotiledmapdata_nokia.h @@ -65,6 +65,13 @@ struct CopyrightDescriptor QList<QGeoBoundingBox> boxes; }; +enum LogoPosition +{ + TopLeft = 0, + ShiftedRight = 1, + ShiftedDown = 2 +}; + class QGeoTiledMapDataNokia: public QGeoTiledMapData { Q_OBJECT @@ -87,6 +94,7 @@ private: QNetworkAccessManager *m_networkManager; QHash<QString, QList<CopyrightDescriptor> > copyrights; + int m_logoPosition; private slots: void copyrightReplyFinished(QNetworkReply*); |