4040#include " qgsunittypes.h"
4141#include " qgstransaction.h"
4242#include " qgstransactiongroup.h"
43+ #include " qgsvectordataprovider.h"
4344
4445#include < QApplication>
4546#include < QFileInfo>
@@ -328,11 +329,13 @@ struct QgsProject::Imp
328329 QgsPropertyKey properties_; // property hierarchy
329330 QString title; // project title
330331 bool autoTransaction; // transaction grouped editing
332+ bool evaluateDefaultValues; // evaluate default values immediately
331333 bool dirty; // project has been modified since it has been read or saved
332334
333335 Imp ()
334336 : title()
335337 , autoTransaction( false )
338+ , evaluateDefaultValues( false )
336339 , dirty( false )
337340 { // top property node is the root
338341 // "properties" that contains all plug-in
@@ -350,6 +353,7 @@ struct QgsProject::Imp
350353 properties_.clearKeys ();
351354 title.clear ();
352355 autoTransaction = false ;
356+ evaluateDefaultValues = false ;
353357 dirty = false ;
354358 }
355359
@@ -370,7 +374,7 @@ QgsProject::QgsProject()
370374 // whenever layers are added to or removed from the registry,
371375 // layer tree will be updated
372376 mLayerTreeRegistryBridge = new QgsLayerTreeRegistryBridge ( mRootGroup , this );
373- connect ( QgsMapLayerRegistry::instance (), SIGNAL ( layersAdded ( QList<QgsMapLayer*> ) ), this , SLOT ( addToTransactionGroups ( QList<QgsMapLayer*> ) ) );
377+ connect ( QgsMapLayerRegistry::instance (), SIGNAL ( layersAdded ( QList<QgsMapLayer*> ) ), this , SLOT ( onMapLayersAdded ( QList<QgsMapLayer*> ) ) );
374378 connect ( QgsMapLayerRegistry::instance (), SIGNAL ( layersRemoved ( QStringList ) ), this , SLOT ( cleanTransactionGroups () ) );
375379} // QgsProject ctor
376380
@@ -902,6 +906,14 @@ bool QgsProject::read()
902906 imp_->autoTransaction = true ;
903907 }
904908
909+ nl = doc->elementsByTagName ( " evaluateDefaultValues" );
910+ if ( nl.count () )
911+ {
912+ QDomElement evaluateDefaultValuesElement = nl.at ( 0 ).toElement ();
913+ if ( evaluateDefaultValuesElement.attribute ( " active" , " 0" ).toInt () == 1 )
914+ imp_->evaluateDefaultValues = true ;
915+ }
916+
905917 // read the layer tree from project file
906918
907919 mRootGroup ->setCustomProperty ( " loading" , 1 );
@@ -1010,14 +1022,14 @@ void QgsProject::loadEmbeddedNodes( QgsLayerTreeGroup *group )
10101022 }
10111023}
10121024
1013- void QgsProject::addToTransactionGroups ( const QList<QgsMapLayer*> layers )
1025+ void QgsProject::onMapLayersAdded ( const QList<QgsMapLayer*>& layers )
10141026{
1015- if ( autoTransaction () )
1027+ Q_FOREACH ( QgsMapLayer* layer, layers )
10161028 {
1017- Q_FOREACH ( QgsMapLayer* layer, layers )
1029+ QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer*>( layer );
1030+ if ( vlayer )
10181031 {
1019- QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer*>( layer );
1020- if ( vlayer )
1032+ if ( autoTransaction () )
10211033 {
10221034 if ( QgsTransaction::supportsTransaction ( vlayer ) )
10231035 {
@@ -1036,6 +1048,7 @@ void QgsProject::addToTransactionGroups( const QList<QgsMapLayer*> layers )
10361048 tg->addLayer ( vlayer );
10371049 }
10381050 }
1051+ vlayer->dataProvider ()->setProviderProperty ( QgsVectorDataProvider::EvaluateDefaultValues, evaluateDefaultValues () );
10391052 }
10401053 }
10411054}
@@ -1110,6 +1123,10 @@ bool QgsProject::write()
11101123 transactionNode.setAttribute ( " active" , imp_->autoTransaction ? " 1" : " 0" );
11111124 qgisNode.appendChild ( transactionNode );
11121125
1126+ QDomElement evaluateDefaultValuesNode = doc->createElement ( " evaluateDefaultValues" );
1127+ evaluateDefaultValuesNode.setAttribute ( " active" , imp_->evaluateDefaultValues ? " 1" : " 0" );
1128+ qgisNode.appendChild ( evaluateDefaultValuesNode );
1129+
11131130 QDomText titleText = doc->createTextNode ( title () ); // XXX why have title TWICE?
11141131 titleNode.appendChild ( titleText );
11151132
@@ -2119,6 +2136,25 @@ void QgsProject::snapSettings( QStringList &layerIdList, QStringList &enabledLis
21192136 avoidIntersectionList = readListEntry ( " Digitizing" , " /AvoidIntersectionsList" );
21202137}
21212138
2139+ bool QgsProject::evaluateDefaultValues () const
2140+ {
2141+ return imp_->evaluateDefaultValues ;
2142+ }
2143+
2144+ void QgsProject::setEvaluateDefaultValues ( bool evaluateDefaultValues )
2145+ {
2146+ Q_FOREACH ( QgsMapLayer* layer, QgsMapLayerRegistry::instance ()->mapLayers ().values () )
2147+ {
2148+ QgsVectorLayer* vl = qobject_cast<QgsVectorLayer*>( layer );
2149+ if ( vl )
2150+ {
2151+ vl->dataProvider ()->setProviderProperty ( QgsVectorDataProvider::EvaluateDefaultValues, evaluateDefaultValues );
2152+ }
2153+ }
2154+
2155+ imp_->evaluateDefaultValues = evaluateDefaultValues;
2156+ }
2157+
21222158void QgsProject::setTopologicalEditing ( bool enabled )
21232159{
21242160 QgsProject::instance ()->writeEntry ( " Digitizing" , " /TopologicalEditing" , ( enabled ? 1 : 0 ) );
@@ -2232,7 +2268,7 @@ void QgsProject::setAutoTransaction( bool autoTransaction )
22322268 imp_->autoTransaction = autoTransaction;
22332269
22342270 if ( autoTransaction )
2235- addToTransactionGroups ( QgsMapLayerRegistry::instance ()->mapLayers ().values () );
2271+ onMapLayersAdded ( QgsMapLayerRegistry::instance ()->mapLayers ().values () );
22362272 else
22372273 cleanTransactionGroups ( true );
22382274 }
0 commit comments