From 8efe63bf1c5f6f2a889b991fca4b3922a48f6e87 Mon Sep 17 00:00:00 2001 From: Kohei Yoshida Date: Mon, 17 Nov 2014 14:16:28 -0500 Subject: Avoid unnecessary broadcasting when deleting cells prior to pasting. Change-Id: Id224fd6fdb804350e7e00634db802e80090ae6d7 --- sc/inc/column.hxx | 4 +++- sc/inc/document.hxx | 3 ++- sc/inc/table.hxx | 3 ++- sc/source/core/data/column4.cxx | 7 +++---- sc/source/core/data/document.cxx | 2 +- sc/source/core/data/document10.cxx | 5 +++-- sc/source/core/data/table7.cxx | 7 +++---- 7 files changed, 17 insertions(+), 14 deletions(-) diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx index 57ff8aa34a7a..86dbd39fd14f 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -247,7 +247,9 @@ public: bool InitBlockPosition( sc::ColumnBlockPosition& rBlockPos ); bool InitBlockPosition( sc::ColumnBlockConstPosition& rBlockPos ) const; - void DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScColumn& rClipCol ); + void DeleteBeforeCopyFromClip( + sc::CopyFromClipContext& rCxt, const ScColumn& rClipCol, sc::ColumnSpanSet& rBroadcastSpans ); + void CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCROW nRow1, SCROW nRow2, size_t nColOffset ); void CopyFromClip( diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index a09581b9f064..a3bfa0712bee 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -1242,7 +1242,8 @@ public: bool InitColumnBlockPosition( sc::ColumnBlockPosition& rBlokPos, SCTAB nTab, SCCOL nCol ); - void DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScMarkData& rMark ); + void DeleteBeforeCopyFromClip( + sc::CopyFromClipContext& rCxt, const ScMarkData& rMark, sc::ColumnSpanSet& rBroadcastSpans ); bool CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ); diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx index daacd60dd96a..ea1e2a30ea26 100644 --- a/sc/inc/table.hxx +++ b/sc/inc/table.hxx @@ -426,7 +426,8 @@ public: bool InitColumnBlockPosition( sc::ColumnBlockPosition& rBlockPos, SCCOL nCol ); - void DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScTable& rClipTab ); + void DeleteBeforeCopyFromClip( + sc::CopyFromClipContext& rCxt, const ScTable& rClipTab, sc::ColumnSpanSet& rBroadcastSpans ); void CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ); diff --git a/sc/source/core/data/column4.cxx b/sc/source/core/data/column4.cxx index 2d6609db9649..f0d28eb82dd5 100644 --- a/sc/source/core/data/column4.cxx +++ b/sc/source/core/data/column4.cxx @@ -41,7 +41,8 @@ bool ScColumn::IsMerged( SCROW nRow ) const return pAttrArray->IsMerged(nRow); } -void ScColumn::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScColumn& rClipCol ) +void ScColumn::DeleteBeforeCopyFromClip( + sc::CopyFromClipContext& rCxt, const ScColumn& rClipCol, sc::ColumnSpanSet& rBroadcastSpans ) { sc::CopyFromClipContext::Range aRange = rCxt.getDestRange(); if (!ValidRow(aRange.mnRow1) || !ValidRow(aRange.mnRow2)) @@ -107,7 +108,7 @@ void ScColumn::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const Sc SCROW nRow2 = it->mnRow2; if (nDelFlag & IDF_CONTENTS) - DeleteCells(aBlockPos, nRow1, nRow2, nDelFlag, aDeletedRows); + DeleteCells(aBlockPos, nRow1, nRow2, nDelFlag, aDeletedRows, &rBroadcastSpans); if (nDelFlag & IDF_NOTE) DeleteCellNotes(aBlockPos, nRow1, nRow2); @@ -134,8 +135,6 @@ void ScColumn::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const Sc else if ((nDelFlag & IDF_HARDATTR) == IDF_HARDATTR) pAttrArray->DeleteHardAttr(nRow1, nRow2); } - - BroadcastCells(aDeletedRows, SC_HINT_DATACHANGED); } void ScColumn::CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCROW nRow1, SCROW nRow2, size_t nColOffset ) diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx index 948782676c71..abfe1b0bbeba 100644 --- a/sc/source/core/data/document.cxx +++ b/sc/source/core/data/document.cxx @@ -2712,7 +2712,7 @@ void ScDocument::CopyFromClip( const ScRange& rDestRange, const ScMarkData& rMar { // Delete cells in the destination only if their corresponding clip cells are not empty. aCxt.setDestRange(nCol1, nRow1, nCol2, nRow2); - DeleteBeforeCopyFromClip(aCxt, rMark); + DeleteBeforeCopyFromClip(aCxt, rMark, aBroadcastSpans); } else DeleteArea(nCol1, nRow1, nCol2, nRow2, rMark, nDelFlag, false, &aBroadcastSpans); diff --git a/sc/source/core/data/document10.cxx b/sc/source/core/data/document10.cxx index 49c0a9f77436..1f14d5dd16cd 100644 --- a/sc/source/core/data/document10.cxx +++ b/sc/source/core/data/document10.cxx @@ -37,7 +37,8 @@ bool ScDocument::IsMerged( const ScAddress& rPos ) const return pTab->IsMerged(rPos.Col(), rPos.Row()); } -void ScDocument::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScMarkData& rMark ) +void ScDocument::DeleteBeforeCopyFromClip( + sc::CopyFromClipContext& rCxt, const ScMarkData& rMark, sc::ColumnSpanSet& rBroadcastSpans ) { SCTAB nClipTab = 0; const TableContainer& rClipTabs = rCxt.getClipDoc()->maTabs; @@ -55,7 +56,7 @@ void ScDocument::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const while (!rClipTabs[nClipTab]) nClipTab = (nClipTab+1) % nClipTabCount; - pTab->DeleteBeforeCopyFromClip(rCxt, *rClipTabs[nClipTab]); + pTab->DeleteBeforeCopyFromClip(rCxt, *rClipTabs[nClipTab], rBroadcastSpans); nClipTab = (nClipTab+1) % nClipTabCount; } diff --git a/sc/source/core/data/table7.cxx b/sc/source/core/data/table7.cxx index 568692179170..79a645cbbf5e 100644 --- a/sc/source/core/data/table7.cxx +++ b/sc/source/core/data/table7.cxx @@ -24,7 +24,8 @@ bool ScTable::IsMerged( SCCOL nCol, SCROW nRow ) const return aCol[nCol].IsMerged(nRow); } -void ScTable::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScTable& rClipTab ) +void ScTable::DeleteBeforeCopyFromClip( + sc::CopyFromClipContext& rCxt, const ScTable& rClipTab, sc::ColumnSpanSet& rBroadcastSpans ) { sc::CopyFromClipContext::Range aRange = rCxt.getDestRange(); if (!ValidCol(aRange.mnCol1) || !ValidCol(aRange.mnCol2)) @@ -37,15 +38,13 @@ void ScTable::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScT ScRange aClipRange = rCxt.getClipDoc()->GetClipParam().getWholeRange(); SCCOL nClipCol = aClipRange.aStart.Col(); { - ScBulkBroadcast aBulkBroadcast(pDocument->GetBASM()); - for (SCCOL nCol = aRange.mnCol1; nCol <= aRange.mnCol2; ++nCol, ++nClipCol) { if (nClipCol > aClipRange.aEnd.Col()) nClipCol = aClipRange.aStart.Col(); // loop through columns. const ScColumn& rClipCol = rClipTab.aCol[nClipCol]; - aCol[nCol].DeleteBeforeCopyFromClip(rCxt, rClipCol); + aCol[nCol].DeleteBeforeCopyFromClip(rCxt, rClipCol, rBroadcastSpans); } } -- cgit