Index: src/core/raster/qgsrasterlayer.cpp =================================================================== --- src/core/raster/qgsrasterlayer.cpp (revision 15451) +++ src/core/raster/qgsrasterlayer.cpp (working copy) @@ -2732,7 +2732,6 @@ void QgsRasterLayer::setMinimumMaximumUsingDataset() { - double myMinMax[2]; if ( rasterType() == QgsRasterLayer::GrayOrUndefined || drawingStyle() == QgsRasterLayer::SingleBandGray || drawingStyle() == QgsRasterLayer::MultiBandSingleBandGray ) { QgsRasterBandStats myRasterBandStats = bandStatistics( bandNumber( mGrayBandName ) ); @@ -3182,27 +3181,33 @@ if ( pkeyNode.isNull() ) { - mProviderKey = ""; + mProviderKey = "gdal"; } else { QDomElement pkeyElt = pkeyNode.toElement(); mProviderKey = pkeyElt.text(); + if ( mProviderKey.isEmpty() ) + { + mProviderKey = "gdal"; + } } // Open the raster source based on provider and datasource - if ( !mProviderKey.isEmpty() ) - { - // Go down the raster-data-provider paradigm + // Go down the raster-data-provider paradigm - // Collect provider-specific information + // Collect provider-specific information - QDomNode rpNode = layer_node.namedItem( "rasterproperties" ); + QDomNode rpNode = layer_node.namedItem( "rasterproperties" ); - // Collect sublayer names and styles - QStringList layers; - QStringList styles; + // Collect sublayer names and styles + QStringList layers; + QStringList styles; + QString format; + + if ( mProviderKey == "wms" ) + { QDomElement layerElement = rpNode.firstChildElement( "wmsSublayer" ); while ( !layerElement.isNull() ) { @@ -3218,28 +3223,28 @@ } // Collect format - QString format = rpNode.namedItem( "wmsFormat" ).toElement().text(); - - // Collect CRS - setDataProvider( mProviderKey, layers, styles, format, crs().authid() ); + format = rpNode.namedItem( "wmsFormat" ).toElement().text(); } - else - { - // Go down the monolithic-gdal-provider paradigm - if ( !readFile( source() ) ) // Data source name set in - // QgsMapLayer::readXML() - { - QgsLogger::warning( QString( __FILE__ ) + ":" + QString( __LINE__ ) + - " unable to read from raster file " + source() ); - return false; - } + // Collect CRS + setDataProvider( mProviderKey, layers, styles, format, crs().authid() ); + QString theError; + bool res = readSymbology( layer_node, theError ); + + // old wms settings we need to correct + if ( res && + mProviderKey == "wms" && + mDrawingStyle == MultiBandColor && + mRedBandName == TRSTRING_NOT_SET && + mGreenBandName == TRSTRING_NOT_SET && + mBlueBandName == TRSTRING_NOT_SET ) + { + mDrawingStyle = SingleBandColorDataStyle; + mGrayBandName = bandName( 1 ); } - QString theError; - return readSymbology( layer_node, theError ); - + return res; } // QgsRasterLayer::readXml( QDomNode & layer_node ) /* @@ -3254,13 +3259,13 @@ QDomElement rasterPropertiesElement = document.createElement( "rasterproperties" ); layer_node.appendChild( rasterPropertiesElement ); - if ( !mProviderKey.isEmpty() ) - { - QStringList sl = subLayers(); - QStringList sls = mDataProvider->subLayerStyles(); + QStringList sl = subLayers(); + QStringList sls = mDataProvider->subLayerStyles(); - QStringList::const_iterator layerStyle = sls.begin(); + QStringList::const_iterator layerStyle = sls.begin(); + if ( mProviderKey == "wms" ) + { // for ( QStringList::const_iterator layerName = sl.begin(); layerName != sl.end(); @@ -3297,7 +3302,6 @@ document.createTextNode( mDataProvider->imageEncoding() ); formatElement.appendChild( formatText ); rasterPropertiesElement.appendChild( formatElement ); - } // Index: src/core/qgsproject.cpp =================================================================== --- src/core/qgsproject.cpp (revision 15451) +++ src/core/qgsproject.cpp (working copy) @@ -715,7 +715,7 @@ } // have the layer restore state that is stored in Dom node - if ( mapLayer->readXML( node ) ) + if ( mapLayer->readXML( node ) && mapLayer->isValid() ) { mapLayer = QgsMapLayerRegistry::instance()->addMapLayer( mapLayer ); QgsVectorLayer* vLayer = qobject_cast( mapLayer ); @@ -746,7 +746,7 @@ vIt->first->createJoinCaches(); vIt->first->updateFieldMap(); //for old symbology, it is necessary to read the symbology again after having the complete field map - if( !vIt->first->isUsingRendererV2() ) + if ( !vIt->first->isUsingRendererV2() ) { vIt->first->readSymbology( vIt->second, errorMessage ); } Index: src/providers/gdal/qgsgdalprovider.cpp =================================================================== --- src/providers/gdal/qgsgdalprovider.cpp (revision 15451) +++ src/providers/gdal/qgsgdalprovider.cpp (working copy) @@ -131,8 +131,7 @@ CPLErrorReset(); if ( mGdalBaseDataset == NULL ) { - QMessageBox::warning( 0, QObject::tr( "Warning" ), - QObject::tr( "Cannot open GDAL dataset %1: %2" ).arg( uri ).arg( QString::fromUtf8( CPLGetLastErrorMsg() ) ) ); + QgsDebugMsg( QString( "Cannot open GDAL dataset %1: %2" ).arg( uri ).arg( QString::fromUtf8( CPLGetLastErrorMsg() ) ) ); return; } @@ -301,44 +300,44 @@ //ifdefs below to remove compiler warning about unused vars #ifdef QGISDEBUG #if 0 - int success; - double GDALminimum = GDALGetRasterMinimum( myGdalBand, &success ); + int success; + double GDALminimum = GDALGetRasterMinimum( myGdalBand, &success ); - if ( ! success ) - { - QgsDebugMsg( "myGdalBand->GetMinimum() failed" ); - } + if ( ! success ) + { + QgsDebugMsg( "myGdalBand->GetMinimum() failed" ); + } - double GDALmaximum = GDALGetRasterMaximum( myGdalBand, &success ); + double GDALmaximum = GDALGetRasterMaximum( myGdalBand, &success ); - if ( ! success ) - { - QgsDebugMsg( "myGdalBand->GetMaximum() failed" ); - } + if ( ! success ) + { + QgsDebugMsg( "myGdalBand->GetMaximum() failed" ); + } - double GDALnodata = GDALGetRasterNoDataValue( myGdalBand, &success ); + double GDALnodata = GDALGetRasterNoDataValue( myGdalBand, &success ); - if ( ! success ) - { - QgsDebugMsg( "myGdalBand->GetNoDataValue() failed" ); - } + if ( ! success ) + { + QgsDebugMsg( "myGdalBand->GetNoDataValue() failed" ); + } - QgsLogger::debug( "GDALminium: ", GDALminimum, __FILE__, __FUNCTION__, __LINE__ ); - QgsLogger::debug( "GDALmaximum: ", GDALmaximum, __FILE__, __FUNCTION__, __LINE__ ); - QgsLogger::debug( "GDALnodata: ", GDALnodata, __FILE__, __FUNCTION__, __LINE__ ); + QgsLogger::debug( "GDALminium: ", GDALminimum, __FILE__, __FUNCTION__, __LINE__ ); + QgsLogger::debug( "GDALmaximum: ", GDALmaximum, __FILE__, __FUNCTION__, __LINE__ ); + QgsLogger::debug( "GDALnodata: ", GDALnodata, __FILE__, __FUNCTION__, __LINE__ ); - double GDALrange[2]; // calculated min/max, as opposed to the - // dataset provided + double GDALrange[2]; // calculated min/max, as opposed to the + // dataset provided - GDALComputeRasterMinMax( myGdalBand, 1, GDALrange ); - QgsLogger::debug( "approximate computed GDALminium:", GDALrange[0], __FILE__, __FUNCTION__, __LINE__, 1 ); - QgsLogger::debug( "approximate computed GDALmaximum:", GDALrange[1], __FILE__, __FUNCTION__, __LINE__, 1 ); + GDALComputeRasterMinMax( myGdalBand, 1, GDALrange ); + QgsLogger::debug( "approximate computed GDALminium:", GDALrange[0], __FILE__, __FUNCTION__, __LINE__, 1 ); + QgsLogger::debug( "approximate computed GDALmaximum:", GDALrange[1], __FILE__, __FUNCTION__, __LINE__, 1 ); - GDALComputeRasterMinMax( myGdalBand, 0, GDALrange ); - QgsLogger::debug( "exactly computed GDALminium:", GDALrange[0] ); - QgsLogger::debug( "exactly computed GDALmaximum:", GDALrange[1] ); + GDALComputeRasterMinMax( myGdalBand, 0, GDALrange ); + QgsLogger::debug( "exactly computed GDALminium:", GDALrange[0] ); + QgsLogger::debug( "exactly computed GDALmaximum:", GDALrange[1] ); - QgsDebugMsg( "starting manual stat computation" ); + QgsDebugMsg( "starting manual stat computation" ); #endif #endif @@ -1184,7 +1183,10 @@ int QgsGdalProvider::bandCount() const { - return GDALGetRasterCount( mGdalDataset ); + if ( mGdalDataset ) + return GDALGetRasterCount( mGdalDataset ); + else + return 1; } int QgsGdalProvider::colorInterpretation( int theBandNo ) const