Kaydet (Commit) 504615c5 authored tarafından Kohei Yoshida's avatar Kohei Yoshida

Remove duplicate code blocks.

Change-Id: I945c7ae834393c760d8a552043c391ff0eb9ce22
üst 81e1e8e2
...@@ -3243,8 +3243,34 @@ void ScFormulaCell::StartListeningTo( ScDocument* pDoc ) ...@@ -3243,8 +3243,34 @@ void ScFormulaCell::StartListeningTo( ScDocument* pDoc )
SetNeedsListening( false); SetNeedsListening( false);
} }
// pArr gesetzt -> Referenzen von anderer Zelle nehmen namespace {
// Then aPos must also be commited
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, void ScFormulaCell::EndListeningTo( ScDocument* pDoc, ScTokenArray* pArr,
ScAddress aCellPos ) ScAddress aCellPos )
...@@ -3269,60 +3295,17 @@ void ScFormulaCell::EndListeningTo( ScDocument* pDoc, ScTokenArray* pArr, ...@@ -3269,60 +3295,17 @@ void ScFormulaCell::EndListeningTo( ScDocument* pDoc, ScTokenArray* pArr,
ScToken* t; ScToken* t;
while ( ( t = static_cast<ScToken*>(pArr->GetNextReferenceRPN()) ) != NULL ) while ( ( t = static_cast<ScToken*>(pArr->GetNextReferenceRPN()) ) != NULL )
{ {
StackVar eType = t->GetType(); switch (t->GetType())
ScSingleRefData& rRef1 = t->GetSingleRef();
ScSingleRefData& rRef2 = (eType == svDoubleRef ?
t->GetDoubleRef().Ref2 : rRef1);
switch( eType )
{ {
case svSingleRef: case svSingleRef:
rRef1.CalcAbsIfRel( aCellPos ); {
if ( rRef1.Valid() ) ScAddress aCell = t->GetSingleRef().toAbs(aPos);
{ if (aCell.IsValid())
pDoc->EndListeningCell( pDoc->EndListeningCell(aCell, this);
ScAddress( rRef1.nCol, }
rRef1.nRow,
rRef1.nTab ), this );
}
break; break;
case svDoubleRef: case svDoubleRef:
t->CalcAbsIfRel( aCellPos ); endListeningArea(this, *pDoc, aCellPos, *t);
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 );
}
}
break; break;
default: default:
; // nothing ; // nothing
...@@ -3348,39 +3331,17 @@ void ScFormulaCell::EndListeningTo( sc::EndListeningContext& rCxt ) ...@@ -3348,39 +3331,17 @@ void ScFormulaCell::EndListeningTo( sc::EndListeningContext& rCxt )
ScToken* t; ScToken* t;
while ( ( t = static_cast<ScToken*>(pCode->GetNextReferenceRPN()) ) != NULL ) while ( ( t = static_cast<ScToken*>(pCode->GetNextReferenceRPN()) ) != NULL )
{ {
StackVar eType = t->GetType(); switch (t->GetType())
ScSingleRefData& rRef1 = t->GetSingleRef();
ScSingleRefData& rRef2 = (eType == svDoubleRef ? t->GetDoubleRef().Ref2 : rRef1);
switch (eType)
{ {
case svSingleRef: case svSingleRef:
{ {
ScAddress aCell = rRef1.toAbs(aPos); ScAddress aCell = t->GetSingleRef().toAbs(aPos);
if (aCell.IsValid()) if (aCell.IsValid())
rDoc.EndListeningCell(rCxt, aCell, *this); rDoc.EndListeningCell(rCxt, aCell, *this);
} }
break; break;
case svDoubleRef: case svDoubleRef:
{ endListeningArea(this, rDoc, aPos, *t);
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);
}
}
break; break;
default: default:
; // nothing ; // nothing
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment