[Libreoffice-commits] .: 2 commits - sc/qa sc/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Mon Sep 17 11:54:27 PDT 2012


 sc/qa/unit/rangelst_test.cxx     |   33 +++++++++++++++++++++++++++++++++
 sc/source/core/tool/rangelst.cxx |   17 +++++++++++++++++
 2 files changed, 50 insertions(+)

New commits:
commit 764e7e71038d5ae66061f44bc0cd51ce33ae96ed
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Mon Sep 17 17:58:27 2012 +0200

    hopefully a corect way to deal with deleting rows and cols, fdo#54842
    
    Change-Id: I4ec1a8225ae3c84352643876065fb4cc7073b9f4

diff --git a/sc/source/core/tool/rangelst.cxx b/sc/source/core/tool/rangelst.cxx
index e81ec82..c6b3bfc 100644
--- a/sc/source/core/tool/rangelst.cxx
+++ b/sc/source/core/tool/rangelst.cxx
@@ -417,6 +417,23 @@ bool ScRangeList::UpdateReference(
     SCTAB nTab2;
     rWhere.GetVars( nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 );
 
+    if(eUpdateRefMode == URM_INSDEL)
+    {
+        // right now this only works for nTab1 == nTab2
+        if(nTab1 == nTab2)
+        {
+            if(nDx < 0)
+            {
+                DeleteArea(nCol1+nDx, nRow1, nTab1, nCol1-1, nRow1, nTab2);
+            }
+            if(nDy < 0)
+            {
+                DeleteArea(nCol1, nRow1+nDy, nTab1, nCol1, nRow1-1, nTab2);
+            }
+            SAL_WARN_IF(nDx < 0 && nDy < 0, "sc", "nDx and nDy are negative, check why");
+        }
+    }
+
     vector<ScRange*>::iterator itr = maRanges.begin(), itrEnd = maRanges.end();
     for (; itr != itrEnd; ++itr)
     {
commit f165111cf4f62353a674bd3497d8cf4a0480a3ab
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Mon Sep 17 16:07:19 2012 +0200

    one more test for ScRangeList::DeleteArea
    
    Change-Id: I42d31f6653990a81eff815d3d0feffad84b1379e

diff --git a/sc/qa/unit/rangelst_test.cxx b/sc/qa/unit/rangelst_test.cxx
index 2901965..41d4590 100644
--- a/sc/qa/unit/rangelst_test.cxx
+++ b/sc/qa/unit/rangelst_test.cxx
@@ -22,11 +22,16 @@ public:
 
     void testDeleteArea_4Ranges();
     void testDeleteArea_2Ranges();
+    void testDeleteArea_2Ranges_Case2();
     void testDeleteArea_0Ranges();
 
+    void testUpdateReference_DeleteRow();
+    void testUpdateReference_DeleteCol();
+
     CPPUNIT_TEST_SUITE(Test);
     CPPUNIT_TEST(testDeleteArea_4Ranges);
     CPPUNIT_TEST(testDeleteArea_2Ranges);
+    CPPUNIT_TEST(testDeleteArea_2Ranges_Case2);
     CPPUNIT_TEST(testDeleteArea_0Ranges);
     CPPUNIT_TEST_SUITE_END();
 
@@ -96,6 +101,21 @@ void Test::testDeleteArea_2Ranges()
     }
 }
 
+void Test::testDeleteArea_2Ranges_Case2()
+{
+    ScRangeList aList(ScRange(1,1,0,1,5,0));
+    aList.DeleteArea(0,3,0,MAXCOL,3,0);
+
+    for(SCROW nRow = 1; nRow <= 5; ++nRow)
+    {
+        if(nRow == 3)
+            CPPUNIT_ASSERT(!aList.Intersects(ScRange(1,3,0)));
+        else
+            CPPUNIT_ASSERT(aList.Intersects(ScRange(1,nRow,0)));
+    }
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), aList.GetCellCount());
+}
+
 void Test::testDeleteArea_0Ranges()
 {
     ScRangeList aList(ScRange(1,1,0,3,3,0));
@@ -109,6 +129,19 @@ void Test::testDeleteArea_0Ranges()
     CPPUNIT_ASSERT(aList.empty());
 }
 
+void Test::testUpdateReference_DeleteRow()
+{
+    ScRangeList aList(ScRange(1,1,0,4,4,0));
+    bool bUpdated = aList.UpdateReference(URM_INSDEL, m_pDoc, ScRange(0,3,0,MAXCOL,MAXROW,0), 0, -1, 0);
+    CPPUNIT_ASSERT(bUpdated);
+
+}
+
+void Test::testUpdateReference_DeleteCol()
+{
+
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
 
 CPPUNIT_PLUGIN_IMPLEMENT();


More information about the Libreoffice-commits mailing list