Skip to content

Commit aa392dc

Browse files
committedFeb 6, 2017
Add method to retrieve dependent layers for map renderer cached images
1 parent 748acc6 commit aa392dc

File tree

4 files changed

+37
-0
lines changed

4 files changed

+37
-0
lines changed
 

‎python/core/qgsmaprenderercache.sip

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class QgsMapRendererCache : QObject
1818

1919
QImage cacheImage( const QString& cacheKey ) const;
2020

21+
QList< QgsMapLayer* > dependentLayers( const QString& cacheKey ) const;
22+
2123
void clearCacheImage( const QString& cacheKey );
2224

2325
};

‎src/core/qgsmaprenderercache.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,15 @@ QImage QgsMapRendererCache::cacheImage( const QString& cacheKey ) const
129129
return mCachedImages.value( cacheKey ).cachedImage;
130130
}
131131

132+
QList< QgsMapLayer* > QgsMapRendererCache::dependentLayers( const QString& cacheKey ) const
133+
{
134+
if ( mCachedImages.contains( cacheKey ) )
135+
{
136+
return _qgis_listQPointerToRaw( mCachedImages.value( cacheKey ).dependentLayers );
137+
}
138+
return QList< QgsMapLayer* >();
139+
}
140+
132141
void QgsMapRendererCache::layerRequestedRepaint()
133142
{
134143
QgsMapLayer* layer = qobject_cast<QgsMapLayer*>( sender() );

‎src/core/qgsmaprenderercache.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,12 @@ class CORE_EXPORT QgsMapRendererCache : public QObject
8484
*/
8585
QImage cacheImage( const QString& cacheKey ) const;
8686

87+
/**
88+
* Returns a list of map layers on which an image in the cache depends.
89+
* @note added in QGIS 3.0
90+
*/
91+
QList< QgsMapLayer* > dependentLayers( const QString& cacheKey ) const;
92+
8793
/**
8894
* Removes an image from the cache with matching \a cacheKey.
8995
* @see clear()

‎tests/src/python/test_qgsmaprenderercache.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,26 @@ def testRequestRepaintMultiple(self):
192192
self.assertFalse(cache.cacheImage('nolayer').isNull())
193193
self.assertEqual(cache.cacheImage('nolayer'), im1)
194194

195+
def testDependentLayers(self):
196+
# bad layer tests
197+
cache = QgsMapRendererCache()
198+
self.assertEqual(cache.dependentLayers('not a layer'), [])
199+
200+
layer1 = QgsVectorLayer("Point?field=fldtxt:string",
201+
"layer1", "memory")
202+
layer2 = QgsVectorLayer("Point?field=fldtxt:string",
203+
"layer2", "memory")
204+
205+
im = QImage(200, 200, QImage.Format_RGB32)
206+
cache.setCacheImage('no depends', im, [])
207+
self.assertEqual(cache.dependentLayers('no depends'), [])
208+
cache.setCacheImage('depends', im, [layer1, layer2])
209+
self.assertEqual(set(cache.dependentLayers('depends')), set([layer1, layer2]))
210+
211+
# try deleting a layer in the meantime..
212+
layer2 = None
213+
self.assertEqual(set(cache.dependentLayers('depends')), set([layer1]))
214+
195215

196216
if __name__ == '__main__':
197217
unittest.main()

0 commit comments

Comments
 (0)
Please sign in to comment.