[QGIS Commit] r15747 - in trunk/qgis: python/core src/app src/core
src/core/raster src/providers/wms
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Sun Apr 17 09:58:59 EDT 2011
Author: jef
Date: 2011-04-17 06:58:59 -0700 (Sun, 17 Apr 2011)
New Revision: 15747
Modified:
trunk/qgis/python/core/qgsdataprovider.sip
trunk/qgis/src/app/qgisapp.cpp
trunk/qgis/src/app/qgisapp.h
trunk/qgis/src/app/qgisappinterface.cpp
trunk/qgis/src/app/qgswmssourceselect.cpp
trunk/qgis/src/app/qgswmssourceselect.h
trunk/qgis/src/core/qgsdataprovider.h
trunk/qgis/src/core/raster/qgsrasterlayer.cpp
trunk/qgis/src/core/raster/qgsrasterlayer.h
trunk/qgis/src/providers/wms/qgswmsprovider.cpp
trunk/qgis/src/providers/wms/qgswmsprovider.h
Log:
fix #7: GetCapabilities no done twice anymore
Modified: trunk/qgis/python/core/qgsdataprovider.sip
===================================================================
--- trunk/qgis/python/core/qgsdataprovider.sip 2011-04-17 13:40:25 UTC (rev 15746)
+++ trunk/qgis/python/core/qgsdataprovider.sip 2011-04-17 13:58:59 UTC (rev 15747)
@@ -60,6 +60,12 @@
*/
virtual QgsRectangle extent() = 0;
+ /**
+ * Set the extent of the layer
+ * @param extent the layer extent
+ * @note added in 1.8
+ */
+ virtual void setExtent( QgsRectangle extent );
/**
* Returns true if this is a valid layer. It is up to individual providers
Modified: trunk/qgis/src/app/qgisapp.cpp
===================================================================
--- trunk/qgis/src/app/qgisapp.cpp 2011-04-17 13:40:25 UTC (rev 15746)
+++ trunk/qgis/src/app/qgisapp.cpp 2011-04-17 13:58:59 UTC (rev 15747)
@@ -6278,7 +6278,8 @@
QStringList const & layers,
QStringList const & styles,
QString const &format,
- QString const &crs )
+ QString const &crs,
+ QgsRectangle extent )
{
QgsDebugMsg( "about to get library for " + providerKey );
@@ -6307,7 +6308,7 @@
+ " and CRS of " + crs );
// TODO: Remove the 0 when the raster layer becomes a full provider gateway.
- layer = new QgsRasterLayer( 0, rasterLayerPath, baseName, providerKey, layers, styles, format, crs );
+ layer = new QgsRasterLayer( 0, rasterLayerPath, baseName, providerKey, layers, styles, format, crs, extent );
QgsDebugMsg( "Constructed new layer." );
Modified: trunk/qgis/src/app/qgisapp.h
===================================================================
--- trunk/qgis/src/app/qgisapp.h 2011-04-17 13:40:25 UTC (rev 15746)
+++ trunk/qgis/src/app/qgisapp.h 2011-04-17 13:58:59 UTC (rev 15747)
@@ -123,7 +123,8 @@
QStringList const & layers,
QStringList const & styles,
QString const & format,
- QString const & crs );
+ QString const & crs,
+ QgsRectangle extent );
/** open a raster layer for the given file
@returns false if unable to open a raster layer for rasterFile
Modified: trunk/qgis/src/app/qgisappinterface.cpp
===================================================================
--- trunk/qgis/src/app/qgisappinterface.cpp 2011-04-17 13:40:25 UTC (rev 15746)
+++ trunk/qgis/src/app/qgisappinterface.cpp 2011-04-17 13:58:59 UTC (rev 15747)
@@ -111,7 +111,7 @@
QgsRasterLayer* QgisAppInterface::addRasterLayer( const QString& url, const QString& baseName, const QString& providerKey,
const QStringList& layers, const QStringList& styles, const QString& format, const QString& crs )
{
- return qgis->addRasterLayer( url, baseName, providerKey, layers, styles, format, crs );
+ return qgis->addRasterLayer( url, baseName, providerKey, layers, styles, format, crs, QgsRectangle() );
}
Modified: trunk/qgis/src/app/qgswmssourceselect.cpp
===================================================================
--- trunk/qgis/src/app/qgswmssourceselect.cpp 2011-04-17 13:40:25 UTC (rev 15746)
+++ trunk/qgis/src/app/qgswmssourceselect.cpp 2011-04-17 13:58:59 UTC (rev 15747)
@@ -53,6 +53,7 @@
QgsWMSSourceSelect::QgsWMSSourceSelect( QWidget * parent, Qt::WFlags fl )
: QDialog( parent, fl )
+ , mWmsProvider( 0 )
, mCurrentTileset( 0 )
{
setupUi( this );
@@ -163,9 +164,10 @@
QSettings settings;
QgsDebugMsg( "saving geometry" );
settings.setValue( "/Windows/WMSSourceSelect/geometry", saveGeometry() );
+
+ delete mWmsProvider;
}
-
void QgsWMSSourceSelect::populateConnectionList()
{
QSettings settings;
@@ -281,12 +283,12 @@
return item;
}
-bool QgsWMSSourceSelect::populateLayerList( QgsWmsProvider *wmsProvider )
+bool QgsWMSSourceSelect::populateLayerList()
{
mCRSs.clear();
QVector<QgsWmsLayerProperty> layers;
- if ( !wmsProvider->supportedLayers( layers ) )
+ if ( !mWmsProvider->supportedLayers( layers ) )
return false;
foreach( QAbstractButton *b, mImageFormatGroup->buttons() )
@@ -294,7 +296,7 @@
b->setHidden( true );
}
- foreach( QString encoding, wmsProvider->supportedImageEncodings() )
+ foreach( QString encoding, mWmsProvider->supportedImageEncodings() )
{
int id = mMimeMap.value( encoding, -1 );
if ( id < 0 )
@@ -311,7 +313,7 @@
QMap<int, QgsNumericSortTreeWidgetItem *> items;
QMap<int, int> layerParents;
QMap<int, QStringList> layerParentNames;
- wmsProvider->layerParents( layerParents, layerParentNames );
+ mWmsProvider->layerParents( layerParents, layerParentNames );
lstLayers->clear();
lstLayers->setSortingEnabled( true );
@@ -348,10 +350,10 @@
lstLayers->sortByColumn( 0, Qt::AscendingOrder );
QVector<QgsWmsTileSetProfile> tilesets;
- wmsProvider->supportedTileSets( tilesets );
+ mWmsProvider->supportedTileSets( tilesets );
tabServers->setTabEnabled( tabServers->indexOf( tabTilesets ), tilesets.size() > 0 );
- if( tabServers->isTabEnabled( tabServers->indexOf( tabTilesets ) ) )
+ if ( tabServers->isTabEnabled( tabServers->indexOf( tabTilesets ) ) )
tabServers->setCurrentWidget( tabTilesets );
if ( tilesets.size() > 0 )
@@ -472,24 +474,23 @@
// load the server data provider plugin
QgsProviderRegistry * pReg = QgsProviderRegistry::instance();
- QgsWmsProvider *wmsProvider =
- ( QgsWmsProvider* ) pReg->getProvider( "wms", mConnectionInfo );
+ delete mWmsProvider;
- if ( wmsProvider )
+ mWmsProvider = static_cast< QgsWmsProvider * >( pReg->getProvider( "wms", mConnectionInfo ) );
+
+ if ( mWmsProvider )
{
QApplication::setOverrideCursor( Qt::WaitCursor );
- connect( wmsProvider, SIGNAL( statusChanged( QString ) ), this, SLOT( showStatusMessage( QString ) ) );
+ connect( mWmsProvider, SIGNAL( statusChanged( QString ) ), this, SLOT( showStatusMessage( QString ) ) );
// WMS Provider all set up; let's get some layers
- if ( !populateLayerList( wmsProvider ) )
+ if ( !populateLayerList() )
{
- showError( wmsProvider );
+ showError();
}
- delete wmsProvider;
-
QApplication::restoreOverrideCursor();
}
else
@@ -540,9 +541,14 @@
}
}
+ // set the layers to retrieve the correct extent
+ mWmsProvider->addLayers( layers, styles );
+ mWmsProvider->setImageEncoding( format );
+ mWmsProvider->setImageCrs( crs );
+
QgisApp::instance()->addRasterLayer( connInfo,
leLayerName->text().isEmpty() ? layers.join( "/" ) : leLayerName->text(),
- "wms", layers, styles, format, crs );
+ "wms", layers, styles, format, crs, mWmsProvider->extent() );
}
void QgsWMSSourceSelect::enableLayersForCrs( QTreeWidgetItem *item )
@@ -995,18 +1001,18 @@
}
-void QgsWMSSourceSelect::showError( QgsWmsProvider * wms )
+void QgsWMSSourceSelect::showError()
{
QgsMessageViewer * mv = new QgsMessageViewer( this );
- mv->setWindowTitle( wms->lastErrorTitle() );
+ mv->setWindowTitle( mWmsProvider->lastErrorTitle() );
- if ( wms->lastErrorFormat() == "text/html" )
+ if ( mWmsProvider->lastErrorFormat() == "text/html" )
{
- mv->setMessageAsHtml( wms->lastError() );
+ mv->setMessageAsHtml( mWmsProvider->lastError() );
}
else
{
- mv->setMessageAsPlainText( tr( "Could not understand the response. The %1 provider said:\n%2" ).arg( wms->name() ).arg( wms->lastError() ) );
+ mv->setMessageAsPlainText( tr( "Could not understand the response. The %1 provider said:\n%2" ).arg( mWmsProvider->name() ).arg( mWmsProvider->lastError() ) );
}
mv->showMessage( true ); // Is deleted when closed
}
Modified: trunk/qgis/src/app/qgswmssourceselect.h
===================================================================
--- trunk/qgis/src/app/qgswmssourceselect.h 2011-04-17 13:40:25 UTC (rev 15746)
+++ trunk/qgis/src/app/qgswmssourceselect.h 2011-04-17 13:58:59 UTC (rev 15747)
@@ -21,6 +21,7 @@
#include "ui_qgswmssourceselectbase.h"
#include "qgisgui.h"
#include "qgscontexthelp.h"
+#include "qgsrectangle.h"
#include <QStringList>
#include <QPushButton>
@@ -84,7 +85,7 @@
void showStatusMessage( QString const &theMessage );
//! show whatever error is exposed by the QgsWmsProvider.
- void showError( QgsWmsProvider *wms );
+ void showError();
//! Stores the selected datasource whenerver it is changed
void on_cmbConnections_activated( int );
@@ -143,7 +144,7 @@
* \retval false if the layers could not be retrieved or parsed -
* see mWmsProvider->errorString() for more info
*/
- bool populateLayerList( QgsWmsProvider *wmsProvider );
+ bool populateLayerList();
//! create an item including possible parents
QgsNumericSortTreeWidgetItem *createItem( int id,
@@ -186,6 +187,7 @@
QString selectedImageEncoding();
QList<QTreeWidgetItem*> mCurrentSelection;
+ QgsWmsProvider *mWmsProvider;
QTableWidgetItem* mCurrentTileset;
private slots:
Modified: trunk/qgis/src/core/qgsdataprovider.h
===================================================================
--- trunk/qgis/src/core/qgsdataprovider.h 2011-04-17 13:40:25 UTC (rev 15746)
+++ trunk/qgis/src/core/qgsdataprovider.h 2011-04-17 13:58:59 UTC (rev 15747)
@@ -22,7 +22,8 @@
#include <QString>
#include <QStringList>
-class QgsRectangle;
+#include <qgsrectangle.h>
+
class QgsCoordinateReferenceSystem;
@@ -90,6 +91,15 @@
*/
virtual QgsRectangle extent() = 0;
+ /**
+ * Set the extent of the layer
+ * @param extent the layer extent
+ * @note added in 1.8
+ */
+ virtual void setExtent( QgsRectangle extent )
+ {
+ // NOP by default
+ }
/**
* Returns true if this is a valid layer. It is up to individual providers
Modified: trunk/qgis/src/core/raster/qgsrasterlayer.cpp
===================================================================
--- trunk/qgis/src/core/raster/qgsrasterlayer.cpp 2011-04-17 13:40:25 UTC (rev 15746)
+++ trunk/qgis/src/core/raster/qgsrasterlayer.cpp 2011-04-17 13:58:59 UTC (rev 15747)
@@ -99,7 +99,7 @@
// TODO, call constructor with provider key for now
init();
- setDataProvider( "gdal", QStringList(), QStringList(), QString(), QString(), loadDefaultStyleFlag );
+ setDataProvider( "gdal", QStringList(), QStringList(), QString(), QString(), loadDefaultStyleFlag, QgsRectangle() );
return;
@@ -116,7 +116,8 @@
QStringList const & layers,
QStringList const & styles,
QString const & format,
- QString const & crs )
+ QString const & crs,
+ QgsRectangle extent )
: QgsMapLayer( RasterLayer, baseName, rasterLayerPath )
, mStandardDeviations( 0 )
, mDataProvider( 0 )
@@ -135,7 +136,7 @@
init();
// if we're given a provider type, try to create and bind one to this layer
bool loadDefaultStyleFlag = false ; // ???
- setDataProvider( providerKey, layers, styles, format, crs, loadDefaultStyleFlag );
+ setDataProvider( providerKey, layers, styles, format, crs, loadDefaultStyleFlag, extent );
// Default for the popup menu
// TODO: popMenu = 0;
@@ -2246,7 +2247,7 @@
QString const & format,
QString const & crs )
{
- setDataProvider( provider, layers, styles, format, crs, false );
+ setDataProvider( provider, layers, styles, format, crs, false, QgsRectangle() );
}
/** Copied from QgsVectorLayer::setDataProvider
@@ -2257,7 +2258,8 @@
QStringList const & styles,
QString const & format,
QString const & crs,
- bool loadDefaultStyleFlag )
+ bool loadDefaultStyleFlag,
+ QgsRectangle extent )
{
// XXX should I check for and possibly delete any pre-existing providers?
// XXX How often will that scenario occur?
@@ -2281,7 +2283,6 @@
return;
}
-
QgsDebugMsg( "Instantiated the data provider plugin"
+ QString( " with layer list of " ) + layers.join( ", " )
+ " and style list of " + styles.join( ", " )
@@ -2298,8 +2299,18 @@
setNoDataValue( mDataProvider->noDataValue() );
- // get the extent
- QgsRectangle mbr = mDataProvider->extent();
+ QgsRectangle mbr;
+ if ( mDataProvider && !extent.isEmpty() )
+ {
+ // set the extent
+ mDataProvider->setExtent( extent );
+ mbr = extent;
+ }
+ else
+ {
+ // get the extent
+ mbr = mDataProvider->extent();
+ }
// show the extent
QString s = mbr.toString();
@@ -4423,6 +4434,7 @@
bool QgsRasterLayer::update()
{
QgsDebugMsg( "entered." );
+
// Check if data changed
//if ( mLastModified < QgsRasterLayer::lastModified( source() ) )
//{
Modified: trunk/qgis/src/core/raster/qgsrasterlayer.h
===================================================================
--- trunk/qgis/src/core/raster/qgsrasterlayer.h 2011-04-17 13:40:25 UTC (rev 15746)
+++ trunk/qgis/src/core/raster/qgsrasterlayer.h 2011-04-17 13:58:59 UTC (rev 15747)
@@ -207,7 +207,8 @@
const QStringList & layers = QStringList(),
const QStringList & styles = QStringList(),
const QString & format = QString(),
- const QString & crs = QString() );
+ const QString & crs = QString(),
+ const QgsRectangle extent = QgsRectangle() );
/** \brief The destructor */
@@ -312,7 +313,8 @@
const QStringList & styles,
const QString & format,
const QString & crs,
- bool loadDefaultStyleFlag );
+ bool loadDefaultStyleFlag,
+ QgsRectangle extent );
static QLibrary* loadProviderLibrary( QString theProviderKey );
static QgsRasterDataProvider* loadProvider( QString theProviderKey, QString theDataSource = 0 );
Modified: trunk/qgis/src/providers/wms/qgswmsprovider.cpp
===================================================================
--- trunk/qgis/src/providers/wms/qgswmsprovider.cpp 2011-04-17 13:40:25 UTC (rev 15746)
+++ trunk/qgis/src/providers/wms/qgswmsprovider.cpp 2011-04-17 13:58:59 UTC (rev 15747)
@@ -899,7 +899,7 @@
QNetworkRequest request( url );
setAuthorization( request );
- request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferNetwork );
+ request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, forceRefresh ? QNetworkRequest::PreferNetwork : QNetworkRequest::PreferCache );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );
QgsDebugMsg( QString( "getcapabilities: %1" ).arg( url ) );
@@ -978,6 +978,9 @@
return;
}
+ QgsDebugMsg( QString( "getcapabilities from cache: %1" )
+ .arg( mCapabilitiesReply->attribute( QNetworkRequest::SourceIsFromCacheAttribute ).toBool() ? "yes" : "no" ) );
+
httpcapabilitiesresponse = mCapabilitiesReply->readAll();
if ( httpcapabilitiesresponse.isEmpty() )
@@ -2028,8 +2031,12 @@
QgsDebugMsg( "exiting." );
}
+void QgsWmsProvider::setExtent( QgsRectangle extent )
+{
+ layerExtent = extent;
+ extentDirty = false;
+}
-
QgsRectangle QgsWmsProvider::extent()
{
if ( extentDirty )
@@ -2170,7 +2177,6 @@
QgsDebugMsg( "exiting with '" + layerExtent.toString() + "'." );
return true;
-
}
Modified: trunk/qgis/src/providers/wms/qgswmsprovider.h
===================================================================
--- trunk/qgis/src/providers/wms/qgswmsprovider.h 2011-04-17 13:40:25 UTC (rev 15746)
+++ trunk/qgis/src/providers/wms/qgswmsprovider.h 2011-04-17 13:58:59 UTC (rev 15747)
@@ -464,6 +464,11 @@
//void readBlock( int bandNo, QgsRectangle const & viewExtent, int width, int height, QgsCoordinateReferenceSystem theSrcCRS, QgsCoordinateReferenceSystem theDestCRS, void *data );
+ /**
+ * preset the extent to prevent and extra GetCapabilities request
+ */
+ virtual void setExtent( QgsRectangle extent );
+
/** Return the extent for this data layer
*/
virtual QgsRectangle extent();
More information about the QGIS-commit
mailing list