summaryrefslogtreecommitdiff
path: root/sc/source/core
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@gmail.com>2013-05-17 13:29:04 -0400
committerKohei Yoshida <kohei.yoshida@gmail.com>2013-05-20 20:17:28 -0400
commitf72dadc3df3194e1fde075b266348d169f28af38 (patch)
treeb1575f1595af31e1bcc3c9379e7b636cbdfe2bd4 /sc/source/core
parent96c870ea3dd86649dca7f7228591de7253d6653d (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/core')
-rw-r--r--sc/source/core/data/column.cxx12
-rw-r--r--sc/source/core/data/document.cxx8
-rw-r--r--sc/source/core/data/table2.cxx13
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