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

Miklos Vajna vmiklos at collabora.co.uk
Wed Feb 28 08:13:02 UTC 2018


 sd/qa/unit/tiledrendering/data/tdf115873-group.fodp |   36 ++++++++
 sd/qa/unit/tiledrendering/tiledrendering.cxx        |   17 ++++
 sd/source/ui/dlg/sdtreelb.cxx                       |   82 +++++++++++---------
 sd/source/ui/inc/sdtreelb.hxx                       |    3 
 4 files changed, 104 insertions(+), 34 deletions(-)

New commits:
commit 08e01e70a59f8bd9ac3e89820cfeb11edb74623e
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Fri Feb 23 12:30:02 2018 +0100

    tdf#115873 sd navigator: adapt IsEqualToDoc() to Fill() further
    
    SdPageObjsTLB::Fill() populates the navigator tree list box,
    SdPageObjsTLB::IsEqualToDoc() determintes if it has to be refreshed or
    not.
    
    Commit f3c68cdf8f6a0273c62b493552f78af0138a44e8 (tdf#115873 sd
    navigator: allow selecting but not focusing on objects, 2018-02-21)
    already brought IsEqualToDoc() closer to Fill() with using the same
    iteration mode for the SdrObjects, but that's not enough.
    
    Fill() uses flat iteration, then checks for group shapes explicitly and
    visits them recursively. Change IsEqualToDoc() to do the same, this way
    selecting "Rectangle 3" in the testcase won't result in a jump back to
    "Slide 1" (as an effect of IsEqualToDoc() returning false for an up to
    date tree list box).
    
    Change-Id: If2543cbc282af06ba43d4804e7ed455c8b9828cd
    Reviewed-on: https://gerrit.libreoffice.org/50234
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
    Tested-by: Jenkins <ci at libreoffice.org>
    (cherry picked from commit 1f159a4df7dcf9c4b1a35d16aee2303b8fa34b27)
    Reviewed-on: https://gerrit.libreoffice.org/50344
    Reviewed-by: Andras Timar <andras.timar at collabora.com>

diff --git a/sd/qa/unit/tiledrendering/data/tdf115873-group.fodp b/sd/qa/unit/tiledrendering/data/tdf115873-group.fodp
new file mode 100644
index 000000000000..603ec4c7e5b2
--- /dev/null
+++ b/sd/qa/unit/tiledrendering/data/tdf115873-group.fodp
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:scr
 ipt="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:smil="urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xml
 ns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.presentation">
+  <office:automatic-styles>
+    <style:style style:name="dp1" style:family="drawing-page">
+    </style:style>
+    <style:style style:name="gr1" style:family="graphic" style:parent-style-name="standard">
+      <style:graphic-properties draw:textarea-horizontal-align="justify" draw:textarea-vertical-align="middle" draw:auto-grow-height="false" fo:min-height="2.15cm" fo:min-width="1.3cm"/>
+    </style:style>
+    <style:style style:name="gr2" style:family="graphic" style:parent-style-name="standard">
+      <style:graphic-properties draw:textarea-horizontal-align="justify" draw:textarea-vertical-align="middle" draw:auto-grow-height="false" fo:min-height="1.55cm" fo:min-width="1.3cm"/>
+    </style:style>
+    <style:style style:name="gr3" style:family="graphic" style:parent-style-name="standard">
+      <style:graphic-properties draw:textarea-horizontal-align="justify" draw:textarea-vertical-align="middle" draw:auto-grow-height="false" fo:min-height="1.55cm" fo:min-width="2.1cm"/>
+    </style:style>
+  </office:automatic-styles>
+  <office:body>
+    <office:presentation>
+      <draw:page draw:name="page1" draw:style-name="dp1">
+        <draw:g draw:name="Group 1">
+          <draw:custom-shape draw:name="Rectangle 1" draw:style-name="gr1" draw:layer="layout" svg:width="1.8cm" svg:height="2.4cm" svg:x="2.8cm" svg:y="2.8cm">
+            <text:p/>
+            <draw:enhanced-geometry svg:viewBox="0 0 21600 21600" draw:type="rectangle" draw:enhanced-path="M 0 0 L 21600 0 21600 21600 0 21600 0 0 Z N"/>
+          </draw:custom-shape>
+          <draw:custom-shape draw:name="Rectangle 2" draw:style-name="gr2" draw:layer="layout" svg:width="1.8cm" svg:height="1.8cm" svg:x="6cm" svg:y="3.2cm">
+            <text:p/>
+            <draw:enhanced-geometry svg:viewBox="0 0 21600 21600" draw:type="rectangle" draw:enhanced-path="M 0 0 L 21600 0 21600 21600 0 21600 0 0 Z N"/>
+          </draw:custom-shape>
+        </draw:g>
+        <draw:custom-shape draw:name="Rectangle 3" draw:style-name="gr3" draw:layer="layout" svg:width="2.6cm" svg:height="1.8cm" svg:x="4.6cm" svg:y="7.4cm">
+          <text:p/>
+          <draw:enhanced-geometry svg:viewBox="0 0 21600 21600" draw:type="rectangle" draw:enhanced-path="M 0 0 L 21600 0 21600 21600 0 21600 0 0 Z N"/>
+        </draw:custom-shape>
+      </draw:page>
+    </office:presentation>
+  </office:body>
+</office:document>
diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx
index 12b25aa9be04..befb4ef0eb4e 100644
--- a/sd/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx
@@ -109,6 +109,7 @@ public:
     void testDefaultView();
     void testTdf115783();
     void testTdf115873();
+    void testTdf115873Group();
 
     CPPUNIT_TEST_SUITE(SdTiledRenderingTest);
     CPPUNIT_TEST(testRegisterCallback);
@@ -150,6 +151,7 @@ public:
     CPPUNIT_TEST(testDefaultView);
     CPPUNIT_TEST(testTdf115783);
     CPPUNIT_TEST(testTdf115873);
+    CPPUNIT_TEST(testTdf115873Group);
 
     CPPUNIT_TEST_SUITE_END();
 
@@ -1994,6 +1996,21 @@ void SdTiledRenderingTest::testTdf115873()
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rMarkList.GetMarkCount());
 }
 
+void SdTiledRenderingTest::testTdf115873Group()
+{
+    // Initialize the navigator.
+    SdXImpressDocument* pXImpressDocument = createDoc("tdf115873-group.fodp");
+    SfxViewShell* pViewShell = SfxViewShell::Current();
+    CPPUNIT_ASSERT(pViewShell);
+    SfxBindings& rBindings = pViewShell->GetViewFrame()->GetBindings();
+    ScopedVclPtrInstance<SdNavigatorWin> pNavigator(nullptr, &rBindings);
+    pNavigator->InitTreeLB(pXImpressDocument->GetDoc());
+    VclPtr<SdPageObjsTLB> pObjects = pNavigator->GetObjects();
+    // This failed, Fill() and IsEqualToDoc() were out of sync for group
+    // shapes.
+    CPPUNIT_ASSERT(pObjects->IsEqualToDoc(pXImpressDocument->GetDoc()));
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(SdTiledRenderingTest);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sd/source/ui/dlg/sdtreelb.cxx b/sd/source/ui/dlg/sdtreelb.cxx
index e0d56cbf9f98..d9d193e445c0 100644
--- a/sd/source/ui/dlg/sdtreelb.cxx
+++ b/sd/source/ui/dlg/sdtreelb.cxx
@@ -629,6 +629,52 @@ void SdPageObjsTLB::SetShowAllShapes (
     }
 }
 
+bool SdPageObjsTLB::IsEqualToShapeList(SvTreeListEntry*& pEntry, const SdrObjList& rList,
+                                       const OUString& rListName)
+{
+    if (!pEntry)
+        return false;
+    OUString aName = GetEntryText(pEntry);
+
+    if (rListName != aName)
+        return false;
+
+    pEntry = Next(pEntry);
+
+    SdrObjListIter aIter(rList,
+                         !rList.HasObjectNavigationOrder() /* use navigation order, if available */,
+                         SdrIterMode::Flat);
+
+    while (aIter.IsMore())
+    {
+        SdrObject* pObj = aIter.Next();
+
+        const OUString aObjectName(GetObjectName(pObj));
+
+        if (!aObjectName.isEmpty())
+        {
+            if (!pEntry)
+                return false;
+
+            aName = GetEntryText(pEntry);
+
+            if (aObjectName != aName)
+                return false;
+
+            if (pObj->IsGroupObject())
+            {
+                bool bRet = IsEqualToShapeList(pEntry, *pObj->GetSubList(), aObjectName);
+                if (!bRet)
+                    return false;
+            }
+            else
+                pEntry = Next(pEntry);
+        }
+    }
+
+    return true;
+}
+
 /**
  * Checks if the pages (PageKind::Standard) of a doc and the objects on the pages
  * are identical to the TreeLB.
@@ -643,9 +689,7 @@ bool SdPageObjsTLB::IsEqualToDoc( const SdDrawDocument* pInDoc )
     if( !mpDoc )
         return false;
 
-    SdrObject*   pObj = nullptr;
     SvTreeListEntry* pEntry = First();
-    OUString     aName;
 
     // compare all pages including the objects
     sal_uInt16 nPage = 0;
@@ -656,39 +700,9 @@ bool SdPageObjsTLB::IsEqualToDoc( const SdDrawDocument* pInDoc )
         const SdPage* pPage = static_cast<const SdPage*>( mpDoc->GetPage( nPage ) );
         if( pPage->GetPageKind() == PageKind::Standard )
         {
-            if( !pEntry )
-                return false;
-            aName = GetEntryText( pEntry );
-
-            if( pPage->GetName() != aName )
+            bool bRet = IsEqualToShapeList(pEntry, *pPage, pPage->GetName());
+            if (!bRet)
                 return false;
-
-            pEntry = Next( pEntry );
-
-            SdrObjListIter aIter(
-                *pPage,
-                !pPage->HasObjectNavigationOrder() /* use navigation order, if available */,
-                SdrIterMode::Flat );
-
-            while( aIter.IsMore() )
-            {
-                pObj = aIter.Next();
-
-                const OUString aObjectName( GetObjectName( pObj ) );
-
-                if( !aObjectName.isEmpty() )
-                {
-                    if( !pEntry )
-                        return false;
-
-                    aName = GetEntryText( pEntry );
-
-                    if( aObjectName != aName )
-                        return false;
-
-                    pEntry = Next( pEntry );
-                }
-            }
         }
         nPage++;
     }
diff --git a/sd/source/ui/inc/sdtreelb.hxx b/sd/source/ui/inc/sdtreelb.hxx
index 7f51a9aeb261..b358e376672b 100644
--- a/sd/source/ui/inc/sdtreelb.hxx
+++ b/sd/source/ui/inc/sdtreelb.hxx
@@ -205,6 +205,9 @@ public:
     bool                    GetShowAllShapes() const { return mbShowAllShapes;}
     bool IsNavigationGrabsFocus() const { return mbNavigationGrabsFocus; }
     bool                    IsEqualToDoc( const SdDrawDocument* pInDoc );
+    /// Visits rList recursively and tries to advance pEntry accordingly.
+    bool IsEqualToShapeList(SvTreeListEntry*& pEntry, const SdrObjList& rList,
+                            const OUString& rListName);
     bool                    HasSelectedChildren( const OUString& rName );
     bool                    SelectEntry( const OUString& rName );
     OUString                GetSelectedEntry();


More information about the Libreoffice-commits mailing list