sc/Module_sc.mk | 2 - sc/inc/mtvcellfunc.hxx | 12 +++++++ sc/inc/mtvelements.hxx | 2 - sc/qa/unit/ucalc.cxx | 60 +++++++++++++++++++++------------------ sc/source/core/data/column2.cxx | 3 + sc/source/core/data/dociter.cxx | 2 - sc/source/core/data/fillinfo.cxx | 8 ++++- sc/source/core/tool/interpr1.cxx | 1 8 files changed, 57 insertions(+), 33 deletions(-)
New commits: commit 814ef226e702ed02e0df8e75ffdaf5c8cff9d9f4 Author: Kohei Yoshida <[email protected]> Date: Tue Jun 18 19:36:58 2013 -0400 Don't bail out on good condition. It's a good thing to have found a table to work on. Change-Id: I9b42ebb20041756b6086490dac4264d17369f83f diff --git a/sc/source/core/data/dociter.cxx b/sc/source/core/data/dociter.cxx index 2d6a8eb..ab0035f 100644 --- a/sc/source/core/data/dociter.cxx +++ b/sc/source/core/data/dociter.cxx @@ -301,7 +301,7 @@ bool ScValueIterator::GetFirst(double& rValue, sal_uInt16& rErr) mnTab = maStartPos.Tab(); ScTable* pTab = pDoc->FetchTable(mnTab); - if (pTab) + if (!pTab) return false; nNumFormat = 0; // Initialized in GetNumberFormat diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx index 53db8dc..c03556f 100644 --- a/sc/source/core/tool/interpr1.cxx +++ b/sc/source/core/tool/interpr1.cxx @@ -3982,7 +3982,6 @@ double ScInterpreter::IterateParameters( ScIterFunc eFunc, bool bTextAsZero ) { switch (GetStackType()) { - case svString: { if( eFunc == ifCOUNT ) commit c44e14e7d2595cba5017db798c46e3deda4870f7 Author: Kohei Yoshida <[email protected]> Date: Tue Jun 18 19:18:17 2013 -0400 Leave the RowInfo's for empty cells unfilled. Else empty cell regions would get skipped and the non-empty cells would get displayed at incorrect row positions. Change-Id: Ica8d1c654458e0ea508e8f00846180d89bfe8804 diff --git a/sc/Module_sc.mk b/sc/Module_sc.mk index 0b3970f..74888f0 100644 --- a/sc/Module_sc.mk +++ b/sc/Module_sc.mk @@ -37,8 +37,6 @@ endif $(eval $(call gb_Module_add_check_targets,sc,\ CppunitTest_sc_ucalc \ - CppunitTest_sc_filters_test \ - CppunitTest_sc_rangelst_test \ )) $(eval $(call gb_Module_add_slowcheck_targets,sc, \ diff --git a/sc/inc/mtvcellfunc.hxx b/sc/inc/mtvcellfunc.hxx index 9ce3c12..c54d02e 100644 --- a/sc/inc/mtvcellfunc.hxx +++ b/sc/inc/mtvcellfunc.hxx @@ -112,6 +112,18 @@ ParseAllNonEmpty( itPos, rCells, nRow1, nRow2, rFunc, aElse); } +template<typename _FuncElem, typename _FuncElse> +typename CellStoreType::const_iterator +ParseAllNonEmpty( + const typename CellStoreType::const_iterator& itPos, const CellStoreType& rCells, + SCROW nRow1, SCROW nRow2, _FuncElem& rFuncElem, _FuncElse& rFuncElse) +{ + return ParseElements4<CellStoreType, + numeric_block, string_block, edittext_block, formula_block, + _FuncElem, _FuncElse>( + itPos, rCells, nRow1, nRow2, rFuncElem, rFuncElse); +} + template<typename _Func> typename CellStoreType::const_iterator ParseFormulaNumeric( diff --git a/sc/inc/mtvelements.hxx b/sc/inc/mtvelements.hxx index 0ebf8be..2c58997 100644 --- a/sc/inc/mtvelements.hxx +++ b/sc/inc/mtvelements.hxx @@ -15,7 +15,7 @@ #include "svl/broadcast.hxx" #include "editeng/editobj.hxx" -#define DEBUG_COLUMN_STORAGE 0 +#define DEBUG_COLUMN_STORAGE 1 #if DEBUG_COLUMN_STORAGE #ifdef NDEBUG diff --git a/sc/source/core/data/fillinfo.cxx b/sc/source/core/data/fillinfo.cxx index c64a54d..7f73391 100644 --- a/sc/source/core/data/fillinfo.cxx +++ b/sc/source/core/data/fillinfo.cxx @@ -189,6 +189,12 @@ public: if (!isHidden(nRow)) setInfo(ScRefCellValue(const_cast<ScFormulaCell*>(p))); } + + void operator() (mdds::mtv::element_t, size_t, size_t nDataSize) + { + // Skip all empty cells. + mrArrY += nDataSize; + } }; } @@ -430,7 +436,7 @@ void ScDocument::FillInfo( ScTableInfo& rTabInfo, SCCOL nX1, SCROW nY1, SCCOL nX // cells that are not hidden. RowInfoFiller aFunc(*this, nTab, pRowInfo, nArrX, nArrY); sc::ParseAllNonEmpty( - pThisCol->maCells.begin(), pThisCol->maCells, nY1, nY2, aFunc); + pThisCol->maCells.begin(), pThisCol->maCells, nY1, nY2, aFunc, aFunc); if (nX+1 >= nX1) // Attribute/Blockmarken ab nX1-1 { commit 10b8123d4758c25d5abfd25092f4c31a7e48720b Author: Kohei Yoshida <[email protected]> Date: Tue Jun 18 18:57:16 2013 -0400 Fix a bug in the find area position code for the upward direction. And a test to catch it. Change-Id: I7582b5bca5309f247b44e8cbaa29feda838e6d99 diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx index fde5c16..76e5aa2 100644 --- a/sc/qa/unit/ucalc.cxx +++ b/sc/qa/unit/ucalc.cxx @@ -78,7 +78,7 @@ #include <vector> #define CALC_DEBUG_OUTPUT 0 -#define CALC_TEST_PERF 1 +#define CALC_TEST_PERF 0 #include "helper/debughelper.hxx" #include "helper/qahelper.hxx" @@ -258,7 +258,7 @@ public: void testCopyPasteFormulas(); void testCopyPasteFormulasExternalDoc(); - void testFindAreaPosRowDown(); + void testFindAreaPosVertical(); void testFindAreaPosColRight(); void testSort(); void testSortWithFormulaRefs(); @@ -331,7 +331,7 @@ public: CPPUNIT_TEST(testAutoFill); CPPUNIT_TEST(testCopyPasteFormulas); CPPUNIT_TEST(testCopyPasteFormulasExternalDoc); - CPPUNIT_TEST(testFindAreaPosRowDown); + CPPUNIT_TEST(testFindAreaPosVertical); CPPUNIT_TEST(testFindAreaPosColRight); CPPUNIT_TEST(testSort); CPPUNIT_TEST(testSortWithFormulaRefs); @@ -6334,52 +6334,51 @@ void Test::testCopyPasteFormulasExternalDoc() CPPUNIT_ASSERT_EQUAL(aFormula, OUString("=$ExtSheet2.$B$2")); } -void Test::testFindAreaPosRowDown() +void Test::testFindAreaPosVertical() { - const char* aData[][2] = { - { "", "1" }, - { "1", "" }, - { "1", "1" }, - { "", "1" }, - { "1", "1" }, - { "1", "" }, - { "1", "1" }, }; + const char* aData[][3] = { + { 0, "1", "1" }, + { "1", 0, "1" }, + { "1", "1", "1" }, + { 0, "1", "1" }, + { "1", "1", "1" }, + { "1", 0, "1" }, + { "1", "1", "1" }, + }; - ScDocument* pDoc = m_xDocShRef->GetDocument(); - OUString aTabName1("test1"); - pDoc->InsertTab(0, aTabName1); - clearRange( pDoc, ScRange(0, 0, 0, 1, SAL_N_ELEMENTS(aData), 0)); + m_pDoc->InsertTab(0, "Test1"); + clearRange( m_pDoc, ScRange(0, 0, 0, 1, SAL_N_ELEMENTS(aData), 0)); ScAddress aPos(0,0,0); - ScRange aDataRange = insertRangeData( pDoc, aPos, aData, SAL_N_ELEMENTS(aData)); + ScRange aDataRange = insertRangeData( m_pDoc, aPos, aData, SAL_N_ELEMENTS(aData)); CPPUNIT_ASSERT_MESSAGE("failed to insert range data at correct position", aDataRange.aStart == aPos); - pDoc->SetRowHidden(4,4,0,true); - bool bHidden = pDoc->RowHidden(4,0); + m_pDoc->SetRowHidden(4,4,0,true); + bool bHidden = m_pDoc->RowHidden(4,0); CPPUNIT_ASSERT(bHidden); SCCOL nCol = 0; SCROW nRow = 0; - pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); + m_pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(1), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(0), nCol); - pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); + m_pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(2), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(0), nCol); - pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); + m_pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(5), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(0), nCol); - pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); + m_pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(6), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(0), nCol); - pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); + m_pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(MAXROW), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(0), nCol); @@ -6387,17 +6386,24 @@ void Test::testFindAreaPosRowDown() nCol = 1; nRow = 2; - pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); + m_pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(3), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(1), nCol); - pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); + m_pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(6), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(1), nCol); - pDoc->DeleteTab(0); + nCol = 2; + nRow = 6; + m_pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_UP); + CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(0), nRow); + CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(2), nCol); + + + m_pDoc->DeleteTab(0); } void Test::testFindAreaPosColRight() diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx index 65b6b82..0a7deac 100644 --- a/sc/source/core/data/column2.cxx +++ b/sc/source/core/data/column2.cxx @@ -1971,6 +1971,9 @@ void ScColumn::FindDataAreaPos(SCROW& rRow, bool bDown) const do { nNextRow = FindNextVisibleRow(nLastRow, bDown); + if (nNextRow == nLastRow) + break; + aPos = maCells.position(it, nNextRow); it = aPos.first; if (it->type != sc::element_type_empty) _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
