QGIS API Documentation  3.20.0-Odense (decaadbb31)
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"
18 #include "qgsvectordataprovider.h"
20 #include "qgstransaction.h"
21 
23  : mModified( false )
24 {
25  L = layer;
26 }
27 
29 {
30  return mModified;
31 }
32 
33 bool 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 
84 bool 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 
104 bool QgsVectorLayerEditPassthrough::renameAttribute( int attr, const QString &newName )
105 {
106  return modify( new QgsVectorLayerUndoPassthroughCommandRenameAttribute( this, attr, newName ) );
107 }
108 
109 bool QgsVectorLayerEditPassthrough::commitChanges( QStringList & /*commitErrors*/ )
110 {
111  mModified = false;
112  return true;
113 }
114 
116 {
117  mModified = false;
118 }
119 
120 bool 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:51
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:124
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:38
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:736
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
const QgsField & field
Definition: qgsfield.h:463