diff options
author | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-07-23 23:58:11 -0400 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-07-24 23:29:40 -0400 |
commit | f4e048ea1ea80394b77894d1721e28b47e8d2c14 (patch) | |
tree | 40b91ece0d388760de2ff7b5de5df38cfc483ed3 | |
parent | 6dda773b8fa88cc2de994878fd1cdf2092962567 (diff) |
There isn't much we have to do for copy.
Change-Id: I4d297f15e8030fdf068c7e3102f9d03aff401cf9
-rw-r--r-- | sc/source/core/data/formulacell.cxx | 65 |
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( |