[Libreoffice-commits] core.git: sc/qa sc/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Feb 15 07:00:43 UTC 2019


 sc/qa/extras/anchor.cxx          |   62 +++++++++++++++++++++++++++++++++++++++
 sc/source/core/data/drwlayer.cxx |   15 ++++++---
 2 files changed, 73 insertions(+), 4 deletions(-)

New commits:
commit e756b6f310f309ac29bb2bce92309bb74edd788d
Author:     Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
AuthorDate: Thu Feb 14 10:34:35 2019 +0100
Commit:     Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
CommitDate: Fri Feb 15 08:00:13 2019 +0100

    tdf#122982 Remove image from cell when cutting the cell
    
    Change-Id: Idd73dcc88a8cd76eb4011bb26efdd5c712d16e5e
    Reviewed-on: https://gerrit.libreoffice.org/67844
    Tested-by: Jenkins
    Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>

diff --git a/sc/qa/extras/anchor.cxx b/sc/qa/extras/anchor.cxx
index 35cd9a567d35..92e09a0c2f25 100644
--- a/sc/qa/extras/anchor.cxx
+++ b/sc/qa/extras/anchor.cxx
@@ -23,6 +23,7 @@
 #include <svx/svdocirc.hxx>
 #include <scitems.hxx>
 #include <drwlayer.hxx>
+#include <cliputil.hxx>
 
 #include <sc.hrc>
 
@@ -41,12 +42,14 @@ public:
     void testTdf76183();
     void testODFAnchorTypes();
     void testCopyColumnWithImages();
+    void testCutWithImages();
 
     CPPUNIT_TEST_SUITE(ScAnchorTest);
     CPPUNIT_TEST(testUndoAnchor);
     CPPUNIT_TEST(testTdf76183);
     CPPUNIT_TEST(testODFAnchorTypes);
     CPPUNIT_TEST(testCopyColumnWithImages);
+    CPPUNIT_TEST(testCutWithImages);
     CPPUNIT_TEST_SUITE_END();
 private:
 
@@ -308,6 +311,65 @@ void ScAnchorTest::testCopyColumnWithImages()
     pDocSh->DoClose();
 }
 
+void ScAnchorTest::testCutWithImages()
+{
+    OUString aFileURL;
+    createFileURL("3AnchorTypes.ods", aFileURL);
+    // open the document with graphic included
+    uno::Reference<css::lang::XComponent> xComponent = loadFromDesktop(aFileURL);
+    CPPUNIT_ASSERT(xComponent.is());
+
+    // Get the document model
+    SfxObjectShell* pFoundShell = SfxObjectShell::GetShellFromComponent(xComponent);
+    CPPUNIT_ASSERT_MESSAGE("Failed to access document shell", pFoundShell);
+
+    ScDocShell* pDocSh = dynamic_cast<ScDocShell*>(pFoundShell);
+    CPPUNIT_ASSERT(pDocSh);
+
+    ScDocument* pDoc = &(pDocSh->GetDocument());
+    ScDrawLayer* pDrawLayer = pDoc->GetDrawLayer();
+    CPPUNIT_ASSERT(pDrawLayer);
+
+    // Get the document controller
+    ScTabViewShell* pViewShell = pDocSh->GetBestViewShell(false);
+    CPPUNIT_ASSERT(pViewShell != nullptr);
+
+    // Cut whole column
+    {
+        // Cut source range
+        ScRange aSrcRange;
+        aSrcRange.Parse("A1:A11", pDoc, pDoc->GetAddressConvention());
+        pViewShell->GetViewData().GetMarkData().SetMarkArea(aSrcRange);
+        pViewShell->GetViewData().GetView()->CutToClip();
+
+        std::map<SCROW, std::vector<SdrObject*>> aRowObjects
+            = pDrawLayer->GetObjectsAnchoredToRange(0, 0, 0, 11);
+
+        // Images should have been removed from the cells
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("There should be no image anchored to A3", 0,
+                                     static_cast<int>(aRowObjects[2].size()));
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("There should be no image anchored to A11", 0,
+                                     static_cast<int>(aRowObjects[10].size()));
+    }
+
+    // Cut individual cells
+    {
+        // Cut source cells
+        ScRange aSrcRange;
+        aSrcRange.Parse("A3:B3", pDoc, pDoc->GetAddressConvention());
+        pViewShell->GetViewData().GetMarkData().SetMarkArea(aSrcRange);
+        pViewShell->GetViewData().GetView()->CutToClip();
+
+        // Image should have been removed from the cell
+        std::map<SCROW, std::vector<SdrObject*>> aRowObjects
+            = pDrawLayer->GetObjectsAnchoredToRange(0, 0, 2, 2);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("There should be no image anchored to A3", 0,
+                                     static_cast<int>(aRowObjects[2].size()));
+    }
+
+    pDocSh->DoClose();
+}
+
 void ScAnchorTest::tearDown()
 {
     if (mxComponent.is())
diff --git a/sc/source/core/data/drwlayer.cxx b/sc/source/core/data/drwlayer.cxx
index fa7a784fbb4a..259e76fe08fa 100644
--- a/sc/source/core/data/drwlayer.cxx
+++ b/sc/source/core/data/drwlayer.cxx
@@ -1446,11 +1446,18 @@ void ScDrawLayer::DeleteObjectsInSelection( const ScMarkData& rMark )
                     if (!IsNoteCaption( pObject ))
                     {
                         tools::Rectangle aObjRect = pObject->GetCurrentBoundRect();
-                        if ( aMarkBound.IsInside( aObjRect ) )
+                        ScRange aRange = pDoc->GetRange(nTab, aObjRect);
+                        bool bObjectInMarkArea
+                            = aMarkBound.IsInside(aObjRect) && rMark.IsAllMarked(aRange);
+                        const ScDrawObjData* pObjData = ScDrawLayer::GetObjData(pObject);
+                        ScAnchorType aAnchorType = ScDrawLayer::GetAnchorType(*pObject);
+                        bool bObjectAnchoredToMarkedCell
+                            = ((aAnchorType == SCA_CELL || aAnchorType == SCA_CELL_RESIZE)
+                               && rMark.IsCellMarked(pObjData->maStart.Col(),
+                                                     pObjData->maStart.Row()));
+                        if (bObjectInMarkArea || bObjectAnchoredToMarkedCell)
                         {
-                            ScRange aRange = pDoc->GetRange( nTab, aObjRect );
-                            if (rMark.IsAllMarked(aRange))
-                                ppObj[nDelCount++] = pObject;
+                            ppObj[nDelCount++] = pObject;
                         }
                     }
 


More information about the Libreoffice-commits mailing list