Skip to content

Commit 61c57bc

Browse files
committedDec 6, 2017
Save and restore layouts with project
1 parent e5e37fc commit 61c57bc

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed
 

‎src/core/composer/qgslayoutmanager.cpp‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,29 @@ bool QgsLayoutManager::readXml( const QDomElement &element, const QDomDocument &
184184
c->setName( legacyTitle );
185185
result = result && addComposition( c );
186186
}
187+
188+
QgsReadWriteContext context;
189+
context.setPathResolver( mProject->pathResolver() );
190+
191+
// restore layouts
192+
const QDomNodeList layoutNodes = element.elementsByTagName( QStringLiteral( "Layout" ) );
193+
for ( int i = 0; i < layoutNodes.size(); ++i )
194+
{
195+
std::unique_ptr< QgsLayout > l = qgis::make_unique< QgsLayout >( mProject );
196+
if ( !l->readXml( layoutNodes.at( i ).toElement(), doc, context ) )
197+
{
198+
result = false;
199+
continue;
200+
}
201+
if ( addLayout( l.get() ) )
202+
{
203+
( void )l.release(); // ownership was transferred successfully
204+
}
205+
else
206+
{
207+
result = false;
208+
}
209+
}
187210
return result;
188211
}
189212

@@ -199,6 +222,13 @@ QDomElement QgsLayoutManager::writeXml( QDomDocument &doc ) const
199222
c->writeXml( composerElem, doc );
200223
c->atlasComposition().writeXml( composerElem, doc );
201224
}
225+
QgsReadWriteContext context;
226+
context.setPathResolver( mProject->pathResolver() );
227+
for ( QgsLayout *l : mLayouts )
228+
{
229+
QDomElement layoutElem = l->writeXml( doc, context );
230+
layoutsElem.appendChild( layoutElem );
231+
}
202232
return layoutsElem;
203233
}
204234

‎tests/src/python/test_qgslayoutmanager.py‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,18 @@ def testReadWriteXml(self):
304304
manager.addComposition(composition2)
305305
manager.addComposition(composition3)
306306

307+
# add a bunch of layouts
308+
layout = QgsLayout(project)
309+
layout.setName('test layout')
310+
layout2 = QgsLayout(project)
311+
layout2.setName('test layout2')
312+
layout3 = QgsLayout(project)
313+
layout3.setName('test layout3')
314+
315+
manager.addLayout(layout)
316+
manager.addLayout(layout2)
317+
manager.addLayout(layout3)
318+
307319
# save to xml
308320
doc = QDomDocument("testdoc")
309321
elem = manager.writeXml(doc)
@@ -318,6 +330,10 @@ def testReadWriteXml(self):
318330
names = [c.name() for c in manager2.compositions()]
319331
self.assertEqual(set(names), {'test composition', 'test composition2', 'test composition3'})
320332

333+
self.assertEqual(len(manager2.layouts()), 3)
334+
names = [c.name() for c in manager2.layouts()]
335+
self.assertCountEqual(names, ['test layout', 'test layout2', 'test layout3'])
336+
321337
def testSaveAsTemplate(self):
322338
"""
323339
Test saving composition as template

0 commit comments

Comments
 (0)
Please sign in to comment.