QGIS API Documentation  3.27.0-Master (bef583a8ef)
qgsvectorlayereditbuffer.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsvectorlayereditbuffer.h
3  ---------------------
4  begin : Dezember 2012
5  copyright : (C) 2012 by Martin Dobias
6  email : wonder dot sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 #ifndef QGSVECTORLAYEREDITBUFFER_H
16 #define QGSVECTORLAYEREDITBUFFER_H
17 
18 #include "qgis_core.h"
19 #include <QList>
20 #include <QSet>
21 
22 #include "qgsfeature.h"
23 #include "qgsfields.h"
24 #include "qgsgeometry.h"
25 
26 class QgsVectorLayer;
28 
29 typedef QList<int> QgsAttributeList SIP_SKIP;
30 typedef QSet<int> QgsAttributeIds SIP_SKIP;
31 typedef QMap<QgsFeatureId, QgsFeature> QgsFeatureMap;
32 
37 class CORE_EXPORT QgsVectorLayerEditBuffer : public QObject
38 {
39  Q_OBJECT
40  public:
42 
44  virtual bool isModified() const;
45 
51  virtual bool addFeature( QgsFeature &f );
52 
54  virtual bool addFeatures( QgsFeatureList &features );
55 
57  virtual bool deleteFeature( QgsFeatureId fid );
58 
60  virtual bool deleteFeatures( const QgsFeatureIds &fid );
61 
63  virtual bool changeGeometry( QgsFeatureId fid, const QgsGeometry &geom );
64 
66  virtual bool changeAttributeValue( QgsFeatureId fid, int field, const QVariant &newValue, const QVariant &oldValue = QVariant() );
67 
73  virtual bool changeAttributeValues( QgsFeatureId fid, const QgsAttributeMap &newValues, const QgsAttributeMap &oldValues );
74 
79  virtual bool addAttribute( const QgsField &field );
80 
82  virtual bool deleteAttribute( int attr );
83 
90  virtual bool renameAttribute( int attr, const QString &newName );
91 
107  virtual bool commitChanges( QStringList &commitErrors );
108 
110  virtual void rollBack();
111 
116  QgsFeatureMap addedFeatures() const { return mAddedFeatures; }
117 
124  QgsFeatureIds allAddedOrEditedFeatures() const;
125 
132  bool isFeatureAdded( QgsFeatureId id ) const { return mAddedFeatures.contains( id ); }
133 
138  QgsChangedAttributesMap changedAttributeValues() const { return mChangedAttributeValues; }
139 
146  bool isFeatureAttributesChanged( QgsFeatureId id ) const { return mChangedAttributeValues.contains( id ); }
147 
152  QgsAttributeList deletedAttributeIds() const { return mDeletedAttributeIds; }
153 
160  bool isAttributeDeleted( int index ) const { return mDeletedAttributeIds.contains( index ); }
161 
165  QList<QgsField> addedAttributes() const { return mAddedAttributes; }
166 
171  QgsGeometryMap changedGeometries() const { return mChangedGeometries; }
172 
179  bool isFeatureGeometryChanged( QgsFeatureId id ) const { return mChangedGeometries.contains( id ); }
180 
185  QgsFeatureIds deletedFeatureIds() const { return mDeletedFeatureIds; }
186 
193  bool isFeatureDeleted( QgsFeatureId id ) const { return mDeletedFeatureIds.contains( id ); }
194 
200  void updateFields( QgsFields &fields ) SIP_SKIP;
201 
206  QgsVectorLayerEditBufferGroup *editBufferGroup() const;
207 
212  void setEditBufferGroup( QgsVectorLayerEditBufferGroup *editBufferGroup );
213 
214  //QString dumpEditBuffer();
215 
216  protected slots:
217  void undoIndexChanged( int index );
218 
219  signals:
222 
225 
231  void geometryChanged( QgsFeatureId fid, const QgsGeometry &geom );
232 
233  void attributeValueChanged( QgsFeatureId fid, int idx, const QVariant & );
234  void attributeAdded( int idx );
235  void attributeDeleted( int idx );
236 
243  void attributeRenamed( int idx, const QString &newName );
244 
246  void committedAttributesDeleted( const QString &layerId, const QgsAttributeList &deletedAttributes );
247  void committedAttributesAdded( const QString &layerId, const QList<QgsField> &addedAttributes );
248 
255  void committedAttributesRenamed( const QString &layerId, const QgsFieldNameMap &renamedAttributes );
256  void committedFeaturesAdded( const QString &layerId, const QgsFeatureList &addedFeatures );
257  void committedFeaturesRemoved( const QString &layerId, const QgsFeatureIds &deletedFeatureIds );
258  void committedAttributeValuesChanges( const QString &layerId, const QgsChangedAttributesMap &changedAttributesValues );
259  void committedGeometriesChanges( const QString &layerId, const QgsGeometryMap &changedGeometries );
260 
261  protected:
262 
265 
267  void updateFeatureGeometry( QgsFeature &f );
268 
270  void updateChangedAttributes( QgsFeature &f );
271 
273  void handleAttributeAdded( int index );
274 
276  void handleAttributeDeleted( int index );
277 
279  void updateAttributeMapIndex( QgsAttributeMap &attrs, int index, int offset ) const;
280 
281  void updateLayerFields();
282 
283  protected:
284  QgsVectorLayer *L = nullptr;
285 
294 
305 
312 
315 
318 
321 
323  QList<QgsField> mAddedAttributes;
324 
327 
330 
331  QgsVectorLayerEditBufferGroup *mEditBufferGroup = nullptr;
332 
333  friend class QgsGrassProvider; //GRASS provider totally abuses the edit buffer
334 
335  private:
336 
338 
344  bool commitChangesCheckGeometryTypeCompatibility( QStringList &commitErrors );
345 
352  bool commitChangesDeleteAttributes( bool &attributesDeleted, QStringList &commitErrors );
353 
360  bool commitChangesRenameAttributes( bool &attributesRenamed, QStringList &commitErrors );
361 
368  bool commitChangesAddAttributes( bool &attributesAdded, QStringList &commitErrors );
369 
376  bool commitChangesCheckAttributesModifications( const QgsFields oldFields, QStringList &commitErrors );
377 
384  bool commitChangesChangeAttributes( bool &attributesChanged, QStringList &commitErrors );
385 
392  bool commitChangesDeleteFeatures( bool &featuresDeleted, QStringList &commitErrors );
393 
400  bool commitChangesAddFeatures( bool &featuresAdded, QStringList &commitErrors );
401 };
402 
403 #endif // QGSVECTORLAYEREDITBUFFER_H
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
Encapsulate a field in an attribute table or data source.
Definition: qgsfield.h:51
Container of fields for a vector layer.
Definition: qgsfields.h:45
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:125
The edit buffer group manages a group of edit buffers.
void attributeRenamed(int idx, const QString &newName)
Emitted when an attribute has been renamed.
void committedAttributesDeleted(const QString &layerId, const QgsAttributeList &deletedAttributes)
Signals emitted after committing changes.
bool isFeatureDeleted(QgsFeatureId id) const
Returns true if the specified feature ID has been deleted but not committed.
QgsFeatureMap mAddedFeatures
New features which are not committed.
QgsFeatureIds deletedFeatureIds() const
Returns a list of deleted feature IDs which are not committed.
QgsChangedAttributesMap changedAttributeValues() const
Returns a map of features with changed attributes values which are not committed.
void committedAttributeValuesChanges(const QString &layerId, const QgsChangedAttributesMap &changedAttributesValues)
void geometryChanged(QgsFeatureId fid, const QgsGeometry &geom)
Emitted when a feature's geometry is changed.
bool isFeatureAdded(QgsFeatureId id) const
Returns true if the specified feature ID has been added but not committed.
void committedAttributesAdded(const QString &layerId, const QList< QgsField > &addedAttributes)
QList< QgsField > addedAttributes() const
Returns a list of added attributes fields which are not committed.
QgsVectorLayerEditBuffer()=default
Constructor for QgsVectorLayerEditBuffer.
QgsFieldNameMap mRenamedAttributes
Renamed attributes which are not committed.
QgsGeometryMap mChangedGeometries
Changed geometries which are not committed.
void committedAttributesRenamed(const QString &layerId, const QgsFieldNameMap &renamedAttributes)
Emitted after committing an attribute rename.
QgsAttributeList mDeletedAttributeIds
Deleted attributes fields which are not committed. The list is kept sorted.
QgsFeatureMap addedFeatures() const
Returns a map of new features which are not committed.
QgsFeatureIds mDeletedFeatureIds
Deleted feature IDs which are not committed.
bool isAttributeDeleted(int index) const
Returns true if the specified attribute has been deleted but not committed.
void committedFeaturesAdded(const QString &layerId, const QgsFeatureList &addedFeatures)
void featureDeleted(QgsFeatureId fid)
QgsGeometryMap changedGeometries() const
Returns a map of features with changed geometries which are not committed.
bool isFeatureAttributesChanged(QgsFeatureId id) const
Returns true if the specified feature ID has had an attribute changed but not committed.
bool isFeatureGeometryChanged(QgsFeatureId id) const
Returns true if the specified feature ID has had its geometry changed but not committed.
QgsAttributeList deletedAttributeIds() const
Returns a list of deleted attributes fields which are not committed.
void attributeAdded(int idx)
void committedGeometriesChanges(const QString &layerId, const QgsGeometryMap &changedGeometries)
void attributeDeleted(int idx)
void featureAdded(QgsFeatureId fid)
void attributeValueChanged(QgsFeatureId fid, int idx, const QVariant &)
QgsChangedAttributesMap mChangedAttributeValues
Changed attributes values which are not committed.
QList< QgsField > mAddedAttributes
Added attributes fields which are not committed.
void layerModified()
Emitted when modifications has been done on layer.
void committedFeaturesRemoved(const QString &layerId, const QgsFeatureIds &deletedFeatureIds)
Undo command for adding a new attribute to a vector layer.
Undo command for adding a feature to a vector layer.
Undo command for modifying an attribute of a feature from a vector layer.
Undo command for modifying the geometry of a feature from a vector layer.
Undo command for removing an existing attribute from a vector layer.
Undo command for deleting a feature from a vector layer.
Undo command for renaming an existing attribute of a vector layer.
Base class for undo commands within a QgsVectorLayerEditBuffer.
Undo command for adding attri to a vector layer in transaction group.
Undo command for adding a feature to a vector layer in transaction group mode.
Undo command for changing attr value from a vector layer in transaction group.
Undo command for changing attributes' values from a vector layer in transaction group.
Undo command for changing feature geometry from a vector layer in transaction group.
Undo command for deleting attri of a vector layer in transaction group.
Undo command for deleting features from a vector layer in transaction group.
Undo command for deleting attri of a vector layer in transaction group.
Undo command for running a specific sql query in transaction group.
Undo command for vector layer in transaction group mode.
Represents a vector layer which manages a vector based data sets.
#define SIP_SKIP
Definition: qgis_sip.h:126
QMap< int, QString > QgsFieldNameMap
Definition: qgsattributes.h:44
QMap< int, QVariant > QgsAttributeMap
Definition: qgsattributes.h:38
QMap< QgsFeatureId, QgsGeometry > QgsGeometryMap
Definition: qgsfeature.h:877
QMap< QgsFeatureId, QgsAttributeMap > QgsChangedAttributesMap
Definition: qgsfeature.h:868
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:882
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:37
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
Definition: qgsfeatureid.h:28
QList< int > QgsAttributeList
Definition: qgsfield.h:26
const QgsField & field
Definition: qgsfield.h:463
QSet< int > QgsAttributeIds
QMap< QgsFeatureId, QgsFeature > QgsFeatureMap