[Libreoffice-commits] core.git: Branch 'libreoffice-5-1' - sc/source

Eike Rathke erack at redhat.com
Tue Aug 16 20:05:09 UTC 2016


 sc/source/core/data/column4.cxx |   14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

New commits:
commit 10195ce5563d6ac93177b67d484151c01a751922
Author: Eike Rathke <erack at redhat.com>
Date:   Tue Aug 2 19:55:08 2016 +0200

    Resolves: tdf#100582 SetMatColsRows() when constructing matrix ScFormulaCell
    
    ... from an ScFormulaCellGroup token array, because ScFormulaResult that holds
    the matrix dimensions is not cloned in that case as we don't clone from an
    ScFormulaCell.
    
    Change-Id: I13ab1b29db71ae1618580de995fe12ec423d4dc7
    (cherry picked from commit c82a81bbda104ef08dd9e18725a09475b2d65183)
    Reviewed-on: https://gerrit.libreoffice.org/27809
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sc/source/core/data/column4.cxx b/sc/source/core/data/column4.cxx
index 4c42a7d..bfcf257 100644
--- a/sc/source/core/data/column4.cxx
+++ b/sc/source/core/data/column4.cxx
@@ -483,6 +483,16 @@ void ScColumn::CloneFormulaCell(
     sc::CellStoreType::iterator itPos = maCells.begin();
     sc::CellTextAttrStoreType::iterator itAttrPos = maCellTextAttrs.begin();
 
+    SCCOL nMatrixCols = 0;
+    SCROW nMatrixRows = 0;
+    sal_uInt8 nMatrixFlag = rSrc.GetMatrixFlag();
+    if (nMatrixFlag == MM_FORMULA)
+    {
+        rSrc.GetMatColsRows( nMatrixCols, nMatrixRows);
+        SAL_WARN_IF( nMatrixCols != 1 || nMatrixRows != 1, "sc.core",
+                "ScColumn::CloneFormulaCell - cloning array/matrix with not exactly one column or row as single cell");
+    }
+
     std::vector<ScFormulaCell*> aFormulas;
     std::vector<sc::RowSpan>::const_iterator itSpan = rRanges.begin(), itSpanEnd = rRanges.end();
     for (; itSpan != itSpanEnd; ++itSpan)
@@ -514,7 +524,9 @@ void ScColumn::CloneFormulaCell(
             xGroup->compileCode(*pDocument, aPos, pDocument->GetGrammar());
             for (size_t i = 0; i < nLen; ++i, aPos.IncRow())
             {
-                ScFormulaCell* pCell = new ScFormulaCell(pDocument, aPos, xGroup, pDocument->GetGrammar(), rSrc.GetMatrixFlag());
+                ScFormulaCell* pCell = new ScFormulaCell(pDocument, aPos, xGroup, pDocument->GetGrammar(), nMatrixFlag);
+                if (nMatrixFlag == MM_FORMULA)
+                    pCell->SetMatColsRows( nMatrixCols, nMatrixRows);
                 if (i == 0)
                 {
                     xGroup->mpTopCell = pCell;


More information about the Libreoffice-commits mailing list