QgsVectorLayerUndoCommandChangeAttribute::QgsVectorLayerUndoCommandChangeAttribute( QgsVectorLayerEditBuffer* buffer, QgsFeatureId fid, int fieldIndex, const QVariant &newValue, const QVariant &oldValue ) : QgsVectorLayerUndoCommand( buffer ) , mFid( fid ) , mFieldIndex( fieldIndex ) , mOldValue( oldValue ) , mNewValue( newValue ) , mFirstChange( true ) { if ( FID_IS_NEW( mFid ) ) { // work with added feature QgsFeatureMap::const_iterator it = mBuffer->mAddedFeatures.constFind( mFid ); Q_ASSERT( it != mBuffer->mAddedFeatures.constEnd() ); if ( it.value().attribute( mFieldIndex ).isValid() ) { mOldValue = it.value().attribute( mFieldIndex ); mFirstChange = false; } } else if ( mBuffer->mChangedAttributeValues.contains( mFid ) && mBuffer->mChangedAttributeValues[mFid].contains( mFieldIndex ) ) { mOldValue = mBuffer->mChangedAttributeValues[mFid][mFieldIndex]; mFirstChange = false; } }
QgsVectorLayerUndoCommandDeleteFeature::QgsVectorLayerUndoCommandDeleteFeature( QgsVectorLayerEditBuffer* buffer, QgsFeatureId fid ) : QgsVectorLayerUndoCommand( buffer ) { mFid = fid; if ( FID_IS_NEW( mFid ) ) { QgsFeatureMap::const_iterator it = mBuffer->mAddedFeatures.constFind( mFid ); Q_ASSERT( it != mBuffer->mAddedFeatures.constEnd() ); mOldAddedFeature = it.value(); } }
QgsVectorLayerUndoCommandChangeGeometry::QgsVectorLayerUndoCommandChangeGeometry( QgsVectorLayerEditBuffer *buffer, QgsFeatureId fid, const QgsGeometry &newGeom ) : QgsVectorLayerUndoCommand( buffer ) , mFid( fid ) , mNewGeom( newGeom ) { if ( FID_IS_NEW( mFid ) ) { QgsFeatureMap::const_iterator it = mBuffer->mAddedFeatures.constFind( mFid ); Q_ASSERT( it != mBuffer->mAddedFeatures.constEnd() ); mOldGeom = ( it.value().geometry() ); } else { mOldGeom = mBuffer->mChangedGeometries.value( mFid, QgsGeometry() ); } }
QgsVectorLayerUndoCommandChangeGeometry::QgsVectorLayerUndoCommandChangeGeometry( QgsVectorLayerEditBuffer* buffer, QgsFeatureId fid, const QgsGeometry& newGeom ) : QgsVectorLayerUndoCommand( buffer ) , mFid( fid ) , mNewGeom( newGeom ) { if ( FID_IS_NEW( mFid ) ) { QgsFeatureMap::const_iterator it = mBuffer->mAddedFeatures.constFind( mFid ); Q_ASSERT( it != mBuffer->mAddedFeatures.constEnd() ); mOldGeom = ( it.value().geometry() ); } else { bool changedAlready = mBuffer->mChangedGeometries.contains( mFid ); QgsGeometry geom; bool cachedGeom = cache()->geometry( mFid, geom ); mOldGeom = ( changedAlready && cachedGeom ) ? geom : QgsGeometry(); } }
QgsVectorLayerUndoCommandDeleteAttribute::QgsVectorLayerUndoCommandDeleteAttribute( QgsVectorLayerEditBuffer* buffer, int fieldIndex ) : QgsVectorLayerUndoCommand( buffer ) , mFieldIndex( fieldIndex ) { const QgsFields& fields = layer()->fields(); QgsFields::FieldOrigin origin = fields.fieldOrigin( mFieldIndex ); mOriginIndex = fields.fieldOriginIndex( mFieldIndex ); mProviderField = ( origin == QgsFields::OriginProvider ); mFieldName = fields.field( mFieldIndex ).name(); mOldEditorWidgetConfig = mBuffer->L->editFormConfig().widgetConfig( mFieldName ); if ( !mProviderField ) { // need to store the field definition mOldField = mBuffer->mAddedAttributes[mOriginIndex]; } if ( mBuffer->mRenamedAttributes.contains( fieldIndex ) ) { mOldName = mBuffer->mRenamedAttributes.value( fieldIndex ); } // save values of new features for ( QgsFeatureMap::const_iterator it = mBuffer->mAddedFeatures.constBegin(); it != mBuffer->mAddedFeatures.constEnd(); ++it ) { const QgsFeature& f = it.value(); mDeletedValues.insert( f.id(), f.attribute( mFieldIndex ) ); } // save changed values for ( QgsChangedAttributesMap::const_iterator it = mBuffer->mChangedAttributeValues.constBegin(); it != mBuffer->mChangedAttributeValues.constEnd(); ++it ) { const QgsAttributeMap& attrs = it.value(); if ( attrs.contains( mFieldIndex ) ) mDeletedValues.insert( it.key(), attrs[mFieldIndex] ); } }