[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-5.0' - sc/source

Markus Mohrhard markus.mohrhard at googlemail.com
Sun May 22 03:34:23 UTC 2016


 sc/source/core/data/fillinfo.cxx |  173 ++++++++++++++++++++-------------------
 1 file changed, 90 insertions(+), 83 deletions(-)

New commits:
commit c8774715d10707989267b550841984cd50b07e74
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Sun Mar 27 04:56:55 2016 +0200

    extract another function from ScDocument::FillInfo
    
    (cherry picked from commit a70824f0220b88f3f209266f8e1cba98dc89ca8f)
    
    Change-Id: Ifd39ec5ad7aebac532ea7145274005507a5b177f
    Reviewed-on: https://gerrit.libreoffice.org/25283
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/sc/source/core/data/fillinfo.cxx b/sc/source/core/data/fillinfo.cxx
index 4197b3f6..b8955b9 100644
--- a/sc/source/core/data/fillinfo.cxx
+++ b/sc/source/core/data/fillinfo.cxx
@@ -42,6 +42,10 @@
 #include "cellvalue.hxx"
 #include "mtvcellfunc.hxx"
 
+#include <vector>
+#include <memory>
+#include <o3tl/make_unique.hxx>
+
 const sal_uInt16 ROWINFO_MAX = 1024;
 
 enum FillInfoLinePos
@@ -71,7 +75,7 @@ static void lcl_GetMergeRange( SCsCOL nX, SCsROW nY, SCSIZE nArrY,
     while (bHOver)              // nY constant
     {
         --rStartX;
-        if (rStartX >= (SCsCOL) nX1 && !pDoc->ColHidden(rStartX, nTab, NULL, &nLastCol))
+        if (rStartX >= (SCsCOL) nX1 && !pDoc->ColHidden(rStartX, nTab, nullptr, &nLastCol))
         {
             bHOver = pRowInfo[nArrY].pCellInfo[rStartX+1].bHOverlapped;
             bVOver = pRowInfo[nArrY].pCellInfo[rStartX+1].bVOverlapped;
@@ -93,8 +97,8 @@ static void lcl_GetMergeRange( SCsCOL nX, SCsROW nY, SCSIZE nArrY,
             --nArrY;                        // local copy !
 
         if (rStartX >= (SCsCOL) nX1 && rStartY >= (SCsROW) nY1 &&
-            !pDoc->ColHidden(rStartX, nTab, NULL, &nLastCol) &&
-            !pDoc->RowHidden(rStartY, nTab, NULL, &nLastRow) &&
+            !pDoc->ColHidden(rStartX, nTab, nullptr, &nLastCol) &&
+            !pDoc->RowHidden(rStartY, nTab, nullptr, &nLastRow) &&
             (SCsROW) pRowInfo[nArrY].nRowNo == rStartY)
         {
             bVOver = pRowInfo[nArrY].pCellInfo[rStartX+1].bVOverlapped;
@@ -109,8 +113,8 @@ static void lcl_GetMergeRange( SCsCOL nX, SCsROW nY, SCSIZE nArrY,
 
     const ScMergeAttr* pMerge;
     if (rStartX >= (SCsCOL) nX1 && rStartY >= (SCsROW) nY1 &&
-        !pDoc->ColHidden(rStartX, nTab, NULL, &nLastCol) &&
-        !pDoc->RowHidden(rStartY, nTab, NULL, &nLastRow) &&
+        !pDoc->ColHidden(rStartX, nTab, nullptr, &nLastCol) &&
+        !pDoc->RowHidden(rStartY, nTab, nullptr, &nLastRow) &&
         (SCsROW) pRowInfo[nArrY].nRowNo == rStartY)
     {
         pMerge = static_cast<const ScMergeAttr*>( &pRowInfo[nArrY].pCellInfo[rStartX+1].pPatternAttr->
@@ -131,7 +135,7 @@ class RowInfoFiller
     SCTAB mnTab;
     RowInfo* mpRowInfo;
     SCCOL mnArrX;
-    SCSIZE& mrArrY;
+    SCSIZE mnArrY;
     SCROW mnHiddenEndRow;
     bool mbHiddenRow;
 
@@ -139,31 +143,31 @@ class RowInfoFiller
     {
         SCROW nThisRow = static_cast<SCROW>(nRow);
         if (nThisRow > mnHiddenEndRow)
-            mbHiddenRow = mrDoc.RowHidden(nThisRow, mnTab, NULL, &mnHiddenEndRow);
+            mbHiddenRow = mrDoc.RowHidden(nThisRow, mnTab, nullptr, &mnHiddenEndRow);
         return mbHiddenRow;
     }
 
     void alignArray(size_t nRow)
     {
-        while (mpRowInfo[mrArrY].nRowNo < static_cast<SCROW>(nRow))
-            ++mrArrY;
+        while (mpRowInfo[mnArrY].nRowNo < static_cast<SCROW>(nRow))
+            ++mnArrY;
     }
 
     void setInfo(size_t nRow, const ScRefCellValue& rCell)
     {
         alignArray(nRow);
 
-        RowInfo* pThisRowInfo = &mpRowInfo[mrArrY];
+        RowInfo* pThisRowInfo = &mpRowInfo[mnArrY];
         CellInfo* pInfo = &pThisRowInfo->pCellInfo[mnArrX];
         pInfo->maCell = rCell;
         pThisRowInfo->bEmptyText = false;
         pInfo->bEmptyCellText = false;
-        ++mrArrY;
+        ++mnArrY;
     }
 
 public:
     RowInfoFiller(ScDocument& rDoc, SCTAB nTab, RowInfo* pRowInfo, SCCOL nArrX, SCSIZE& rArrY) :
-        mrDoc(rDoc), mnTab(nTab), mpRowInfo(pRowInfo), mnArrX(nArrX), mrArrY(rArrY),
+        mrDoc(rDoc), mnTab(nTab), mpRowInfo(pRowInfo), mnArrX(nArrX), mnArrY(rArrY),
         mnHiddenEndRow(-1), mbHiddenRow(false) {}
 
     void operator() (size_t nRow, double fVal)
@@ -205,6 +209,58 @@ bool isRotateItemUsed(ScDocumentPool *pPool)
     return false;
 }
 
+void initRowInfo(ScDocument* pDoc, RowInfo* pRowInfo, SCROW& rY,
+        double fRowScale, SCROW nRow1, SCTAB nTab, SCROW& rYExtra, SCSIZE& rArrRow, SCROW& rRow2)
+{
+    sal_uInt16 nDocHeight = ScGlobal::nStdRowHeight;
+    SCROW nDocHeightEndRow = -1;
+    for (SCsROW nSignedY=((SCsROW)nRow1)-1; nSignedY<=(SCsROW)rYExtra; nSignedY++)
+    {
+        if (nSignedY >= 0)
+            rY = (SCROW) nSignedY;
+        else
+            rY = MAXROW+1;          // invalid
+
+        if (rY > nDocHeightEndRow)
+        {
+            if (ValidRow(rY))
+                nDocHeight = pDoc->GetRowHeight( rY, nTab, nullptr, &nDocHeightEndRow );
+            else
+                nDocHeight = ScGlobal::nStdRowHeight;
+        }
+
+        if ( rArrRow==0 || nDocHeight || rY > MAXROW )
+        {
+            RowInfo* pThisRowInfo = &pRowInfo[rArrRow];
+            pThisRowInfo->pCellInfo = nullptr;                 // is loaded below
+
+            sal_uInt16 nHeight = (sal_uInt16) ( nDocHeight * fRowScale );
+            if (!nHeight)
+                nHeight = 1;
+
+            pThisRowInfo->nRowNo        = rY;               //TODO: case < 0 ?
+            pThisRowInfo->nHeight       = nHeight;
+            pThisRowInfo->bEmptyBack    = true;
+            pThisRowInfo->bEmptyText    = true;
+            pThisRowInfo->bChanged      = true;
+            pThisRowInfo->bAutoFilter   = false;
+            pThisRowInfo->bPivotButton  = false;
+            pThisRowInfo->nRotMaxCol    = SC_ROTMAX_NONE;
+
+            ++rArrRow;
+            if (rArrRow >= ROWINFO_MAX)
+            {
+                OSL_FAIL("FillInfo: Range too big" );
+                rYExtra = nSignedY;                         // End
+                rRow2 = rYExtra - 1;                        // Adjust range
+            }
+        }
+        else
+            if (nSignedY==(SCsROW) rYExtra)                 // hidden additional line?
+                ++rYExtra;
+    }
+}
+
 }
 
 void ScDocument::FillInfo(
@@ -270,53 +326,8 @@ void ScDocument::FillInfo(
 
     nArrRow=0;
     SCROW nYExtra = nRow2+1;
-    sal_uInt16 nDocHeight = ScGlobal::nStdRowHeight;
-    SCROW nDocHeightEndRow = -1;
-    for (nSignedY=((SCsROW)nRow1)-1; nSignedY<=(SCsROW)nYExtra; nSignedY++)
-    {
-        if (nSignedY >= 0)
-            nY = (SCROW) nSignedY;
-        else
-            nY = MAXROW+1;          // invalid
-
-        if (nY > nDocHeightEndRow)
-        {
-            if (ValidRow(nY))
-                nDocHeight = GetRowHeight( nY, nTab, NULL, &nDocHeightEndRow );
-            else
-                nDocHeight = ScGlobal::nStdRowHeight;
-        }
-
-        if ( nArrRow==0 || nDocHeight || nY > MAXROW )
-        {
-            RowInfo* pThisRowInfo = &pRowInfo[nArrRow];
-            pThisRowInfo->pCellInfo = NULL;                 // is loaded below
-
-            sal_uInt16 nHeight = (sal_uInt16) ( nDocHeight * fRowScale );
-            if (!nHeight)
-                nHeight = 1;
-
-            pThisRowInfo->nRowNo        = nY;               //TODO: case < 0 ?
-            pThisRowInfo->nHeight       = nHeight;
-            pThisRowInfo->bEmptyBack    = true;
-            pThisRowInfo->bEmptyText    = true;
-            pThisRowInfo->bChanged      = true;
-            pThisRowInfo->bAutoFilter   = false;
-            pThisRowInfo->bPivotButton  = false;
-            pThisRowInfo->nRotMaxCol    = SC_ROTMAX_NONE;
-
-            ++nArrRow;
-            if (nArrRow >= ROWINFO_MAX)
-            {
-                OSL_FAIL("FillInfo: Range too big" );
-                nYExtra = nSignedY;                         // End
-                nRow2 = nYExtra - 1;                        // Adjust range
-            }
-        }
-        else
-            if (nSignedY==(SCsROW) nYExtra)                 // hidden additional line?
-                ++nYExtra;
-    }
+    initRowInfo(this, pRowInfo, nY, fRowScale, nRow1,
+            nTab, nYExtra, nArrRow, nRow2);
     nArrCount = nArrRow;                                      // incl. Dummys
 
     // Rotated text...
@@ -325,7 +336,7 @@ void ScDocument::FillInfo(
     bool bAnyItem = isRotateItemUsed(pPool);
 
     SCCOL nRotMax = nCol2;
-    if ( bAnyItem && HasAttrib( 0,nRow1,nTab, MAXCOL,nRow2+1,nTab,
+    if ( bAnyItem && HasAttrib( 0, nRow1, nTab, MAXCOL, nRow2+1, nTab,
                                 HASATTR_ROTATE | HASATTR_CONDITIONAL ) )
     {
         //TODO: check Conditionals also for HASATTR_ROTATE ????
@@ -379,17 +390,17 @@ void ScDocument::FillInfo(
             pInfo->bHideGrid    = false;                    //  view-internal
             pInfo->bEditEngine  = false;                    //  view-internal
 
-            pInfo->pBackground  = NULL;                     //TODO: omit?
-            pInfo->pPatternAttr = NULL;
-            pInfo->pConditionSet= NULL;
+            pInfo->pBackground  = nullptr;                     //TODO: omit?
+            pInfo->pPatternAttr = nullptr;
+            pInfo->pConditionSet= nullptr;
 
-            pInfo->pLinesAttr   = NULL;
-            pInfo->mpTLBRLine   = NULL;
-            pInfo->mpBLTRLine   = NULL;
+            pInfo->pLinesAttr   = nullptr;
+            pInfo->mpTLBRLine   = nullptr;
+            pInfo->mpBLTRLine   = nullptr;
 
             pInfo->pShadowAttr    = pDefShadow;
-            pInfo->pHShadowOrigin = NULL;
-            pInfo->pVShadowOrigin = NULL;
+            pInfo->pHShadowOrigin = nullptr;
+            pInfo->pVShadowOrigin = nullptr;
         }
     }
 
@@ -433,18 +444,17 @@ void ScDocument::FillInfo(
 
                 ScColumn* pThisCol = &maTabs[nTab]->aCol[nX];                   // Column data
 
-                nArrRow = 1;
+                nArrRow = 0;
                 // Iterate between rows nY1 and nY2 and pick up non-empty
                 // cells that are not hidden.
                 RowInfoFiller aFunc(*this, nTab, pRowInfo, nArrCol, nArrRow);
                 sc::ParseAllNonEmpty(
-                    pThisCol->maCells.begin(), pThisCol->maCells, nRow1, nRow2, aFunc);
+                    pThisCol->maCells.begin(), pThisCol->maCells, std::max<SCROW>(0 , nRow1 - 1), nYExtra, aFunc);
 
                 if (nX+1 >= nCol1)                                // Attribute/Blockmark from nX1-1
                 {
                     ScAttrArray* pThisAttrArr = pThisCol->pAttrArray;       // Attribute
 
-                    nArrRow = 0;
                     const ScPatternAttr* pPattern;
                     SCROW nCurRow=nRow1;                  // single rows
                     if (nCurRow>0)
@@ -507,10 +517,10 @@ void ScDocument::FillInfo(
                         do
                         {
                             SCROW nLastHiddenRow = -1;
-                            bool bRowHidden = RowHidden(nCurRow, nTab, NULL, &nLastHiddenRow);
+                            bool bRowHidden = RowHidden(nCurRow, nTab, nullptr, &nLastHiddenRow);
                             if ( nArrRow==0 || !bRowHidden )
                             {
-                                if ( GetPreviewCellStyle( nX, nCurRow, nTab  ) != NULL )
+                                if ( GetPreviewCellStyle( nX, nCurRow, nTab  ) != nullptr )
                                     bAnyPreview = true;
                                 RowInfo* pThisRowInfo = &pRowInfo[nArrRow];
                                 if (pBackground != pDefBackground)          // Column background == Default ?
@@ -682,7 +692,7 @@ void ScDocument::FillInfo(
         pCondFormList->endRendering();
 
     //  bedingte Formatierung auswerten
-    ::boost::ptr_vector<ScPatternAttr> aAltPatterns;
+    std::vector< std::unique_ptr<ScPatternAttr> > aAltPatterns;
     // favour preview over condition
     if (bAnyCondition || bAnyPreview)
     {
@@ -692,14 +702,14 @@ void ScDocument::FillInfo(
             {
                 CellInfo* pInfo = &pRowInfo[nArrRow].pCellInfo[nArrCol];
                 SCCOL nCol = (nArrCol>0) ? nArrCol-1 : MAXCOL+1;
-                ScPatternAttr* pModifiedPatt = NULL;
+                ScPatternAttr* pModifiedPatt = nullptr;
 
                 if ( ValidCol(nCol) && pRowInfo[nArrRow].nRowNo <= MAXROW )
                 {
                     if ( ScStyleSheet* pPreviewStyle = GetPreviewCellStyle( nCol, pRowInfo[nArrRow].nRowNo, nTab ) )
                     {
-                        aAltPatterns.push_back( new ScPatternAttr( *pInfo->pPatternAttr ) );
-                        pModifiedPatt = &aAltPatterns.back();
+                        aAltPatterns.push_back( o3tl::make_unique<ScPatternAttr>( *pInfo->pPatternAttr ) );
+                        pModifiedPatt = aAltPatterns.back().get();
                         pModifiedPatt->SetStyleSheet( pPreviewStyle );
                     }
                 }
@@ -1090,8 +1100,8 @@ void ScDocument::FillInfo(
                     }
                     else
                     {
-                        pBox = 0;
-                        pTLBR = pBLTR = 0;
+                        pBox = nullptr;
+                        pTLBR = pBLTR = nullptr;
                     }
                 }
             }
@@ -1113,10 +1123,7 @@ void ScDocument::FillInfo(
         }
     }
 
-    /*  Mirror the entire frame array.
-        1st param = Mirror the vertical double line styles as well.
-        2nd param = Do not swap diagonal lines.
-     */
+    /*  Mirror the entire frame array. */
     if( bLayoutRTL )
         rArray.MirrorSelfX( true, false );
 }


More information about the Libreoffice-commits mailing list