QGIS API Documentation  3.4.15-Madeira (e83d02e274)
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 
78  virtual bool addAttribute( const QgsField &field );
79 
81  virtual bool deleteAttribute( int attr );
82 
89  virtual bool renameAttribute( int attr, const QString &newName );
90 
106  virtual bool commitChanges( QStringList &commitErrors );
107 
109  virtual void rollBack();
110 
115  QgsFeatureMap addedFeatures() const { return mAddedFeatures; }
116 
123  bool isFeatureAdded( QgsFeatureId id ) const { return mAddedFeatures.contains( id ); }
124 
129  QgsChangedAttributesMap changedAttributeValues() const { return mChangedAttributeValues; }
130 
137  bool isFeatureAttributesChanged( QgsFeatureId id ) const { return mChangedAttributeValues.contains( id ); }
138 
143  QgsAttributeList deletedAttributeIds() const { return mDeletedAttributeIds; }
144 
151  bool isAttributeDeleted( int index ) const { return mDeletedAttributeIds.contains( index ); }
152 
156  QList<QgsField> addedAttributes() const { return mAddedAttributes; }
157 
162  QgsGeometryMap changedGeometries() const { return mChangedGeometries; }
163 
170  bool isFeatureGeometryChanged( QgsFeatureId id ) const { return mChangedGeometries.contains( id ); }
171 
176  QgsFeatureIds deletedFeatureIds() const { return mDeletedFeatureIds; }
177 
184  bool isFeatureDeleted( QgsFeatureId id ) const { return mDeletedFeatureIds.contains( id ); }
185 
186  //QString dumpEditBuffer();
187 
188  protected slots:
189  void undoIndexChanged( int index );
190 
191  signals:
193  void layerModified();
194 
195  void featureAdded( QgsFeatureId fid );
196  void featureDeleted( QgsFeatureId fid );
197 
203  void geometryChanged( QgsFeatureId fid, const QgsGeometry &geom );
204 
205  void attributeValueChanged( QgsFeatureId fid, int idx, const QVariant & );
206  void attributeAdded( int idx );
207  void attributeDeleted( int idx );
208 
215  void attributeRenamed( int idx, const QString &newName );
216 
218  void committedAttributesDeleted( const QString &layerId, const QgsAttributeList &deletedAttributes );
219  void committedAttributesAdded( const QString &layerId, const QList<QgsField> &addedAttributes );
220 
227  void committedAttributesRenamed( const QString &layerId, const QgsFieldNameMap &renamedAttributes );
228  void committedFeaturesAdded( const QString &layerId, const QgsFeatureList &addedFeatures );
229  void committedFeaturesRemoved( const QString &layerId, const QgsFeatureIds &deletedFeatureIds );
230  void committedAttributeValuesChanges( const QString &layerId, const QgsChangedAttributesMap &changedAttributesValues );
231  void committedGeometriesChanges( const QString &layerId, const QgsGeometryMap &changedGeometries );
232 
233  protected:
234 
236  QgsVectorLayerEditBuffer() = default;
237 
238  void updateFields( QgsFields &fields );
239 
241  void updateFeatureGeometry( QgsFeature &f );
242 
244  void updateChangedAttributes( QgsFeature &f );
245 
247  void handleAttributeAdded( int index );
248 
250  void handleAttributeDeleted( int index );
251 
253  void updateAttributeMapIndex( QgsAttributeMap &attrs, int index, int offset ) const;
254 
255  void updateLayerFields();
256 
257  protected:
258  QgsVectorLayer *L = nullptr;
259  friend class QgsVectorLayer;
260 
269 
280 
287 
290 
293 
296 
298  QList<QgsField> mAddedAttributes;
299 
302 
305 
306  friend class QgsGrassProvider; //GRASS provider totally abuses the edit buffer
307 };
308 
309 #endif // QGSVECTORLAYEREDITBUFFER_H
Undo command for deleting attri of a vector layer in transaction group.
Undo command for removing an existing attribute from a vector layer.
QMap< QgsFeatureId, QgsGeometry > QgsGeometryMap
Definition: qgsfeature.h:566
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:34
QgsFeatureIds deletedFeatureIds() const
Returns a list of deleted feature IDs which are not committed.
Undo command for deleting a feature from a vector layer.
Undo command for deleting attri of a vector layer in transaction group.
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:571
qint64 QgsFeatureId
Definition: qgsfeatureid.h:25
bool isFeatureGeometryChanged(QgsFeatureId id) const
Returns true if the specified feature ID has had its geometry changed but not committed.
Base class for undo commands within a QgsVectorLayerEditBuffer.
Container of fields for a vector layer.
Definition: qgsfields.h:42
Undo command for modifying an attribute of a feature from a vector layer.
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:106
Undo command for vector layer in transaction group mode.
QgsChangedAttributesMap mChangedAttributeValues
Changed attributes values which are not committed.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:55
QgsFieldNameMap mRenamedAttributes
Renamed attributes which are not committed.
Undo command for adding attri to a vector layer in transaction group.
Undo command for changing attr value from a vector layer in transaction group.
QgsAttributeList deletedAttributeIds() const
Returns a list of deleted attributes fields which are not committed.
bool isFeatureDeleted(QgsFeatureId id) const
Returns true if the specified feature ID has been deleted but not committed.
Undo command for adding a feature to a vector layer.
QSet< int > QgsAttributeIds
Undo command for changing feature geometry from a vector layer in transaction group.
Undo command for modifying the geometry of a feature from a vector layer.
#define SIP_SKIP
Definition: qgis_sip.h:119
QMap< int, QVariant > QgsAttributeMap
Definition: qgsattributes.h:38
QgsGeometryMap mChangedGeometries
Changed geometries which are not committed.
Undo command for renaming an existing attribute of a vector layer.
Undo command for running a specific sql query in transaction group.
QgsFeatureIds mDeletedFeatureIds
Deleted feature IDs which are not committed.
Encapsulate a field in an attribute table or data source.
Definition: qgsfield.h:48
bool isAttributeDeleted(int index) const
Returns true if the specified attribute has been deleted but not committed.
QgsGeometryMap changedGeometries() const
Returns a map of features with changed geometries which are not committed.
QMap< int, QString > QgsFieldNameMap
Definition: qgsattributes.h:44
QgsFeatureMap addedFeatures() const
Returns a map of new features which are not committed.
Undo command for adding a new attribute to a vector layer.
Undo command for deleting features from a vector layer in transaction group.
QMap< QgsFeatureId, QgsFeature > QgsFeatureMap
Undo command for changing attributes&#39; values from a vector layer in transaction group.
QgsChangedAttributesMap changedAttributeValues() const
Returns a map of features with changed attributes values which are not committed. ...
QList< QgsField > addedAttributes() const
Returns a list of added attributes fields which are not committed.
QList< QgsField > mAddedAttributes
Added attributes fields which are not committed.
QMap< QgsFeatureId, QgsAttributeMap > QgsChangedAttributesMap
Definition: qgsfeature.h:557
Undo command for adding a feature to a vector layer in transaction group mode.
bool isFeatureAttributesChanged(QgsFeatureId id) const
Returns true if the specified feature ID has had an attribute changed but not committed.
QList< int > QgsAttributeList
Definition: qgsfield.h:27
bool isFeatureAdded(QgsFeatureId id) const
Returns true if the specified feature ID has been added but not committed.
QgsFeatureMap mAddedFeatures
New features which are not committed.
Represents a vector layer which manages a vector based data sets.
QgsAttributeList mDeletedAttributeIds
Deleted attributes fields which are not committed. The list is kept sorted.