[Libreoffice-commits] core.git: Branch 'feature/formula-core-rework' - 2 commits - sc/qa sc/source

Kohei Yoshida kohei.yoshida at gmail.com
Tue Jul 23 20:59:48 PDT 2013


 sc/qa/unit/ucalc_formula.cxx        |    5 +-
 sc/source/core/data/formulacell.cxx |   65 +++---------------------------------
 2 files changed, 9 insertions(+), 61 deletions(-)

New commits:
commit e8b93b07408d437e04d00a4ff927b09184add57c
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Wed Jul 24 00:00:16 2013 -0400

    I'm supposed to move it, not shift it.
    
    Change-Id: I3fe1f05a57089b42296e5758542772d69119c17a

diff --git a/sc/qa/unit/ucalc_formula.cxx b/sc/qa/unit/ucalc_formula.cxx
index ec6a6da..af5f96c 100644
--- a/sc/qa/unit/ucalc_formula.cxx
+++ b/sc/qa/unit/ucalc_formula.cxx
@@ -907,9 +907,10 @@ void Test::testFormulaRefUpdateMove()
     if (!checkFormula(*m_pDoc, ScAddress(1,12,0), "$D$6"))
         CPPUNIT_FAIL("Wrong formula.");
 
-    // The value cells are in D4:D6. Push D4:D5 to the right but leave D6
+    // The value cells are in D4:D6. Move D4:D5 to the right but leave D6
     // where it is.
-    m_pDoc->InsertCol(ScRange(3,0,0,3,4,0));
+    bMoved = rFunc.MoveBlock(ScRange(3,3,0,3,4,0), ScAddress(4,3,0), true, false, false, false);
+    CPPUNIT_ASSERT_MESSAGE("Failed to move D4:D5 to E4:E5", bMoved);
 
     // Only the values of B10 and B11 should be updated.
     CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc->GetValue(1,9,0));
commit 641280e198cdd416a365adef12be30e0ef7d0977
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Jul 23 23:58:11 2013 -0400

    There isn't much we have to do for copy.
    
    Change-Id: I4d297f15e8030fdf068c7e3102f9d03aff401cf9

diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx
index 725c5d9..158dc85 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(


More information about the Libreoffice-commits mailing list