You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by al...@apache.org on 2014/02/26 04:23:04 UTC

svn commit: r1571903 - in /openoffice/branches/AOO410/main/sc: ./ source/ui/inc/printfun.hxx source/ui/view/printfun.cxx

Author: alg
Date: Wed Feb 26 03:23:04 2014
New Revision: 1571903

URL: http://svn.apache.org/r1571903
Log:
i123672 Made data used in ScPrintFunc to prepare print preview dynamic

Modified:
    openoffice/branches/AOO410/main/sc/   (props changed)
    openoffice/branches/AOO410/main/sc/source/ui/inc/printfun.hxx
    openoffice/branches/AOO410/main/sc/source/ui/view/printfun.cxx

Propchange: openoffice/branches/AOO410/main/sc/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Wed Feb 26 03:23:04 2014
@@ -0,0 +1,5 @@
+/openoffice/branches/AOO400/main/sc:1503684
+/openoffice/branches/ia2/main/sc:1417739-1541842
+/openoffice/branches/ooxml-osba/main/sc:1546391,1546395,1546574,1546934,1547030,1547392,1551920,1551954,1551958,1552283
+/openoffice/branches/rejuvenate01/main/sc:1480411,1534063,1534098,1536312,1549902,1560617
+/openoffice/trunk/main/sc:1571617,1571902

Modified: openoffice/branches/AOO410/main/sc/source/ui/inc/printfun.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/AOO410/main/sc/source/ui/inc/printfun.hxx?rev=1571903&r1=1571902&r2=1571903&view=diff
==============================================================================
--- openoffice/branches/AOO410/main/sc/source/ui/inc/printfun.hxx (original)
+++ openoffice/branches/AOO410/main/sc/source/ui/inc/printfun.hxx Wed Feb 26 03:23:04 2014
@@ -209,10 +209,12 @@ private:
 	SCCOL				nEndCol;
 	SCROW				nEndRow;
 
-	SCCOL*              pPageEndX;			// Seitenaufteilung
-	SCROW*              pPageEndY;
-	ScPageRowEntry*		pPageRows;
-	size_t				nPagesX;
+    // #123672# use dynamic mem to react on size changes
+    std::vector< SCCOL >            maPageEndX;
+    std::vector< SCROW >            maPageEndY;
+    std::vector< ScPageRowEntry>    maPageRows;
+
+    size_t				nPagesX;
 	size_t				nPagesY;
 	size_t				nTotalY;
 

Modified: openoffice/branches/AOO410/main/sc/source/ui/view/printfun.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/AOO410/main/sc/source/ui/view/printfun.cxx?rev=1571903&r1=1571902&r2=1571903&view=diff
==============================================================================
--- openoffice/branches/AOO410/main/sc/source/ui/view/printfun.cxx (original)
+++ openoffice/branches/AOO410/main/sc/source/ui/view/printfun.cxx Wed Feb 26 03:23:04 2014
@@ -190,9 +190,6 @@ void ScPrintFunc::Construct( const ScPri
 	//	weil die EditEngine sonst unterschiedliche Texthoehen liefert
 	pDev->SetMapMode(MAP_PIXEL);
 
-	pPageEndX = NULL;
-	pPageEndY = NULL;
-	pPageRows = NULL;
 	pBorderItem = NULL;
 	pBackgroundItem = NULL;
 	pShadowItem = NULL;
@@ -331,8 +328,25 @@ void ScPrintFunc::FillPageData()
 
 		rData.SetPrintRange( ScRange( nStartCol, nStartRow, nPrintTab,
 										nEndCol, nEndRow, nPrintTab ) );
-		rData.SetPagesX( nPagesX, pPageEndX );
-		rData.SetPagesY( nTotalY, pPageEndY );
+        // #123672#
+        if(maPageEndX.empty())
+        {
+            OSL_ENSURE(false, "vector access error for maPageEndX (!)");
+        }
+        else
+        {
+            rData.SetPagesX( nPagesX, &maPageEndX[0]);
+        }
+
+        // #123672#
+        if(maPageEndY.empty())
+        {
+            OSL_ENSURE(false, "vector access error for maPageEndY (!)");
+        }
+        else
+        {
+            rData.SetPagesY( nTotalY, &maPageEndY[0]);
+        }
 
 		//	Einstellungen
 		rData.SetTopDown( aTableParam.bTopDown );
@@ -350,9 +364,6 @@ ScPrintFunc::~ScPrintFunc()
 	}
 	aNotePosList.Clear();
 
-	delete[] pPageEndX;
-	delete[] pPageEndY;
-	delete[] pPageRows;
 	delete pEditDefaults;
 	delete pEditEngine;
 
@@ -2491,7 +2502,10 @@ long ScPrintFunc::CountPages()							// 
 				CalcZoom(i);
 				if ( aTableParam.bSkipEmpty )
 					for (nY=0; nY<nPagesY; nY++)
-						nPages += pPageRows[nY].CountVisible();
+                    {
+                        OSL_ENSURE(nY < maPageRows.size(), "vector access error for maPageRows (!)");
+                        nPages += maPageRows[nY].CountVisible();
+                    }
 				else
 					nPages += ((long) nPagesX) * nPagesY;
 				if ( pPageData )
@@ -2503,7 +2517,10 @@ long ScPrintFunc::CountPages()							// 
 			CalcZoom(RANGENO_NORANGE);						// Zoom berechnen
 			if ( aTableParam.bSkipEmpty )
 				for (nY=0; nY<nPagesY; nY++)
-					nPages += pPageRows[nY].CountVisible();
+                {
+                    OSL_ENSURE(nY < maPageRows.size(), "vector access error for maPageRows (!)");
+                    nPages += maPageRows[nY].CountVisible();
+                }
 			else
 				nPages += ((long) nPagesX) * nPagesY;
 			if ( pPageData )
@@ -2711,12 +2728,14 @@ long ScPrintFunc::DoPrint( const MultiSe
 			nX1 = nStartCol;
 			for (nCountX=0; nCountX<nPagesX; nCountX++)
 			{
-				nX2 = pPageEndX[nCountX];
+                OSL_ENSURE(nCountX < maPageEndX.size(), "vector access error for maPageEndX (!)");
+				nX2 = maPageEndX[nCountX];
 				for (nCountY=0; nCountY<nPagesY; nCountY++)
 				{
-					nY1 = pPageRows[nCountY].GetStartRow();
-					nY2 = pPageRows[nCountY].GetEndRow();
-					if ( !aTableParam.bSkipEmpty || !pPageRows[nCountY].IsHidden(nCountX) )
+                    OSL_ENSURE(nCountY < maPageRows.size(), "vector access error for maPageRows (!)");
+					nY1 = maPageRows[nCountY].GetStartRow();
+					nY2 = maPageRows[nCountY].GetEndRow();
+					if ( !aTableParam.bSkipEmpty || !maPageRows[nCountY].IsHidden(nCountX) )
 					{
 						if ( rPageRanges.IsSelected( nPageNo+nStartPage+1 ) )
 						{
@@ -2734,13 +2753,15 @@ long ScPrintFunc::DoPrint( const MultiSe
 		{
 			for (nCountY=0; nCountY<nPagesY; nCountY++)
 			{
-				nY1 = pPageRows[nCountY].GetStartRow();
-				nY2 = pPageRows[nCountY].GetEndRow();
+                OSL_ENSURE(nCountY < maPageRows.size(), "vector access error for maPageRows (!)");
+				nY1 = maPageRows[nCountY].GetStartRow();
+				nY2 = maPageRows[nCountY].GetEndRow();
 				nX1 = nStartCol;
 				for (nCountX=0; nCountX<nPagesX; nCountX++)
 				{
-					nX2 = pPageEndX[nCountX];
-					if ( !aTableParam.bSkipEmpty || !pPageRows[nCountY].IsHidden(nCountX) )
+                    OSL_ENSURE(nCountX < maPageEndX.size(), "vector access error for maPageEndX (!)");
+					nX2 = maPageEndX[nCountX];
+					if ( !aTableParam.bSkipEmpty || !maPageRows[nCountY].IsHidden(nCountX) )
 					{
 						if ( rPageRanges.IsSelected( nPageNo+nStartPage+1 ) )
 						{
@@ -2961,8 +2982,7 @@ void ScPrintFunc::ResetBreaks( SCTAB nTa
 	pDoc->UpdatePageBreaks( nTab, NULL );
 }
 
-void lcl_SetHidden( ScDocument* pDoc, SCTAB nPrintTab, ScPageRowEntry& rPageRowEntry,
-					SCCOL nStartCol, const SCCOL* pPageEndX )
+void lcl_SetHidden( ScDocument* pDoc, SCTAB nPrintTab, ScPageRowEntry& rPageRowEntry, SCCOL nStartCol, const std::vector< SCCOL >& aPageEndX)
 {
 	size_t nPagesX   = rPageRowEntry.GetPagesX();
 	SCROW nStartRow = rPageRowEntry.GetStartRow();
@@ -2974,7 +2994,8 @@ void lcl_SetHidden( ScDocument* pDoc, SC
 
 	for (size_t i=0; i<nPagesX; i++)
 	{
-		SCCOL nEndCol = pPageEndX[i];
+        OSL_ENSURE(i < aPageEndX.size(), "vector access error for maPageEndX (!)");
+		SCCOL nEndCol = aPageEndX[i];
 		if ( pDoc->IsPrintEmpty( nPrintTab, nStartCol, nStartRow, nEndCol, nEndRow,
 									bLeftIsEmpty, &aTempRange, &aTempRect ) )
 		{
@@ -2990,10 +3011,11 @@ void lcl_SetHidden( ScDocument* pDoc, SC
 
 void ScPrintFunc::CalcPages()               // berechnet aPageRect und Seiten aus nZoom
 {
-    if (!pPageEndX) pPageEndX = new SCCOL[MAXCOL+1];
-	//performance impact
-//	if (!pPageEndY) pPageEndY = new SCROW[MAXROW+1];
-//	if (!pPageRows) pPageRows = new ScPageRowEntry[MAXROW+1];	//! vorher zaehlen !!!!
+    // #123672# use dynamic mem to react on size changes
+    if(maPageEndX.size() < MAXCOL+1)
+    {
+        maPageEndX.resize(MAXCOL+1, SCCOL());
+    }
 
     pDoc->SetPageSize( nPrintTab, GetDocPageSize() );
     if (aAreaParam.bPrintArea)
@@ -3002,10 +3024,24 @@ void ScPrintFunc::CalcPages()           
         pDoc->UpdatePageBreaks( nPrintTab, &aRange );
     }
     else
+    {
         pDoc->UpdatePageBreaks( nPrintTab, NULL );      // sonst wird das Ende markiert
-	SCROW nRealCnt = nEndRow-nStartRow+1;
-		if (!pPageEndY) pPageEndY = new SCROW[nRealCnt+1];
-	if (!pPageRows) pPageRows = new ScPageRowEntry[nRealCnt+1];	//! vorher zaehlen !!!!
+    }
+
+    const SCROW nRealCnt = nEndRow-nStartRow+1;
+
+    // #123672# use dynamic mem to react on size changes
+    if(maPageEndY.size() < nRealCnt+1)
+    {
+        maPageEndY.resize(nRealCnt+1, SCROW());
+    }
+
+    // #123672# use dynamic mem to react on size changes
+    if(maPageRows.size() < nRealCnt+1)
+    {
+        maPageRows.resize(nRealCnt+1, ScPageRowEntry());
+    }
+
     //
     //  Seiteneinteilung nach Umbruechen in Col/RowFlags
     //  Von mehreren Umbruechen in einem ausgeblendeten Bereich zaehlt nur einer.
@@ -3023,7 +3059,8 @@ void ScPrintFunc::CalcPages()           
         bool bPageBreak = (pDoc->HasColBreak(i, nPrintTab) & BREAK_PAGE);
         if ( i>nStartCol && bVisCol && bPageBreak )
         {
-            pPageEndX[nPagesX] = i-1;
+            OSL_ENSURE(nPagesX < maPageEndX.size(), "vector access error for maPageEndX (!)");
+            maPageEndX[nPagesX] = i-1;
             ++nPagesX;
             bVisCol = false;
         }
@@ -3032,7 +3069,8 @@ void ScPrintFunc::CalcPages()           
     }
     if (bVisCol)    // auch am Ende keine leeren Seiten
     {
-        pPageEndX[nPagesX] = nEndCol;
+        OSL_ENSURE(nPagesX < maPageEndX.size(), "vector access error for maPageEndX (!)");
+        maPageEndX[nPagesX] = nEndCol;
         ++nPagesX;
     }
 
@@ -3054,17 +3092,19 @@ void ScPrintFunc::CalcPages()           
 
         if (nRow > nStartRow && bVisRow && bPageBreak )
         {
-            pPageEndY[nTotalY] = nRow-1;
+            OSL_ENSURE(nTotalY < maPageEndY.size(), "vector access error for maPageEndY (!)");
+            maPageEndY[nTotalY] = nRow-1;
             ++nTotalY;
 
             if ( !aTableParam.bSkipEmpty ||
                     !pDoc->IsPrintEmpty( nPrintTab, nStartCol, nPageStartRow, nEndCol, nRow-1 ) )
             {
-                pPageRows[nPagesY].SetStartRow( nPageStartRow );
-                pPageRows[nPagesY].SetEndRow( nRow-1 );
-                pPageRows[nPagesY].SetPagesX( nPagesX );
+                OSL_ENSURE(nPagesY < maPageRows.size(), "vector access error for maPageRows (!)");
+                maPageRows[nPagesY].SetStartRow( nPageStartRow );
+                maPageRows[nPagesY].SetEndRow( nRow-1 );
+                maPageRows[nPagesY].SetPagesX( nPagesX );
                 if (aTableParam.bSkipEmpty)
-                    lcl_SetHidden( pDoc, nPrintTab, pPageRows[nPagesY], nStartCol, pPageEndX );
+                    lcl_SetHidden( pDoc, nPrintTab, maPageRows[nPagesY], nStartCol, maPageEndX );
                 ++nPagesY;
             }
 
@@ -3093,17 +3133,19 @@ void ScPrintFunc::CalcPages()           
 
     if (bVisRow)
     {
-        pPageEndY[nTotalY] = nEndRow;
+        OSL_ENSURE(nTotalY < maPageEndY.size(), "vector access error for maPageEndY (!)");
+        maPageEndY[nTotalY] = nEndRow;
         ++nTotalY;
 
         if ( !aTableParam.bSkipEmpty ||
                 !pDoc->IsPrintEmpty( nPrintTab, nStartCol, nPageStartRow, nEndCol, nEndRow ) )
         {
-            pPageRows[nPagesY].SetStartRow( nPageStartRow );
-            pPageRows[nPagesY].SetEndRow( nEndRow );
-            pPageRows[nPagesY].SetPagesX( nPagesX );
+            OSL_ENSURE(nPagesY < maPageRows.size(), "vector access error for maPageRows (!)");
+            maPageRows[nPagesY].SetStartRow( nPageStartRow );
+            maPageRows[nPagesY].SetEndRow( nEndRow );
+            maPageRows[nPagesY].SetPagesX( nPagesX );
             if (aTableParam.bSkipEmpty)
-                lcl_SetHidden( pDoc, nPrintTab, pPageRows[nPagesY], nStartCol, pPageEndX );
+                lcl_SetHidden( pDoc, nPrintTab, maPageRows[nPagesY], nStartCol, maPageEndX );
             ++nPagesY;
         }
     }