Skip to content

Commit

Permalink
Also set 'evaluate default values on provider side' property when loa…
Browse files Browse the repository at this point in the history
…ding a layer
  • Loading branch information
Djedouas authored and troopa81 committed Aug 21, 2023
1 parent 77c5adf commit 3865682
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 5 deletions.
13 changes: 10 additions & 3 deletions src/core/project/qgsproject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -527,9 +527,8 @@ void QgsProject::setFlags( Qgis::ProjectFlags flags )
for ( auto layerIt = layers.constBegin(); layerIt != layers.constEnd(); ++layerIt )
{
if ( QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( layerIt.value() ) )
{
vl->dataProvider()->setProviderProperty( QgsVectorDataProvider::EvaluateDefaultValues, newEvaluateDefaultValues );
}
if ( vl->dataProvider() )
vl->dataProvider()->setProviderProperty( QgsVectorDataProvider::EvaluateDefaultValues, newEvaluateDefaultValues );
}
}

Expand Down Expand Up @@ -2670,6 +2669,14 @@ void QgsProject::onMapLayersAdded( const QList<QgsMapLayer *> &layers )
if ( ! layer->isValid() )
return;

if ( QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( layer ) )
{
vlayer->setReadExtentFromXml( mFlags & Qgis::ProjectFlag::TrustStoredLayerStatistics );
if ( vlayer->dataProvider() )
vlayer->dataProvider()->setProviderProperty( QgsVectorDataProvider::EvaluateDefaultValues,
( bool )( mFlags & Qgis::ProjectFlag::EvaluateDefaultValuesOnProviderSide ) );
}

connect( layer, &QgsMapLayer::configChanged, this, [ = ] { setDirty(); } );

// check if we have to update connections for layers with dependencies
Expand Down
9 changes: 7 additions & 2 deletions tests/src/python/test_qgsproject.py
Original file line number Diff line number Diff line change
Expand Up @@ -1585,14 +1585,18 @@ def test_remember_evaluate_default_values(self):
project = QgsProject()

layer = QgsVectorLayer('Point?crs=epsg:4326&field=int:integer&field=int2:integer', 'test', 'memory')
layer2 = QgsVectorLayer('Point?crs=epsg:4326&field=int:integer&field=int2:integer', 'test', 'memory')

project.addMapLayers([layer])

self.assertEqual(layer.dataProvider().providerProperty(QgsDataProvider.EvaluateDefaultValues, None), None)
self.assertEqual(layer.dataProvider().providerProperty(QgsDataProvider.EvaluateDefaultValues, None), False)
project.setFlags(project.flags() | Qgis.ProjectFlag.EvaluateDefaultValuesOnProviderSide)
self.assertTrue(project.flags() & Qgis.ProjectFlag.EvaluateDefaultValuesOnProviderSide)
self.assertEqual(layer.dataProvider().providerProperty(QgsDataProvider.EvaluateDefaultValues, None), True)

project.addMapLayers([layer2])
self.assertEqual(layer2.dataProvider().providerProperty(QgsDataProvider.EvaluateDefaultValues, None), True)

tmp_dir = QTemporaryDir()
tmp_project_file = f"{tmp_dir.path()}/project.qgs"
self.assertTrue(project.write(tmp_project_file))
Expand All @@ -1601,10 +1605,11 @@ def test_remember_evaluate_default_values(self):
self.assertTrue(project2.read(tmp_project_file))

layers = list(project2.mapLayers().values())
self.assertEqual(len(layers), 1)
self.assertEqual(len(layers), 2)

self.assertTrue(project2.flags() & Qgis.ProjectFlag.EvaluateDefaultValuesOnProviderSide)
self.assertEqual(layers[0].dataProvider().providerProperty(QgsDataProvider.EvaluateDefaultValues, None), True)
self.assertEqual(layers[1].dataProvider().providerProperty(QgsDataProvider.EvaluateDefaultValues, None), True)


if __name__ == '__main__':
Expand Down

0 comments on commit 3865682

Please sign in to comment.