diff options
author | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-05-17 13:29:04 -0400 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-05-20 20:17:28 -0400 |
commit | f72dadc3df3194e1fde075b266348d169f28af38 (patch) | |
tree | b1575f1595af31e1bcc3c9379e7b636cbdfe2bd4 /sc/source | |
parent | 96c870ea3dd86649dca7f7228591de7253d6653d (diff) |
Reuse CopyToDocContext for UndoTo*.
UndoToDocument and its nested methods are tightly coupled with the CopyTo
counterparts, and they both are used in the same undo / redo code....
Perhaps we can clean this up to reduce redundancy in the future.
Change-Id: Id3aec60914ac3a87acbb53f889896a5850047c59
Diffstat (limited to 'sc/source')
-rw-r--r-- | sc/source/core/data/column.cxx | 12 | ||||
-rw-r--r-- | sc/source/core/data/document.cxx | 8 | ||||
-rw-r--r-- | sc/source/core/data/table2.cxx | 13 |
3 files changed, 16 insertions, 17 deletions
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx index d196223d3cc8..94cd2572e56a 100644 --- a/sc/source/core/data/column.cxx +++ b/sc/source/core/data/column.cxx @@ -1475,18 +1475,16 @@ void ScColumn::CopyToColumn( void ScColumn::UndoToColumn( - SCROW nRow1, SCROW nRow2, sal_uInt16 nFlags, bool bMarked, ScColumn& rColumn, - const ScMarkData* pMarkData) const + sc::CopyToDocContext& rCxt, SCROW nRow1, SCROW nRow2, sal_uInt16 nFlags, bool bMarked, + ScColumn& rColumn, const ScMarkData* pMarkData ) const { - sc::CopyToDocContext aCxt(*rColumn.pDocument); - aCxt.setTabRange(rColumn.nTab, rColumn.nTab); if (nRow1 > 0) - CopyToColumn(aCxt, 0, nRow1-1, IDF_FORMULA, false, rColumn); + CopyToColumn(rCxt, 0, nRow1-1, IDF_FORMULA, false, rColumn); - CopyToColumn(aCxt, nRow1, nRow2, nFlags, bMarked, rColumn, pMarkData); //! bMarked ???? + CopyToColumn(rCxt, nRow1, nRow2, nFlags, bMarked, rColumn, pMarkData); //! bMarked ???? if (nRow2 < MAXROW) - CopyToColumn(aCxt, nRow2+1, MAXROW, IDF_FORMULA, false, rColumn); + CopyToColumn(rCxt, nRow2+1, MAXROW, IDF_FORMULA, false, rColumn); } diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx index ce3efddfa689..8bd935d06f44 100644 --- a/sc/source/core/data/document.cxx +++ b/sc/source/core/data/document.cxx @@ -1873,11 +1873,13 @@ void ScDocument::UndoToDocument(SCCOL nCol1, SCROW nRow1, SCTAB nTab1, if (nTab1 > 0) CopyToDocument( 0,0,0, MAXCOL,MAXROW,nTab1-1, IDF_FORMULA, false, pDestDoc, pMarks ); + sc::CopyToDocContext aCxt(*pDestDoc); + aCxt.setTabRange(nTab1, nTab2); OSL_ASSERT( nTab2 < static_cast<SCTAB>(maTabs.size()) && nTab2 < static_cast<SCTAB>(pDestDoc->maTabs.size())); for (SCTAB i = nTab1; i <= nTab2; i++) { if (maTabs[i] && pDestDoc->maTabs[i]) - maTabs[i]->UndoToTable(nCol1, nRow1, nCol2, nRow2, nFlags, + maTabs[i]->UndoToTable(aCxt, nCol1, nRow1, nCol2, nRow2, nFlags, bOnlyMarked, pDestDoc->maTabs[i], pMarks); } @@ -1927,6 +1929,8 @@ void ScDocument::UndoToDocument(const ScRange& rRange, bool bOldAutoCalc = pDestDoc->GetAutoCalc(); pDestDoc->SetAutoCalc( false ); // avoid multiple calculations + sc::CopyToDocContext aCxt(*pDestDoc); + aCxt.setTabRange(nTab1, nTab2); if (nTab1 > 0) CopyToDocument( 0,0,0, MAXCOL,MAXROW,nTab1-1, IDF_FORMULA, false, pDestDoc, pMarks ); @@ -1934,7 +1938,7 @@ void ScDocument::UndoToDocument(const ScRange& rRange, for (SCTAB i = nTab1; i <= nTab2 && i < nMinSizeBothTabs; i++) { if (maTabs[i] && pDestDoc->maTabs[i]) - maTabs[i]->UndoToTable(aNewRange.aStart.Col(), aNewRange.aStart.Row(), + maTabs[i]->UndoToTable(aCxt, aNewRange.aStart.Col(), aNewRange.aStart.Row(), aNewRange.aEnd.Col(), aNewRange.aEnd.Row(), nFlags, bOnlyMarked, pDestDoc->maTabs[i], pMarks); } diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx index 1a59fca25df8..2eca7adc37e2 100644 --- a/sc/source/core/data/table2.cxx +++ b/sc/source/core/data/table2.cxx @@ -1151,24 +1151,21 @@ void ScTable::CopyToTable( } -void ScTable::UndoToTable(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, - sal_uInt16 nFlags, bool bMarked, ScTable* pDestTab, - const ScMarkData* pMarkData) +void ScTable::UndoToTable( + sc::CopyToDocContext& rCxt, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, + sal_uInt16 nFlags, bool bMarked, ScTable* pDestTab, const ScMarkData* pMarkData ) { if (ValidColRow(nCol1, nRow1) && ValidColRow(nCol2, nRow2)) { bool bWidth = (nRow1==0 && nRow2==MAXROW && pColWidth && pDestTab->pColWidth); bool bHeight = (nCol1==0 && nCol2==MAXCOL && mpRowHeights && pDestTab->mpRowHeights); - sc::CopyToDocContext aCopyCxt(*pDestTab->pDocument); - aCopyCxt.setTabRange(pDestTab->nTab, pDestTab->nTab); for ( SCCOL i = 0; i <= MAXCOL; i++) { if ( i >= nCol1 && i <= nCol2 ) - aCol[i].UndoToColumn(nRow1, nRow2, nFlags, bMarked, pDestTab->aCol[i], - pMarkData); + aCol[i].UndoToColumn(rCxt, nRow1, nRow2, nFlags, bMarked, pDestTab->aCol[i], pMarkData); else - aCol[i].CopyToColumn(aCopyCxt, 0, MAXROW, IDF_FORMULA, false, pDestTab->aCol[i]); + aCol[i].CopyToColumn(rCxt, 0, MAXROW, IDF_FORMULA, false, pDestTab->aCol[i]); } //remove old notes |