diff --git a/src/core/layout/qgscompositionconverter.cpp b/src/core/layout/qgscompositionconverter.cpp index 83a55b30140..4ca7a12cfdf 100644 --- a/src/core/layout/qgscompositionconverter.cpp +++ b/src/core/layout/qgscompositionconverter.cpp @@ -30,6 +30,7 @@ #include "qgsproject.h" #include "qgsmaplayerstylemanager.h" +#include "qgslayoutpagecollection.h" #include "qgslayoutitemregistry.h" #include "qgslayoutitemlabel.h" #include "qgslayoutitemshape.h" @@ -860,6 +861,7 @@ bool QgsCompositionConverter::readMapXml( QgsLayoutItemMap *layoutItem, const QD bool QgsCompositionConverter::readScaleBarXml( QgsLayoutItemScaleBar *layoutItem, const QDomElement &itemElem, const QgsProject *project ) { + Q_UNUSED( project ); restoreGeneralComposeItemProperties( layoutItem, itemElem ); layoutItem->setHeight( itemElem.attribute( QStringLiteral( "height" ), QStringLiteral( "5.0" ) ).toDouble() ); diff --git a/src/core/layout/qgslayoutmanager.cpp b/src/core/layout/qgslayoutmanager.cpp index 78ee7766d56..b77a87ac880 100644 --- a/src/core/layout/qgslayoutmanager.cpp +++ b/src/core/layout/qgslayoutmanager.cpp @@ -20,6 +20,7 @@ #include "qgslayoutundostack.h" #include "qgsprintlayout.h" #include "qgsreport.h" +#include "qgscompositionconverter.h" QgsLayoutManager::QgsLayoutManager( QgsProject *project ) : QObject( project ) @@ -188,6 +189,17 @@ bool QgsLayoutManager::readXml( const QDomElement &element, const QDomDocument & QDomNodeList composerNodes = element.elementsByTagName( QStringLiteral( "Composer" ) ); for ( int i = 0; i < composerNodes.size(); ++i ) { + // Convert compositions to layouts + QDomNodeList compositionNodes = composerNodes.at( i ).toElement().elementsByTagName( QStringLiteral( "Composition" ) ); + for ( int j = 0; j < compositionNodes.size(); ++j ) + { + QgsLayout *l = nullptr; + l = QgsCompositionConverter::createLayoutFromCompositionXml( compositionNodes.at( j ).toElement(), mProject ); + if ( l ) + addLayout( l ); + } + + // legacy import QString legacyTitle = composerNodes.at( i ).toElement().attribute( QStringLiteral( "title" ) ); QgsComposition *c = createCompositionFromXml( composerNodes.at( i ).toElement(), doc ); if ( !c ) diff --git a/src/core/qgsmultirenderchecker.cpp b/src/core/qgsmultirenderchecker.cpp index 9eb2f1338cf..6f0cffcd12a 100644 --- a/src/core/qgsmultirenderchecker.cpp +++ b/src/core/qgsmultirenderchecker.cpp @@ -207,7 +207,8 @@ bool QgsLayoutChecker::testLayout( QString &checkedReport, int page, int pixelDi _outputImage.setDotsPerMeterX( 96 / 25.4 * 1000 ); _outputImage.setDotsPerMeterY( 96 / 25.4 * 1000 ); QPainter _p( &_outputImage ); - mLayout->exporter().renderPage( &_p, page ); + QgsLayoutExporter _exporter( mLayout ); + _exporter.renderPage( &_p, page ); _p.end(); if ( ! QDir( controlImagePath() ).exists() ) diff --git a/tests/src/core/testqgscompositionconverter.cpp b/tests/src/core/testqgscompositionconverter.cpp index 011deacbb51..8e8124275a4 100644 --- a/tests/src/core/testqgscompositionconverter.cpp +++ b/tests/src/core/testqgscompositionconverter.cpp @@ -27,6 +27,7 @@ #include "qgssettings.h" +#include "qgslayoutpagecollection.h" #include "qgslayoutitemlabel.h" #include "qgslayoutitemshape.h" #include "qgslayoutitempicture.h" @@ -100,11 +101,8 @@ class TestQgsCompositionConverter: public QObject private: - void checkRenderedImage( QgsLayout *layout, const QString testName, const int pageNumber = 0 ); - void exportLayout( QgsLayout *layout, const QString testName ); - QDomElement loadComposition( const QString name ); QString mReport; @@ -405,36 +403,6 @@ void TestQgsCompositionConverter::checkRenderedImage( QgsLayout *layout, const Q QVERIFY( checker.testLayout( mReport, pageNumber ) ); } -void TestQgsCompositionConverter::exportLayout( QgsLayout *layout, const QString testName ) -{ - // Save the template for inspection - QTemporaryFile tmpTemplate( QString( "%1_converted-XXXXXX.qpt" ).arg( testName ) ); - tmpTemplate.setAutoRemove( false ); - tmpTemplate.open(); - tmpTemplate.close(); - QgsReadWriteContext context; - layout->saveAsTemplate( tmpTemplate.fileName(), context ); - qDebug() << tmpTemplate.fileName(); - - for ( int i = 0; i < layout->pageCollection()->pageCount(); ++i ) - { - QgsLayoutItemPage *page = layout->pageCollection()->pages().at( i ); - QSize size; - QgsLayoutSize pageSize = page->sizeWithUnits(); - size.setHeight( pageSize.height() * 3.77 ); - size.setWidth( pageSize.width() * 3.77 ); - - QImage outputImage( size, QImage::Format_RGB32 ); - outputImage.setDotsPerMeterX( 96 / 25.4 * 1000 ); - outputImage.setDotsPerMeterY( 96 / 25.4 * 1000 ); - QPainter p( &outputImage ); - layout->exporter().renderPage( &p, i ); - p.end(); - - QString renderedFilePath = tmpTemplate.fileName() + QString( "_%1_.png" ).arg( i ); - outputImage.save( renderedFilePath, "PNG" ); - } -} QDomElement TestQgsCompositionConverter::loadComposition( const QString name ) { diff --git a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateArrow_0/expected_importComposerTemplateArrow_0.png b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateArrow_0/expected_importComposerTemplateArrow_0.png index 110317eb851..c47ebe949cd 100644 Binary files a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateArrow_0/expected_importComposerTemplateArrow_0.png and b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateArrow_0/expected_importComposerTemplateArrow_0.png differ diff --git a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateLabel_0/expected_importComposerTemplateLabel_0.png b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateLabel_0/expected_importComposerTemplateLabel_0.png index 9a186d0fc86..f4b54cdf4e3 100644 Binary files a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateLabel_0/expected_importComposerTemplateLabel_0.png and b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateLabel_0/expected_importComposerTemplateLabel_0.png differ diff --git a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateLegend_0/expected_importComposerTemplateLegend_0.png b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateLegend_0/expected_importComposerTemplateLegend_0.png index 0cc909ffaf9..dba8402eb83 100644 Binary files a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateLegend_0/expected_importComposerTemplateLegend_0.png and b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateLegend_0/expected_importComposerTemplateLegend_0.png differ diff --git a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateMap_0/expected_importComposerTemplateMap_0.png b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateMap_0/expected_importComposerTemplateMap_0.png index 996239188b3..62931fe7f43 100644 Binary files a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateMap_0/expected_importComposerTemplateMap_0.png and b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateMap_0/expected_importComposerTemplateMap_0.png differ diff --git a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplatePicture_0/expected_importComposerTemplatePicture_0.png b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplatePicture_0/expected_importComposerTemplatePicture_0.png index 39e4eb7b722..558be239cfc 100644 Binary files a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplatePicture_0/expected_importComposerTemplatePicture_0.png and b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplatePicture_0/expected_importComposerTemplatePicture_0.png differ diff --git a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplatePolygon_0/expected_importComposerTemplatePolygon_0.png b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplatePolygon_0/expected_importComposerTemplatePolygon_0.png index c4bff52fcca..9f04d97d93d 100644 Binary files a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplatePolygon_0/expected_importComposerTemplatePolygon_0.png and b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplatePolygon_0/expected_importComposerTemplatePolygon_0.png differ diff --git a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplatePolyline_0/expected_importComposerTemplatePolyline_0.png b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplatePolyline_0/expected_importComposerTemplatePolyline_0.png index 5cc6b859e94..d892401ccac 100644 Binary files a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplatePolyline_0/expected_importComposerTemplatePolyline_0.png and b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplatePolyline_0/expected_importComposerTemplatePolyline_0.png differ diff --git a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateScaleBar_0/expected_importComposerTemplateScaleBar_0.png b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateScaleBar_0/expected_importComposerTemplateScaleBar_0.png index 8a858c48d3a..8f3c7c0eaf3 100644 Binary files a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateScaleBar_0/expected_importComposerTemplateScaleBar_0.png and b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateScaleBar_0/expected_importComposerTemplateScaleBar_0.png differ diff --git a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateShape_0/expected_importComposerTemplateShape_0.png b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateShape_0/expected_importComposerTemplateShape_0.png index 02fca2b0f2d..dc7225e5205 100644 Binary files a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateShape_0/expected_importComposerTemplateShape_0.png and b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplateShape_0/expected_importComposerTemplateShape_0.png differ diff --git a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplate_0/expected_importComposerTemplate_0.png b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplate_0/expected_importComposerTemplate_0.png index 5055889f043..d4a6b14c200 100644 Binary files a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplate_0/expected_importComposerTemplate_0.png and b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplate_0/expected_importComposerTemplate_0.png differ diff --git a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplate_1/expected_importComposerTemplate_1.png b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplate_1/expected_importComposerTemplate_1.png index fc3d9232115..988ec35ab3f 100644 Binary files a/tests/testdata/control_images/compositionconverter/expected_importComposerTemplate_1/expected_importComposerTemplate_1.png and b/tests/testdata/control_images/compositionconverter/expected_importComposerTemplate_1/expected_importComposerTemplate_1.png differ