Skip to content

Commit 6ba9595

Browse files
committedNov 8, 2021
Added mixed values indicator
1 parent bbb1756 commit 6ba9595

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed
 

‎src/gui/qgsrelationeditorwidget.cpp

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,9 @@ QgsRelationEditorWidget::QgsRelationEditorWidget( const QVariantMap &config, QWi
191191
mViewModeButtonGroup = new QButtonGroup( this );
192192
mViewModeButtonGroup->addButton( mFormViewButton, QgsDualView::AttributeEditor );
193193
mViewModeButtonGroup->addButton( mTableViewButton, QgsDualView::AttributeTable );
194+
// multiedit info label
195+
mMultiEditInfoLabel = new QLabel( this );
196+
buttonLayout->addWidget( mMultiEditInfoLabel );
194197

195198
// add buttons layout
196199
rootLayout->addLayout( buttonLayout );
@@ -404,6 +407,7 @@ void QgsRelationEditorWidget::addFeature()
404407
}
405408
mMultiEditTreeWidget->blockSignals( false );
406409

410+
updateUi();
407411
updateButtons();
408412
}
409413

@@ -514,6 +518,7 @@ void QgsRelationEditorWidget::updateUi()
514518

515519
mFormViewButton->setVisible( !multiEditModeActive() );
516520
mTableViewButton->setVisible( !multiEditModeActive() );
521+
mMultiEditInfoLabel->setVisible( multiEditModeActive() );
517522

518523
if ( !multiEditModeActive() )
519524
{
@@ -547,6 +552,9 @@ void QgsRelationEditorWidget::updateUi()
547552
{
548553
mStackedWidget->setCurrentWidget( mMultiEditStackedWidgetPage ) ;
549554

555+
QgsFeatureIds featureIdsChildren;
556+
QMultiMap<QTreeWidgetItem *, QgsFeatureId> multimapChildFeatures;
557+
550558
mMultiEditTreeWidget->clear();
551559
for ( const QgsFeature &feature : std::as_const( mFeatureList ) )
552560
{
@@ -583,6 +591,9 @@ void QgsRelationEditorWidget::updateUi()
583591
treeWidgetItem->setFlags( Qt::ItemIsEnabled );
584592

585593
treeWidgetItem->addChild( treeWidgetItemChild );
594+
595+
featureIdsChildren.insert( featureChildChild.id() );
596+
multimapChildFeatures.insert( treeWidgetItem, featureChildChild.id() );
586597
}
587598
}
588599
else
@@ -593,12 +604,69 @@ void QgsRelationEditorWidget::updateUi()
593604
treeWidgetItemChild->setText( 0, QgsVectorLayerUtils::getFeatureDisplayString( mRelation.referencingLayer(), featureChild ) );
594605
treeWidgetItemChild->setIcon( 0, QgsIconUtils::iconForLayer( mRelation.referencingLayer() ) );
595606
treeWidgetItem->addChild( treeWidgetItemChild );
607+
608+
featureIdsChildren.insert( featureChild.id() );
596609
}
597610
}
598611

599612
treeWidgetItem->setExpanded( true );
600613
mMultiEditTreeWidget->addTopLevelItem( treeWidgetItem );
601614
}
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+
}
602670
}
603671
}
604672

‎src/gui/qgsrelationeditorwidget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ class GUI_EXPORT QgsRelationEditorWidget : public QgsAbstractRelationEditorWidge
245245
QToolButton *mFormViewButton = nullptr;
246246
QToolButton *mTableViewButton = nullptr;
247247
QToolButton *mAddFeatureGeometryButton = nullptr;
248+
QLabel *mMultiEditInfoLabel = nullptr;
248249
QStackedWidget *mStackedWidget = nullptr;
249250
QWidget *mMultiEditStackedWidgetPage = nullptr;
250251
QTreeWidget *mMultiEditTreeWidget = nullptr;

0 commit comments

Comments
 (0)
Please sign in to comment.