diff --git a/python/core/auto_generated/processing/qgsprocessingalgorithm.sip.in b/python/core/auto_generated/processing/qgsprocessingalgorithm.sip.in index dc03f2d7249..aaf460074db 100644 --- a/python/core/auto_generated/processing/qgsprocessingalgorithm.sip.in +++ b/python/core/auto_generated/processing/qgsprocessingalgorithm.sip.in @@ -812,7 +812,7 @@ should correspond to the invalid source parameter name. .. versionadded:: 3.2 %End - virtual bool supportInPlaceEdit( const QgsVectorLayer *layer ) const; + virtual bool supportInPlaceEdit( const QgsMapLayer *layer ) const; %Docstring Checks whether this algorithm supports in-place editing on the given ``layer`` Default implementation returns false. @@ -976,7 +976,8 @@ Returns the feature request used for fetching features to process from the source layer. The default implementation requests all attributes and geometry. %End - virtual bool supportInPlaceEdit( const QgsVectorLayer *layer ) const; + virtual bool supportInPlaceEdit( const QgsMapLayer *layer ) const; + %Docstring Checks whether this algorithm supports in-place editing on the given ``layer`` Default implementation for feature based algorithms run some basic compatibility diff --git a/src/analysis/processing/qgsalgorithmaddincrementalfield.cpp b/src/analysis/processing/qgsalgorithmaddincrementalfield.cpp index be00d97b64e..7ec1dfcb4df 100644 --- a/src/analysis/processing/qgsalgorithmaddincrementalfield.cpp +++ b/src/analysis/processing/qgsalgorithmaddincrementalfield.cpp @@ -162,7 +162,7 @@ QgsFeatureList QgsAddIncrementalFieldAlgorithm::processFeature( const QgsFeature return QgsFeatureList() << f; } -bool QgsAddIncrementalFieldAlgorithm::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsAddIncrementalFieldAlgorithm::supportInPlaceEdit( const QgsMapLayer *layer ) const { Q_UNUSED( layer ); return false; diff --git a/src/analysis/processing/qgsalgorithmaddincrementalfield.h b/src/analysis/processing/qgsalgorithmaddincrementalfield.h index 4c006470f95..dd0192063ea 100644 --- a/src/analysis/processing/qgsalgorithmaddincrementalfield.h +++ b/src/analysis/processing/qgsalgorithmaddincrementalfield.h @@ -53,7 +53,7 @@ class QgsAddIncrementalFieldAlgorithm : public QgsProcessingFeatureBasedAlgorith bool prepareAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; QgsFeatureRequest request() const override; QgsFeatureList processFeature( const QgsFeature &feature, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; - bool supportInPlaceEdit( const QgsVectorLayer *layer ) const override; + bool supportInPlaceEdit( const QgsMapLayer *layer ) const override; private: diff --git a/src/analysis/processing/qgsalgorithmassignprojection.cpp b/src/analysis/processing/qgsalgorithmassignprojection.cpp index 696a051b22c..f6b524e6ca6 100644 --- a/src/analysis/processing/qgsalgorithmassignprojection.cpp +++ b/src/analysis/processing/qgsalgorithmassignprojection.cpp @@ -62,7 +62,7 @@ QgsAssignProjectionAlgorithm *QgsAssignProjectionAlgorithm::createInstance() con return new QgsAssignProjectionAlgorithm(); } -bool QgsAssignProjectionAlgorithm::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsAssignProjectionAlgorithm::supportInPlaceEdit( const QgsMapLayer *layer ) const { Q_UNUSED( layer ); return false; diff --git a/src/analysis/processing/qgsalgorithmassignprojection.h b/src/analysis/processing/qgsalgorithmassignprojection.h index 484addc9147..6109b36372a 100644 --- a/src/analysis/processing/qgsalgorithmassignprojection.h +++ b/src/analysis/processing/qgsalgorithmassignprojection.h @@ -41,7 +41,7 @@ class QgsAssignProjectionAlgorithm : public QgsProcessingFeatureBasedAlgorithm QString groupId() const override; QString shortHelpString() const override; QgsAssignProjectionAlgorithm *createInstance() const override SIP_FACTORY; - bool supportInPlaceEdit( const QgsVectorLayer *layer ) const override; + bool supportInPlaceEdit( const QgsMapLayer *layer ) const override; protected: diff --git a/src/analysis/processing/qgsalgorithmclip.cpp b/src/analysis/processing/qgsalgorithmclip.cpp index bbb09e4ebc5..9e1886d6531 100644 --- a/src/analysis/processing/qgsalgorithmclip.cpp +++ b/src/analysis/processing/qgsalgorithmclip.cpp @@ -18,6 +18,7 @@ #include "qgsalgorithmclip.h" #include "qgsgeometryengine.h" #include "qgsoverlayutils.h" +#include "qgsvectorlayer.h" ///@cond PRIVATE @@ -76,10 +77,13 @@ QgsClipAlgorithm *QgsClipAlgorithm::createInstance() const return new QgsClipAlgorithm(); } -bool QgsClipAlgorithm::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsClipAlgorithm::supportInPlaceEdit( const QgsMapLayer *l ) const { - Q_UNUSED( layer ); - return true; + const QgsVectorLayer *layer = qobject_cast< const QgsVectorLayer * >( l ); + if ( !layer ) + return false; + + return layer->isSpatial(); } QVariantMap QgsClipAlgorithm::processAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) diff --git a/src/analysis/processing/qgsalgorithmclip.h b/src/analysis/processing/qgsalgorithmclip.h index 4b919595de6..67bf0cc7823 100644 --- a/src/analysis/processing/qgsalgorithmclip.h +++ b/src/analysis/processing/qgsalgorithmclip.h @@ -44,7 +44,7 @@ class QgsClipAlgorithm : public QgsProcessingAlgorithm QString groupId() const override; QString shortHelpString() const override; QgsClipAlgorithm *createInstance() const override SIP_FACTORY; - bool supportInPlaceEdit( const QgsVectorLayer *layer ) const override; + bool supportInPlaceEdit( const QgsMapLayer *layer ) const override; QgsProcessingAlgorithm::Flags flags() const override; protected: diff --git a/src/analysis/processing/qgsalgorithmdrape.cpp b/src/analysis/processing/qgsalgorithmdrape.cpp index 1a1dac44c72..e91de8758e1 100644 --- a/src/analysis/processing/qgsalgorithmdrape.cpp +++ b/src/analysis/processing/qgsalgorithmdrape.cpp @@ -196,8 +196,12 @@ QgsDrapeToZAlgorithm *QgsDrapeToZAlgorithm::createInstance() const return new QgsDrapeToZAlgorithm(); } -bool QgsDrapeToZAlgorithm::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsDrapeToZAlgorithm::supportInPlaceEdit( const QgsMapLayer *l ) const { + const QgsVectorLayer *layer = qobject_cast< const QgsVectorLayer * >( l ); + if ( !layer ) + return false; + if ( ! QgsDrapeAlgorithmBase::supportInPlaceEdit( layer ) ) return false; return QgsWkbTypes::hasZ( layer->wkbType() ); @@ -255,8 +259,12 @@ QgsDrapeToMAlgorithm *QgsDrapeToMAlgorithm::createInstance() const return new QgsDrapeToMAlgorithm(); } -bool QgsDrapeToMAlgorithm::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsDrapeToMAlgorithm::supportInPlaceEdit( const QgsMapLayer *l ) const { + const QgsVectorLayer *layer = qobject_cast< const QgsVectorLayer * >( l ); + if ( !layer ) + return false; + if ( ! QgsDrapeAlgorithmBase::supportInPlaceEdit( layer ) ) return false; return QgsWkbTypes::hasM( layer->wkbType() ); diff --git a/src/analysis/processing/qgsalgorithmdrape.h b/src/analysis/processing/qgsalgorithmdrape.h index d11c12eaa19..f03d7ba68c0 100644 --- a/src/analysis/processing/qgsalgorithmdrape.h +++ b/src/analysis/processing/qgsalgorithmdrape.h @@ -73,7 +73,7 @@ class QgsDrapeToZAlgorithm : public QgsDrapeAlgorithmBase QString shortHelpString() const override; QString shortDescription() const override; QgsDrapeToZAlgorithm *createInstance() const override SIP_FACTORY; - bool supportInPlaceEdit( const QgsVectorLayer *layer ) const override; + bool supportInPlaceEdit( const QgsMapLayer *layer ) const override; protected: @@ -97,7 +97,7 @@ class QgsDrapeToMAlgorithm : public QgsDrapeAlgorithmBase QString shortHelpString() const override; QString shortDescription() const override; QgsDrapeToMAlgorithm *createInstance() const override SIP_FACTORY; - bool supportInPlaceEdit( const QgsVectorLayer *layer ) const override; + bool supportInPlaceEdit( const QgsMapLayer *layer ) const override; protected: diff --git a/src/analysis/processing/qgsalgorithmdropmzvalues.cpp b/src/analysis/processing/qgsalgorithmdropmzvalues.cpp index f031662fca8..3c0257c0df6 100644 --- a/src/analysis/processing/qgsalgorithmdropmzvalues.cpp +++ b/src/analysis/processing/qgsalgorithmdropmzvalues.cpp @@ -59,7 +59,7 @@ QgsDropMZValuesAlgorithm *QgsDropMZValuesAlgorithm::createInstance() const return new QgsDropMZValuesAlgorithm(); } -bool QgsDropMZValuesAlgorithm::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsDropMZValuesAlgorithm::supportInPlaceEdit( const QgsMapLayer *layer ) const { Q_UNUSED( layer ); return false; diff --git a/src/analysis/processing/qgsalgorithmdropmzvalues.h b/src/analysis/processing/qgsalgorithmdropmzvalues.h index 04d99343ae7..9fd4a164d8f 100644 --- a/src/analysis/processing/qgsalgorithmdropmzvalues.h +++ b/src/analysis/processing/qgsalgorithmdropmzvalues.h @@ -41,7 +41,7 @@ class QgsDropMZValuesAlgorithm : public QgsProcessingFeatureBasedAlgorithm QString groupId() const override; QString shortHelpString() const override; QgsDropMZValuesAlgorithm *createInstance() const override SIP_FACTORY; - bool supportInPlaceEdit( const QgsVectorLayer *layer ) const override; + bool supportInPlaceEdit( const QgsMapLayer *layer ) const override; protected: diff --git a/src/analysis/processing/qgsalgorithmfiltervertices.cpp b/src/analysis/processing/qgsalgorithmfiltervertices.cpp index 4d23746b771..865fc7f2070 100644 --- a/src/analysis/processing/qgsalgorithmfiltervertices.cpp +++ b/src/analysis/processing/qgsalgorithmfiltervertices.cpp @@ -136,8 +136,12 @@ QgsFilterVerticesByM *QgsFilterVerticesByM::createInstance() const return new QgsFilterVerticesByM(); } -bool QgsFilterVerticesByM::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsFilterVerticesByM::supportInPlaceEdit( const QgsMapLayer *l ) const { + const QgsVectorLayer *layer = qobject_cast< const QgsVectorLayer * >( l ); + if ( !layer ) + return false; + if ( ! QgsFilterVerticesAlgorithmBase::supportInPlaceEdit( layer ) ) return false; return QgsWkbTypes::hasM( layer->wkbType() ); @@ -182,10 +186,14 @@ QgsFilterVerticesByZ *QgsFilterVerticesByZ::createInstance() const return new QgsFilterVerticesByZ(); } -bool QgsFilterVerticesByZ::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsFilterVerticesByZ::supportInPlaceEdit( const QgsMapLayer *l ) const { + const QgsVectorLayer *layer = qobject_cast< const QgsVectorLayer * >( l ); + if ( !layer ) + return false; + if ( ! QgsFilterVerticesAlgorithmBase::supportInPlaceEdit( layer ) ) - return false; + return false; return QgsWkbTypes::hasZ( layer->wkbType() ); } diff --git a/src/analysis/processing/qgsalgorithmfiltervertices.h b/src/analysis/processing/qgsalgorithmfiltervertices.h index 6a0064f15df..b4734d46a74 100644 --- a/src/analysis/processing/qgsalgorithmfiltervertices.h +++ b/src/analysis/processing/qgsalgorithmfiltervertices.h @@ -72,7 +72,7 @@ class QgsFilterVerticesByM : public QgsFilterVerticesAlgorithmBase QString displayName() const override; QStringList tags() const override; QgsFilterVerticesByM *createInstance() const override SIP_FACTORY; - bool supportInPlaceEdit( const QgsVectorLayer *layer ) const override; + bool supportInPlaceEdit( const QgsMapLayer *layer ) const override; private: @@ -95,7 +95,7 @@ class QgsFilterVerticesByZ : public QgsFilterVerticesAlgorithmBase QString displayName() const override; QStringList tags() const override; QgsFilterVerticesByZ *createInstance() const override SIP_FACTORY; - bool supportInPlaceEdit( const QgsVectorLayer *layer ) const override; + bool supportInPlaceEdit( const QgsMapLayer *layer ) const override; private: diff --git a/src/analysis/processing/qgsalgorithmfixgeometries.cpp b/src/analysis/processing/qgsalgorithmfixgeometries.cpp index 8172a4017f2..340593d6ec2 100644 --- a/src/analysis/processing/qgsalgorithmfixgeometries.cpp +++ b/src/analysis/processing/qgsalgorithmfixgeometries.cpp @@ -73,9 +73,13 @@ QgsFixGeometriesAlgorithm *QgsFixGeometriesAlgorithm::createInstance() const return new QgsFixGeometriesAlgorithm(); } -bool QgsFixGeometriesAlgorithm::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsFixGeometriesAlgorithm::supportInPlaceEdit( const QgsMapLayer *l ) const { - if ( ! QgsProcessingFeatureBasedAlgorithm::supportInPlaceEdit( layer ) ) + const QgsVectorLayer *layer = qobject_cast< const QgsVectorLayer * >( l ); + if ( !layer ) + return false; + + if ( !layer->isSpatial() || ! QgsProcessingFeatureBasedAlgorithm::supportInPlaceEdit( layer ) ) return false; // The algorithm would drop M, so disable it if the layer has M return ! QgsWkbTypes::hasM( layer->wkbType() ); diff --git a/src/analysis/processing/qgsalgorithmfixgeometries.h b/src/analysis/processing/qgsalgorithmfixgeometries.h index 14430238010..58301c82b0a 100644 --- a/src/analysis/processing/qgsalgorithmfixgeometries.h +++ b/src/analysis/processing/qgsalgorithmfixgeometries.h @@ -41,7 +41,7 @@ class QgsFixGeometriesAlgorithm : public QgsProcessingFeatureBasedAlgorithm QString groupId() const override; QString shortHelpString() const override; QgsFixGeometriesAlgorithm *createInstance() const override SIP_FACTORY; - bool supportInPlaceEdit( const QgsVectorLayer *layer ) const override; + bool supportInPlaceEdit( const QgsMapLayer *layer ) const override; protected: QgsProcessingFeatureSource::Flag sourceFlags() const override; diff --git a/src/analysis/processing/qgsalgorithmminimumenclosingcircle.cpp b/src/analysis/processing/qgsalgorithmminimumenclosingcircle.cpp index 1dc266e483e..063cf12275c 100644 --- a/src/analysis/processing/qgsalgorithmminimumenclosingcircle.cpp +++ b/src/analysis/processing/qgsalgorithmminimumenclosingcircle.cpp @@ -73,8 +73,12 @@ QgsMinimumEnclosingCircleAlgorithm *QgsMinimumEnclosingCircleAlgorithm::createIn return new QgsMinimumEnclosingCircleAlgorithm(); } -bool QgsMinimumEnclosingCircleAlgorithm::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsMinimumEnclosingCircleAlgorithm::supportInPlaceEdit( const QgsMapLayer *l ) const { + const QgsVectorLayer *layer = qobject_cast< const QgsVectorLayer * >( l ); + if ( !layer ) + return false; + if ( ! QgsProcessingFeatureBasedAlgorithm::supportInPlaceEdit( layer ) ) return false; // (no Z no M) diff --git a/src/analysis/processing/qgsalgorithmminimumenclosingcircle.h b/src/analysis/processing/qgsalgorithmminimumenclosingcircle.h index e62d88a239e..23b094be1df 100644 --- a/src/analysis/processing/qgsalgorithmminimumenclosingcircle.h +++ b/src/analysis/processing/qgsalgorithmminimumenclosingcircle.h @@ -42,7 +42,7 @@ class QgsMinimumEnclosingCircleAlgorithm : public QgsProcessingFeatureBasedAlgor QString groupId() const override; QString shortHelpString() const override; QgsMinimumEnclosingCircleAlgorithm *createInstance() const override SIP_FACTORY; - bool supportInPlaceEdit( const QgsVectorLayer *layer ) const override; + bool supportInPlaceEdit( const QgsMapLayer *layer ) const override; protected: QString outputName() const override; diff --git a/src/analysis/processing/qgsalgorithmmultiringconstantbuffer.cpp b/src/analysis/processing/qgsalgorithmmultiringconstantbuffer.cpp index ced81fb99c1..cdd32c13814 100644 --- a/src/analysis/processing/qgsalgorithmmultiringconstantbuffer.cpp +++ b/src/analysis/processing/qgsalgorithmmultiringconstantbuffer.cpp @@ -78,8 +78,12 @@ void QgsMultiRingConstantBufferAlgorithm::initParameters( const QVariantMap & ) addParameter( distance.release() ); } -bool QgsMultiRingConstantBufferAlgorithm::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsMultiRingConstantBufferAlgorithm::supportInPlaceEdit( const QgsMapLayer *l ) const { + const QgsVectorLayer *layer = qobject_cast< const QgsVectorLayer * >( l ); + if ( !layer ) + return false; + if ( ! QgsProcessingFeatureBasedAlgorithm::supportInPlaceEdit( layer ) ) return false; // Polygons only diff --git a/src/analysis/processing/qgsalgorithmmultiringconstantbuffer.h b/src/analysis/processing/qgsalgorithmmultiringconstantbuffer.h index 7db6843970a..35cb962ce14 100644 --- a/src/analysis/processing/qgsalgorithmmultiringconstantbuffer.h +++ b/src/analysis/processing/qgsalgorithmmultiringconstantbuffer.h @@ -42,7 +42,7 @@ class QgsMultiRingConstantBufferAlgorithm : public QgsProcessingFeatureBasedAlgo QString shortHelpString() const override; QgsMultiRingConstantBufferAlgorithm *createInstance() const override SIP_FACTORY; void initParameters( const QVariantMap &configuration = QVariantMap() ) override; - bool supportInPlaceEdit( const QgsVectorLayer *layer ) const override; + bool supportInPlaceEdit( const QgsMapLayer *layer ) const override; protected: diff --git a/src/analysis/processing/qgsalgorithmorientedminimumboundingbox.cpp b/src/analysis/processing/qgsalgorithmorientedminimumboundingbox.cpp index 2aa1562f19a..75dcdc3f89a 100644 --- a/src/analysis/processing/qgsalgorithmorientedminimumboundingbox.cpp +++ b/src/analysis/processing/qgsalgorithmorientedminimumboundingbox.cpp @@ -67,8 +67,12 @@ QgsOrientedMinimumBoundingBoxAlgorithm *QgsOrientedMinimumBoundingBoxAlgorithm:: return new QgsOrientedMinimumBoundingBoxAlgorithm(); } -bool QgsOrientedMinimumBoundingBoxAlgorithm::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsOrientedMinimumBoundingBoxAlgorithm::supportInPlaceEdit( const QgsMapLayer *l ) const { + const QgsVectorLayer *layer = qobject_cast< const QgsVectorLayer * >( l ); + if ( !layer ) + return false; + if ( ! QgsProcessingFeatureBasedAlgorithm::supportInPlaceEdit( layer ) ) return false; // Polygons only diff --git a/src/analysis/processing/qgsalgorithmorientedminimumboundingbox.h b/src/analysis/processing/qgsalgorithmorientedminimumboundingbox.h index 124896fb3d8..4283d903408 100644 --- a/src/analysis/processing/qgsalgorithmorientedminimumboundingbox.h +++ b/src/analysis/processing/qgsalgorithmorientedminimumboundingbox.h @@ -41,7 +41,7 @@ class QgsOrientedMinimumBoundingBoxAlgorithm : public QgsProcessingFeatureBasedA QString groupId() const override; QString shortHelpString() const override; QgsOrientedMinimumBoundingBoxAlgorithm *createInstance() const override SIP_FACTORY; - bool supportInPlaceEdit( const QgsVectorLayer *layer ) const override; + bool supportInPlaceEdit( const QgsMapLayer *layer ) const override; protected: QString outputName() const override; diff --git a/src/analysis/processing/qgsalgorithmpromotetomultipart.cpp b/src/analysis/processing/qgsalgorithmpromotetomultipart.cpp index 3b8a15b1978..072384e1a71 100644 --- a/src/analysis/processing/qgsalgorithmpromotetomultipart.cpp +++ b/src/analysis/processing/qgsalgorithmpromotetomultipart.cpp @@ -66,8 +66,12 @@ QgsPromoteToMultipartAlgorithm *QgsPromoteToMultipartAlgorithm::createInstance() return new QgsPromoteToMultipartAlgorithm(); } -bool QgsPromoteToMultipartAlgorithm::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsPromoteToMultipartAlgorithm::supportInPlaceEdit( const QgsMapLayer *l ) const { + const QgsVectorLayer *layer = qobject_cast< const QgsVectorLayer * >( l ); + if ( !layer ) + return false; + if ( ! QgsProcessingFeatureBasedAlgorithm::supportInPlaceEdit( layer ) ) return false; return QgsWkbTypes::isMultiType( layer->wkbType() ); diff --git a/src/analysis/processing/qgsalgorithmpromotetomultipart.h b/src/analysis/processing/qgsalgorithmpromotetomultipart.h index 756844b2739..37700d4d0e1 100644 --- a/src/analysis/processing/qgsalgorithmpromotetomultipart.h +++ b/src/analysis/processing/qgsalgorithmpromotetomultipart.h @@ -44,7 +44,7 @@ class QgsPromoteToMultipartAlgorithm : public QgsProcessingFeatureBasedAlgorithm QString groupId() const override; QString shortHelpString() const override; QgsPromoteToMultipartAlgorithm *createInstance() const override SIP_FACTORY; - bool supportInPlaceEdit( const QgsVectorLayer *layer ) const override; + bool supportInPlaceEdit( const QgsMapLayer *layer ) const override; protected: QString outputName() const override; diff --git a/src/analysis/processing/qgsalgorithmsegmentize.cpp b/src/analysis/processing/qgsalgorithmsegmentize.cpp index fd3f5670dc6..1e744eaceeb 100644 --- a/src/analysis/processing/qgsalgorithmsegmentize.cpp +++ b/src/analysis/processing/qgsalgorithmsegmentize.cpp @@ -78,7 +78,7 @@ void QgsSegmentizeByMaximumDistanceAlgorithm::initParameters( const QVariantMap addParameter( tolerance.release() ); } -bool QgsSegmentizeByMaximumDistanceAlgorithm::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsSegmentizeByMaximumDistanceAlgorithm::supportInPlaceEdit( const QgsMapLayer *layer ) const { Q_UNUSED( layer ); return false; @@ -173,7 +173,7 @@ void QgsSegmentizeByMaximumAngleAlgorithm::initParameters( const QVariantMap & ) addParameter( tolerance.release() ); } -bool QgsSegmentizeByMaximumAngleAlgorithm::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsSegmentizeByMaximumAngleAlgorithm::supportInPlaceEdit( const QgsMapLayer *layer ) const { Q_UNUSED( layer ); return false; diff --git a/src/analysis/processing/qgsalgorithmsegmentize.h b/src/analysis/processing/qgsalgorithmsegmentize.h index 3d35465bd1c..2e0622a9cd4 100644 --- a/src/analysis/processing/qgsalgorithmsegmentize.h +++ b/src/analysis/processing/qgsalgorithmsegmentize.h @@ -44,7 +44,7 @@ class QgsSegmentizeByMaximumDistanceAlgorithm : public QgsProcessingFeatureBased QgsSegmentizeByMaximumDistanceAlgorithm *createInstance() const override SIP_FACTORY; QList inputLayerTypes() const override; void initParameters( const QVariantMap &configuration = QVariantMap() ) override; - bool supportInPlaceEdit( const QgsVectorLayer *layer ) const override; + bool supportInPlaceEdit( const QgsMapLayer *layer ) const override; protected: QString outputName() const override; @@ -78,7 +78,7 @@ class QgsSegmentizeByMaximumAngleAlgorithm : public QgsProcessingFeatureBasedAlg QgsSegmentizeByMaximumAngleAlgorithm *createInstance() const override SIP_FACTORY; QList inputLayerTypes() const override; void initParameters( const QVariantMap &configuration = QVariantMap() ) override; - bool supportInPlaceEdit( const QgsVectorLayer *layer ) const override; + bool supportInPlaceEdit( const QgsMapLayer *layer ) const override; protected: QString outputName() const override; diff --git a/src/analysis/processing/qgsalgorithmtranslate.cpp b/src/analysis/processing/qgsalgorithmtranslate.cpp index 7dbdc8f0c07..bda4b223a68 100644 --- a/src/analysis/processing/qgsalgorithmtranslate.cpp +++ b/src/analysis/processing/qgsalgorithmtranslate.cpp @@ -164,8 +164,12 @@ QgsWkbTypes::Type QgsTranslateAlgorithm::outputWkbType( QgsWkbTypes::Type inputW } -bool QgsTranslateAlgorithm::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsTranslateAlgorithm::supportInPlaceEdit( const QgsMapLayer *l ) const { + const QgsVectorLayer *layer = qobject_cast< const QgsVectorLayer * >( l ); + if ( !layer ) + return false; + if ( ! QgsProcessingFeatureBasedAlgorithm::supportInPlaceEdit( layer ) ) return false; diff --git a/src/analysis/processing/qgsalgorithmtranslate.h b/src/analysis/processing/qgsalgorithmtranslate.h index 4b4edac6fcb..c25c9bc83a4 100644 --- a/src/analysis/processing/qgsalgorithmtranslate.h +++ b/src/analysis/processing/qgsalgorithmtranslate.h @@ -42,7 +42,7 @@ class QgsTranslateAlgorithm : public QgsProcessingFeatureBasedAlgorithm QString shortHelpString() const override; QgsTranslateAlgorithm *createInstance() const override SIP_FACTORY; void initParameters( const QVariantMap &configuration = QVariantMap() ) override; - bool supportInPlaceEdit( const QgsVectorLayer *layer ) const override; + bool supportInPlaceEdit( const QgsMapLayer *layer ) const override; protected: QString outputName() const override; diff --git a/src/core/processing/qgsprocessingalgorithm.cpp b/src/core/processing/qgsprocessingalgorithm.cpp index 131a2a541cb..32bb8bb1463 100644 --- a/src/core/processing/qgsprocessingalgorithm.cpp +++ b/src/core/processing/qgsprocessingalgorithm.cpp @@ -762,7 +762,7 @@ QString QgsProcessingAlgorithm::invalidSinkError( const QVariantMap ¶meters, } } -bool QgsProcessingAlgorithm::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsProcessingAlgorithm::supportInPlaceEdit( const QgsMapLayer *layer ) const { Q_UNUSED( layer ); return false; @@ -907,8 +907,12 @@ QgsFeatureRequest QgsProcessingFeatureBasedAlgorithm::request() const return QgsFeatureRequest(); } -bool QgsProcessingFeatureBasedAlgorithm::supportInPlaceEdit( const QgsVectorLayer *layer ) const +bool QgsProcessingFeatureBasedAlgorithm::supportInPlaceEdit( const QgsMapLayer *l ) const { + const QgsVectorLayer *layer = qobject_cast< const QgsVectorLayer * >( l ); + if ( !layer ) + return false; + QgsWkbTypes::GeometryType inPlaceGeometryType = layer->geometryType(); if ( !inputLayerTypes().empty() && !inputLayerTypes().contains( QgsProcessing::TypeVector ) && diff --git a/src/core/processing/qgsprocessingalgorithm.h b/src/core/processing/qgsprocessingalgorithm.h index 37a9c5f24db..8f49d72ec74 100644 --- a/src/core/processing/qgsprocessingalgorithm.h +++ b/src/core/processing/qgsprocessingalgorithm.h @@ -812,7 +812,7 @@ class CORE_EXPORT QgsProcessingAlgorithm * \return true if the algorithm supports in-place editing * \since QGIS 3.4 */ - virtual bool supportInPlaceEdit( const QgsVectorLayer *layer ) const; + virtual bool supportInPlaceEdit( const QgsMapLayer *layer ) const; private: @@ -990,7 +990,7 @@ class CORE_EXPORT QgsProcessingFeatureBasedAlgorithm : public QgsProcessingAlgor * \return true if the algorithm supports in-place editing * \since QGIS 3.4 */ - virtual bool supportInPlaceEdit( const QgsVectorLayer *layer ) const override; + bool supportInPlaceEdit( const QgsMapLayer *layer ) const override; /** * Read the source from \a parameters and \a context and set it