From e7af002b538234fff2cb467f047245c470dcd802 Mon Sep 17 00:00:00 2001 From: "Juergen E. Fischer" Date: Tue, 22 May 2012 21:18:32 +0200 Subject: [PATCH] wmts: use QObject property to make tile resolutions available to tilescalewidget --- src/providers/wms/qgstilescalewidget.cpp | 29 ++++++++++-------------- src/providers/wms/qgswmsprovider.cpp | 9 ++++++++ src/providers/wms/qgswmsprovider.h | 10 -------- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/src/providers/wms/qgstilescalewidget.cpp b/src/providers/wms/qgstilescalewidget.cpp index 6eff242d8ce..7a2f47d33fe 100644 --- a/src/providers/wms/qgstilescalewidget.cpp +++ b/src/providers/wms/qgstilescalewidget.cpp @@ -18,7 +18,6 @@ #include "qgstilescalewidget.h" #include "qgsmapcanvas.h" #include "qgsrasterlayer.h" -#include "qgswmsprovider.h" #include "qgsmessagelog.h" #include "qgslogger.h" @@ -46,28 +45,24 @@ QgsTileScaleWidget::~QgsTileScaleWidget() void QgsTileScaleWidget::layerChanged( QgsMapLayer *layer ) { - QgsRasterLayer *rl = qobject_cast( layer ); - if ( !rl ) - return; - - QgsWmsProvider *wms = qobject_cast( rl->dataProvider() ); - if ( !wms ) - return; - - QgsWmtsTileMatrixSet *tileMatrixSet = wms->tileMatrixSet(); - if ( !tileMatrixSet ) - return; - mSlider->setDisabled( true ); - mResolutions = tileMatrixSet->tileMatrices.keys(); - qSort( mResolutions ); + QgsRasterLayer *rl = qobject_cast( layer ); + if ( !rl || rl->providerType() != "wms" || !rl->dataProvider() ) + return; - for ( int i = 0; i < mResolutions.size(); i++ ) + QVariant res = rl->dataProvider()->property( "resolutions" ); + + mResolutions.clear(); + foreach( QVariant r, res.toList() ) { - QgsDebugMsg( QString( "found resolution %1: %2" ).arg( i ).arg( mResolutions[i] ) ); + QgsDebugMsg( QString( "found resolution: %1" ).arg( r.toDouble() ) ); + mResolutions << r.toDouble(); } + if ( mResolutions.size() == 0 ) + return; + mSlider->setRange( 0, mResolutions.size() - 1 ); mSlider->setTickInterval( 1 ); mSlider->setInvertedAppearance( true ); diff --git a/src/providers/wms/qgswmsprovider.cpp b/src/providers/wms/qgswmsprovider.cpp index 8ba25043dd1..da9005ec6fd 100644 --- a/src/providers/wms/qgswmsprovider.cpp +++ b/src/providers/wms/qgswmsprovider.cpp @@ -410,15 +410,24 @@ void QgsWmsProvider::addLayers( QStringList const &layers, } } + QList resolutions; if ( mTileMatrixSets.contains( mTileMatrixSetId ) ) { mTileMatrixSet = &mTileMatrixSets[ mTileMatrixSetId ]; + QList keys = mTileMatrixSet->tileMatrices.keys(); + qSort( keys ); + foreach( double key, keys ) + { + resolutions << key; + } } else { mTileMatrixSet = 0; } + setProperty( "resolutions", resolutions ); + mValid = mTileLayer != 0 && mTileMatrixSet != 0; } diff --git a/src/providers/wms/qgswmsprovider.h b/src/providers/wms/qgswmsprovider.h index 874ebf56abd..f73d7c6b2bc 100644 --- a/src/providers/wms/qgswmsprovider.h +++ b/src/providers/wms/qgswmsprovider.h @@ -742,16 +742,6 @@ class QgsWmsProvider : public QgsRasterDataProvider static QVector supportedFormats(); - /** - returns the current tile layer (if any) - */ - QgsWmtsTileLayer *tileLayer() { return mTileLayer; } - - /** - returns the current tile matrix set (if any) - */ - QgsWmtsTileMatrixSet *tileMatrixSet() { return mTileMatrixSet; } - signals: /** \brief emit a signal to notify of a progress event */