Kaydet (Commit) aedc5427 authored tarafından Miklos Vajna's avatar Miklos Vajna

oox smartart, accent process: handle followSib axis of forEach

Currently the accept process document creates 0 connectors. Instead, it
creates empty custom shapes: this commit fixes the loop, so that only
one of them is created.

The whole purpose of the follow sibling axis is that N - 1 connectors
are created for N shapes, not N connectors.

Change-Id: I54244c7615b83f607ef53a4ff8d01d3c9594856e
Reviewed-on: https://gerrit.libreoffice.org/64122Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
üst 3abf4b91
......@@ -48,6 +48,14 @@ void ShapeCreationVisitor::visit(AlgAtom& rAtom)
void ShapeCreationVisitor::visit(ForEachAtom& rAtom)
{
if (rAtom.iterator().mnAxis == XML_followSib)
{
// If the axis is the follow sibling, then the last atom should not be
// visited.
if (mnCurrIdx + mnCurrStep >= mnCurrCnt)
return;
}
const std::vector<LayoutAtomPtr>& rChildren=rAtom.getChildren();
sal_Int32 nChildren=1;
......@@ -67,7 +75,11 @@ void ShapeCreationVisitor::visit(ForEachAtom& rAtom)
rAtom.iterator().mnCnt==-1 ? nChildren : rAtom.iterator().mnCnt);
const sal_Int32 nOldIdx=mnCurrIdx;
const sal_Int32 nOldStep = mnCurrStep;
const sal_Int32 nOldCnt = mnCurrCnt;
const sal_Int32 nStep=rAtom.iterator().mnStep;
mnCurrStep = nStep;
mnCurrCnt = nCnt;
for( mnCurrIdx=0; mnCurrIdx<nCnt && nStep>0; mnCurrIdx+=nStep )
{
// TODO there is likely some conditions
......@@ -77,6 +89,8 @@ void ShapeCreationVisitor::visit(ForEachAtom& rAtom)
// and restore idx
mnCurrIdx = nOldIdx;
mnCurrStep = nOldStep;
mnCurrCnt = nOldCnt;
}
void ShapeCreationVisitor::visit(ConditionAtom& rAtom)
......
......@@ -33,6 +33,8 @@ class ShapeCreationVisitor : public LayoutAtomVisitor
ShapePtr mpParentShape;
const Diagram& mrDgm;
sal_Int32 mnCurrIdx;
sal_Int32 mnCurrStep = 0;
sal_Int32 mnCurrCnt = 0;
const dgm::Point* mpCurrentNode;
void defaultVisit(LayoutAtom const & rAtom);
......
......@@ -458,7 +458,8 @@ void SdImportTestSmartArt::testAccentProcess()
m_directories.getURLFromSrc("/sd/qa/unit/data/pptx/smartart-accent-process.pptx"), PPTX);
uno::Reference<drawing::XShapes> xGroup(getShapeFromPage(0, 0, xDocShRef), uno::UNO_QUERY);
CPPUNIT_ASSERT(xGroup.is());
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(4), xGroup->getCount());
// 3 children: first pair, connector, second pair.
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3), xGroup->getCount());
uno::Reference<drawing::XShape> xGroupShape(xGroup, uno::UNO_QUERY);
CPPUNIT_ASSERT(xGroupShape.is());
......
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