@@ -191,6 +191,9 @@ QgsRelationEditorWidget::QgsRelationEditorWidget( const QVariantMap &config, QWi
191
191
mViewModeButtonGroup = new QButtonGroup ( this );
192
192
mViewModeButtonGroup ->addButton ( mFormViewButton , QgsDualView::AttributeEditor );
193
193
mViewModeButtonGroup ->addButton ( mTableViewButton , QgsDualView::AttributeTable );
194
+ // multiedit info label
195
+ mMultiEditInfoLabel = new QLabel ( this );
196
+ buttonLayout->addWidget ( mMultiEditInfoLabel );
194
197
195
198
// add buttons layout
196
199
rootLayout->addLayout ( buttonLayout );
@@ -404,6 +407,7 @@ void QgsRelationEditorWidget::addFeature()
404
407
}
405
408
mMultiEditTreeWidget ->blockSignals ( false );
406
409
410
+ updateUi ();
407
411
updateButtons ();
408
412
}
409
413
@@ -514,6 +518,7 @@ void QgsRelationEditorWidget::updateUi()
514
518
515
519
mFormViewButton ->setVisible ( !multiEditModeActive () );
516
520
mTableViewButton ->setVisible ( !multiEditModeActive () );
521
+ mMultiEditInfoLabel ->setVisible ( multiEditModeActive () );
517
522
518
523
if ( !multiEditModeActive () )
519
524
{
@@ -547,6 +552,9 @@ void QgsRelationEditorWidget::updateUi()
547
552
{
548
553
mStackedWidget ->setCurrentWidget ( mMultiEditStackedWidgetPage ) ;
549
554
555
+ QgsFeatureIds featureIdsChildren;
556
+ QMultiMap<QTreeWidgetItem *, QgsFeatureId> multimapChildFeatures;
557
+
550
558
mMultiEditTreeWidget ->clear ();
551
559
for ( const QgsFeature &feature : std::as_const ( mFeatureList ) )
552
560
{
@@ -583,6 +591,9 @@ void QgsRelationEditorWidget::updateUi()
583
591
treeWidgetItem->setFlags ( Qt::ItemIsEnabled );
584
592
585
593
treeWidgetItem->addChild ( treeWidgetItemChild );
594
+
595
+ featureIdsChildren.insert ( featureChildChild.id () );
596
+ multimapChildFeatures.insert ( treeWidgetItem, featureChildChild.id () );
586
597
}
587
598
}
588
599
else
@@ -593,12 +604,69 @@ void QgsRelationEditorWidget::updateUi()
593
604
treeWidgetItemChild->setText ( 0 , QgsVectorLayerUtils::getFeatureDisplayString ( mRelation .referencingLayer (), featureChild ) );
594
605
treeWidgetItemChild->setIcon ( 0 , QgsIconUtils::iconForLayer ( mRelation .referencingLayer () ) );
595
606
treeWidgetItem->addChild ( treeWidgetItemChild );
607
+
608
+ featureIdsChildren.insert ( featureChild.id () );
596
609
}
597
610
}
598
611
599
612
treeWidgetItem->setExpanded ( true );
600
613
mMultiEditTreeWidget ->addTopLevelItem ( treeWidgetItem );
601
614
}
615
+
616
+ // Check for mixed values
617
+ bool mixedValues = false ;
618
+ if ( mNmRelation .isValid () )
619
+ {
620
+ QgsFeatureIds featureIdsNotMixed;
621
+ for ( const QgsFeatureId &featureId : featureIdsChildren )
622
+ {
623
+ for ( QTreeWidgetItem *key : multimapChildFeatures.keys () )
624
+ {
625
+ if ( ! multimapChildFeatures.values ( key ).contains ( featureId ) )
626
+ {
627
+ mixedValues = true ;
628
+ break ;
629
+ }
630
+ }
631
+ if ( mixedValues )
632
+ break ;
633
+
634
+ featureIdsNotMixed.insert ( featureId );
635
+ }
636
+ if ( featureIdsChildren != featureIdsNotMixed )
637
+ mixedValues = true ;
638
+ }
639
+ else
640
+ {
641
+ for ( const QgsFeatureId &featureIdJustAdded : std::as_const ( mMultiEdit1NJustAddedIds ) )
642
+ {
643
+ if ( ! featureIdsChildren.contains ( featureIdJustAdded ) )
644
+ {
645
+ mixedValues = true ;
646
+ break ;
647
+ }
648
+ featureIdsChildren.remove ( featureIdJustAdded );
649
+ }
650
+
651
+ if ( ! featureIdsChildren.isEmpty () )
652
+ mixedValues = true ;
653
+ }
654
+
655
+ // Set multiedit info label
656
+ if ( ! mixedValues )
657
+ {
658
+ QIcon icon = QgsApplication::getThemeIcon ( QStringLiteral ( " /multieditSameValues.svg" ) );
659
+ mMultiEditInfoLabel ->setPixmap ( icon.pixmap ( mMultiEditInfoLabel ->height (),
660
+ mMultiEditInfoLabel ->height () ) );
661
+ mMultiEditInfoLabel ->setToolTip ( tr ( " All features in selection have equal relations" ) );
662
+ }
663
+ else
664
+ {
665
+ QIcon icon = QgsApplication::getThemeIcon ( QStringLiteral ( " /multieditMixedValues.svg" ) );
666
+ mMultiEditInfoLabel ->setPixmap ( icon.pixmap ( mMultiEditInfoLabel ->height (),
667
+ mMultiEditInfoLabel ->height () ) );
668
+ mMultiEditInfoLabel ->setToolTip ( tr ( " Some features in selection have different relations" ) );
669
+ }
602
670
}
603
671
}
604
672
0 commit comments