diff --git a/src/core/attributeformmodelbase.cpp b/src/core/attributeformmodelbase.cpp index 5ad50f4556..e16cd04e26 100644 --- a/src/core/attributeformmodelbase.cpp +++ b/src/core/attributeformmodelbase.cpp @@ -189,6 +189,7 @@ void AttributeFormModelBase::resetModel() #endif invisibleRootItem()->setColumnCount( 1 ); + QList containers; if ( hasTabs ) { const QList children { root->children() }; @@ -212,26 +213,29 @@ void AttributeFormModelBase::resetModel() item->setData( true, AttributeFormModel::CurrentlyVisible ); item->setData( true, AttributeFormModel::ConstraintHardValid ); item->setData( true, AttributeFormModel::ConstraintSoftValid ); - invisibleRootItem()->appendRow( item ); - setHasTabs( true ); QString visibilityExpression; if ( container->visibilityExpression().enabled() ) { - mVisibilityExpressions.append( qMakePair( container->visibilityExpression().data(), QVector() << item ) ); + mVisibilityExpressions.append( qMakePair( container->visibilityExpression().data(), item ) ); visibilityExpression = container->visibilityExpression().data().expression(); } - QVector dummy; - buildForm( container, item, visibilityExpression, dummy, currentTab, columnCount ); + buildForm( container, item, visibilityExpression, containers, currentTab, columnCount ); + invisibleRootItem()->appendRow( item ); + setHasTabs( true ); currentTab++; } } } else { - QVector dummy; - buildForm( invisibleRootContainer(), invisibleRootItem(), QString(), dummy ); + buildForm( invisibleRootContainer(), invisibleRootItem(), QString(), containers ); + } + + for ( QStandardItem *container : std::as_const( containers ) ) + { + container->setData( container->index(), AttributeFormModel::GroupIndex ); } } } @@ -344,7 +348,7 @@ void AttributeFormModelBase::updateAttributeValue( QStandardItem *item ) } } -void AttributeFormModelBase::buildForm( QgsAttributeEditorContainer *container, QStandardItem *parent, const QString &parentVisibilityExpressions, QVector &items, int currentTabIndex, int columnCount ) +void AttributeFormModelBase::buildForm( QgsAttributeEditorContainer *container, QStandardItem *parent, const QString &parentVisibilityExpressions, QList &containers, int currentTabIndex, int columnCount ) { const QList children { container->children() }; for ( QgsAttributeEditorElement *element : children ) @@ -391,14 +395,12 @@ void AttributeFormModelBase::buildForm( QgsAttributeEditorContainer *container, if ( innerContainer->backgroundColor().isValid() ) item->setData( innerContainer->backgroundColor(), AttributeFormModel::GroupColor ); - items.append( item ); + buildForm( innerContainer, item, visibilityExpression, containers, 0, innerColumnCount ); parent->appendRow( item ); - item->setData( item->index(), AttributeFormModel::GroupIndex ); + containers << item; - QVector newItems; - buildForm( innerContainer, item, visibilityExpression, newItems, 0, innerColumnCount ); if ( !visibilityExpression.isEmpty() ) - mVisibilityExpressions.append( qMakePair( QgsExpression( visibilityExpression ), QVector() << item ) ); + mVisibilityExpressions.append( qMakePair( QgsExpression( visibilityExpression ), item ) ); break; } @@ -454,8 +456,6 @@ void AttributeFormModelBase::buildForm( QgsAttributeEditorContainer *container, mConstraints.insert( item, field.constraints() ); - items.append( item ); - parent->appendRow( item ); break; } @@ -483,8 +483,6 @@ void AttributeFormModelBase::buildForm( QgsAttributeEditorContainer *container, item->setData( true, AttributeFormModel::ConstraintSoftValid ); item->setData( true, AttributeFormModel::AttributeAllowEdit ); - items.append( item ); - parent->appendRow( item ); break; } @@ -507,7 +505,6 @@ void AttributeFormModelBase::buildForm( QgsAttributeEditorContainer *container, updateAttributeValue( item ); - items.append( item ); parent->appendRow( item ); break; } @@ -530,7 +527,6 @@ void AttributeFormModelBase::buildForm( QgsAttributeEditorContainer *container, updateAttributeValue( item ); - items.append( item ); parent->appendRow( item ); break; } @@ -550,7 +546,6 @@ void AttributeFormModelBase::buildForm( QgsAttributeEditorContainer *container, updateAttributeValue( item ); - items.append( item ); parent->appendRow( item ); break; } @@ -730,13 +725,11 @@ void AttributeFormModelBase::updateVisibilityAndConstraints( int fieldIndex ) exp.prepare( &mExpressionContext ); bool visible = exp.evaluate( &mExpressionContext ).toInt(); - for ( QStandardItem *item : std::as_const( it.second ) ) + QStandardItem *item = it.second; + if ( item->data( AttributeFormModel::CurrentlyVisible ).toBool() != visible ) { - if ( item->data( AttributeFormModel::CurrentlyVisible ).toBool() != visible ) - { - item->setData( visible, AttributeFormModel::CurrentlyVisible ); - visibilityChanged = true; - } + item->setData( visible, AttributeFormModel::CurrentlyVisible ); + visibilityChanged = true; } } } diff --git a/src/core/attributeformmodelbase.h b/src/core/attributeformmodelbase.h index 975785d231..1286601901 100644 --- a/src/core/attributeformmodelbase.h +++ b/src/core/attributeformmodelbase.h @@ -82,7 +82,7 @@ class AttributeFormModelBase : public QStandardItemModel void buildForm( QgsAttributeEditorContainer *container, QStandardItem *parent, const QString &parentVisibilityExpressions, - QVector &items, + QList &containers, int currentTabIndex = 0, int columnCount = 1 ); @@ -121,7 +121,7 @@ class AttributeFormModelBase : public QStandardItemModel std::unique_ptr mTemporaryContainer; bool mHasTabs = false; - typedef QPair> VisibilityExpression; + typedef QPair VisibilityExpression; QList mVisibilityExpressions; QMap mConstraints; QMap mEditorWidgetCodes;