Kaydet (Commit) cb598029 authored tarafından Tamás Zolnai's avatar Tamás Zolnai

tdf#104445: PPTX import: Extra bullets are added to placeholder text

Change-Id: I25ce98ed391f70292bed6238645b121b9cf50d5e
Reviewed-on: https://gerrit.libreoffice.org/31771Reviewed-by: 's avatarTamás Zolnai <tamas.zolnai@collabora.com>
Tested-by: 's avatarTamás Zolnai <tamas.zolnai@collabora.com>
üst 76c21c57
......@@ -23,6 +23,7 @@
#include <com/sun/star/beans/XPropertySet.hpp>
#include "drawingml/textparagraph.hxx"
#include "oox/helper/propertyset.hxx"
#include <oox/token/properties.hxx>
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::text;
......@@ -110,10 +111,11 @@ void TextBody::ApplyStyleEmpty(
{
Reference< XPropertySet > xProps(xText, UNO_QUERY);
PropertyMap aioBulletList;
aioBulletList.setProperty< sal_Int32 >(PROP_LeftMargin, 0); // Init bullets left margin to 0 (no bullets).
float nCharHeight = xProps->getPropertyValue("CharHeight").get<float>();
TextParagraphProperties aParaProp;
aParaProp.apply(*pTextParagraphStyle);
aParaProp.pushToPropSet(&rFilterBase, xProps, aioBulletList, &pTextParagraphStyle->getBulletList(), false, nCharHeight, true);
aParaProp.pushToPropSet(&rFilterBase, xProps, aioBulletList, &pTextParagraphStyle->getBulletList(), true, nCharHeight, true);
}
}
......
......@@ -352,7 +352,7 @@ void PPTShape::addShape(
}
// Apply text properties on placeholder text inside this placeholder shape
if (mpPlaceholder.get() != nullptr && getTextBody() && getTextBody()->isEmpty())
if (meShapeLocation == Slide && mpPlaceholder.get() != nullptr && getTextBody() && getTextBody()->isEmpty())
{
Reference < XText > xText(mxShape, UNO_QUERY);
if (xText.is())
......
......@@ -63,6 +63,7 @@
#include <com/sun/star/style/ParagraphAdjust.hpp>
#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
#include <com/sun/star/table/XTableRows.hpp>
#include <com/sun/star/style/NumberingType.hpp>
#include <stlpool.hxx>
#include <comphelper/processfactory.hxx>
......@@ -132,6 +133,7 @@ public:
void testTdf104015();
void testTdf104201();
void testTdf103477();
void testTdf104445();
CPPUNIT_TEST_SUITE(SdImportTest);
......@@ -189,6 +191,7 @@ public:
CPPUNIT_TEST(testTdf104015);
CPPUNIT_TEST(testTdf104201);
CPPUNIT_TEST(testTdf103477);
CPPUNIT_TEST(testTdf104445);
CPPUNIT_TEST_SUITE_END();
};
......@@ -1638,6 +1641,56 @@ void SdImportTest::testTdf103477()
xDocShRef->DoClose();
}
void SdImportTest::testTdf104445()
{
// Extra bullets were added to the first shape
sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/pptx/tdf104445.pptx"), PPTX);
// First shape should not have bullet
{
uno::Reference< beans::XPropertySet > xShape(getShapeFromPage(0, 0, xDocShRef));
uno::Reference< text::XText > xText = uno::Reference< text::XTextRange>(xShape, uno::UNO_QUERY)->getText();
CPPUNIT_ASSERT_MESSAGE("Not a text shape", xText.is());
uno::Reference< beans::XPropertySet > xPropSet(xText, uno::UNO_QUERY_THROW);
uno::Reference< container::XIndexAccess > xNumRule;
xPropSet->getPropertyValue("NumberingRules") >>= xNumRule;
uno::Sequence<beans::PropertyValue> aBulletProps;
xNumRule->getByIndex(0) >>= aBulletProps;
for (int i = 0; i < aBulletProps.getLength(); ++i)
{
const beans::PropertyValue& rProp = aBulletProps[i];
if(rProp.Name == "NumberingType")
CPPUNIT_ASSERT_EQUAL(sal_Int16(style::NumberingType::NUMBER_NONE), rProp.Value.get<sal_Int16>());
if(rProp.Name == "LeftMargin")
CPPUNIT_ASSERT_EQUAL(sal_Int32(0), rProp.Value.get<sal_Int32>());
}
}
// Second shape should have bullet set
{
uno::Reference< beans::XPropertySet > xShape(getShapeFromPage(1, 0, xDocShRef));
uno::Reference< text::XText > xText = uno::Reference< text::XTextRange>(xShape, uno::UNO_QUERY)->getText();
CPPUNIT_ASSERT_MESSAGE("Not a text shape", xText.is());
uno::Reference< beans::XPropertySet > xPropSet(xText, uno::UNO_QUERY_THROW);
uno::Reference< container::XIndexAccess > xNumRule;
xPropSet->getPropertyValue("NumberingRules") >>= xNumRule;
uno::Sequence<beans::PropertyValue> aBulletProps;
xNumRule->getByIndex(0) >>= aBulletProps;
for(int i = 0; i < aBulletProps.getLength(); ++i)
{
const beans::PropertyValue& rProp = aBulletProps[i];
if(rProp.Name == "NumberingType")
CPPUNIT_ASSERT_EQUAL(sal_Int16(style::NumberingType::CHAR_SPECIAL), rProp.Value.get<sal_Int16>());
if(rProp.Name == "LeftMargin")
CPPUNIT_ASSERT_EQUAL(sal_Int32(635), rProp.Value.get<sal_Int32>());
}
}
xDocShRef->DoClose();
}
CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTest);
CPPUNIT_PLUGIN_IMPLEMENT();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment