diff --git a/python/plugins/processing/algs/qgis/FieldsMapper.py b/python/plugins/processing/algs/qgis/FieldsMapper.py index 47f0ad25cf3..d7a13a44bb9 100644 --- a/python/plugins/processing/algs/qgis/FieldsMapper.py +++ b/python/plugins/processing/algs/qgis/FieldsMapper.py @@ -79,6 +79,9 @@ class FieldsMapper(QgisFeatureBasedAlgorithm): def parameterAsFieldsMapping(self, parameters, name, context): return parameters[name] + def supportInPlaceEdit(self, layer): + return False + def prepareAlgorithm(self, parameters, context, feedback): source = self.parameterAsSource(parameters, 'INPUT', context) if source is None: diff --git a/python/plugins/processing/algs/qgis/TextToFloat.py b/python/plugins/processing/algs/qgis/TextToFloat.py index 4bcac7b0e1a..fa11e7b6149 100644 --- a/python/plugins/processing/algs/qgis/TextToFloat.py +++ b/python/plugins/processing/algs/qgis/TextToFloat.py @@ -77,6 +77,9 @@ class TextToFloat(QgisFeatureBasedAlgorithm): self.field_name = self.parameterAsString(parameters, self.FIELD, context) return True + def supportInPlaceEdit(self, layer): + return False + def sourceFlags(self): return QgsProcessingFeatureSource.FlagSkipGeometryValidityChecks diff --git a/python/plugins/processing/gui/AlgorithmLocatorFilter.py b/python/plugins/processing/gui/AlgorithmLocatorFilter.py index 9106bbcbe8b..681b7e56578 100644 --- a/python/plugins/processing/gui/AlgorithmLocatorFilter.py +++ b/python/plugins/processing/gui/AlgorithmLocatorFilter.py @@ -143,14 +143,7 @@ class InPlaceAlgorithmLocatorFilter(QgsLocatorFilter): if not a.flags() & QgsProcessingAlgorithm.FlagSupportsInPlaceEdits: continue - if a.inputLayerTypes() and \ - QgsProcessing.TypeVector not in a.inputLayerTypes() \ - and QgsProcessing.TypeVectorAnyGeometry not in a.inputLayerTypes() \ - and (QgsWkbTypes.geometryType(iface.activeLayer().wkbType()) == QgsWkbTypes.PolygonGeometry and QgsProcessing.TypeVectorPolygon not in a.inputLayerTypes() or - QgsWkbTypes.geometryType( - iface.activeLayer().wkbType()) == QgsWkbTypes.LineGeometry and QgsProcessing.TypeVectorLine not in a.inputLayerTypes() or - QgsWkbTypes.geometryType( - iface.activeLayer().wkbType()) == QgsWkbTypes.PointGeometry and QgsProcessing.TypeVectorPoint not in a.inputLayerTypes()): + if not a.supportInPlaceEdit(iface.activeLayer()): continue if QgsLocatorFilter.stringMatches(a.displayName(), string) or [t for t in a.tags() if QgsLocatorFilter.stringMatches(t, string)] or \ diff --git a/python/plugins/processing/gui/ProcessingToolbox.py b/python/plugins/processing/gui/ProcessingToolbox.py index a48e1438723..453320fdaaa 100644 --- a/python/plugins/processing/gui/ProcessingToolbox.py +++ b/python/plugins/processing/gui/ProcessingToolbox.py @@ -229,8 +229,7 @@ class ProcessingToolbox(QgsDockWidget, WIDGET): dlg.exec_() return - if self.in_place_mode and len(alg.parameterDefinitions()) <= 2: - # hack + if self.in_place_mode and not [d for d in alg.parameterDefinitions() if d.name() not in ('INPUT', 'OUTPUT')]: parameters = {} execute_in_place(alg, parameters) return diff --git a/src/analysis/processing/qgsalgorithmaddincrementalfield.cpp b/src/analysis/processing/qgsalgorithmaddincrementalfield.cpp index f8f0029d118..be00d97b64e 100644 --- a/src/analysis/processing/qgsalgorithmaddincrementalfield.cpp +++ b/src/analysis/processing/qgsalgorithmaddincrementalfield.cpp @@ -162,4 +162,10 @@ QgsFeatureList QgsAddIncrementalFieldAlgorithm::processFeature( const QgsFeature return QgsFeatureList() << f; } +bool QgsAddIncrementalFieldAlgorithm::supportInPlaceEdit( const QgsVectorLayer *layer ) const +{ + Q_UNUSED( layer ); + return false; +} + ///@endcond diff --git a/src/analysis/processing/qgsalgorithmaddincrementalfield.h b/src/analysis/processing/qgsalgorithmaddincrementalfield.h index 8e92726f6a6..4c006470f95 100644 --- a/src/analysis/processing/qgsalgorithmaddincrementalfield.h +++ b/src/analysis/processing/qgsalgorithmaddincrementalfield.h @@ -53,6 +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; private: @@ -68,7 +69,6 @@ class QgsAddIncrementalFieldAlgorithm : public QgsProcessingFeatureBasedAlgorith bool mSortAscending = true; bool mSortNullsFirst = false; - }; ///@endcond PRIVATE