Skip to content

Commit 7c5dcd6

Browse files
committedJan 18, 2019
Persist canvas expression context scope variables to project
and restore individual scope variables for each canvas on project load.
1 parent a0e91f3 commit 7c5dcd6

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed
 

‎src/gui/qgsmapcanvas.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2087,6 +2087,14 @@ void QgsMapCanvas::readProject( const QDomDocument &doc )
20872087
}
20882088
}
20892089
setAnnotationsVisible( elem.attribute( QStringLiteral( "annotationsVisible" ), QStringLiteral( "1" ) ).toInt() );
2090+
2091+
// restore canvas expression context
2092+
const QDomNodeList scopeElements = elem.elementsByTagName( QStringLiteral( "expressionContextScope" ) );
2093+
if ( scopeElements.size() > 0 )
2094+
{
2095+
const QDomElement scopeElement = scopeElements.at( 0 ).toElement();
2096+
mExpressionContextScope.readXml( scopeElement, QgsReadWriteContext() );
2097+
}
20902098
}
20912099
else
20922100
{
@@ -2114,6 +2122,12 @@ void QgsMapCanvas::writeProject( QDomDocument &doc )
21142122
qgisNode.appendChild( mapcanvasNode );
21152123

21162124
mSettings.writeXml( mapcanvasNode, doc );
2125+
2126+
// store canvas expression context
2127+
QDomElement scopeElement = doc.createElement( QStringLiteral( "expressionContextScope" ) );
2128+
mExpressionContextScope.writeXml( scopeElement, doc, QgsReadWriteContext() );
2129+
mapcanvasNode.appendChild( scopeElement );
2130+
21172131
// TODO: store only units, extent, projections, dest CRS
21182132
}
21192133

‎tests/src/python/test_qgsmapcanvas.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,10 +355,14 @@ def testSaveMultipleCanvasesToProject(self):
355355
c1.setObjectName('c1')
356356
c1.setDestinationCrs(QgsCoordinateReferenceSystem('EPSG:3111'))
357357
c1.setRotation(45)
358+
c1.expressionContextScope().setVariable('vara', 1111)
359+
c1.expressionContextScope().setVariable('varb', 'bb')
358360
c2 = QgsMapCanvas()
359361
c2.setObjectName('c2')
360362
c2.setDestinationCrs(QgsCoordinateReferenceSystem('EPSG:4326'))
361363
c2.setRotation(65)
364+
c2.expressionContextScope().setVariable('vara', 2222)
365+
c2.expressionContextScope().setVariable('varc', 'cc')
362366

363367
doc = QDomDocument("testdoc")
364368
elem = doc.createElement("qgis")
@@ -375,8 +379,14 @@ def testSaveMultipleCanvasesToProject(self):
375379

376380
self.assertEqual(c3.mapSettings().destinationCrs().authid(), 'EPSG:3111')
377381
self.assertEqual(c3.rotation(), 45)
382+
self.assertEqual(set(c3.expressionContextScope().variableNames()), {'vara', 'varb'})
383+
self.assertEqual(c3.expressionContextScope().variable('vara'), 1111)
384+
self.assertEqual(c3.expressionContextScope().variable('varb'), 'bb')
378385
self.assertEqual(c4.mapSettings().destinationCrs().authid(), 'EPSG:4326')
379386
self.assertEqual(c4.rotation(), 65)
387+
self.assertEqual(set(c4.expressionContextScope().variableNames()), {'vara', 'varc'})
388+
self.assertEqual(c4.expressionContextScope().variable('vara'), 2222)
389+
self.assertEqual(c4.expressionContextScope().variable('varc'), 'cc')
380390

381391

382392
if __name__ == '__main__':

0 commit comments

Comments
 (0)
Please sign in to comment.