mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-25 00:58:06 -05:00
131 lines
4.8 KiB
Plaintext
131 lines
4.8 KiB
Plaintext
|
|
typedef QMap<qint64, QgsFeature> QgsFeatureMap;
|
|
|
|
class QgsVectorLayerEditBuffer : QObject
|
|
{
|
|
%TypeHeaderCode
|
|
#include "qgsvectorlayereditbuffer.h"
|
|
%End
|
|
|
|
public:
|
|
QgsVectorLayerEditBuffer( QgsVectorLayer* layer );
|
|
~QgsVectorLayerEditBuffer();
|
|
|
|
/** Returns true if the provider has been modified since the last commit */
|
|
virtual bool isModified() const;
|
|
|
|
|
|
/** Adds a feature
|
|
@param f feature to add
|
|
@return True in case of success and False in case of error
|
|
*/
|
|
virtual bool addFeature( QgsFeature& f );
|
|
|
|
/** Insert a copy of the given features into the layer (but does not commit it) */
|
|
virtual bool addFeatures( QgsFeatureList& features );
|
|
|
|
/** Delete a feature from the layer (but does not commit it) */
|
|
virtual bool deleteFeature( QgsFeatureId fid );
|
|
|
|
/** Deletes a set of features from the layer (but does not commit it) */
|
|
virtual bool deleteFeatures( const QgsFeatureIds& fid );
|
|
|
|
/** Change feature's geometry */
|
|
virtual bool changeGeometry( QgsFeatureId fid, QgsGeometry* geom );
|
|
|
|
/** Changed an attribute value (but does not commit it) */
|
|
virtual bool changeAttributeValue( QgsFeatureId fid, int field, const QVariant &newValue, const QVariant &oldValue = QVariant() );
|
|
|
|
/** Add an attribute field (but does not commit it)
|
|
returns true if the field was added */
|
|
virtual bool addAttribute( const QgsField &field );
|
|
|
|
/** Delete an attribute field (but does not commit it) */
|
|
virtual bool deleteAttribute( int attr );
|
|
|
|
|
|
/**
|
|
Attempts to commit any changes to disk. Returns the result of the attempt.
|
|
If a commit fails, the in-memory changes are left alone.
|
|
|
|
This allows editing to continue if the commit failed on e.g. a
|
|
disallowed value in a Postgres database - the user can re-edit and try
|
|
again.
|
|
|
|
The commits occur in distinct stages,
|
|
(add attributes, add features, change attribute values, change
|
|
geometries, delete features, delete attributes)
|
|
so if a stage fails, it's difficult to roll back cleanly.
|
|
Therefore any error message also includes which stage failed so
|
|
that the user has some chance of repairing the damage cleanly.
|
|
*/
|
|
virtual bool commitChanges( QStringList& commitErrors );
|
|
|
|
/** Stop editing and discard the edits */
|
|
virtual void rollBack();
|
|
|
|
|
|
|
|
/** New features which are not commited. */
|
|
const QgsFeatureMap& addedFeatures();
|
|
|
|
/** Changed attributes values which are not commited */
|
|
const QgsChangedAttributesMap& changedAttributeValues();
|
|
|
|
/** Deleted attributes fields which are not commited. The list is kept sorted. */
|
|
const QgsAttributeList& deletedAttributeIds();
|
|
|
|
/** Added attributes fields which are not commited */
|
|
const QList<QgsField>& addedAttributes();
|
|
|
|
/** Changed geometries which are not commited. */
|
|
const QgsGeometryMap& changedGeometries();
|
|
|
|
const QgsFeatureIds deletedFeatureIds();
|
|
//QString dumpEditBuffer();
|
|
|
|
protected slots:
|
|
void undoIndexChanged( int index );
|
|
|
|
signals:
|
|
/** This signal is emitted when modifications has been done on layer */
|
|
void layerModified();
|
|
|
|
void featureAdded( QgsFeatureId fid );
|
|
void featureDeleted( QgsFeatureId fid );
|
|
void geometryChanged( QgsFeatureId fid, QgsGeometry &geom );
|
|
void attributeValueChanged( QgsFeatureId fid, int idx, const QVariant & );
|
|
void attributeAdded( int idx );
|
|
void attributeDeleted( int idx );
|
|
|
|
/** Signals emitted after committing changes */
|
|
void committedAttributesDeleted( const QString& layerId, const QgsAttributeList& deletedAttributes );
|
|
void committedAttributesAdded( const QString& layerId, const QList<QgsField>& addedAttributes );
|
|
void committedFeaturesAdded( const QString& layerId, const QgsFeatureList& addedFeatures );
|
|
void committedFeaturesRemoved( const QString& layerId, const QgsFeatureIds& deletedFeatureIds );
|
|
void committedAttributeValuesChanges( const QString& layerId, const QgsChangedAttributesMap& changedAttributesValues );
|
|
void committedGeometriesChanges( const QString& layerId, const QgsGeometryMap& changedGeometries );
|
|
|
|
protected:
|
|
|
|
void updateFields( QgsFields& fields );
|
|
|
|
/** Update feature with uncommited geometry updates */
|
|
void updateFeatureGeometry( QgsFeature &f );
|
|
|
|
/** Update feature with uncommited attribute updates */
|
|
void updateChangedAttributes( QgsFeature &f );
|
|
|
|
/** Update added and changed features after addition of an attribute */
|
|
void handleAttributeAdded( int index );
|
|
|
|
/** Update added and changed features after removal of an attribute */
|
|
void handleAttributeDeleted( int index );
|
|
|
|
|
|
/** Updates an index in an attribute map to a new value (for updates of changed attributes) */
|
|
void updateAttributeMapIndex( QgsAttributeMap& attrs, int index, int offset ) const;
|
|
|
|
void updateLayerFields();
|
|
};
|