[Libreoffice-commits] core.git: Branch 'libreoffice-6-2' - oox/source sd/qa

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Mon Dec 17 12:35:28 UTC 2018


 oox/source/drawingml/diagram/layoutatomvisitors.cxx |   14 ++++++++++++++
 oox/source/drawingml/diagram/layoutatomvisitors.hxx |    2 ++
 sd/qa/unit/import-tests-smartart.cxx                |    3 ++-
 3 files changed, 18 insertions(+), 1 deletion(-)

New commits:
commit 467a2ab7e52be376ee7f0dee9bd44f7a4ed38267
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Tue Nov 27 17:41:05 2018 +0100
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Mon Dec 17 13:35:08 2018 +0100

    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/64122
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
    Tested-by: Jenkins
    (cherry picked from commit aedc5427e4b6645ff3257e523c33190cf5e1934d)
    Reviewed-on: https://gerrit.libreoffice.org/65250

diff --git a/oox/source/drawingml/diagram/layoutatomvisitors.cxx b/oox/source/drawingml/diagram/layoutatomvisitors.cxx
index 700b48080bc6..ced94784aff4 100644
--- a/oox/source/drawingml/diagram/layoutatomvisitors.cxx
+++ b/oox/source/drawingml/diagram/layoutatomvisitors.cxx
@@ -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)
diff --git a/oox/source/drawingml/diagram/layoutatomvisitors.hxx b/oox/source/drawingml/diagram/layoutatomvisitors.hxx
index 299739186315..f395f6a68668 100644
--- a/oox/source/drawingml/diagram/layoutatomvisitors.hxx
+++ b/oox/source/drawingml/diagram/layoutatomvisitors.hxx
@@ -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);
diff --git a/sd/qa/unit/import-tests-smartart.cxx b/sd/qa/unit/import-tests-smartart.cxx
index 7c46270015ee..aa8498b73ce9 100644
--- a/sd/qa/unit/import-tests-smartart.cxx
+++ b/sd/qa/unit/import-tests-smartart.cxx
@@ -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());
 


More information about the Libreoffice-commits mailing list