Skip to content

Commit df6d87c

Browse files
author
rblazek
committedApr 17, 2011
completely reload provider if GRASS source data have changed
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@15749 c8812cc2-4d05-0410-92ff-de0c093fc19c

File tree

8 files changed

+69
-89
lines changed

8 files changed

+69
-89
lines changed
 

‎src/app/qgsrasterlayerproperties.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,6 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer* lyr, QgsMapCanv
9494
// enable or disable Build Pyramids button depending on selection in pyramid list
9595
connect( lbxPyramidResolutions, SIGNAL( itemSelectionChanged() ), this, SLOT( toggleBuildPyramidsButton() ) );
9696

97-
connect( mRasterLayer, SIGNAL( dataChanged( int ) ), this, SLOT( dataChanged( int ) ) );
98-
9997
// set up the scale based layer visibility stuff....
10098
chkUseScaleDependentRendering->setChecked( lyr->hasScaleBasedVisibility() );
10199
leMinimumScale->setText( QString::number( lyr->minimumScale(), 'f' ) );
@@ -3040,11 +3038,6 @@ void QgsRasterLayerProperties::on_btnResetNull_clicked( )
30403038
}
30413039
}
30423040

3043-
void QgsRasterLayerProperties::dataChanged( int change )
3044-
{
3045-
QgsDebugMsg( "entered." );
3046-
}
3047-
30483041
void QgsRasterLayerProperties::toggleBuildPyramidsButton()
30493042
{
30503043
if ( lbxPyramidResolutions->selectedItems().empty() )

‎src/app/qgsrasterlayerproperties.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,6 @@ class QgsRasterLayerProperties : public QDialog, private Ui::QgsRasterLayerPrope
9999
/** \brief this slot sets StdDev switch box to 0.00 when user enters min max values */
100100
void userDefinedMinMax_textEdited( QString );
101101

102-
/** \brief data changed reciever */
103-
void dataChanged( int change );
104-
105102
private slots:
106103
/** This slow handles necessary interface modifications (i.e. loading min max values) */
107104
void on_cboBlue_currentIndexChanged( const QString& );

‎src/core/qgsdataprovider.h

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -287,9 +287,6 @@ class CORE_EXPORT QgsDataProvider : public QObject
287287
/** Current time stamp of data source */
288288
virtual QDateTime dataTimestamp() const { return QDateTime(); }
289289

290-
/** test if at least one of specified data/metadata changed since provider was loaded */
291-
virtual bool changed( int change ) { return false; }
292-
293290
signals:
294291

295292
/**
@@ -313,18 +310,18 @@ class CORE_EXPORT QgsDataProvider : public QObject
313310
*/
314311
void dataChanged( int change );
315312

313+
protected:
314+
/**
315+
* Timestamp of data in the moment when the data were loaded by provider.
316+
*/
317+
QDateTime mTimestamp;
316318
private:
317319

318320
/**
319321
* Universal Resource Identifier for source data.
320322
* This could be a file, database, or server address.
321323
*/
322324
QString mDataSourceURI;
323-
324-
/**
325-
* Timestamp of data in the moment when the data were loaded by provider.
326-
*/
327-
QDateTime mTimestamp;
328325
};
329326

330327

‎src/core/qgsrasterdataprovider.h

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -116,17 +116,6 @@ class CORE_EXPORT QgsRasterDataProvider : public QgsDataProvider
116116
ProgressPyramids = 1
117117
};
118118

119-
enum Change
120-
{
121-
NoChange = 0,
122-
ValuesChange = 1,
123-
ExtentChange = 1 << 1,
124-
CrsChange = 1 << 2,
125-
DataTypeChange = 1 << 3,
126-
ColorTableChange = 1 << 4,
127-
SizeChange = 1 << 5
128-
};
129-
130119
QgsRasterDataProvider();
131120

132121
QgsRasterDataProvider( QString const & uri );
@@ -480,24 +469,17 @@ class CORE_EXPORT QgsRasterDataProvider : public QgsDataProvider
480469
/** \brief Set null value in char */
481470
QByteArray noValueBytes( int theBandNo );
482471

472+
/** Time stamp of data source in the moment when data/metadata were loaded by provider */
473+
virtual QDateTime timestamp() const { return mTimestamp; }
474+
483475
/** Current time stamp of data source */
484476
virtual QDateTime dataTimestamp() const { return QDateTime(); }
485477

486-
/** Give list of changed data/metadata since provider was loaded */
487-
virtual int changed( ) { return NoChange; }
488-
489478
signals:
490479
/** Emit a signal to notify of the progress event.
491480
* Emited theProgress is in percents (0.0-100.0) */
492481
void progress( int theType, double theProgress, QString theMessage );
493482

494-
/**
495-
* This is emitted whenever data or metadata (e.g. color table, extent) has changed
496-
* @param changed binary combination of changes
497-
* @note added in 1.7
498-
*/
499-
void dataChanged( int change );
500-
501483
protected:
502484
/**Dots per intch. Extended WMS (e.g. QGIS mapserver) support DPI dependent output and therefore
503485
are suited for printing. A value of -1 means it has not been set

‎src/core/raster/qgsrasterlayer.cpp

Lines changed: 24 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
25342553
void 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
}

‎src/core/raster/qgsrasterlayer.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -685,10 +685,9 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
685685

686686
/**
687687
* This is emitted whenever data or metadata (e.g. color table, extent) has changed
688-
* @param changed binary combination of changes, defined in QgsRasterDataProvider
689688
* @note added in 1.7
690689
*/
691-
void dataChanged( int change );
690+
void dataChanged();
692691

693692
protected:
694693

@@ -767,8 +766,8 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
767766
const QgsMapToPixel* theQgsMapToPixel,
768767
int theBandNoInt );
769768

770-
/** \brief Close data set and release related data */
771-
void closeDataset();
769+
/** \brief Close data provider and clear related members */
770+
void closeDataProvider();
772771

773772
/** \brief helper function to create zero padded band names */
774773
QString generateBandName( int );
@@ -913,6 +912,13 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
913912

914913
/** \brief Flag indicating if the nodatavalue is valid*/
915914
bool mValidNoDataValue;
915+
916+
/** WMS parameters */
917+
/* TODO: put everything to URI */
918+
QStringList mLayers;
919+
QStringList mStyles;
920+
QString mFormat;
921+
QString mCrs;
916922
};
917923

918924
/*#include <QColor>

‎src/providers/grass/qgsgrassrasterprovider.cpp

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ QgsGrassRasterProvider::QgsGrassRasterProvider( QString const & uri )
7474
QgsDebugMsg( QString( "mapset: %1" ).arg( mMapset ) );
7575
QgsDebugMsg( QString( "mapName: %1" ).arg( mMapName ) );
7676

77+
mTimestamp = dataTimestamp();
78+
7779
mRasterValue.start( mGisdbase, mLocation, mMapset, mMapName );
7880
mValidNoDataValue = true;
7981

@@ -485,21 +487,24 @@ QString QgsGrassRasterProvider::description() const
485487
return PROVIDER_DESCRIPTION;
486488
}
487489

488-
int QgsGrassRasterProvider::changed()
490+
QDateTime QgsGrassRasterProvider::dataTimestamp() const
489491
{
490-
QgsDebugMsg( "Entered" );
491-
// TODO
492-
return ValuesChange | ExtentChange | CrsChange | DataTypeChange | ColorTableChange | SizeChange;
493-
}
494-
495-
bool QgsGrassRasterProvider::reload()
496-
{
497-
QgsDebugMsg( "Entered" );
498-
return true;
492+
QDateTime time;
493+
QString mapset = mGisdbase + "/" + mLocation + "/" + mMapset;
494+
QStringList dirs;
495+
dirs << "cell" << "colr";
496+
foreach( QString dir, dirs )
497+
{
498+
QString path = mapset + "/" + dir + "/" + mMapName;
499+
QFileInfo fi( path );
500+
if ( fi.exists() && fi.lastModified() > time )
501+
{
502+
time = fi.lastModified();
503+
}
504+
}
505+
QgsDebugMsg( "timestamp = " + time.toString() );
506+
return time;
499507
}
500-
//void QgsGrassRasterProvider::buildSupportedRasterFileFilter( QString & theFileFiltersString )
501-
//{
502-
//}
503508

504509
/**
505510
* Class factory to return a pointer to a newly created
@@ -552,7 +557,14 @@ void QgsGrassRasterValue::start( QString gisdbase, QString location,
552557
}
553558
QgsGrassRasterValue::~QgsGrassRasterValue()
554559
{
555-
if ( mProcess ) delete mProcess;
560+
if ( mProcess )
561+
{
562+
QgsDebugMsg( "closing process" );
563+
mProcess->closeWriteChannel();
564+
mProcess->waitForFinished();
565+
QgsDebugMsg( "process finished" );
566+
delete mProcess;
567+
}
556568
}
557569

558570
QString QgsGrassRasterValue::value( double x, double y )

‎src/providers/grass/qgsgrassrasterprovider.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,8 +244,7 @@ class QgsGrassRasterProvider : public QgsRasterDataProvider
244244
bool theThoroughBandScanFlag = false
245245
);
246246

247-
int changed( );
248-
bool reload( );
247+
virtual QDateTime dataTimestamp() const;
249248
private:
250249

251250
/**

0 commit comments

Comments
 (0)
Please sign in to comment.