oox/source/drawingml/diagram/diagramlayoutatoms.cxx | 22 +++++++------ sd/qa/unit/data/pptx/smartart-bullet-list.pptx |binary sd/qa/unit/import-tests-smartart.cxx | 32 +++++++++++++++++++- 3 files changed, 43 insertions(+), 11 deletions(-)
New commits: commit c3e0d46062c6b37dfa74b6b388767c61912145f4 Author: Grzegorz Araminowicz <grzegorz.araminow...@collabora.com> AuthorDate: Tue Jun 4 13:51:40 2019 +0200 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Sat Jun 15 07:36:33 2019 +0200 SmartArt: bullet list improvements by default start bullet list at second level use stBulletLvl parameter to change this behaviour Change-Id: I5084e7bf1902fdca83bea6d57a8c1f37dd2e65be Reviewed-on: https://gerrit.libreoffice.org/73440 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmik...@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/74086 Reviewed-by: Andras Timar <andras.ti...@collabora.com> Tested-by: Andras Timar <andras.ti...@collabora.com> diff --git a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx index d7d6fda1e1e0..a4b80548e3dd 100644 --- a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx +++ b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx @@ -1196,27 +1196,30 @@ void AlgAtom::layoutShape( const ShapePtr& rShape, nBaseLevel = aParagraph->getProperties().getLevel(); } + // Start bullets at: + // 1 - top level + // 2 - with children (default) + int nStartBulletsAtLevel = 2; ParamMap::const_iterator aBulletLvl = maMap.find(XML_stBulletLvl); - int nStartBulletsAtLevel = 0; if (aBulletLvl != maMap.end()) - { - nBaseLevel -= aBulletLvl->second; nStartBulletsAtLevel = aBulletLvl->second; - } + nStartBulletsAtLevel--; + bool isBulletList = false; for (auto & aParagraph : pTextBody->getParagraphs()) { - sal_Int32 nLevel = aParagraph->getProperties().getLevel(); - aParagraph->getProperties().setLevel(nLevel - nBaseLevel); - if (nStartBulletsAtLevel > 0 && nLevel >= nStartBulletsAtLevel) + sal_Int32 nLevel = aParagraph->getProperties().getLevel() - nBaseLevel; + aParagraph->getProperties().setLevel(nLevel); + if (nLevel >= nStartBulletsAtLevel) { // It is not possible to change the bullet style for text. - sal_Int32 nLeftMargin = 285750 * (nLevel - nStartBulletsAtLevel) / EMU_PER_HMM; + sal_Int32 nLeftMargin = 285750 * (nLevel - nStartBulletsAtLevel + 1) / EMU_PER_HMM; aParagraph->getProperties().getParaLeftMargin() = nLeftMargin; aParagraph->getProperties().getFirstLineIndentation() = -285750 / EMU_PER_HMM; OUString aBulletChar = OUString::fromUtf8(u8"•"); aParagraph->getProperties().getBulletList().setBulletChar(aBulletChar); aParagraph->getProperties().getBulletList().setSuffixNone(); + isBulletList = true; } } @@ -1229,8 +1232,7 @@ void AlgAtom::layoutShape( const ShapePtr& rShape, for (auto & aParagraph : pTextBody->getParagraphs()) aParagraph->getProperties().setParaAdjust(aAlignment); } - else if (std::all_of(pTextBody->getParagraphs().begin(), pTextBody->getParagraphs().end(), - [](const std::shared_ptr<TextParagraph>& aParagraph) { return aParagraph->getProperties().getLevel() == 0; })) + else if (!isBulletList) { // if not list use default alignment - centered for (auto & aParagraph : pTextBody->getParagraphs()) diff --git a/sd/qa/unit/data/pptx/smartart-bullet-list.pptx b/sd/qa/unit/data/pptx/smartart-bullet-list.pptx new file mode 100644 index 000000000000..d95bdb769140 Binary files /dev/null and b/sd/qa/unit/data/pptx/smartart-bullet-list.pptx differ diff --git a/sd/qa/unit/import-tests-smartart.cxx b/sd/qa/unit/import-tests-smartart.cxx index 5a0cd7679ea1..930006fd3931 100644 --- a/sd/qa/unit/import-tests-smartart.cxx +++ b/sd/qa/unit/import-tests-smartart.cxx @@ -75,6 +75,7 @@ public: void testBackgroundDrawingmlFallback(); void testFontSize(); void testVerticalBlockList(); + void testBulletList(); CPPUNIT_TEST_SUITE(SdImportTestSmartArt); @@ -112,6 +113,7 @@ public: CPPUNIT_TEST(testBackgroundDrawingmlFallback); CPPUNIT_TEST(testFontSize); CPPUNIT_TEST(testVerticalBlockList); + CPPUNIT_TEST(testBulletList); CPPUNIT_TEST_SUITE_END(); }; @@ -534,7 +536,7 @@ void SdImportTestSmartArt::testAccentProcess() uno::Reference<container::XIndexAccess> xRules(xPara->getPropertyValue("NumberingRules"), uno::UNO_QUERY); - comphelper::SequenceAsHashMap aRule(xRules->getByIndex(1)); + comphelper::SequenceAsHashMap aRule(xRules->getByIndex(0)); CPPUNIT_ASSERT_EQUAL(OUString::fromUtf8(u8"•"), aRule["BulletChar"].get<OUString>()); } @@ -1076,6 +1078,34 @@ void SdImportTestSmartArt::testVerticalBlockList() xDocShRef->DoClose(); } +void SdImportTestSmartArt::testBulletList() +{ + sd::DrawDocShellRef xDocShRef = loadURL( + m_directories.getURLFromSrc("/sd/qa/unit/data/pptx/smartart-bullet-list.pptx"), + PPTX); + uno::Reference<drawing::XShapes> xGroup(getShapeFromPage(0, 0, xDocShRef), uno::UNO_QUERY); + CPPUNIT_ASSERT(xGroup.is()); + + uno::Reference<text::XText> xText(xGroup->getByIndex(1), uno::UNO_QUERY); + uno::Reference<container::XEnumerationAccess> xParasAccess(xText, uno::UNO_QUERY); + uno::Reference<container::XEnumeration> xParas = xParasAccess->createEnumeration(); + xParas->nextElement(); // skip parent + + // child levels should have bullets + uno::Reference<beans::XPropertySet> xPara1(xParas->nextElement(), uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xRules1(xPara1->getPropertyValue("NumberingRules"), uno::UNO_QUERY); + comphelper::SequenceAsHashMap aRule1(xRules1->getByIndex(1)); + CPPUNIT_ASSERT_EQUAL(OUString::fromUtf8(u8"•"), aRule1["BulletChar"].get<OUString>()); + + uno::Reference<beans::XPropertySet> xPara2(xParas->nextElement(), uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xRules2(xPara2->getPropertyValue("NumberingRules"), uno::UNO_QUERY); + comphelper::SequenceAsHashMap aRule2(xRules2->getByIndex(2)); + CPPUNIT_ASSERT_EQUAL(OUString::fromUtf8(u8"•"), aRule2["BulletChar"].get<OUString>()); + + xDocShRef->DoClose(); +} + + CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTestSmartArt); CPPUNIT_PLUGIN_IMPLEMENT(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits