From e7ebb8bc1b5dd38aefa8e7dcb7faeb20ff93d2f9 Mon Sep 17 00:00:00 2001 From: Alessandro Pasotti Date: Tue, 6 Jun 2023 10:08:17 +0200 Subject: [PATCH] Simplify context passing --- .../qgslayertreefiltersettings.sip.in | 14 ----------- .../layertree/qgslayertreefiltersettings.cpp | 12 --------- .../layertree/qgslayertreefiltersettings.h | 14 ----------- src/core/layout/qgslayoutitemlegend.cpp | 25 ++++++++----------- src/core/qgsmaphittest.cpp | 15 ----------- tests/src/core/testqgslegendrenderer.cpp | 3 ++- 6 files changed, 13 insertions(+), 70 deletions(-) diff --git a/python/core/auto_generated/layertree/qgslayertreefiltersettings.sip.in b/python/core/auto_generated/layertree/qgslayertreefiltersettings.sip.in index aca3e3aad65..27bb1c1c28d 100644 --- a/python/core/auto_generated/layertree/qgslayertreefiltersettings.sip.in +++ b/python/core/auto_generated/layertree/qgslayertreefiltersettings.sip.in @@ -55,20 +55,6 @@ Returns the map of layer IDs to legend filter expression. Sets the map of layer IDs to legend filter expression. .. seealso:: :py:func:`layerFilterExpressions` -%End - - void setFilterExpressionsContext( const QgsExpressionContext &context ); -%Docstring -Sets the filter expression context. - -.. seealso:: :py:func:`filterExpressionsContext` -%End - - QgsExpressionContext filterExpressionsContext() const; -%Docstring -Returns the filter expression context. - -.. seealso:: :py:func:`setFilterExpressionsContext` %End void setLayerFilterExpressionsFromLayerTree( QgsLayerTree *tree ); diff --git a/src/core/layertree/qgslayertreefiltersettings.cpp b/src/core/layertree/qgslayertreefiltersettings.cpp index d219b541ff4..d32d631b6bf 100644 --- a/src/core/layertree/qgslayertreefiltersettings.cpp +++ b/src/core/layertree/qgslayertreefiltersettings.cpp @@ -37,7 +37,6 @@ QgsLayerTreeFilterSettings::QgsLayerTreeFilterSettings( const QgsLayerTreeFilter , mFlags( other.mFlags ) , mLayers( other.mLayers ) , mLayerExtents( other.mLayerExtents ) - , mFilterExpressionsContext( other.mFilterExpressionsContext ) { } @@ -50,7 +49,6 @@ QgsLayerTreeFilterSettings &QgsLayerTreeFilterSettings::operator=( const QgsLaye mFlags = other.mFlags; mLayers = other.mLayers; mLayerExtents = other.mLayerExtents; - mFilterExpressionsContext = other.mFilterExpressionsContext; return *this; } @@ -69,16 +67,6 @@ void QgsLayerTreeFilterSettings::setLayerFilterExpressions( const QMap legendFilterExpressions; diff --git a/src/core/layertree/qgslayertreefiltersettings.h b/src/core/layertree/qgslayertreefiltersettings.h index dce6315b0b2..d078098c87f 100644 --- a/src/core/layertree/qgslayertreefiltersettings.h +++ b/src/core/layertree/qgslayertreefiltersettings.h @@ -74,18 +74,6 @@ class CORE_EXPORT QgsLayerTreeFilterSettings */ void setLayerFilterExpressions( const QMap &expressions ); - /** - * Sets the filter expression context. - * \see filterExpressionsContext() - */ - void setFilterExpressionsContext( const QgsExpressionContext &context ); - - /** - * Returns the filter expression context. - * \see setFilterExpressionsContext() - */ - QgsExpressionContext filterExpressionsContext() const; - /** * Sets layer filter expressions using a layer \a tree. */ @@ -185,8 +173,6 @@ class CORE_EXPORT QgsLayerTreeFilterSettings // geometry must be in layer CRS QMap > mLayerExtents; - QgsExpressionContext mFilterExpressionsContext; - }; #endif // QGSLAYERTREEFILTERSETTINGS_H diff --git a/src/core/layout/qgslayoutitemlegend.cpp b/src/core/layout/qgslayoutitemlegend.cpp index fc69f5effe1..ea673652a26 100644 --- a/src/core/layout/qgslayoutitemlegend.cpp +++ b/src/core/layout/qgslayoutitemlegend.cpp @@ -1120,7 +1120,7 @@ void QgsLayoutItemLegend::doUpdateFilterByMap() linkedFilterMaps.insert( mMap ); } - QgsMapSettings ms; + QgsMapSettings mapSettings; QgsGeometry filterGeometry; if ( mMap ) { @@ -1128,7 +1128,7 @@ void QgsLayoutItemLegend::doUpdateFilterByMap() const QgsRectangle requestRectangle = mMap->requestedExtent(); QSizeF size( requestRectangle.width(), requestRectangle.height() ); size *= mLayout->convertFromLayoutUnits( mMap->mapUnitsToLayoutUnits(), Qgis::LayoutUnit::Millimeters ).length() * dpi / 25.4; - ms = mMap->mapSettings( requestRectangle, size, dpi, true ); + mapSettings = mMap->mapSettings( requestRectangle, size, dpi, true ); filterGeometry = QgsGeometry::fromQPolygonF( mMap->visibleExtentPolygon() ); } @@ -1138,14 +1138,16 @@ void QgsLayoutItemLegend::doUpdateFilterByMap() const QgsRectangle requestRectangle = ( *linkedFilterMaps.constBegin() )->requestedExtent(); QSizeF size( requestRectangle.width(), requestRectangle.height() ); size *= mLayout->convertFromLayoutUnits( ( *linkedFilterMaps.constBegin() )->mapUnitsToLayoutUnits(), Qgis::LayoutUnit::Millimeters ).length() * dpi / 25.4; - ms = ( *linkedFilterMaps.constBegin() )->mapSettings( requestRectangle, size, dpi, true ); + mapSettings = ( *linkedFilterMaps.constBegin() )->mapSettings( requestRectangle, size, dpi, true ); filterGeometry = QgsGeometry::fromQPolygonF( ( *linkedFilterMaps.constBegin() )->visibleExtentPolygon() ); } - const QgsGeometry atlasGeometry = mInAtlas ? mLayout->reportContext().currentGeometry( ms.destinationCrs() ) : QgsGeometry(); + mapSettings.setExpressionContext( createExpressionContext() ); - QgsLayerTreeFilterSettings filterSettings( ms ); + const QgsGeometry atlasGeometry = mInAtlas ? mLayout->reportContext().currentGeometry( mapSettings.destinationCrs() ) : QgsGeometry(); + + QgsLayerTreeFilterSettings filterSettings( mapSettings ); if ( !linkedFilterMaps.empty() ) { @@ -1157,7 +1159,7 @@ void QgsLayoutItemLegend::doUpdateFilterByMap() QgsGeometry mapExtent = QgsGeometry::fromQPolygonF( map->visibleExtentPolygon() ); //transform back to destination CRS - const QgsCoordinateTransform mapTransform( map->crs(), ms.destinationCrs(), mLayout->project() ); + const QgsCoordinateTransform mapTransform( map->crs(), mapSettings.destinationCrs(), mLayout->project() ); try { mapExtent.transform( mapTransform ); @@ -1175,7 +1177,7 @@ void QgsLayoutItemLegend::doUpdateFilterByMap() mapExtent = mapExtent.intersection( atlasGeometry ); } - filterSettings.addVisibleExtentForLayer( layer, QgsReferencedGeometry( mapExtent, ms.destinationCrs() ) ); + filterSettings.addVisibleExtentForLayer( layer, QgsReferencedGeometry( mapExtent, mapSettings.destinationCrs() ) ); } } } @@ -1183,9 +1185,9 @@ void QgsLayoutItemLegend::doUpdateFilterByMap() if ( mInAtlas ) { if ( !filterGeometry.isEmpty() ) - filterGeometry = mLayout->reportContext().currentGeometry( ms.destinationCrs() ); + filterGeometry = mLayout->reportContext().currentGeometry( mapSettings.destinationCrs() ); else - filterGeometry = filterGeometry.intersection( mLayout->reportContext().currentGeometry( ms.destinationCrs() ) ); + filterGeometry = filterGeometry.intersection( mLayout->reportContext().currentGeometry( mapSettings.destinationCrs() ) ); } filterSettings.setLayerFilterExpressionsFromLayerTree( mLegendModel->rootGroup() ); @@ -1198,11 +1200,6 @@ void QgsLayoutItemLegend::doUpdateFilterByMap() filterSettings.setFlags( Qgis::LayerTreeFilterFlag::SkipVisibilityCheck ); } - if ( mInAtlas ) - { - filterSettings.setFilterExpressionsContext( createExpressionContext() ); - } - mLegendModel->setFilterSettings( &filterSettings ); } else diff --git a/src/core/qgsmaphittest.cpp b/src/core/qgsmaphittest.cpp index 77490d2b36e..df48a575c85 100644 --- a/src/core/qgsmaphittest.cpp +++ b/src/core/qgsmaphittest.cpp @@ -80,14 +80,6 @@ void QgsMapHitTest::run() context.setExtent( extent.boundingBox() ); } - // If not explicitly set, the expression context from the filter settings can be a default constructed one, - // with no scopes, when it is set it is meant to override the context from the map settings (e.g. when - // set from layout items). - if ( mSettings.filterExpressionsContext().scopeCount() > 0 ) - { - context.setExpressionContext( mSettings.filterExpressionsContext() ); - } - context.expressionContext() << QgsExpressionContextUtils::layerScope( vl ); SymbolSet &usedSymbols = mHitTest[vl->id()]; SymbolSet &usedSymbolsRuleKey = mHitTestRuleKey[vl->id()]; @@ -386,13 +378,6 @@ bool QgsMapHitTestTask::run() QgsRenderContext context = QgsRenderContext::fromMapSettings( mapSettings ); - // If not explicitly set, the expression context from the filter settings can be a default constructed one, - // with no scopes, when it is set it is meant to override the context from the map settings (e.g. when - // set from layout items). - if ( mSettings.filterExpressionsContext().scopeCount() > 0 ) - { - context.setExpressionContext( mSettings.filterExpressionsContext() ); - } context.setPainter( &painter ); // we are not going to draw anything, but we still need a working painter std::size_t layerIdx = 0; diff --git a/tests/src/core/testqgslegendrenderer.cpp b/tests/src/core/testqgslegendrenderer.cpp index 9cf17b0f181..148b431bc32 100644 --- a/tests/src/core/testqgslegendrenderer.cpp +++ b/tests/src/core/testqgslegendrenderer.cpp @@ -1350,6 +1350,8 @@ void TestQgsLegendRenderer::testFilterByExpressionWithContext() scope->setVariable( QStringLiteral( "test_var" ), QStringLiteral( "test_value" ) ); context.appendScope( scope.release() ); + mapSettings.setExpressionContext( context ); + // Point layer QgsLayerTreeLayer *layer = legendModel.rootGroup()->findLayer( mVL3->id() ); QVERIFY( layer ); @@ -1357,7 +1359,6 @@ void TestQgsLegendRenderer::testFilterByExpressionWithContext() QgsLayerTreeFilterSettings filterSettings( mapSettings ); filterSettings.setLayerFilterExpressionsFromLayerTree( root.get() ); - filterSettings.setFilterExpressionsContext( context ); legendModel.setFilterSettings( &filterSettings ); QgsLegendSettings settings;