Skip to content
Permalink
Browse files

Avoid more needless project dirtying

  • Loading branch information
nirvn committed Nov 21, 2018
1 parent 98cef32 commit f2091054adedb50866d59b0b649cc54b220091d9
@@ -63,6 +63,7 @@ Copy constructor
%End


bool operator==( const QgsCoordinateTransformContext &rhs ) const;

void clear();
%Docstring
@@ -36,6 +36,19 @@ QgsCoordinateTransformContext &QgsCoordinateTransformContext::operator=( const Q
return *this;
}

bool QgsCoordinateTransformContext::operator==( const QgsCoordinateTransformContext &rhs ) const
{
if ( d == rhs.d )
return true;

d->mLock.lockForRead();
rhs.d->mLock.lockForRead();
bool equal = d->mSourceDestDatumTransforms == rhs.d->mSourceDestDatumTransforms;
d->mLock.unlock();
rhs.d->mLock.unlock();
return equal;
}

void QgsCoordinateTransformContext::clear()
{
d.detach();
@@ -80,6 +80,7 @@ class CORE_EXPORT QgsCoordinateTransformContext
*/
QgsCoordinateTransformContext &operator=( const QgsCoordinateTransformContext &rhs ) SIP_SKIP;

bool operator==( const QgsCoordinateTransformContext &rhs ) const ;

/**
* Clears all stored transform information from the context.
@@ -278,6 +278,13 @@ QgsProjectProperty *addKey_( const QString &scope,
return nullptr;
}

/**
* Remove a given key
\param scope scope of key
\param key key name
\param rootProperty is the property from which to start adding
*/

void removeKey_( const QString &scope,
const QString &key,
@@ -614,6 +621,9 @@ QgsCoordinateReferenceSystem QgsProject::crs() const

void QgsProject::setCrs( const QgsCoordinateReferenceSystem &crs )
{
if ( crs == mCrs )
return;

mCrs = crs;
writeEntry( QStringLiteral( "SpatialRefSys" ), QStringLiteral( "/ProjectionsEnabled" ), crs.isValid() ? 1 : 0 );
setDirty( true );
@@ -631,7 +641,6 @@ QString QgsProject::ellipsoid() const
void QgsProject::setEllipsoid( const QString &ellipsoid )
{
writeEntry( QStringLiteral( "Measure" ), QStringLiteral( "/Ellipsoid" ), ellipsoid );
setDirty( true );
emit ellipsoidChanged( ellipsoid );
}

@@ -642,6 +651,9 @@ QgsCoordinateTransformContext QgsProject::transformContext() const

void QgsProject::setTransformContext( const QgsCoordinateTransformContext &context )
{
if ( context == mTransformContext )
return;

mTransformContext = context;
emit transformContextChanged();
}
@@ -834,7 +846,7 @@ void QgsProject::setSnappingConfig( const QgsSnappingConfig &snappingConfig )
return;

mSnappingConfig = snappingConfig;
setDirty();
setDirty( true );
emit snappingConfigChanged( mSnappingConfig );
}

@@ -2084,9 +2096,11 @@ bool QgsProject::readBoolEntry( const QString &scope, const QString &key, bool d

bool QgsProject::removeEntry( const QString &scope, const QString &key )
{
removeKey_( scope, key, mProperties );

setDirty( true );
if ( findKey_( scope, key, mProperties ) )
{
removeKey_( scope, key, mProperties );
setDirty( true );
}

return !findKey_( scope, key, mProperties );
}
@@ -2357,6 +2371,9 @@ bool QgsProject::evaluateDefaultValues() const

void QgsProject::setEvaluateDefaultValues( bool evaluateDefaultValues )
{
if ( evaluateDefaultValues == mEvaluateDefaultValues )
return;

const QMap<QString, QgsMapLayer *> layers = mapLayers();
QMap<QString, QgsMapLayer *>::const_iterator layerIt = layers.constBegin();
for ( ; layerIt != layers.constEnd(); ++layerIt )
@@ -2848,6 +2865,9 @@ const QgsProjectMetadata &QgsProject::metadata() const

void QgsProject::setMetadata( const QgsProjectMetadata &metadata )
{
if ( metadata == mMetadata )
return;

mMetadata = metadata;
emit metadataChanged();

@@ -408,6 +408,19 @@ def testReadWriteSettings(self):
{('EPSG:4204', 'EPSG:4326'): QgsDatumTransform.TransformPair(source_id_1, dest_id_1),
('EPSG:4205', 'EPSG:4326'): QgsDatumTransform.TransformPair(source_id_2, dest_id_2)})

def testEqualOperator(self):
context1 = QgsCoordinateTransformContext()
context2 = QgsCoordinateTransformContext()
self.assertTrue(context1 == context2)

context1.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:3111'),
QgsCoordinateReferenceSystem('EPSG:4283'), 1, 2)
self.assertFalse(context1 == context2)

context2.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:3111'),
QgsCoordinateReferenceSystem('EPSG:4283'), 1, 2)
self.assertTrue(context1 == context2)


if __name__ == '__main__':
unittest.main()
@@ -1121,7 +1121,7 @@ def testWriteEntry(self):
self.assertTrue(ok)
self.assertEqual(q, query)

def testWriteEntryDirtying(self):
def testDirtying(self):

project = QgsProject()

@@ -1140,6 +1140,27 @@ def testWriteEntryDirtying(self):
self.assertTrue(project.writeEntry('myscope', 'myentry', False))
self.assertTrue(project.isDirty())

# removing an existing entry should dirty the project
project.setDirty(False)
self.assertTrue(project.removeEntry('myscope', 'myentry'))
self.assertTrue(project.isDirty())

# removing a non-existing entry should _not_ dirty the project
project.setDirty(False)
self.assertTrue(project.removeEntry('myscope', 'myentry'))
self.assertFalse(project.isDirty())

# setting a project CRS with a new value should dirty the project
project.setCrs(QgsCoordinateReferenceSystem('EPSG:4326'))
project.setDirty(False)
project.setCrs(QgsCoordinateReferenceSystem('EPSG:3148'))
self.assertTrue(project.isDirty())

# setting a project CRS with the same project CRS should not dirty the project
project.setDirty(False)
project.setCrs(QgsCoordinateReferenceSystem('EPSG:3148'))
self.assertFalse(project.isDirty())


if __name__ == '__main__':
unittest.main()

0 comments on commit f209105

Please sign in to comment.
You can’t perform that action at this time.