mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-15 00:02:52 -04:00
Add method to retrieve dependent layers for map renderer cached images
This commit is contained in:
parent
748acc6790
commit
aa392dc23a
@ -18,6 +18,8 @@ class QgsMapRendererCache : QObject
|
||||
|
||||
QImage cacheImage( const QString& cacheKey ) const;
|
||||
|
||||
QList< QgsMapLayer* > dependentLayers( const QString& cacheKey ) const;
|
||||
|
||||
void clearCacheImage( const QString& cacheKey );
|
||||
|
||||
};
|
||||
|
@ -129,6 +129,15 @@ QImage QgsMapRendererCache::cacheImage( const QString& cacheKey ) const
|
||||
return mCachedImages.value( cacheKey ).cachedImage;
|
||||
}
|
||||
|
||||
QList< QgsMapLayer* > QgsMapRendererCache::dependentLayers( const QString& cacheKey ) const
|
||||
{
|
||||
if ( mCachedImages.contains( cacheKey ) )
|
||||
{
|
||||
return _qgis_listQPointerToRaw( mCachedImages.value( cacheKey ).dependentLayers );
|
||||
}
|
||||
return QList< QgsMapLayer* >();
|
||||
}
|
||||
|
||||
void QgsMapRendererCache::layerRequestedRepaint()
|
||||
{
|
||||
QgsMapLayer* layer = qobject_cast<QgsMapLayer*>( sender() );
|
||||
|
@ -84,6 +84,12 @@ class CORE_EXPORT QgsMapRendererCache : public QObject
|
||||
*/
|
||||
QImage cacheImage( const QString& cacheKey ) const;
|
||||
|
||||
/**
|
||||
* Returns a list of map layers on which an image in the cache depends.
|
||||
* @note added in QGIS 3.0
|
||||
*/
|
||||
QList< QgsMapLayer* > dependentLayers( const QString& cacheKey ) const;
|
||||
|
||||
/**
|
||||
* Removes an image from the cache with matching \a cacheKey.
|
||||
* @see clear()
|
||||
|
@ -192,6 +192,26 @@ class TestQgsMapRendererCache(unittest.TestCase):
|
||||
self.assertFalse(cache.cacheImage('nolayer').isNull())
|
||||
self.assertEqual(cache.cacheImage('nolayer'), im1)
|
||||
|
||||
def testDependentLayers(self):
|
||||
# bad layer tests
|
||||
cache = QgsMapRendererCache()
|
||||
self.assertEqual(cache.dependentLayers('not a layer'), [])
|
||||
|
||||
layer1 = QgsVectorLayer("Point?field=fldtxt:string",
|
||||
"layer1", "memory")
|
||||
layer2 = QgsVectorLayer("Point?field=fldtxt:string",
|
||||
"layer2", "memory")
|
||||
|
||||
im = QImage(200, 200, QImage.Format_RGB32)
|
||||
cache.setCacheImage('no depends', im, [])
|
||||
self.assertEqual(cache.dependentLayers('no depends'), [])
|
||||
cache.setCacheImage('depends', im, [layer1, layer2])
|
||||
self.assertEqual(set(cache.dependentLayers('depends')), set([layer1, layer2]))
|
||||
|
||||
# try deleting a layer in the meantime..
|
||||
layer2 = None
|
||||
self.assertEqual(set(cache.dependentLayers('depends')), set([layer1]))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
Loading…
x
Reference in New Issue
Block a user