include/svl/hint.hxx | 1 sc/inc/column.hxx | 2 - sc/qa/unit/ucalc.hxx | 2 + sc/qa/unit/ucalc_formula.cxx | 44 ++++++++++++++++++++++++++++++++++++ sc/source/core/data/column3.cxx | 5 +--- sc/source/core/data/formulacell.cxx | 2 - sc/source/core/data/table5.cxx | 2 - sc/source/ui/optdlg/tpcalc.cxx | 3 ++ 8 files changed, 55 insertions(+), 6 deletions(-)
New commits: commit e4e093b90e9a2d65cb538ec0e752ba51d75b4b0b Author: Eike Rathke <er...@redhat.com> Date: Thu May 18 13:10:29 2017 +0200 Add comment about precedence of Wildcards over Regex Change-Id: I053c8ebb328aaa3b577283af17b6540b997e3dcc diff --git a/sc/source/ui/optdlg/tpcalc.cxx b/sc/source/ui/optdlg/tpcalc.cxx index 5f9cc4b3dc4b..56f7d42c6c49 100644 --- a/sc/source/ui/optdlg/tpcalc.cxx +++ b/sc/source/ui/optdlg/tpcalc.cxx @@ -126,6 +126,9 @@ void ScTpCalcOptions::Reset( const SfxItemSet* /* rCoreAttrs */ ) m_pBtnMatch->Enable( !officecfg::Office::Calc::Calculate::Other::SearchCriteria::isReadOnly() ); bool bWildcards = pLocalOptions->IsFormulaWildcardsEnabled(); bool bRegex = pLocalOptions->IsFormulaRegexEnabled(); + // If both, Wildcards and Regex, are set then Wildcards shall take + // precedence. This is also how other code calling Search handles it. Both + // simultaneously couldn't be set using UI but editing the configuration. if (bWildcards && bRegex) bRegex = false; m_pBtnWildcards->Check( bWildcards ); commit 47cbf098ee6019a2090b2e933439fd4aa399ed20 Author: Arul Michael <arul7...@gmail.com> Date: Tue May 16 17:05:19 2017 +0530 New HintId and unit test for hidden rows and SUBTOTAL, tdf#93171 follow-up Adding new Hintid for HideRows so that we notify only formulas with subtotal and aggregate function for recalculation. Added unit testing. Change-Id: I44f2e45acaf697f91744bc8202f27b218faa5b43 diff --git a/include/svl/hint.hxx b/include/svl/hint.hxx index 2c94c4529300..f7f0c73e062e 100644 --- a/include/svl/hint.hxx +++ b/include/svl/hint.hxx @@ -85,6 +85,7 @@ enum class SfxHintId { ScRefModeChanged, ScKillEditView, ScKillEditViewNoPaint, + ScHiddenRowsChanged, // SC accessibility hints ScAccTableChanged, diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx index e163a1e295a1..0c195eb316d0 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -588,7 +588,7 @@ public: void Broadcast( SCROW nRow ); void BroadcastCells( const std::vector<SCROW>& rRows, SfxHintId nHint ); - void BroadcastRows( SCROW nStartRow, SCROW nEndRow ); + void BroadcastRows( SCROW nStartRow, SCROW nEndRow, SfxHintId nHint ); // cell notes ScPostIt* GetCellNote( SCROW nRow ); diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx index 732ab5b1ec3d..5d1def66c7c7 100644 --- a/sc/qa/unit/ucalc.hxx +++ b/sc/qa/unit/ucalc.hxx @@ -530,6 +530,7 @@ public: void testPrecisionAsShown(); void testProtectedSheetEditByRow(); void testProtectedSheetEditByColumn(); + void testFuncRowsHidden(); CPPUNIT_TEST_SUITE(Test); CPPUNIT_TEST(testCollator); @@ -800,6 +801,7 @@ public: CPPUNIT_TEST(testPrecisionAsShown); CPPUNIT_TEST(testProtectedSheetEditByRow); CPPUNIT_TEST(testProtectedSheetEditByColumn); + CPPUNIT_TEST(testFuncRowsHidden); CPPUNIT_TEST_SUITE_END(); private: diff --git a/sc/qa/unit/ucalc_formula.cxx b/sc/qa/unit/ucalc_formula.cxx index 3290a7eb89a3..cfae1a45a00d 100644 --- a/sc/qa/unit/ucalc_formula.cxx +++ b/sc/qa/unit/ucalc_formula.cxx @@ -7866,4 +7866,48 @@ void Test::testIntersectionOpExcel() m_pDoc->DeleteTab(0); } +//Test Subtotal and Aggregate during hide rows #tdf93171 +void Test::testFuncRowsHidden() +{ + sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // turn auto calc on. + m_pDoc->InsertTab(0, "Test"); + m_pDoc->SetValue(0, 0, 0, 1); //A1 + m_pDoc->SetValue(0, 1, 0, 2); //A2 + m_pDoc->SetValue(0, 2, 0, 4); //A3 + m_pDoc->SetValue(0, 3, 0, 8); //A4 + m_pDoc->SetValue(0, 4, 0, 16); //A5 + m_pDoc->SetValue(0, 5, 0, 32); //A6 + + ScAddress aPos(0,6,0); + m_pDoc->SetString(aPos, "=SUBTOTAL(109; A1:A6)"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Calculation of SUBTOTAL failed", 63.0, m_pDoc->GetValue(aPos)); + //Hide row 1 + m_pDoc->SetRowHidden(0, 0, 0, true); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Calculation of SUBTOTAL failed", 62.0, m_pDoc->GetValue(aPos)); + m_pDoc->SetRowHidden(0, 0, 0, false); + //Hide row 2 and 3 + m_pDoc->SetRowHidden(1, 2, 0, true); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Calculation of SUBTOTAL failed", 57.0, m_pDoc->GetValue(aPos)); + m_pDoc->SetRowHidden(1, 2, 0, false); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Calculation of SUBTOTAL failed", 63.0, m_pDoc->GetValue(aPos)); + + m_pDoc->SetString(aPos, "=AGGREGATE(9; 5; A1:A6)"); //9=SUM 5=Ignore only hidden rows + CPPUNIT_ASSERT_EQUAL_MESSAGE("Calculation of AGGREGATE failed", 63.0, m_pDoc->GetValue(aPos)); + //Hide row 1 + m_pDoc->SetRowHidden(0, 0, 0, true); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Calculation of AGGREGATE failed", 62.0, m_pDoc->GetValue(aPos)); + m_pDoc->SetRowHidden(0, 0, 0, false); + //Hide rows 3 to 5 + m_pDoc->SetRowHidden(2, 4, 0, true); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Calculation of AGGREGATE failed", 35.0, m_pDoc->GetValue(aPos)); + m_pDoc->SetRowHidden(2, 4, 0, false); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Calculation of AGGREGATE failed", 63.0, m_pDoc->GetValue(aPos)); + + m_pDoc->SetString(aPos, "=SUM(A1:A6)"); + m_pDoc->SetRowHidden(2, 4, 0, true); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Calculation of SUM failed", 63.0, m_pDoc->GetValue(aPos)); + + m_pDoc->DeleteTab(0); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx index 97759267945d..7942ad881bc0 100644 --- a/sc/source/core/data/column3.cxx +++ b/sc/source/core/data/column3.cxx @@ -88,16 +88,15 @@ void ScColumn::BroadcastCells( const std::vector<SCROW>& rRows, SfxHintId nHint } } -void ScColumn::BroadcastRows( SCROW nStartRow, SCROW nEndRow ) +void ScColumn::BroadcastRows( SCROW nStartRow, SCROW nEndRow, SfxHintId nHint ) { sc::SingleColumnSpanSet aSpanSet; aSpanSet.scan(*this, nStartRow, nEndRow); std::vector<SCROW> aRows; aSpanSet.getRows(aRows); - BroadcastCells(aRows, SfxHintId::ScDataChanged); + BroadcastCells(aRows, nHint); } - struct DirtyCellInterpreter { void operator() (size_t, ScFormulaCell* p) diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx index 552f73e83c32..18eb260db938 100644 --- a/sc/source/core/data/formulacell.cxx +++ b/sc/source/core/data/formulacell.cxx @@ -2275,7 +2275,7 @@ void ScFormulaCell::Notify( const SfxHint& rHint ) if ( pDocument->GetHardRecalcState() == ScDocument::HARDRECALCSTATE_OFF ) { - if (nHint == SfxHintId::ScDataChanged || nHint == SfxHintId::ScTableOpDirty) + if (nHint == SfxHintId::ScDataChanged || nHint == SfxHintId::ScTableOpDirty || (bSubTotal && nHint == SfxHintId::ScHiddenRowsChanged)) { bool bForceTrack = false; if ( nHint == SfxHintId::ScTableOpDirty ) diff --git a/sc/source/core/data/table5.cxx b/sc/source/core/data/table5.cxx index 9342a7401a06..c7a3b7938b68 100644 --- a/sc/source/core/data/table5.cxx +++ b/sc/source/core/data/table5.cxx @@ -595,7 +595,7 @@ bool ScTable::SetRowHidden(SCROW nStartRow, SCROW nEndRow, bool bHidden) SetStreamValid(false); for (SCCOL i = 0; i < aCol.size(); i++) { - aCol[i].BroadcastRows(nStartRow, nEndRow); + aCol[i].BroadcastRows(nStartRow, nEndRow, SfxHintId::ScHiddenRowsChanged); } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits