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

Kohei Yoshida kohei.yoshida at gmail.com
Thu Jun 27 08:28:50 PDT 2013


 sc/inc/column.hxx              |   25 +++++++++++++++++++++----
 sc/source/core/data/column.cxx |   27 ++++++++++++---------------
 sc/source/core/data/table1.cxx |    8 +++-----
 3 files changed, 36 insertions(+), 24 deletions(-)

New commits:
commit e51a3433290912a1d491f3fac8109edbae98986b
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Thu Jun 27 11:29:46 2013 -0400

    ScColumn::UpdateReference to take ScRange as a parameter.
    
    To reduce the number of parameters by 5.  Also add *some* description
    of this method esp what the range means when updating formula references.
    
    Change-Id: Iccde58d6ecde6f0c09c111cf9b4f551ce392effb

diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
index c0dea00..fce1348 100644
--- a/sc/inc/column.hxx
+++ b/sc/inc/column.hxx
@@ -301,10 +301,27 @@ public:
 
     void        ResetChanged( SCROW nStartRow, SCROW nEndRow );
 
-    bool        UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
-                                     SCCOL nCol2, SCROW nRow2, SCTAB nTab2,
-                                     SCsCOL nDx, SCsROW nDy, SCsTAB nDz,
-                                     ScDocument* pUndoDoc = NULL );
+    /**
+     * Update reference addresses in formula cell in response to mass cell
+     * movement.
+     *
+     * @param eUpdateRefMode update mode - insert/delete, copy, move,
+     *                       reorder...
+     * @param rRange range of cells that are about to be moved or copied.
+     *               (TODO: find out what this range means for the reorder
+     *               mode).
+     * @param nDx moved by how many cells in the column direction.
+     * @param nDy moved by how many cells in the row direction.
+     * @param nDz moved by how many sheets in the sheet direction.
+     * @param pUndoDoc undo document instance.
+     *
+     * @return true if reference of at least one formula cell has been
+     *         updated, false otherwise.
+     */
+    bool UpdateReference(
+        UpdateRefMode eUpdateRefMode, const ScRange& rRange, SCsCOL nDx, SCsROW nDy, SCsTAB nDz,
+        ScDocument* pUndoDoc = NULL );
+
     void UpdateInsertTab(SCTAB nInsPos, SCTAB nNewSheets = 1);
     void UpdateInsertTabOnlyCells(SCTAB nInsPos, SCTAB nNewSheets = 1);
     void UpdateDeleteTab(SCTAB nDelPos, bool bIsMove, ScColumn* pRefUndo = NULL, SCTAB nSheets = 1);
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index 26edaa9..1a00a15 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -1992,9 +1992,8 @@ void ScColumn::CopyScenarioFrom( const ScColumn& rSrcCol )
             //  UpdateUsed not needed, already done in TestCopyScenario (obsolete comment ?)
 
             SCsTAB nDz = nTab - rSrcCol.nTab;
-            UpdateReference(URM_COPY, nCol, nStart, nTab,
-                                      nCol, nEnd,   nTab,
-                                      0, 0, nDz, NULL);
+            UpdateReference(
+                URM_COPY, ScRange(nCol, nStart, nTab, nCol, nEnd, nTab), 0, 0, nDz, NULL);
             UpdateCompile();
         }
 
@@ -2023,9 +2022,9 @@ void ScColumn::CopyScenarioTo( ScColumn& rDestCol ) const
             //  UpdateUsed not needed, is already done in TestCopyScenario (obsolete comment ?)
 
             SCsTAB nDz = rDestCol.nTab - nTab;
-            rDestCol.UpdateReference(URM_COPY, rDestCol.nCol, nStart, rDestCol.nTab,
-                                               rDestCol.nCol, nEnd,   rDestCol.nTab,
-                                               0, 0, nDz, NULL);
+            rDestCol.UpdateReference(
+                URM_COPY, ScRange(rDestCol.nCol, nStart, rDestCol.nTab, rDestCol.nCol, nEnd, rDestCol.nTab),
+                0, 0, nDz, NULL);
             rDestCol.UpdateCompile();
         }
 
@@ -2221,21 +2220,19 @@ public:
 
 }
 
-bool ScColumn::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
-             SCCOL nCol2, SCROW nRow2, SCTAB nTab2, SCsCOL nDx, SCsROW nDy, SCsTAB nDz,
-             ScDocument* pUndoDoc )
+bool ScColumn::UpdateReference(
+    UpdateRefMode eUpdateRefMode, const ScRange& rRange, SCsCOL nDx, SCsROW nDy, SCsTAB nDz,
+    ScDocument* pUndoDoc )
 {
-    ScRange aRange(nCol1, nRow1, nTab1, nCol2, nRow2, nTab2);
-
     if (eUpdateRefMode == URM_COPY)
     {
-        UpdateRefOnCopy aHandler(aRange, nDx, nDy, nDz, pUndoDoc);
-        FormulaCellsUndecided(nRow1, nRow2);
-        sc::ProcessBlock(maCells.begin(), maCells, aHandler, nRow1, nRow2);
+        UpdateRefOnCopy aHandler(rRange, nDx, nDy, nDz, pUndoDoc);
+        FormulaCellsUndecided(rRange.aStart.Row(), rRange.aEnd.Row());
+        sc::ProcessBlock(maCells.begin(), maCells, aHandler, rRange.aStart.Row(), rRange.aEnd.Row());
         return aHandler.isUpdated();
     }
 
-    UpdateRefOnNonCopy aHandler(nCol, nTab, aRange, nDx, nDy, nDz, eUpdateRefMode, pUndoDoc);
+    UpdateRefOnNonCopy aHandler(nCol, nTab, rRange, nDx, nDy, nDz, eUpdateRefMode, pUndoDoc);
     FormulaCellsUndecided(0, MAXROW);
     sc::ProcessFormula(maCells, aHandler);
     return aHandler.isUpdated();
diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx
index be6f4ae..2d90fa9 100644
--- a/sc/source/core/data/table1.cxx
+++ b/sc/source/core/data/table1.cxx
@@ -1463,16 +1463,14 @@ void ScTable::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
         iMax = MAXCOL;
     }
 
+    ScRange aRange(nCol1, nRow1, nTab1, nCol2, nRow2, nTab2);
+
     // Named expressions need to be updated before formulas acessing them.
     if (mpRangeName)
-    {
-        ScRange aRange( nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 );;
         mpRangeName->UpdateReference( eUpdateRefMode, aRange, nDx, nDy, nDz, true );
-    }
 
     for ( ; i<=iMax; i++)
-        bUpdated |= aCol[i].UpdateReference(
-            eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2, nDx, nDy, nDz, pUndoDoc );
+        bUpdated |= aCol[i].UpdateReference(eUpdateRefMode, aRange, nDx, nDy, nDz, pUndoDoc);
 
     if ( bIncludeDraw )
         UpdateDrawRef( eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2, nDx, nDy, nDz, bUpdateNoteCaptionPos );


More information about the Libreoffice-commits mailing list