oox/source/drawingml/diagram/diagramlayoutatoms.cxx | 23 +++++++++++--------- sd/qa/unit/data/pptx/smartart-org-chart.pptx |binary sd/qa/unit/import-tests-smartart.cxx | 5 +++- 3 files changed, 17 insertions(+), 11 deletions(-)
New commits: commit dfc97dd381ef516ca4a7e99b29f9da1033a380f4 Author: Miklos Vajna <[email protected]> AuthorDate: Thu Jan 10 13:39:02 2019 +0100 Commit: Miklos Vajna <[email protected]> CommitDate: Fri Jan 11 09:04:48 2019 +0100 oox smartart, org chart: handle multiple paragraphs on data node This problem was similar to the one fixed in cfa76f538a44d4396574ece59e8a3953c22c6eb7 (oox smartart, accent process: handle multiple runs from a data point, 2018-11-21), but this there we handled multiple runs and this handles multiple paragraphs. It seems some smartart types allow multiple paragraphs in a diagram node, others only allow multiple runs. Org chart is in the former category. Change-Id: I281f01fdfa809d0a232d5da7fdaa23de7adcd627 Reviewed-on: https://gerrit.libreoffice.org/66066 Reviewed-by: Miklos Vajna <[email protected]> Tested-by: Jenkins diff --git a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx index dd762a9bc77a..e768bebf362d 100644 --- a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx +++ b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx @@ -1047,16 +1047,19 @@ bool LayoutNode::setupShape( const ShapePtr& rShape, const dgm::Point* pPresNode rShape->setTextBody(pTextBody); } - TextParagraph& rPara=pTextBody->addParagraph(); - if( aVecIter->second != -1 ) - rPara.getProperties().setLevel(aVecIter->second); - - std::shared_ptr<TextParagraph> pSourceParagraph - = aDataNode2->second->mpShape->getTextBody()->getParagraphs().front(); - for (const auto& pRun : pSourceParagraph->getRuns()) - rPara.addRun(pRun); - rPara.getProperties().apply( - aDataNode2->second->mpShape->getTextBody()->getParagraphs().front()->getProperties()); + const TextParagraphVector& rSourceParagraphs + = aDataNode2->second->mpShape->getTextBody()->getParagraphs(); + for (const auto& pSourceParagraph : rSourceParagraphs) + { + TextParagraph& rPara = pTextBody->addParagraph(); + if (aVecIter->second != -1) + rPara.getProperties().setLevel(aVecIter->second); + + for (const auto& pRun : pSourceParagraph->getRuns()) + rPara.addRun(pRun); + const TextBodyPtr& rBody = aDataNode2->second->mpShape->getTextBody(); + rPara.getProperties().apply(rBody->getParagraphs().front()->getProperties()); + } } ++aVecIter; diff --git a/sd/qa/unit/data/pptx/smartart-org-chart.pptx b/sd/qa/unit/data/pptx/smartart-org-chart.pptx index 259a9f5a1d13..df6e0521fdca 100644 Binary files a/sd/qa/unit/data/pptx/smartart-org-chart.pptx and b/sd/qa/unit/data/pptx/smartart-org-chart.pptx differ diff --git a/sd/qa/unit/import-tests-smartart.cxx b/sd/qa/unit/import-tests-smartart.cxx index 45cc9b6e5523..5895289ad0ce 100644 --- a/sd/qa/unit/import-tests-smartart.cxx +++ b/sd/qa/unit/import-tests-smartart.cxx @@ -698,7 +698,10 @@ void SdImportTestSmartArt::testOrgChart() uno::Reference<text::XText> xManager( getChildShape(getChildShape(getChildShape(xGroup, 0), 0), 0), uno::UNO_QUERY); CPPUNIT_ASSERT(xManager.is()); - CPPUNIT_ASSERT_EQUAL(OUString("Manager"), xManager->getString()); + // Without the accompanying fix in place, this test would have failed: this + // was just "Manager", and the second paragraph was lost. + OUString aExpected("Manager\nSecond para"); + CPPUNIT_ASSERT_EQUAL(aExpected, xManager->getString()); uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xManager, uno::UNO_QUERY); uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration(); _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
