diff options
author | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-05-14 15:55:10 -0400 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-05-20 20:13:05 -0400 |
commit | 504615c541283345e5c1725fc239fac75502d72e (patch) | |
tree | 0976fc60ecf5aba39d954fbbea2e0183c6ff804e /sc | |
parent | 81e1e8e21f84a27e117eeb7fed06b2686bf60249 (diff) |
Remove duplicate code blocks.
Change-Id: I945c7ae834393c760d8a552043c391ff0eb9ce22
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/core/data/formulacell.cxx | 115 |
1 files changed, 38 insertions, 77 deletions
diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx index a91722f44846..b243ea2afd9d 100644 --- a/sc/source/core/data/formulacell.cxx +++ b/sc/source/core/data/formulacell.cxx @@ -3243,8 +3243,34 @@ void ScFormulaCell::StartListeningTo( ScDocument* pDoc ) SetNeedsListening( false); } -// pArr gesetzt -> Referenzen von anderer Zelle nehmen -// Then aPos must also be commited +namespace { + +void endListeningArea( + ScFormulaCell* pCell, ScDocument& rDoc, const ScAddress& rPos, const ScToken& rToken) +{ + const ScSingleRefData& rRef1 = rToken.GetSingleRef(); + const ScSingleRefData& rRef2 = rToken.GetSingleRef2(); + ScAddress aCell1 = rRef1.toAbs(rPos); + ScAddress aCell2 = rRef2.toAbs(rPos); + if (aCell1.IsValid() && aCell2.IsValid()) + { + if (rToken.GetOpCode() == ocColRowNameAuto) + { // automagically + if ( rRef1.IsColRel() ) + { // ColName + aCell2.SetRow(MAXROW); + } + else + { // RowName + aCell2.SetCol(MAXCOL); + } + } + + rDoc.EndListeningArea(ScRange(aCell1, aCell2), pCell); + } +} + +} void ScFormulaCell::EndListeningTo( ScDocument* pDoc, ScTokenArray* pArr, ScAddress aCellPos ) @@ -3269,60 +3295,17 @@ void ScFormulaCell::EndListeningTo( ScDocument* pDoc, ScTokenArray* pArr, ScToken* t; while ( ( t = static_cast<ScToken*>(pArr->GetNextReferenceRPN()) ) != NULL ) { - StackVar eType = t->GetType(); - ScSingleRefData& rRef1 = t->GetSingleRef(); - ScSingleRefData& rRef2 = (eType == svDoubleRef ? - t->GetDoubleRef().Ref2 : rRef1); - switch( eType ) + switch (t->GetType()) { case svSingleRef: - rRef1.CalcAbsIfRel( aCellPos ); - if ( rRef1.Valid() ) - { - pDoc->EndListeningCell( - ScAddress( rRef1.nCol, - rRef1.nRow, - rRef1.nTab ), this ); - } + { + ScAddress aCell = t->GetSingleRef().toAbs(aPos); + if (aCell.IsValid()) + pDoc->EndListeningCell(aCell, this); + } break; case svDoubleRef: - t->CalcAbsIfRel( aCellPos ); - if ( rRef1.Valid() && rRef2.Valid() ) - { - if ( t->GetOpCode() == ocColRowNameAuto ) - { // automagically - if ( rRef1.IsColRel() ) - { // ColName - pDoc->EndListeningArea( ScRange ( - rRef1.nCol, - rRef1.nRow, - rRef1.nTab, - rRef2.nCol, - MAXROW, - rRef2.nTab ), this ); - } - else - { // RowName - pDoc->EndListeningArea( ScRange ( - rRef1.nCol, - rRef1.nRow, - rRef1.nTab, - MAXCOL, - rRef2.nRow, - rRef2.nTab ), this ); - } - } - else - { - pDoc->EndListeningArea( ScRange ( - rRef1.nCol, - rRef1.nRow, - rRef1.nTab, - rRef2.nCol, - rRef2.nRow, - rRef2.nTab ), this ); - } - } + endListeningArea(this, *pDoc, aCellPos, *t); break; default: ; // nothing @@ -3348,39 +3331,17 @@ void ScFormulaCell::EndListeningTo( sc::EndListeningContext& rCxt ) ScToken* t; while ( ( t = static_cast<ScToken*>(pCode->GetNextReferenceRPN()) ) != NULL ) { - StackVar eType = t->GetType(); - ScSingleRefData& rRef1 = t->GetSingleRef(); - ScSingleRefData& rRef2 = (eType == svDoubleRef ? t->GetDoubleRef().Ref2 : rRef1); - switch (eType) + switch (t->GetType()) { case svSingleRef: { - ScAddress aCell = rRef1.toAbs(aPos); + ScAddress aCell = t->GetSingleRef().toAbs(aPos); if (aCell.IsValid()) rDoc.EndListeningCell(rCxt, aCell, *this); } break; case svDoubleRef: - { - ScAddress aCell1 = rRef1.toAbs(aPos); - ScAddress aCell2 = rRef2.toAbs(aPos); - if (aCell1.IsValid() && aCell2.IsValid()) - { - if (t->GetOpCode() == ocColRowNameAuto) - { // automagically - if ( rRef1.IsColRel() ) - { // ColName - aCell2.SetRow(MAXROW); - } - else - { // RowName - aCell2.SetCol(MAXCOL); - } - } - - rDoc.EndListeningArea(ScRange(aCell1, aCell2), this); - } - } + endListeningArea(this, rDoc, aPos, *t); break; default: ; // nothing |