summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@gmail.com>2013-07-23 23:58:11 -0400
committerKohei Yoshida <kohei.yoshida@gmail.com>2013-07-24 23:29:40 -0400
commitf4e048ea1ea80394b77894d1721e28b47e8d2c14 (patch)
tree40b91ece0d388760de2ff7b5de5df38cfc483ed3
parent6dda773b8fa88cc2de994878fd1cdf2092962567 (diff)
There isn't much we have to do for copy.
Change-Id: I4d297f15e8030fdf068c7e3102f9d03aff401cf9
-rw-r--r--sc/source/core/data/formulacell.cxx65
1 files changed, 6 insertions, 59 deletions
diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx
index 725c5d9ca46c..158dc85a6dd9 100644
--- a/sc/source/core/data/formulacell.cxx
+++ b/sc/source/core/data/formulacell.cxx
@@ -2504,85 +2504,32 @@ bool ScFormulaCell::UpdateReferenceOnCopy(
// on reference update. Bail out.
return false;
- bool bCellStateChanged = false;
boost::scoped_ptr<ScTokenArray> pOldCode;
if (pUndoDoc)
pOldCode.reset(pCode->Clone());
- bool bValChanged = false;
- bool bRangeModified = false; // any range, not only shared formula
- bool bRefSizeChanged = false;
-
- if (bHasRefs)
- {
- // Update cell or range references.
- ScCompiler aComp(pDocument, aPos, *pCode);
- aComp.SetGrammar(pDocument->GetGrammar());
- aComp.UpdateReference(
- URM_COPY, aOldPos, rCxt.maRange, rCxt.mnColDelta, rCxt.mnRowDelta, rCxt.mnTabDelta,
- bValChanged, bRefSizeChanged);
- bRangeModified = aComp.HasModifiedRange();
- }
-
- bCellStateChanged |= bValChanged;
-
if (bOnRefMove)
// Cell may reference itself, e.g. ocColumn, ocRow without parameter
- bOnRefMove = (bValChanged || (aPos != aOldPos));
-
- bool bColRowNameCompile = false;
- bool bNewListening = false;
- bool bInDeleteUndo = false;
-
- if (bHasRefs)
- {
- // Upon Insert ColRowNames have to be recompiled in case the
- // insertion occurs right in front of the range.
- if (bHasColRowNames)
- bColRowNameCompile = checkCompileColRowName(rCxt, *pDocument, *pCode, aOldPos, aPos, bValChanged);
-
- ScChangeTrack* pChangeTrack = pDocument->GetChangeTrack();
- bInDeleteUndo = (pChangeTrack && pChangeTrack->IsInDeleteUndo());
+ bOnRefMove = (aPos != aOldPos);
- // Reference changed and new listening needed?
- // Except in Insert/Delete without specialties.
- bNewListening =
- (bRangeModified || bColRowNameCompile || (bValChanged && (bInDeleteUndo || bRefSizeChanged)));
+ bool bNeedDirty = bOnRefMove;
- if ( bNewListening )
- EndListeningTo(pDocument, pOldCode.get(), aOldPos);
- }
-
- bool bNeedDirty = false;
- // NeedDirty for changes except for Copy and Move/Insert without RelNames
- if ( bRangeModified || bColRowNameCompile || bOnRefMove)
- bNeedDirty = true;
-
- if (pUndoDoc && (bValChanged || bOnRefMove))
+ if (pUndoDoc && bOnRefMove)
setOldCodeToUndo(pUndoDoc, aUndoPos, pOldCode.get(), eTempGrammar, cMatrixFlag);
- bValChanged = false;
-
- if ( ( bCompile = (bCompile || bValChanged || bRangeModified || bColRowNameCompile) ) != 0 )
+ if (bCompile)
{
- CompileTokenArray( bNewListening ); // no Listening
+ CompileTokenArray(false); // no Listening
bNeedDirty = true;
}
- if ( !bInDeleteUndo )
- { // In ChangeTrack Delete-Reject listeners are established in
- // InsertCol/InsertRow
- if ( bNewListening )
- StartListeningTo( pDocument );
- }
-
if (bNeedDirty)
{ // Cut off references, invalid or similar?
sc::AutoCalcSwitch(*pDocument, false);
SetDirty();
}
- return bCellStateChanged;
+ return false;
}
bool ScFormulaCell::UpdateReference(