diff options
Diffstat (limited to 'sc/source/core')
-rw-r--r-- | sc/source/core/tool/refdata.cxx | 7 | ||||
-rw-r--r-- | sc/source/core/tool/refupdat.cxx | 36 |
2 files changed, 22 insertions, 21 deletions
diff --git a/sc/source/core/tool/refdata.cxx b/sc/source/core/tool/refdata.cxx index 439886e25f7d..3d49fa861bcf 100644 --- a/sc/source/core/tool/refdata.cxx +++ b/sc/source/core/tool/refdata.cxx @@ -75,13 +75,6 @@ bool ScSingleRefData::IsDeleted() const return IsColDeleted() || IsRowDeleted() || IsTabDeleted(); } -void ScSingleRefData::CalcRelFromAbs( const ScAddress& rPos ) -{ - nRelCol = nCol - rPos.Col(); - nRelRow = nRow - rPos.Row(); - nRelTab = nTab - rPos.Tab(); -} - ScAddress ScSingleRefData::toAbs( const ScAddress& rPos ) const { SCCOL nRetCol = Flags.bColRel ? nRelCol + rPos.Col() : nCol; diff --git a/sc/source/core/tool/refupdat.cxx b/sc/source/core/tool/refupdat.cxx index 8ad478b3d172..ca993bdee26b 100644 --- a/sc/source/core/tool/refupdat.cxx +++ b/sc/source/core/tool/refupdat.cxx @@ -830,39 +830,47 @@ ScRefUpdateRes ScRefUpdate::Move( void ScRefUpdate::MoveRelWrap( ScDocument* pDoc, const ScAddress& rPos, SCCOL nMaxCol, SCROW nMaxRow, ScComplexRefData& rRef ) { + ScRange aAbsRange = rRef.toAbs(rPos); if( rRef.Ref1.IsColRel() ) { - rRef.Ref1.nCol = rRef.Ref1.nRelCol + rPos.Col(); - lcl_MoveItWrap( rRef.Ref1.nCol, static_cast<SCsCOL>(0), nMaxCol ); + SCCOL nCol = aAbsRange.aStart.Col(); + lcl_MoveItWrap(nCol, static_cast<SCsCOL>(0), nMaxCol); + aAbsRange.aStart.SetCol(nCol); } if( rRef.Ref2.IsColRel() ) { - rRef.Ref2.nCol = rRef.Ref2.nRelCol + rPos.Col(); - lcl_MoveItWrap( rRef.Ref2.nCol, static_cast<SCsCOL>(0), nMaxCol ); + SCCOL nCol = aAbsRange.aEnd.Col(); + lcl_MoveItWrap(nCol, static_cast<SCsCOL>(0), nMaxCol); + aAbsRange.aEnd.SetCol(nCol); } if( rRef.Ref1.IsRowRel() ) { - rRef.Ref1.nRow = rRef.Ref1.nRelRow + rPos.Row(); - lcl_MoveItWrap( rRef.Ref1.nRow, static_cast<SCsROW>(0), nMaxRow ); + SCROW nRow = aAbsRange.aStart.Row(); + lcl_MoveItWrap(nRow, static_cast<SCsROW>(0), nMaxRow); + aAbsRange.aStart.SetRow(nRow); } if( rRef.Ref2.IsRowRel() ) { - rRef.Ref2.nRow = rRef.Ref2.nRelRow + rPos.Row(); - lcl_MoveItWrap( rRef.Ref2.nRow, static_cast<SCsROW>(0), nMaxRow ); + SCROW nRow = aAbsRange.aEnd.Row(); + lcl_MoveItWrap(nRow, static_cast<SCsROW>(0), nMaxRow); + aAbsRange.aEnd.SetRow(nRow); } SCsTAB nMaxTab = (SCsTAB) pDoc->GetTableCount() - 1; if( rRef.Ref1.IsTabRel() ) { - rRef.Ref1.nTab = rRef.Ref1.nRelTab + rPos.Tab(); - lcl_MoveItWrap( rRef.Ref1.nTab, static_cast<SCsTAB>(0), static_cast<SCTAB>(nMaxTab) ); + SCTAB nTab = aAbsRange.aStart.Tab(); + lcl_MoveItWrap(nTab, static_cast<SCsTAB>(0), static_cast<SCTAB>(nMaxTab)); + aAbsRange.aStart.SetTab(nTab); } if( rRef.Ref2.IsTabRel() ) { - rRef.Ref2.nTab = rRef.Ref2.nRelTab + rPos.Tab(); - lcl_MoveItWrap( rRef.Ref2.nTab, static_cast<SCsTAB>(0), static_cast<SCTAB>(nMaxTab) ); + SCTAB nTab = aAbsRange.aEnd.Tab(); + lcl_MoveItWrap(nTab, static_cast<SCsTAB>(0), static_cast<SCTAB>(nMaxTab)); + aAbsRange.aEnd.SetTab(nTab); } - rRef.PutInOrder(); - rRef.CalcRelFromAbs( rPos ); + + aAbsRange.PutInOrder(); + rRef.SetRange(aAbsRange, rPos); } //------------------------------------------------------------------ |