diff --git a/src/analysis/processing/qgsalgorithmclip.cpp b/src/analysis/processing/qgsalgorithmclip.cpp index 71bd383796c..e99580f403e 100644 --- a/src/analysis/processing/qgsalgorithmclip.cpp +++ b/src/analysis/processing/qgsalgorithmclip.cpp @@ -26,6 +26,13 @@ QString QgsClipAlgorithm::name() const return QStringLiteral( "clip" ); } +QgsProcessingAlgorithm::Flags QgsClipAlgorithm::flags() const +{ + Flags f = QgsProcessingAlgorithm::flags(); + f |= QgsProcessingAlgorithm::FlagSupportsInPlaceEdits; + return f; +} + QString QgsClipAlgorithm::displayName() const { return QObject::tr( "Clip" ); diff --git a/src/analysis/processing/qgsalgorithmclip.h b/src/analysis/processing/qgsalgorithmclip.h index f36f4308a70..2d3e745bdcf 100644 --- a/src/analysis/processing/qgsalgorithmclip.h +++ b/src/analysis/processing/qgsalgorithmclip.h @@ -45,6 +45,7 @@ class QgsClipAlgorithm : public QgsProcessingAlgorithm QString shortHelpString() const override; QgsClipAlgorithm *createInstance() const override SIP_FACTORY; + QgsProcessingAlgorithm::Flags flags() const override; protected: QVariantMap processAlgorithm( const QVariantMap ¶meters, diff --git a/src/gui/processing/qgsprocessingtoolboxmodel.cpp b/src/gui/processing/qgsprocessingtoolboxmodel.cpp index d33c9267d4e..99fbb600d39 100644 --- a/src/gui/processing/qgsprocessingtoolboxmodel.cpp +++ b/src/gui/processing/qgsprocessingtoolboxmodel.cpp @@ -721,24 +721,26 @@ bool QgsProcessingToolboxProxyModel::filterAcceptsRow( int sourceRow, const QMod return false; const QgsProcessingFeatureBasedAlgorithm *alg = dynamic_cast< const QgsProcessingFeatureBasedAlgorithm * >( mModel->algorithmForIndex( sourceIndex ) ); + if ( alg ) + { + if ( !alg->inputLayerTypes().empty() && + !alg->inputLayerTypes().contains( QgsProcessing::TypeVector ) && + !alg->inputLayerTypes().contains( QgsProcessing::TypeVectorAnyGeometry ) && + ( ( mInPlaceGeometryType == QgsWkbTypes::PolygonGeometry && !alg->inputLayerTypes().contains( QgsProcessing::TypeVectorPolygon ) ) || + ( mInPlaceGeometryType == QgsWkbTypes::LineGeometry && !alg->inputLayerTypes().contains( QgsProcessing::TypeVectorLine ) ) || + ( mInPlaceGeometryType == QgsWkbTypes::PointGeometry && !alg->inputLayerTypes().contains( QgsProcessing::TypeVectorPoint ) ) ) ) + return false; - if ( !alg->inputLayerTypes().empty() && - !alg->inputLayerTypes().contains( QgsProcessing::TypeVector ) && - !alg->inputLayerTypes().contains( QgsProcessing::TypeVectorAnyGeometry ) && - ( ( mInPlaceGeometryType == QgsWkbTypes::PolygonGeometry && !alg->inputLayerTypes().contains( QgsProcessing::TypeVectorPolygon ) ) || - ( mInPlaceGeometryType == QgsWkbTypes::LineGeometry && !alg->inputLayerTypes().contains( QgsProcessing::TypeVectorLine ) ) || - ( mInPlaceGeometryType == QgsWkbTypes::PointGeometry && !alg->inputLayerTypes().contains( QgsProcessing::TypeVectorPoint ) ) ) ) - return false; - - QgsWkbTypes::Type type = QgsWkbTypes::Unknown; - if ( mInPlaceGeometryType == QgsWkbTypes::PointGeometry ) - type = QgsWkbTypes::Point; - else if ( mInPlaceGeometryType == QgsWkbTypes::LineGeometry ) - type = QgsWkbTypes::LineString; - else if ( mInPlaceGeometryType == QgsWkbTypes::PolygonGeometry ) - type = QgsWkbTypes::Polygon; - if ( QgsWkbTypes::geometryType( alg->outputWkbType( type ) ) != mInPlaceGeometryType ) - return false; + QgsWkbTypes::Type type = QgsWkbTypes::Unknown; + if ( mInPlaceGeometryType == QgsWkbTypes::PointGeometry ) + type = QgsWkbTypes::Point; + else if ( mInPlaceGeometryType == QgsWkbTypes::LineGeometry ) + type = QgsWkbTypes::LineString; + else if ( mInPlaceGeometryType == QgsWkbTypes::PolygonGeometry ) + type = QgsWkbTypes::Polygon; + if ( QgsWkbTypes::geometryType( alg->outputWkbType( type ) ) != mInPlaceGeometryType ) + return false; + } } if ( mFilters & FilterModeler ) {