QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsvectorlayereditpassthrough.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsvectorlayereditpassthrough.cpp
3 ---------------------
4 begin : Jan 12 2015
5 copyright : (C) 2015 by Sandro Mani
6 email : manisandro 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
17#include "qgsvectorlayer.h"
20#include "qgstransaction.h"
21
23 : mModified( false )
24{
25 L = layer;
26}
27
29{
30 return mModified;
31}
32
33bool QgsVectorLayerEditPassthrough::modify( QgsVectorLayerUndoPassthroughCommand *cmd )
34{
35 L->undoStack()->push( cmd ); // push takes ownership -> no need for cmd to be a smart ptr
36 if ( cmd->hasError() )
37 return false;
38
39 if ( !mModified )
40 {
41 mModified = true;
42 emit layerModified();
43 }
44
45 return true;
46}
47
49{
51 if ( !modify( cmd ) ) // modify takes owneship -> no need for cmd to be a smart ptr
52 return false;
53
54 const QgsFeatureList features = cmd->features();
55 f = features.at( features.count() - 1 );
56 return true;
57}
58
60{
62 if ( !modify( cmd ) ) // modify takes owneship -> no need for cmd to be a smart ptr
63 return false;
64
65 features = cmd->features();
66 return true;
67}
68
70{
71 return modify( new QgsVectorLayerUndoPassthroughCommandDeleteFeatures( this, QgsFeatureIds() << fid ) );
72}
73
75{
76 return modify( new QgsVectorLayerUndoPassthroughCommandDeleteFeatures( this, fids ) );
77}
78
80{
81 return modify( new QgsVectorLayerUndoPassthroughCommandChangeGeometry( this, fid, geom ) );
82}
83
84bool QgsVectorLayerEditPassthrough::changeAttributeValue( QgsFeatureId fid, int field, const QVariant &newValue, const QVariant &/*oldValue*/ )
85{
86 return modify( new QgsVectorLayerUndoPassthroughCommandChangeAttribute( this, fid, field, newValue ) );
87}
88
90{
91 return modify( new QgsVectorLayerUndoPassthroughCommandChangeAttributes( this, fid, newValues, oldValues ) );
92}
93
95{
96 return modify( new QgsVectorLayerUndoPassthroughCommandAddAttribute( this, field ) );
97}
98
100{
101 return modify( new QgsVectorLayerUndoPassthroughCommandDeleteAttribute( this, attr ) );
102}
103
104bool QgsVectorLayerEditPassthrough::renameAttribute( int attr, const QString &newName )
105{
106 return modify( new QgsVectorLayerUndoPassthroughCommandRenameAttribute( this, attr, newName ) );
107}
108
109bool QgsVectorLayerEditPassthrough::commitChanges( QStringList & /*commitErrors*/ )
110{
111 mModified = false;
112 return true;
113}
114
116{
117 mModified = false;
118}
119
120bool QgsVectorLayerEditPassthrough::update( QgsTransaction *tr, const QString &sql, const QString &name )
121{
122 return modify( new QgsVectorLayerUndoPassthroughCommandUpdate( this, tr, sql, name ) );
123}
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:53
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:162
QUndoStack * undoStack()
Returns pointer to layer's undo stack.
This class allows including a set of layers in a database-side transaction, provided the layer data p...
friend class QgsVectorLayerUndoPassthroughCommandChangeGeometry
friend class QgsVectorLayerUndoPassthroughCommandDeleteFeatures
friend class QgsVectorLayerUndoPassthroughCommandUpdate
friend class QgsVectorLayerUndoPassthroughCommandAddAttribute
friend class QgsVectorLayerUndoPassthroughCommandRenameAttribute
friend class QgsVectorLayerUndoPassthroughCommandChangeAttributes
friend class QgsVectorLayerUndoPassthroughCommandChangeAttribute
friend class QgsVectorLayerUndoPassthroughCommandDeleteAttribute
void layerModified()
Emitted when modifications has been done on layer.
friend class QgsVectorLayerUndoPassthroughCommandAddFeatures
bool addFeature(QgsFeature &f) override
Adds a feature.
bool renameAttribute(int attr, const QString &newName) override
Renames an attribute field (but does not commit it)
void rollBack() override
Stop editing and discard the edits.
bool changeAttributeValue(QgsFeatureId fid, int field, const QVariant &newValue, const QVariant &oldValue=QVariant()) override
Changed an attribute value (but does not commit it)
bool addFeatures(QgsFeatureList &features) override
Insert a copy of the given features into the layer (but does not commit it)
bool commitChanges(QStringList &commitErrors) override
Attempts to commit any changes to disk.
QgsVectorLayerEditPassthrough(QgsVectorLayer *layer)
bool deleteFeatures(const QgsFeatureIds &fids) override
Deletes a set of features from the layer (but does not commit it)
bool deleteAttribute(int attr) override
Deletes an attribute field (but does not commit it)
bool changeAttributeValues(QgsFeatureId fid, const QgsAttributeMap &newValues, const QgsAttributeMap &oldValues) override
Changes values of attributes (but does not commit it).
bool isModified() const override
Returns true if the provider has been modified since the last commit.
bool deleteFeature(QgsFeatureId fid) override
Delete a feature from the layer (but does not commit it)
bool changeGeometry(QgsFeatureId fid, const QgsGeometry &geom) override
Change feature's geometry.
bool update(QgsTransaction *transaction, const QString &sql, const QString &name)
Update underlying data with a SQL query embedded in a transaction.
bool addAttribute(const QgsField &field) override
Adds an attribute field (but does not commit it) returns true if the field was added.
Undo command for adding a feature to a vector layer in transaction group mode.
QgsFeatureList features() const
List of features (added feaures can be modified by default values from database)
Undo command for vector layer in transaction group mode.
Represents a vector layer which manages a vector based data sets.
QMap< int, QVariant > QgsAttributeMap
Definition: qgsattributes.h:42
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:917
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