QGIS API Documentation  3.6.0-Noosa (5873452)
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
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
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.
bool isFeatureAdded(QgsFeatureId id) const
Returns true if the specified feature ID has been added but 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.
QgsChangedAttributesMap changedAttributeValues() const
Returns a map of features with changed attributes values 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.
QgsFeatureIds deletedFeatureIds() const
Returns a list of deleted feature IDs which are 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.
QgsGeometryMap changedGeometries() const
Returns a map of features with changed geometries which are not committed.
#define SIP_SKIP
Definition: qgis_sip.h:119
QMap< int, QVariant > QgsAttributeMap
Definition: qgsattributes.h:38
QgsGeometryMap mChangedGeometries
Changed geometries which are not committed.
QgsAttributeList deletedAttributeIds() const
Returns a list of deleted attributes fields 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 isFeatureAttributesChanged(QgsFeatureId id) const
Returns true if the specified feature ID has had an attribute changed but not committed.
bool isAttributeDeleted(int index) const
Returns true if the specified attribute has been deleted but not committed.
QMap< int, QString > QgsFieldNameMap
Definition: qgsattributes.h:44
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.
QgsFeatureMap addedFeatures() const
Returns a map of new features 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 isFeatureDeleted(QgsFeatureId id) const
Returns true if the specified feature ID has been deleted but not committed.
QList< int > QgsAttributeList
Definition: qgsfield.h:27
QList< QgsField > addedAttributes() const
Returns a list of added attributes fields which are 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.
bool isFeatureGeometryChanged(QgsFeatureId id) const
Returns true if the specified feature ID has had its geometry changed but not committed.