[Libreoffice-commits] core.git: Branch 'feature/formula-core-rework' - sc/source
Kohei Yoshida
kohei.yoshida at gmail.com
Tue Jun 18 20:16:43 PDT 2013
sc/source/core/data/column3.cxx | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
New commits:
commit 4a01dc6db2ba07bb22b539e5f6c3373bd6e1ed4c
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Tue Jun 18 23:16:00 2013 -0400
When deleting cells, be sure to delete the corresponding cell attrs as well.
The cell and cell attr arrays must - be - in - sync - at - all - times.
Change-Id: I2854c977eada389e5b9d908b97dd3fa78fc62097
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index 53eb88a..6edafee 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -573,15 +573,18 @@ public:
class EmptyCells
{
+ sc::ColumnBlockPosition& mrPos;
sc::CellStoreType::iterator miPos;
sc::CellStoreType& mrCells;
+ sc::CellTextAttrStoreType& mrAttrs;
public:
- EmptyCells(sc::CellStoreType::iterator itPos, sc::CellStoreType& rCells) :
- miPos(itPos), mrCells(rCells) {}
+ EmptyCells(sc::ColumnBlockPosition& rPos, sc::CellStoreType& rCells, sc::CellTextAttrStoreType& rAttrs) :
+ mrPos(rPos), mrCells(rCells), mrAttrs(rAttrs) {}
void operator() (const sc::SingleColumnSpanSet::Span& rSpan)
{
- miPos = mrCells.set_empty(miPos, rSpan.mnRow1, rSpan.mnRow2);
+ mrPos.miCellPos = mrCells.set_empty(mrPos.miCellPos, rSpan.mnRow1, rSpan.mnRow2);
+ mrPos.miCellTextAttrPos = mrAttrs.set_empty(mrPos.miCellTextAttrPos, rSpan.mnRow1, rSpan.mnRow2);
}
};
@@ -599,15 +602,24 @@ void ScColumn::DeleteArea(SCROW nStartRow, SCROW nEndRow, sal_uInt16 nDelFlag)
if (!IsEmptyData() && nContFlag)
{
+ // There are cells to delete. Determine which cells to delete based on the deletion flags.
DeleteAreaHandler aFunc(*pDocument, nDelFlag);
sc::CellStoreType::iterator itPos = maCells.position(nStartRow).first;
sc::ProcessBlock(itPos, maCells, aFunc, nStartRow, nEndRow);
aFunc.endFormulas(); // Have the formula cells stop listening.
aFunc.getSpans().getRows(aDeletedRows);
+ // Get the deletion spans.
sc::SingleColumnSpanSet::SpansType aSpans;
aFunc.getSpans().getSpans(aSpans);
- std::for_each(aSpans.begin(), aSpans.end(), EmptyCells(itPos, maCells));
+
+ sc::ColumnBlockPosition aBlockPos;
+ aBlockPos.miCellPos = itPos;
+ aBlockPos.miCellTextAttrPos = maCellTextAttrs.begin();
+
+ // Delete the cells for real.
+ std::for_each(aSpans.begin(), aSpans.end(), EmptyCells(aBlockPos, maCells, maCellTextAttrs));
+ CellStorageModified();
}
if ( nDelFlag & IDF_EDITATTR )
More information about the Libreoffice-commits
mailing list