summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--oox/source/drawingml/diagram/diagramlayoutatoms.cxx22
-rw-r--r--sd/qa/unit/data/pptx/smartart-bullet-list.pptxbin0 -> 40468 bytes
-rw-r--r--sd/qa/unit/import-tests-smartart.cxx32
3 files changed, 43 insertions, 11 deletions
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
--- /dev/null
+++ b/sd/qa/unit/data/pptx/smartart-bullet-list.pptx
Binary files 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();