mirror of
https://github.com/qgis/QGIS.git
synced 2025-03-03 00:02:25 -05:00
Fix pasting features - only a single insert operation, no unnecessary updates
This commit is contained in:
parent
66b9f035d4
commit
0772c78512
@ -52,7 +52,7 @@ void QgsFixAttributeDialog::init( QgsVectorLayer *layer, const QgsAttributeEdito
|
|||||||
infoLayout->addWidget( mProgressBar );
|
infoLayout->addWidget( mProgressBar );
|
||||||
QgsFeature feature;
|
QgsFeature feature;
|
||||||
mAttributeForm = new QgsAttributeForm( layer, *mCurrentFeature, context, this );
|
mAttributeForm = new QgsAttributeForm( layer, *mCurrentFeature, context, this );
|
||||||
mAttributeForm->setMode( QgsAttributeEditorContext::SingleEditMode );
|
mAttributeForm->setMode( QgsAttributeEditorContext::FixAttributeMode );
|
||||||
mAttributeForm->disconnectButtonBox();
|
mAttributeForm->disconnectButtonBox();
|
||||||
layout()->addWidget( mAttributeForm );
|
layout()->addWidget( mAttributeForm );
|
||||||
|
|
||||||
|
@ -49,6 +49,7 @@ class GUI_EXPORT QgsAttributeEditorContext
|
|||||||
SingleEditMode, //!< Single edit mode, for editing a single feature
|
SingleEditMode, //!< Single edit mode, for editing a single feature
|
||||||
AddFeatureMode, /*!< Add feature mode, for setting attributes for a new feature. In this mode the dialog will be editable even with an invalid feature and
|
AddFeatureMode, /*!< Add feature mode, for setting attributes for a new feature. In this mode the dialog will be editable even with an invalid feature and
|
||||||
will add a new feature when the form is accepted. */
|
will add a new feature when the form is accepted. */
|
||||||
|
FixAttributeMode, //!< Fix feature mode, for modifying the feature attributes without saving. The updated feature is available via `feature()` after `save()`
|
||||||
MultiEditMode, //!< Multi edit mode, for editing fields of multiple features at once
|
MultiEditMode, //!< Multi edit mode, for editing fields of multiple features at once
|
||||||
SearchMode, //!< Form values are used for searching/filtering the layer
|
SearchMode, //!< Form values are used for searching/filtering the layer
|
||||||
AggregateSearchMode, //!< Form is in aggregate search mode, show each widget in this mode \since QGIS 3.0
|
AggregateSearchMode, //!< Form is in aggregate search mode, show each widget in this mode \since QGIS 3.0
|
||||||
|
@ -173,6 +173,10 @@ void QgsAttributeForm::setMode( QgsAttributeEditorContext::Mode mode )
|
|||||||
w->setMode( QgsAttributeFormWidget::DefaultMode );
|
w->setMode( QgsAttributeFormWidget::DefaultMode );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case QgsAttributeEditorContext::FixAttributeMode:
|
||||||
|
w->setMode( QgsAttributeFormWidget::DefaultMode );
|
||||||
|
break;
|
||||||
|
|
||||||
case QgsAttributeEditorContext::MultiEditMode:
|
case QgsAttributeEditorContext::MultiEditMode:
|
||||||
w->setMode( QgsAttributeFormWidget::MultiEditMode );
|
w->setMode( QgsAttributeFormWidget::MultiEditMode );
|
||||||
break;
|
break;
|
||||||
@ -216,6 +220,11 @@ void QgsAttributeForm::setMode( QgsAttributeEditorContext::Mode mode )
|
|||||||
mSearchButtonBox->setVisible( false );
|
mSearchButtonBox->setVisible( false );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case QgsAttributeEditorContext::FixAttributeMode:
|
||||||
|
synchronizeEnabledState();
|
||||||
|
mSearchButtonBox->setVisible( false );
|
||||||
|
break;
|
||||||
|
|
||||||
case QgsAttributeEditorContext::MultiEditMode:
|
case QgsAttributeEditorContext::MultiEditMode:
|
||||||
resetMultiEdit( false );
|
resetMultiEdit( false );
|
||||||
synchronizeEnabledState();
|
synchronizeEnabledState();
|
||||||
@ -278,6 +287,7 @@ void QgsAttributeForm::setFeature( const QgsFeature &feature )
|
|||||||
case QgsAttributeEditorContext::SingleEditMode:
|
case QgsAttributeEditorContext::SingleEditMode:
|
||||||
case QgsAttributeEditorContext::IdentifyMode:
|
case QgsAttributeEditorContext::IdentifyMode:
|
||||||
case QgsAttributeEditorContext::AddFeatureMode:
|
case QgsAttributeEditorContext::AddFeatureMode:
|
||||||
|
case QgsAttributeEditorContext::FixAttributeMode:
|
||||||
{
|
{
|
||||||
resetValues();
|
resetValues();
|
||||||
|
|
||||||
@ -320,7 +330,7 @@ bool QgsAttributeForm::saveEdits()
|
|||||||
|
|
||||||
// An add dialog should perform an action by default
|
// An add dialog should perform an action by default
|
||||||
// and not only if attributes have "changed"
|
// and not only if attributes have "changed"
|
||||||
if ( mMode == QgsAttributeEditorContext::AddFeatureMode )
|
if ( mMode == QgsAttributeEditorContext::AddFeatureMode || mMode == QgsAttributeEditorContext::FixAttributeMode )
|
||||||
doUpdate = true;
|
doUpdate = true;
|
||||||
|
|
||||||
QgsAttributes src = mFeature.attributes();
|
QgsAttributes src = mFeature.attributes();
|
||||||
@ -379,7 +389,11 @@ bool QgsAttributeForm::saveEdits()
|
|||||||
|
|
||||||
if ( doUpdate )
|
if ( doUpdate )
|
||||||
{
|
{
|
||||||
if ( mMode == QgsAttributeEditorContext::AddFeatureMode )
|
if ( mMode == QgsAttributeEditorContext::FixAttributeMode )
|
||||||
|
{
|
||||||
|
mFeature = updatedFeature;
|
||||||
|
}
|
||||||
|
else if ( mMode == QgsAttributeEditorContext::AddFeatureMode )
|
||||||
{
|
{
|
||||||
mFeature.setValid( true );
|
mFeature.setValid( true );
|
||||||
mLayer->beginEditCommand( mEditCommandMessage );
|
mLayer->beginEditCommand( mEditCommandMessage );
|
||||||
@ -735,6 +749,7 @@ bool QgsAttributeForm::save()
|
|||||||
{
|
{
|
||||||
case QgsAttributeEditorContext::SingleEditMode:
|
case QgsAttributeEditorContext::SingleEditMode:
|
||||||
case QgsAttributeEditorContext::IdentifyMode:
|
case QgsAttributeEditorContext::IdentifyMode:
|
||||||
|
case QgsAttributeEditorContext::FixAttributeMode:
|
||||||
case QgsAttributeEditorContext::MultiEditMode:
|
case QgsAttributeEditorContext::MultiEditMode:
|
||||||
if ( !mDirty )
|
if ( !mDirty )
|
||||||
return true;
|
return true;
|
||||||
@ -761,6 +776,7 @@ bool QgsAttributeForm::save()
|
|||||||
case QgsAttributeEditorContext::SingleEditMode:
|
case QgsAttributeEditorContext::SingleEditMode:
|
||||||
case QgsAttributeEditorContext::IdentifyMode:
|
case QgsAttributeEditorContext::IdentifyMode:
|
||||||
case QgsAttributeEditorContext::AddFeatureMode:
|
case QgsAttributeEditorContext::AddFeatureMode:
|
||||||
|
case QgsAttributeEditorContext::FixAttributeMode:
|
||||||
case QgsAttributeEditorContext::SearchMode:
|
case QgsAttributeEditorContext::SearchMode:
|
||||||
case QgsAttributeEditorContext::AggregateSearchMode:
|
case QgsAttributeEditorContext::AggregateSearchMode:
|
||||||
success = saveEdits();
|
success = saveEdits();
|
||||||
@ -848,6 +864,7 @@ void QgsAttributeForm::onAttributeChanged( const QVariant &value, const QVariant
|
|||||||
case QgsAttributeEditorContext::SingleEditMode:
|
case QgsAttributeEditorContext::SingleEditMode:
|
||||||
case QgsAttributeEditorContext::IdentifyMode:
|
case QgsAttributeEditorContext::IdentifyMode:
|
||||||
case QgsAttributeEditorContext::AddFeatureMode:
|
case QgsAttributeEditorContext::AddFeatureMode:
|
||||||
|
case QgsAttributeEditorContext::FixAttributeMode:
|
||||||
{
|
{
|
||||||
Q_NOWARN_DEPRECATED_PUSH
|
Q_NOWARN_DEPRECATED_PUSH
|
||||||
emit attributeChanged( eww->field().name(), value );
|
emit attributeChanged( eww->field().name(), value );
|
||||||
@ -2264,6 +2281,7 @@ void QgsAttributeForm::layerSelectionChanged()
|
|||||||
case QgsAttributeEditorContext::SingleEditMode:
|
case QgsAttributeEditorContext::SingleEditMode:
|
||||||
case QgsAttributeEditorContext::IdentifyMode:
|
case QgsAttributeEditorContext::IdentifyMode:
|
||||||
case QgsAttributeEditorContext::AddFeatureMode:
|
case QgsAttributeEditorContext::AddFeatureMode:
|
||||||
|
case QgsAttributeEditorContext::FixAttributeMode:
|
||||||
case QgsAttributeEditorContext::SearchMode:
|
case QgsAttributeEditorContext::SearchMode:
|
||||||
case QgsAttributeEditorContext::AggregateSearchMode:
|
case QgsAttributeEditorContext::AggregateSearchMode:
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user