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.mohrh...@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.mohrh...@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(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits