Skip to content

Commit a0cb653

Browse files
authoredMar 7, 2019
Merge pull request #9413 from m-kuhn/nm-autogenerated-backport-3_6
Fix n:m relations in autogenerated attribute forms
2 parents fb19acf + 9bf3410 commit a0cb653

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed
 

‎src/gui/qgsattributeform.cpp

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,6 +1040,16 @@ QList<QgsEditorWidgetWrapper *> QgsAttributeForm::constraintDependencies( QgsEdi
10401040
return wDeps;
10411041
}
10421042

1043+
QgsRelationWidgetWrapper *QgsAttributeForm::setupRelationWidgetWrapper( const QgsRelation &rel, const QgsAttributeEditorContext &context )
1044+
{
1045+
QgsRelationWidgetWrapper *rww = new QgsRelationWidgetWrapper( mLayer, rel, nullptr, this );
1046+
const QVariantMap config = mLayer->editFormConfig().widgetConfig( rel.id() );
1047+
rww->setConfig( config );
1048+
rww->setContext( context );
1049+
1050+
return rww;
1051+
}
1052+
10431053
void QgsAttributeForm::preventFeatureRefresh()
10441054
{
10451055
mPreventFeatureRefresh = true;
@@ -1376,10 +1386,7 @@ void QgsAttributeForm::init()
13761386

13771387
Q_FOREACH ( const QgsRelation &rel, QgsProject::instance()->relationManager()->referencedRelations( mLayer ) )
13781388
{
1379-
QgsRelationWidgetWrapper *rww = new QgsRelationWidgetWrapper( mLayer, rel, nullptr, this );
1380-
const QgsEditorWidgetSetup setup = QgsGui::editorWidgetRegistry()->findBest( mLayer, rel.id() );
1381-
rww->setConfig( setup.config() );
1382-
rww->setContext( mContext );
1389+
QgsRelationWidgetWrapper *rww = setupRelationWidgetWrapper( rel, mContext );
13831390

13841391
QgsAttributeFormRelationEditorWidget *formWidget = new QgsAttributeFormRelationEditorWidget( rww, this );
13851392
formWidget->createSearchWidgetWrappers( mContext );
@@ -1677,9 +1684,8 @@ QgsAttributeForm::WidgetInfo QgsAttributeForm::createWidgetFromDef( const QgsAtt
16771684
{
16781685
const QgsAttributeEditorRelation *relDef = static_cast<const QgsAttributeEditorRelation *>( widgetDef );
16791686

1680-
QgsRelationWidgetWrapper *rww = new QgsRelationWidgetWrapper( mLayer, relDef->relation(), nullptr, this );
1681-
rww->setConfig( mLayer->editFormConfig().widgetConfig( relDef->relation().id() ) );
1682-
rww->setContext( context );
1687+
QgsRelationWidgetWrapper *rww = setupRelationWidgetWrapper( relDef->relation(), context );
1688+
16831689
rww->setShowLabel( relDef->showLabel() );
16841690
rww->setShowLinkButton( relDef->showLinkButton() );
16851691
rww->setShowUnlinkButton( relDef->showUnlinkButton() );

‎src/gui/qgsattributeform.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class QgsMessageBarItem;
3535
class QgsWidgetWrapper;
3636
class QgsTabWidget;
3737
class QgsAttributeFormWidget;
38+
class QgsRelationWidgetWrapper;
3839

3940
/**
4041
* \ingroup gui
@@ -367,6 +368,8 @@ class GUI_EXPORT QgsAttributeForm : public QWidget
367368
bool currentFormValidConstraints( QStringList &invalidFields, QStringList &descriptions );
368369
QList<QgsEditorWidgetWrapper *> constraintDependencies( QgsEditorWidgetWrapper *w );
369370

371+
QgsRelationWidgetWrapper *setupRelationWidgetWrapper( const QgsRelation &rel, const QgsAttributeEditorContext &context );
372+
370373
QgsVectorLayer *mLayer = nullptr;
371374
QgsFeature mFeature;
372375
QgsMessageBar *mMessageBar = nullptr;

0 commit comments

Comments
 (0)
Please sign in to comment.