QGIS API Documentation  3.14.0-Pi (9f7028fd23)
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 
27 
28 typedef QList<int> QgsAttributeList SIP_SKIP;
29 typedef QSet<int> QgsAttributeIds SIP_SKIP;
30 typedef QMap<QgsFeatureId, QgsFeature> QgsFeatureMap;
31 
36 class CORE_EXPORT QgsVectorLayerEditBuffer : public QObject
37 {
38  Q_OBJECT
39  public:
41 
43  virtual bool isModified() const;
44 
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  bool isFeatureAdded( QgsFeatureId id ) const { return mAddedFeatures.contains( id ); }
125 
130  QgsChangedAttributesMap changedAttributeValues() const { return mChangedAttributeValues; }
131 
138  bool isFeatureAttributesChanged( QgsFeatureId id ) const { return mChangedAttributeValues.contains( id ); }
139 
144  QgsAttributeList deletedAttributeIds() const { return mDeletedAttributeIds; }
145 
152  bool isAttributeDeleted( int index ) const { return mDeletedAttributeIds.contains( index ); }
153 
157  QList<QgsField> addedAttributes() const { return mAddedAttributes; }
158 
163  QgsGeometryMap changedGeometries() const { return mChangedGeometries; }
164 
171  bool isFeatureGeometryChanged( QgsFeatureId id ) const { return mChangedGeometries.contains( id ); }
172 
177  QgsFeatureIds deletedFeatureIds() const { return mDeletedFeatureIds; }
178 
185  bool isFeatureDeleted( QgsFeatureId id ) const { return mDeletedFeatureIds.contains( id ); }
186 
187  //QString dumpEditBuffer();
188 
189  protected slots:
190  void undoIndexChanged( int index );
191 
192  signals:
194  void layerModified();
195 
196  void featureAdded( QgsFeatureId fid );
197  void featureDeleted( QgsFeatureId fid );
198 
204  void geometryChanged( QgsFeatureId fid, const QgsGeometry &geom );
205 
206  void attributeValueChanged( QgsFeatureId fid, int idx, const QVariant & );
207  void attributeAdded( int idx );
208  void attributeDeleted( int idx );
209 
216  void attributeRenamed( int idx, const QString &newName );
217 
219  void committedAttributesDeleted( const QString &layerId, const QgsAttributeList &deletedAttributes );
220  void committedAttributesAdded( const QString &layerId, const QList<QgsField> &addedAttributes );
221 
228  void committedAttributesRenamed( const QString &layerId, const QgsFieldNameMap &renamedAttributes );
229  void committedFeaturesAdded( const QString &layerId, const QgsFeatureList &addedFeatures );
230  void committedFeaturesRemoved( const QString &layerId, const QgsFeatureIds &deletedFeatureIds );
231  void committedAttributeValuesChanges( const QString &layerId, const QgsChangedAttributesMap &changedAttributesValues );
232  void committedGeometriesChanges( const QString &layerId, const QgsGeometryMap &changedGeometries );
233 
234  protected:
235 
237  QgsVectorLayerEditBuffer() = default;
238 
239  void updateFields( QgsFields &fields );
240 
242  void updateFeatureGeometry( QgsFeature &f );
243 
245  void updateChangedAttributes( QgsFeature &f );
246 
248  void handleAttributeAdded( int index );
249 
251  void handleAttributeDeleted( int index );
252 
254  void updateAttributeMapIndex( QgsAttributeMap &attrs, int index, int offset ) const;
255 
256  void updateLayerFields();
257 
258  protected:
259  QgsVectorLayer *L = nullptr;
260  friend class QgsVectorLayer;
261 
270 
281 
288 
291 
294 
297 
299  QList<QgsField> mAddedAttributes;
300 
303 
306 
307  friend class QgsGrassProvider; //GRASS provider totally abuses the edit buffer
308 };
309 
310 #endif // QGSVECTORLAYEREDITBUFFER_H
qgsfields.h
QgsVectorLayerEditBuffer::isFeatureAttributesChanged
bool isFeatureAttributesChanged(QgsFeatureId id) const
Returns true if the specified feature ID has had an attribute changed but not committed.
Definition: qgsvectorlayereditbuffer.h:138
QgsAttributeIds
QSet< int > QgsAttributeIds
Definition: qgsvectordataprovider.h:39
QgsVectorLayerUndoCommandRenameAttribute
Undo command for renaming an existing attribute of a vector layer.
Definition: qgsvectorlayerundocommand.h:239
QgsVectorLayerEditBuffer::mAddedAttributes
QList< QgsField > mAddedAttributes
Added attributes fields which are not committed.
Definition: qgsvectorlayereditbuffer.h:299
QgsVectorLayerUndoCommandAddAttribute
Undo command for adding a new attribute to a vector layer.
Definition: qgsvectorlayerundocommand.h:180
QgsVectorLayerEditBuffer::mDeletedFeatureIds
QgsFeatureIds mDeletedFeatureIds
Deleted feature IDs which are not committed.
Definition: qgsvectorlayereditbuffer.h:287
QgsVectorLayerUndoPassthroughCommandChangeAttributes
Undo command for changing attributes' values from a vector layer in transaction group.
Definition: qgsvectorlayerundopassthroughcommand.h:215
QgsFields
Definition: qgsfields.h:44
QgsVectorLayerEditBuffer::mDeletedAttributeIds
QgsAttributeList mDeletedAttributeIds
Deleted attributes fields which are not committed. The list is kept sorted.
Definition: qgsvectorlayereditbuffer.h:296
qgsfeature.h
QgsVectorLayerEditBuffer::isFeatureDeleted
bool isFeatureDeleted(QgsFeatureId id) const
Returns true if the specified feature ID has been deleted but not committed.
Definition: qgsvectorlayereditbuffer.h:185
QgsVectorLayerUndoCommandAddFeature
Undo command for adding a feature to a vector layer.
Definition: qgsvectorlayerundocommand.h:70
QgsVectorLayerUndoPassthroughCommandChangeGeometry
Undo command for changing feature geometry from a vector layer in transaction group.
Definition: qgsvectorlayerundopassthroughcommand.h:157
QgsChangedAttributesMap
QMap< QgsFeatureId, QgsAttributeMap > QgsChangedAttributesMap
Definition: qgsfeature.h:558
QgsVectorLayerEditBuffer::isAttributeDeleted
bool isAttributeDeleted(int index) const
Returns true if the specified attribute has been deleted but not committed.
Definition: qgsvectorlayereditbuffer.h:152
QgsVectorLayerUndoPassthroughCommand
Undo command for vector layer in transaction group mode.
Definition: qgsvectorlayerundopassthroughcommand.h:33
QgsAttributeList
QList< int > QgsAttributeList
Definition: qgsfield.h:26
QgsVectorLayerUndoPassthroughCommandAddAttribute
Undo command for adding attri to a vector layer in transaction group.
Definition: qgsvectorlayerundopassthroughcommand.h:244
QgsVectorLayerEditBuffer::isFeatureGeometryChanged
bool isFeatureGeometryChanged(QgsFeatureId id) const
Returns true if the specified feature ID has had its geometry changed but not committed.
Definition: qgsvectorlayereditbuffer.h:171
SIP_SKIP
#define SIP_SKIP
Definition: qgis_sip.h:126
QgsVectorLayerEditBuffer::mAddedFeatures
QgsFeatureMap mAddedFeatures
New features which are not committed.
Definition: qgsvectorlayereditbuffer.h:290
QgsVectorLayerUndoPassthroughCommandAddFeatures
Undo command for adding a feature to a vector layer in transaction group mode.
Definition: qgsvectorlayerundopassthroughcommand.h:100
QgsVectorLayerEditBuffer::deletedAttributeIds
QgsAttributeList deletedAttributeIds() const
Returns a list of deleted attributes fields which are not committed.
Definition: qgsvectorlayereditbuffer.h:144
QgsVectorLayerEditBuffer::changedAttributeValues
QgsChangedAttributesMap changedAttributeValues() const
Returns a map of features with changed attributes values which are not committed.
Definition: qgsvectorlayereditbuffer.h:130
QgsFeatureList
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:572
QgsAttributeMap
QMap< int, QVariant > QgsAttributeMap
Definition: qgsattributes.h:38
QgsVectorLayerUndoPassthroughCommandDeleteFeatures
Undo command for deleting features from a vector layer in transaction group.
Definition: qgsvectorlayerundopassthroughcommand.h:132
QgsVectorLayerUndoCommandChangeGeometry
Undo command for modifying the geometry of a feature from a vector layer.
Definition: qgsvectorlayerundocommand.h:120
QgsVectorLayerUndoPassthroughCommandRenameAttribute
Undo command for deleting attri of a vector layer in transaction group.
Definition: qgsvectorlayerundopassthroughcommand.h:294
QgsFeatureMap
QMap< QgsFeatureId, QgsFeature > QgsFeatureMap
Definition: qgsvectorlayereditbuffer.h:30
QgsVectorLayerUndoCommandDeleteAttribute
Undo command for removing an existing attribute from a vector layer.
Definition: qgsvectorlayerundocommand.h:205
QgsFeatureIds
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:34
QgsVectorLayerEditBuffer::deletedFeatureIds
QgsFeatureIds deletedFeatureIds() const
Returns a list of deleted feature IDs which are not committed.
Definition: qgsvectorlayereditbuffer.h:177
QgsVectorLayerUndoCommand
Base class for undo commands within a QgsVectorLayerEditBuffer.
Definition: qgsvectorlayerundocommand.h:40
QgsVectorLayerEditBuffer::isFeatureAdded
bool isFeatureAdded(QgsFeatureId id) const
Returns true if the specified feature ID has been added but not committed.
Definition: qgsvectorlayereditbuffer.h:124
QgsVectorLayerEditBuffer::mRenamedAttributes
QgsFieldNameMap mRenamedAttributes
Renamed attributes which are not committed.
Definition: qgsvectorlayereditbuffer.h:302
qgsgeometry.h
QgsGeometry
Definition: qgsgeometry.h:122
QgsVectorLayerUndoCommandDeleteFeature
Undo command for deleting a feature from a vector layer.
Definition: qgsvectorlayerundocommand.h:95
QgsVectorLayerEditBuffer
Definition: qgsvectorlayereditbuffer.h:36
QgsVectorLayer
Definition: qgsvectorlayer.h:385
QgsVectorLayerUndoPassthroughCommandUpdate
Undo command for running a specific sql query in transaction group.
Definition: qgsvectorlayerundopassthroughcommand.h:322
QgsVectorLayerEditBuffer::changedGeometries
QgsGeometryMap changedGeometries() const
Returns a map of features with changed geometries which are not committed.
Definition: qgsvectorlayereditbuffer.h:163
QgsFieldNameMap
QMap< int, QString > QgsFieldNameMap
Definition: qgsattributes.h:44
QgsGeometryMap
QMap< QgsFeatureId, QgsGeometry > QgsGeometryMap
Definition: qgsfeature.h:567
QgsFeature
Definition: qgsfeature.h:55
QgsVectorLayerEditBuffer::mChangedGeometries
QgsGeometryMap mChangedGeometries
Changed geometries which are not committed.
Definition: qgsvectorlayereditbuffer.h:305
QgsVectorLayerUndoPassthroughCommandDeleteAttribute
Undo command for deleting attri of a vector layer in transaction group.
Definition: qgsvectorlayerundopassthroughcommand.h:269
QgsVectorLayerEditBuffer::addedAttributes
QList< QgsField > addedAttributes() const
Returns a list of added attributes fields which are not committed.
Definition: qgsvectorlayereditbuffer.h:157
QgsVectorLayerUndoCommandChangeAttribute
Undo command for modifying an attribute of a feature from a vector layer.
Definition: qgsvectorlayerundocommand.h:150
QgsVectorLayerUndoPassthroughCommandChangeAttribute
Undo command for changing attr value from a vector layer in transaction group.
Definition: qgsvectorlayerundopassthroughcommand.h:185
QgsVectorLayerEditBuffer::addedFeatures
QgsFeatureMap addedFeatures() const
Returns a map of new features which are not committed.
Definition: qgsvectorlayereditbuffer.h:116
QgsVectorLayerEditBuffer::mChangedAttributeValues
QgsChangedAttributesMap mChangedAttributeValues
Changed attributes values which are not committed.
Definition: qgsvectorlayereditbuffer.h:293
QgsFeatureId
qint64 QgsFeatureId
Definition: qgsfeatureid.h:25
QgsField
Definition: qgsfield.h:49