Skip to content

Commit

Permalink
fix #7: GetCapabilities no done twice anymore
Browse files Browse the repository at this point in the history
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@15747 c8812cc2-4d05-0410-92ff-de0c093fc19c
  • Loading branch information
jef committed Apr 17, 2011
1 parent 9ef8b3d commit 5d63f12
Show file tree
Hide file tree
Showing 11 changed files with 92 additions and 41 deletions.
6 changes: 6 additions & 0 deletions python/core/qgsdataprovider.sip
Expand Up @@ -60,6 +60,12 @@ class QgsDataProvider : QObject
*/
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
Expand Down
5 changes: 3 additions & 2 deletions src/app/qgisapp.cpp
Expand Up @@ -6278,7 +6278,8 @@ QgsRasterLayer* QgisApp::addRasterLayer(
QStringList const & layers,
QStringList const & styles,
QString const &format,
QString const &crs )
QString const &crs,
QgsRectangle extent )
{
QgsDebugMsg( "about to get library for " + providerKey );

Expand Down Expand Up @@ -6307,7 +6308,7 @@ QgsRasterLayer* QgisApp::addRasterLayer(
+ " 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." );

Expand Down
3 changes: 2 additions & 1 deletion src/app/qgisapp.h
Expand Up @@ -123,7 +123,8 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
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
Expand Down
2 changes: 1 addition & 1 deletion src/app/qgisappinterface.cpp
Expand Up @@ -111,7 +111,7 @@ QgsRasterLayer* QgisAppInterface::addRasterLayer( QString rasterLayerPath, QStri
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() );
}


Expand Down
48 changes: 27 additions & 21 deletions src/app/qgswmssourceselect.cpp
Expand Up @@ -53,6 +53,7 @@

QgsWMSSourceSelect::QgsWMSSourceSelect( QWidget * parent, Qt::WFlags fl )
: QDialog( parent, fl )
, mWmsProvider( 0 )
, mCurrentTileset( 0 )
{
setupUi( this );
Expand Down Expand Up @@ -163,8 +164,9 @@ QgsWMSSourceSelect::~QgsWMSSourceSelect()
QSettings settings;
QgsDebugMsg( "saving geometry" );
settings.setValue( "/Windows/WMSSourceSelect/geometry", saveGeometry() );
}

delete mWmsProvider;
}

void QgsWMSSourceSelect::populateConnectionList()
{
Expand Down Expand Up @@ -281,20 +283,20 @@ QgsNumericSortTreeWidgetItem *QgsWMSSourceSelect::createItem(
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() )
{
b->setHidden( true );
}

foreach( QString encoding, wmsProvider->supportedImageEncodings() )
foreach( QString encoding, mWmsProvider->supportedImageEncodings() )
{
int id = mMimeMap.value( encoding, -1 );
if ( id < 0 )
Expand All @@ -311,7 +313,7 @@ bool QgsWMSSourceSelect::populateLayerList( QgsWmsProvider *wmsProvider )
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 );
Expand Down Expand Up @@ -348,10 +350,10 @@ bool QgsWMSSourceSelect::populateLayerList( QgsWmsProvider *wmsProvider )
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 )
Expand Down Expand Up @@ -472,24 +474,23 @@ void QgsWMSSourceSelect::on_btnConnect_clicked()
// load the server data provider plugin
QgsProviderRegistry * pReg = QgsProviderRegistry::instance();

QgsWmsProvider *wmsProvider =
( QgsWmsProvider* ) pReg->getProvider( "wms", mConnectionInfo );
delete mWmsProvider;

mWmsProvider = static_cast< QgsWmsProvider * >( pReg->getProvider( "wms", mConnectionInfo ) );

if ( wmsProvider )
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
Expand Down Expand Up @@ -540,9 +541,14 @@ void QgsWMSSourceSelect::addClicked()
}
}

// 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 )
Expand Down Expand Up @@ -995,18 +1001,18 @@ void QgsWMSSourceSelect::showStatusMessage( QString const &theMessage )
}


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
}
Expand Down
6 changes: 4 additions & 2 deletions src/app/qgswmssourceselect.h
Expand Up @@ -21,6 +21,7 @@
#include "ui_qgswmssourceselectbase.h"
#include "qgisgui.h"
#include "qgscontexthelp.h"
#include "qgsrectangle.h"

#include <QStringList>
#include <QPushButton>
Expand Down Expand Up @@ -84,7 +85,7 @@ class QgsWMSSourceSelect : public QDialog, private Ui::QgsWMSSourceSelectBase
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 );
Expand Down Expand Up @@ -143,7 +144,7 @@ class QgsWMSSourceSelect : public QDialog, private Ui::QgsWMSSourceSelectBase
* \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,
Expand Down Expand Up @@ -186,6 +187,7 @@ class QgsWMSSourceSelect : public QDialog, private Ui::QgsWMSSourceSelectBase
QString selectedImageEncoding();

QList<QTreeWidgetItem*> mCurrentSelection;
QgsWmsProvider *mWmsProvider;
QTableWidgetItem* mCurrentTileset;

private slots:
Expand Down
12 changes: 11 additions & 1 deletion src/core/qgsdataprovider.h
Expand Up @@ -22,7 +22,8 @@
#include <QString>
#include <QStringList>

class QgsRectangle;
#include <qgsrectangle.h>

class QgsCoordinateReferenceSystem;


Expand Down Expand Up @@ -90,6 +91,15 @@ class CORE_EXPORT QgsDataProvider : public QObject
*/
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
Expand Down
28 changes: 20 additions & 8 deletions src/core/raster/qgsrasterlayer.cpp
Expand Up @@ -99,7 +99,7 @@ QgsRasterLayer::QgsRasterLayer(

// 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;


Expand All @@ -116,7 +116,8 @@ QgsRasterLayer::QgsRasterLayer( int dummy,
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 )
Expand All @@ -135,7 +136,7 @@ QgsRasterLayer::QgsRasterLayer( int dummy,
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;
Expand Down Expand Up @@ -2246,7 +2247,7 @@ void QgsRasterLayer::setDataProvider( QString const & provider,
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
Expand All @@ -2257,7 +2258,8 @@ void QgsRasterLayer::setDataProvider( QString const & provider,
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?
Expand All @@ -2281,7 +2283,6 @@ void QgsRasterLayer::setDataProvider( QString const & provider,
return;
}


QgsDebugMsg( "Instantiated the data provider plugin"
+ QString( " with layer list of " ) + layers.join( ", " )
+ " and style list of " + styles.join( ", " )
Expand All @@ -2298,8 +2299,18 @@ void QgsRasterLayer::setDataProvider( QString const & provider,

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();
Expand Down Expand Up @@ -4423,6 +4434,7 @@ double QgsRasterLayer::readValue( void *data, int type, int index )
bool QgsRasterLayer::update()
{
QgsDebugMsg( "entered." );

// Check if data changed
//if ( mLastModified < QgsRasterLayer::lastModified( source() ) )
//{
Expand Down
6 changes: 4 additions & 2 deletions src/core/raster/qgsrasterlayer.h
Expand Up @@ -207,7 +207,8 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
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 */
Expand Down Expand Up @@ -312,7 +313,8 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
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 );
Expand Down
12 changes: 9 additions & 3 deletions src/providers/wms/qgswmsprovider.cpp
Expand Up @@ -899,7 +899,7 @@ bool QgsWmsProvider::retrieveServerCapabilities( bool forceRefresh )

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 ) );
Expand Down Expand Up @@ -978,6 +978,9 @@ void QgsWmsProvider::capabilitiesReplyFinished()
return;
}

QgsDebugMsg( QString( "getcapabilities from cache: %1" )
.arg( mCapabilitiesReply->attribute( QNetworkRequest::SourceIsFromCacheAttribute ).toBool() ? "yes" : "no" ) );

httpcapabilitiesresponse = mCapabilitiesReply->readAll();

if ( httpcapabilitiesresponse.isEmpty() )
Expand Down Expand Up @@ -2028,7 +2031,11 @@ void QgsWmsProvider::parseServiceException( QDomElement const & e )
QgsDebugMsg( "exiting." );
}


void QgsWmsProvider::setExtent( QgsRectangle extent )
{
layerExtent = extent;
extentDirty = false;
}

QgsRectangle QgsWmsProvider::extent()
{
Expand Down Expand Up @@ -2170,7 +2177,6 @@ bool QgsWmsProvider::calculateExtent()
QgsDebugMsg( "exiting with '" + layerExtent.toString() + "'." );

return true;

}


Expand Down

0 comments on commit 5d63f12

Please sign in to comment.