22using namespace Qt::StringLiterals;
31QString QgsDropTableFieldsAlgorithm::name()
const
33 return u
"deletecolumn"_s;
36QString QgsDropTableFieldsAlgorithm::displayName()
const
38 return QObject::tr(
"Drop field(s)" );
41QString QgsDropTableFieldsAlgorithm::shortHelpString()
const
43 return QObject::tr(
"This algorithm takes a vector layer and generates a new one that has the exact same content but without the selected columns." );
46QString QgsDropTableFieldsAlgorithm::shortDescription()
const
48 return QObject::tr(
"Deletes fields from a vector layer." );
51QStringList QgsDropTableFieldsAlgorithm::tags()
const
53 return QObject::tr(
"drop,delete,remove,fields,columns,attributes" ).split(
',' );
56QString QgsDropTableFieldsAlgorithm::group()
const
58 return QObject::tr(
"Vector table" );
61QString QgsDropTableFieldsAlgorithm::groupId()
const
63 return u
"vectortable"_s;
66QString QgsDropTableFieldsAlgorithm::outputName()
const
68 return QObject::tr(
"Remaining fields" );
71QList<int> QgsDropTableFieldsAlgorithm::inputLayerTypes()
const
81QgsDropTableFieldsAlgorithm *QgsDropTableFieldsAlgorithm::createInstance()
const
83 return new QgsDropTableFieldsAlgorithm();
86void QgsDropTableFieldsAlgorithm::initParameters(
const QVariantMap & )
91QgsFields QgsDropTableFieldsAlgorithm::outputFields(
const QgsFields &inputFields )
const
95 for (
const QString &field : mFieldsToDelete )
99 mFieldIndices.append( index );
103 std::sort( mFieldIndices.begin(), mFieldIndices.end(), std::greater<int>() );
106 for (
const int index : std::as_const( mFieldIndices ) )
108 outFields.
remove( index );
115 mFieldsToDelete = parameterAsStrings( parameters, u
"COLUMN"_s, context );
119 std::unique_ptr<QgsProcessingFeatureSource> source( parameterAsSource( parameters, u
"INPUT"_s, context ) );
122 for (
const QString &field : std::as_const( mFieldsToDelete ) )
124 const int index = source->fields().lookupField( field );
127 feedback->
pushInfo( QObject::tr(
"Field “%1” does not exist in input layer " ).arg( field ) );
140 for (
const int index : mFieldIndices )
142 attributes.remove( index );
148bool QgsDropTableFieldsAlgorithm::supportInPlaceEdit(
const QgsMapLayer *layer )
const
164QString QgsRetainTableFieldsAlgorithm::name()
const
166 return u
"retainfields"_s;
169QString QgsRetainTableFieldsAlgorithm::displayName()
const
171 return QObject::tr(
"Retain fields" );
174QString QgsRetainTableFieldsAlgorithm::shortHelpString()
const
176 return QObject::tr(
"This algorithm takes a vector layer and generates a new one that retains only the selected fields. All other fields will be dropped." );
179QString QgsRetainTableFieldsAlgorithm::shortDescription()
const
181 return QObject::tr(
"Retains selected fields from a vector layer." );
184QStringList QgsRetainTableFieldsAlgorithm::tags()
const
186 return QObject::tr(
"drop,delete,remove,retain,keep,other,fields,columns,attributes" ).split(
',' );
189QString QgsRetainTableFieldsAlgorithm::group()
const
191 return QObject::tr(
"Vector table" );
194QString QgsRetainTableFieldsAlgorithm::groupId()
const
196 return u
"vectortable"_s;
199QString QgsRetainTableFieldsAlgorithm::outputName()
const
201 return QObject::tr(
"Retained fields" );
204QList<int> QgsRetainTableFieldsAlgorithm::inputLayerTypes()
const
214QgsRetainTableFieldsAlgorithm *QgsRetainTableFieldsAlgorithm::createInstance()
const
216 return new QgsRetainTableFieldsAlgorithm();
219void QgsRetainTableFieldsAlgorithm::initParameters(
const QVariantMap & )
224QgsFields QgsRetainTableFieldsAlgorithm::outputFields(
const QgsFields &inputFields )
const
227 for (
const QString &field : mFieldsToRetain )
229 const int index = inputFields.
lookupField( field );
231 mFieldIndices.append( index );
234 std::sort( mFieldIndices.begin(), mFieldIndices.end() );
238 for (
const int index : std::as_const( mFieldIndices ) )
240 outFields.
append( inputFields.
at( index ) );
247 mFieldsToRetain = parameterAsStrings( parameters, u
"FIELDS"_s, context );
251 std::unique_ptr<QgsProcessingFeatureSource> source( parameterAsSource( parameters, u
"INPUT"_s, context ) );
254 for (
const QString &field : std::as_const( mFieldsToRetain ) )
256 const int index = source->fields().lookupField( field );
259 feedback->
pushInfo( QObject::tr(
"Field “%1” does not exist in input layer " ).arg( field ) );
273 outputAttributes.reserve( mFieldIndices.count() );
274 for (
const int index : mFieldIndices )
276 outputAttributes.append( inputAttributes.at( index ) );
282bool QgsRetainTableFieldsAlgorithm::supportInPlaceEdit(
const QgsMapLayer *layer )
const
@ Vector
Tables (i.e. vector layers with or without geometry). When used for a sink this indicates the sink ha...
QFlags< ProcessingAlgorithmFlag > ProcessingAlgorithmFlags
Flags indicating how and when an algorithm operates and should be exposed to users.
@ SkipGeometryValidityChecks
Invalid geometry checks should always be skipped. This flag can be useful for algorithms which always...
@ SupportsInPlaceEdits
Algorithm supports in-place editing.
QFlags< ProcessingFeatureSourceFlag > ProcessingFeatureSourceFlags
Flags which control how QgsProcessingFeatureSource fetches features.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
void setAttributes(const QgsAttributes &attrs)
Sets the feature's attributes.
Container of fields for a vector layer.
bool append(const QgsField &field, Qgis::FieldOrigin origin=Qgis::FieldOrigin::Provider, int originIndex=-1)
Appends a field.
void remove(int fieldIdx)
Removes the field with the given index.
QgsField at(int i) const
Returns the field at particular index (must be in range 0..N-1).
Q_INVOKABLE int lookupField(const QString &fieldName) const
Looks up field's index from the field name.
Base class for all map layer types.
Contains information about the context in which a processing algorithm is executed.
Qgis::ProcessingAlgorithmFlags flags() const override
Returns the flags indicating how and when the algorithm operates and should be exposed to users.
Base class for providing feedback from a processing algorithm.
virtual void pushInfo(const QString &info)
Pushes a general informational message from the algorithm.
A vector layer or feature source field parameter for processing algorithms.
QList< QgsFeature > QgsFeatureList