Skip to content

Commit

Permalink
Merge pull request #46426 from domi4484/backport-46167-to-release-3_22
Browse files Browse the repository at this point in the history
[Backport release-3_22] Update of virtual fields considering layer dependencies
  • Loading branch information
m-kuhn committed Dec 14, 2021
2 parents cf5d490 + 4cd945d commit 393bbf7
Show file tree
Hide file tree
Showing 8 changed files with 205 additions and 91 deletions.
Expand Up @@ -242,6 +242,17 @@ Forward the signal to the embedded form
virtual bool valid() const;


signals:

void relatedFeaturesChanged();
%Docstring
Emit this signal, whenever the related features changed.
This happens for example when related features are added, removed,
linked or unlinked.

.. versionadded:: 3.22
%End

public slots:
virtual void setFeature( const QgsFeature &feature );

Expand Down
11 changes: 11 additions & 0 deletions python/gui/auto_generated/qgsabstractrelationeditorwidget.sip.in
Expand Up @@ -156,6 +156,17 @@ Returns the widget configuration
virtual void setConfig( const QVariantMap &config ) = 0;
%Docstring
Defines the widget configuration
%End

signals:

void relatedFeaturesChanged();
%Docstring
Emit this signal, whenever the related features changed.
This happens for example when related features are added, removed,
linked or unlinked.

.. versionadded:: 3.22
%End

public slots:
Expand Down
10 changes: 6 additions & 4 deletions src/gui/editorwidgets/qgsrelationwidgetwrapper.cpp
Expand Up @@ -42,15 +42,17 @@ QWidget *QgsRelationWidgetWrapper::createWidget( QWidget *parent )
if ( form )
connect( form, &QgsAttributeForm::widgetValueChanged, this, &QgsRelationWidgetWrapper::widgetValueChanged );

QWidget *widget = QgsGui::instance()->relationWidgetRegistry()->create( mRelationEditorId, widgetConfig(), parent );
QgsAbstractRelationEditorWidget *relationEditorWidget = QgsGui::instance()->relationWidgetRegistry()->create( mRelationEditorId, widgetConfig(), parent );

if ( !widget )
if ( !relationEditorWidget )
{
QgsLogger::warning( QStringLiteral( "Failed to create relation widget \"%1\", fallback to \"basic\" relation widget" ).arg( mRelationEditorId ) );
widget = QgsGui::instance()->relationWidgetRegistry()->create( QStringLiteral( "relation_editor" ), widgetConfig(), parent );
relationEditorWidget = QgsGui::instance()->relationWidgetRegistry()->create( QStringLiteral( "relation_editor" ), widgetConfig(), parent );
}

return widget;
connect( relationEditorWidget, &QgsAbstractRelationEditorWidget::relatedFeaturesChanged, this, &QgsRelationWidgetWrapper::relatedFeaturesChanged );

return relationEditorWidget;
}

void QgsRelationWidgetWrapper::setFeature( const QgsFeature &feature )
Expand Down
11 changes: 11 additions & 0 deletions src/gui/editorwidgets/qgsrelationwidgetwrapper.h
Expand Up @@ -210,6 +210,17 @@ class GUI_EXPORT QgsRelationWidgetWrapper : public QgsWidgetWrapper
void initWidget( QWidget *editor ) override;
bool valid() const override;

signals:

/**
* Emit this signal, whenever the related features changed.
* This happens for example when related features are added, removed,
* linked or unlinked.
*
* \since QGIS 3.22
*/
void relatedFeaturesChanged();

public slots:
void setFeature( const QgsFeature &feature ) override;

Expand Down
14 changes: 14 additions & 0 deletions src/gui/qgsabstractrelationeditorwidget.cpp
Expand Up @@ -248,11 +248,15 @@ void QgsAbstractRelationEditorWidget::addFeature( const QgsGeometry &geometry )
}

updateUi();

emit relatedFeaturesChanged();
}

void QgsAbstractRelationEditorWidget::deleteFeature( const QgsFeatureId fid )
{
deleteFeatures( QgsFeatureIds() << fid );

emit relatedFeaturesChanged();
}

void QgsAbstractRelationEditorWidget::deleteFeatures( const QgsFeatureIds &fids )
Expand Down Expand Up @@ -369,6 +373,8 @@ void QgsAbstractRelationEditorWidget::deleteFeatures( const QgsFeatureIds &fids
}

updateUi();

emit relatedFeaturesChanged();
}
}

Expand Down Expand Up @@ -493,6 +499,8 @@ void QgsAbstractRelationEditorWidget::onLinkFeatureDlgAccepted()
}

updateUi();

emit relatedFeaturesChanged();
}

void QgsAbstractRelationEditorWidget::unlinkFeature( const QgsFeatureId fid )
Expand Down Expand Up @@ -580,6 +588,8 @@ void QgsAbstractRelationEditorWidget::unlinkFeatures( const QgsFeatureIds &fids
}

updateUi();

emit relatedFeaturesChanged();
}

void QgsAbstractRelationEditorWidget::updateUi()
Expand Down Expand Up @@ -611,6 +621,8 @@ void QgsAbstractRelationEditorWidget::afterSetRelations()
void QgsAbstractRelationEditorWidget::duplicateFeature( const QgsFeatureId &fid )
{
duplicateFeatures( QgsFeatureIds() << fid );

emit relatedFeaturesChanged();
}

void QgsAbstractRelationEditorWidget::duplicateFeatures( const QgsFeatureIds &fids )
Expand All @@ -624,6 +636,8 @@ void QgsAbstractRelationEditorWidget::duplicateFeatures( const QgsFeatureIds &fi
QgsVectorLayerUtils::QgsDuplicateFeatureContext duplicatedFeatureContext;
QgsVectorLayerUtils::duplicateFeature( layer, f, QgsProject::instance(), duplicatedFeatureContext );
}

emit relatedFeaturesChanged();
}

void QgsAbstractRelationEditorWidget::showEvent( QShowEvent * )
Expand Down
11 changes: 11 additions & 0 deletions src/gui/qgsabstractrelationeditorwidget.h
Expand Up @@ -170,6 +170,17 @@ class GUI_EXPORT QgsAbstractRelationEditorWidget : public QWidget
*/
virtual void setConfig( const QVariantMap &config ) = 0;

signals:

/**
* Emit this signal, whenever the related features changed.
* This happens for example when related features are added, removed,
* linked or unlinked.
*
* \since QGIS 3.22
*/
void relatedFeaturesChanged();

public slots:

/**
Expand Down

0 comments on commit 393bbf7

Please sign in to comment.