[Libreoffice-commits] core.git: Branch 'feature/formula-core-rework' - sc/qa sc/source
Kohei Yoshida
kohei.yoshida at gmail.com
Mon Jul 8 10:48:24 PDT 2013
sc/qa/unit/ucalc.cxx | 14 +++++++++++++-
sc/source/core/data/column.cxx | 19 +++++++++++++++++++
sc/source/core/data/formulacell.cxx | 3 +++
3 files changed, 35 insertions(+), 1 deletion(-)
New commits:
commit 359af285610b2dadbf4d585dfd745b4e65cedb84
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Mon Jul 8 13:48:07 2013 -0400
Adjust formula grouping in InsertRow().
Change-Id: I82723a30edc361b627246b66d21dc04cd639caa6
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index d854c59..c96d5b6 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -6517,8 +6517,20 @@ void Test::testSharedFormulas()
CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(1), pFC->GetSharedTopRow());
CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(4), pFC->GetSharedLength());
- m_pDoc->DeleteTab(0);
+ // Insert 2 rows at row 4, to split it into B2:B3 and B6:B7.
+ m_pDoc->InsertRow(ScRange(0,3,0,MAXCOL,4,0));
+ pFC = m_pDoc->GetFormulaCell(aPos);
+ CPPUNIT_ASSERT_MESSAGE("B2 should be a formula cell.", pFC);
+ CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(1), pFC->GetSharedTopRow());
+ CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(2), pFC->GetSharedLength());
+ aPos.SetRow(5);
+ pFC = m_pDoc->GetFormulaCell(aPos);
+ CPPUNIT_ASSERT_MESSAGE("B6 should be a formula cell.", pFC);
+ CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(5), pFC->GetSharedTopRow());
+ CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(2), pFC->GetSharedLength());
+
+ m_pDoc->DeleteTab(0);
}
namespace {
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index 7ce8668..f77502b 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -2273,6 +2273,25 @@ bool ScColumn::UpdateReference(
return aHandler.isUpdated();
}
+ bool bThisColShifted = (rRange.aStart.Tab() <= nTab && nTab <= rRange.aEnd.Tab() && rRange.aStart.Col() <= nCol && nCol <= rRange.aEnd.Col());
+ if (bThisColShifted)
+ {
+ // Cells in this column is being shifted. Split formula grouping at
+ // the top and bottom boundaries before they get shifted.
+ SCROW nSplitPos = rRange.aStart.Row();
+ if (ValidRow(nSplitPos))
+ {
+ sc::CellStoreType::position_type aPos = maCells.position(nSplitPos);
+ SplitFormulaCellGroup(aPos);
+ nSplitPos = rRange.aEnd.Row() + 1;
+ if (ValidRow(nSplitPos))
+ {
+ aPos = maCells.position(aPos.first, nSplitPos);
+ SplitFormulaCellGroup(aPos);
+ }
+ }
+ }
+
UpdateRefOnNonCopy aHandler(nCol, nTab, rRange, nDx, nDy, nDz, eUpdateRefMode, pUndoDoc);
FormulaCellsUndecided(0, MAXROW);
sc::ProcessFormula(maCells, aHandler);
diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx
index 8d84221..288eaeb 100644
--- a/sc/source/core/data/formulacell.cxx
+++ b/sc/source/core/data/formulacell.cxx
@@ -2084,6 +2084,9 @@ bool ScFormulaCell::UpdateReference(
// This formula cell itself is being shifted during cell range
// insertion or deletion. Update its position.
aPos.Move(nDx, nDy, nDz);
+ if (xGroup && xGroup->mnStart == aOldPos.Row())
+ xGroup->mnStart += nDy;
+
bCellStateChanged = aPos != aOldPos;
}
else if (rRange.In(aPos))
More information about the Libreoffice-commits
mailing list