@@ -113,7 +113,9 @@ QgsFieldsProperties::QgsFieldsProperties( QgsVectorLayer *layer, QWidget* parent
113
113
mRelationsList ->setHorizontalHeaderItem ( RelNameCol, new QTableWidgetItem ( tr ( " Name" ) ) );
114
114
mRelationsList ->setHorizontalHeaderItem ( RelLayerCol, new QTableWidgetItem ( tr ( " Layer" ) ) );
115
115
mRelationsList ->setHorizontalHeaderItem ( RelFieldCol, new QTableWidgetItem ( tr ( " Field" ) ) );
116
+ mRelationsList ->setHorizontalHeaderItem ( RelNmCol, new QTableWidgetItem ( tr ( " Cardinality" ) ) );
116
117
mRelationsList ->verticalHeader ()->hide ();
118
+ mRelationsList ->horizontalHeader ()->setStretchLastSection ( true );
117
119
118
120
// Init function stuff
119
121
mInitCodeSourceComboBox ->addItem ( tr ( " " ) );
@@ -331,11 +333,11 @@ void QgsFieldsProperties::loadRelations()
331
333
{
332
334
mRelationsList ->setRowCount ( 0 );
333
335
334
- QList<QgsRelation> relations = QgsProject::instance ()->relationManager ()->referencedRelations ( mLayer );
336
+ mRelations = QgsProject::instance ()->relationManager ()->referencedRelations ( mLayer );
335
337
336
338
int idx = 0 ;
337
339
338
- Q_FOREACH ( const QgsRelation& relation, relations )
340
+ Q_FOREACH ( const QgsRelation& relation, mRelations )
339
341
{
340
342
mRelationsList ->insertRow ( idx );
341
343
@@ -357,6 +359,29 @@ void QgsFieldsProperties::loadRelations()
357
359
item->setFlags ( Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsSelectable );
358
360
mRelationsList ->setItem ( idx, RelIdCol, item );
359
361
362
+ QComboBox* nmCombo = new QComboBox ( mRelationsList );
363
+ nmCombo->addItem ( tr ( " Many to one relation" ) );
364
+ Q_FOREACH ( const QgsRelation& nmrel, QgsProject::instance ()->relationManager ()->referencingRelations ( relation.referencingLayer () ) )
365
+ {
366
+ if ( nmrel.fieldPairs ().first ().referencingField () != relation.fieldPairs ().first ().referencingField () )
367
+ nmCombo->addItem ( QString ( " %1 (%2)" ).arg ( nmrel.referencedLayer ()->name () ).arg ( nmrel.fieldPairs ().first ().referencedField () ), nmrel.id () );
368
+
369
+ QgsEditorWidgetConfig cfg = mLayer ->editFormConfig ()->widgetConfig ( relation.id () );
370
+
371
+ QVariant nmrelcfg = cfg.value ( " nm-rel" );
372
+
373
+ int idx = nmCombo->findData ( nmrelcfg.toString () );
374
+
375
+ if ( idx != -1 )
376
+ nmCombo->setCurrentIndex ( idx );
377
+ }
378
+
379
+ if ( nmCombo->count () == 1 )
380
+ {
381
+ nmCombo->setEnabled ( false );
382
+ }
383
+
384
+ mRelationsList ->setCellWidget ( idx, RelNmCol, nmCombo );
360
385
++idx;
361
386
}
362
387
}
@@ -894,7 +919,9 @@ void QgsFieldsProperties::apply()
894
919
}
895
920
}
896
921
897
- // tabs and groups
922
+
923
+
924
+ // tabs and groups
898
925
mLayer ->clearAttributeEditorWidgets ();
899
926
for ( int t = 0 ; t < mDesignerTree ->invisibleRootItem ()->childCount (); t++ )
900
927
{
@@ -917,8 +944,27 @@ void QgsFieldsProperties::apply()
917
944
918
945
mLayer ->setExcludeAttributesWMS ( excludeAttributesWMS );
919
946
mLayer ->setExcludeAttributesWFS ( excludeAttributesWFS );
920
- }
921
947
948
+ // relations
949
+ for ( int i = 0 ; i < mRelationsList ->rowCount (); ++i )
950
+ {
951
+ QgsEditorWidgetConfig cfg;
952
+
953
+ QComboBox* cb = qobject_cast<QComboBox*>( mRelationsList ->cellWidget ( i, RelNmCol ) );
954
+ QVariant otherRelation = cb->itemData ( cb->currentIndex () );
955
+
956
+ if ( otherRelation.isValid () )
957
+ {
958
+ cfg[" nm-rel" ] = otherRelation.toString ();
959
+ }
960
+
961
+ DesignerTreeItemData itemData = mRelationsList ->item ( i, RelNameCol )->data ( DesignerTreeRole ).value <DesignerTreeItemData>();
962
+
963
+ QString relationName = itemData.name ();
964
+
965
+ mLayer ->editFormConfig ()->setWidgetConfig ( relationName, cfg );
966
+ }
967
+ }
922
968
/*
923
969
* FieldConfig implementation
924
970
*/
0 commit comments