@@ -127,6 +127,10 @@ QgsRasterLayer::QgsRasterLayer( int dummy,
127127 , mInvertColor( false )
128128 , mModified( false )
129129 , mProviderKey( providerKey )
130+ , mLayers( layers )
131+ , mStyles( styles )
132+ , mFormat( format )
133+ , mCrs( crs )
130134{
131135 QgsDebugMsg ( " (8 arguments) starting. with layer list of " +
132136 layers.join ( " , " ) + " and style list of " + styles.join ( " , " ) + " and format of " +
@@ -2531,6 +2535,21 @@ void QgsRasterLayer::setDataProvider( QString const & provider,
25312535 QgsDebugMsg ( " exiting." );
25322536} // QgsRasterLayer::setDataProvider
25332537
2538+ void QgsRasterLayer::closeDataProvider ()
2539+ {
2540+ mValid = false ;
2541+ delete mRasterShader ;
2542+ mRasterShader = 0 ;
2543+ delete mDataProvider ;
2544+ mDataProvider = 0 ;
2545+
2546+ mRasterStatsList .clear ();
2547+ mContrastEnhancementList .clear ();
2548+
2549+ mHasPyramids = false ;
2550+ mPyramidList .clear ();
2551+ }
2552+
25342553void QgsRasterLayer::setColorShadingAlgorithm ( ColorShadingAlgorithm theShadingAlgorithm )
25352554{
25362555 QgsDebugMsg ( " called with [" + QString::number ( theShadingAlgorithm ) + " ]" );
@@ -4436,38 +4455,13 @@ bool QgsRasterLayer::update()
44364455 QgsDebugMsg ( " entered." );
44374456
44384457 // Check if data changed
4439- // if ( mLastModified < QgsRasterLayer::lastModified( source() ) )
4440- // {
4441- // TODO: lastModified to provider -> outdated
4442- // TODO: check what has to be cleard, rebuild
4443- int change = mDataProvider ->changed ();
4444- if ( change != QgsRasterDataProvider::NoChange )
4458+ if ( mDataProvider ->dataTimestamp () > mDataProvider ->timestamp () )
44454459 {
44464460 QgsDebugMsg ( " reload data" );
4447- // mHasPyramids = false;
4448- // mPyramidList.clear();
4449-
4450- // mRasterStatsList.clear();
4451- mValid = mDataProvider ->reload ();
4452-
4453- for ( int i = 1 ; i <= mBandCount ; i++ )
4454- {
4455- // TODO : refresh all data, move to separate method from constructor
4456- // Reload color table
4457- if ( i - 1 < mRasterStatsList .size () )
4458- {
4459- QList<QgsColorRampShader::ColorRampItem> ct;
4460- ct = mDataProvider ->colorTable ( i );
4461-
4462- mRasterStatsList [i-1 ].colorTable = ct;
4463- if ( mRasterType == Palette )
4464- {
4465- QgsColorRampShader* myColorRampShader = ( QgsColorRampShader* ) mRasterShader ->rasterShaderFunction ();
4466- myColorRampShader->setColorRampItemList ( *colorTable ( 1 ) );
4467- }
4468- }
4469- }
4470- emit dataChanged ( change );
4461+ closeDataProvider ();
4462+ init ();
4463+ setDataProvider ( mProviderKey , mLayers , mStyles , mFormat , mCrs );
4464+ emit dataChanged ();
44714465 }
44724466 return mValid ;
44734467}
0 commit comments