[Libreoffice-commits] .: 3 commits - sc/source

Pierre-André Jacquod pjacquod at kemper.freedesktop.org
Sun Dec 4 06:35:38 PST 2011


 sc/source/core/data/table1.cxx |   82 ++++++++++++++++++++++++-----------------
 1 file changed, 48 insertions(+), 34 deletions(-)

New commits:
commit e42ee773ffc12e38d596ce2aa016f0849c4e5ac6
Author: Pierre-André Jacquod <pjacquod at alumni.ethz.ch>
Date:   Tue Nov 29 09:10:26 2011 +0100

    reduce scope of var and better comment of function GetDataArea

diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx
index 3c142c1..06b8203 100644
--- a/sc/source/core/data/table1.cxx
+++ b/sc/source/core/data/table1.cxx
@@ -743,17 +743,19 @@ bool ScTable::GetDataStart( SCCOL& rStartCol, SCROW& rStartRow ) const
 void ScTable::GetDataArea( SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol, SCROW& rEndRow,
                            bool bIncludeOld, bool bOnlyDown ) const
 {
-    // bIncludeOld = true ensure that the returned area contains at least the initial area,
-    //              independently of the case if this area has empty rows / columns at its borders
-    // bOnlyDown = true means extend the inputed area only down, i.e increase only rEndRow
+    // return the smallest area containing at least all contiguous cells having data. This area
+    // is a square containing also empty cells. It may shrink or extend the area given as input
+    // Flags as modifiers:
+    //
+    //     bIncludeOld = true ensure that the returned area contains at least the initial area,
+    //                   independently of the emptniess of rows / columns (i.e. does not allow shrinking)
+    //     bOnlyDown = true means extend / shrink the inputed area only down, i.e modifiy only rEndRow
+
     bool bLeft = false;
     bool bRight  = false;
     bool bTop = false;
     bool bBottom = false;
-    bool bChanged;
-    bool bFound;
-    SCCOL i;
-    SCROW nTest;
+    bool bChanged = false;
 
     do
     {
@@ -784,12 +786,12 @@ void ScTable::GetDataArea( SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol, S
 
             if (rStartRow > 0)
             {
-                nTest = rStartRow-1;
-                bFound = false;
-                for (i=rStartCol; i<=rEndCol && !bFound; i++)
+                SCROW nTest = rStartRow-1;
+                bool needExtend = false;
+                for ( SCCOL i = rStartCol; i<=rEndCol && !needExtend; i++)
                     if (aCol[i].HasDataAt(nTest))
-                        bFound = true;
-                if (bFound)
+                        needExtend = true;
+                if (needExtend)
                 {
                     --rStartRow;
                     bChanged = true;
@@ -800,12 +802,12 @@ void ScTable::GetDataArea( SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol, S
 
         if (rEndRow < MAXROW)
         {
-            nTest = rEndRow+1;
-            bFound = false;
-            for (i=rStartCol; i<=rEndCol && !bFound; i++)
+            SCROW nTest = rEndRow+1;
+            bool needExtend = false;
+            for ( SCCOL i = rStartCol; i<=rEndCol && !needExtend; i++)
                 if (aCol[i].HasDataAt(nTest))
-                    bFound = true;
-            if (bFound)
+                    needExtend = true;
+            if (needExtend)
             {
                 ++rEndRow;
                 bChanged = true;
@@ -830,7 +832,7 @@ void ScTable::GetDataArea( SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol, S
             bool shrink = true;
             do
             {
-                for (i=rStartCol; i<=rEndCol && shrink; i++)
+                for ( SCCOL i = rStartCol; i<=rEndCol && shrink; i++)
                     if (aCol[i].HasDataAt(rStartRow))
                         shrink = false;
                 if (shrink)
@@ -846,7 +848,7 @@ void ScTable::GetDataArea( SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol, S
             bool shrink = true;
             do
             {
-                for (i=rStartCol; i<=rEndCol && shrink; i++)
+                for ( SCCOL i = rStartCol; i<=rEndCol && shrink; i++)
                     if (aCol[i].HasDataAt(rEndRow))
                         shrink = false;
                 if (shrink)
commit 2e5023f974dd94dfeec0554ce07d0544f9ce7638
Author: Pierre-André Jacquod <pjacquod at alumni.ethz.ch>
Date:   Mon Nov 28 10:10:15 2011 +0100

    if empty row / col leads to shrink area, suppress all empty rows/col
    
    and not just the last one, leaving the other within the selection
    area

diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx
index 2262eca..3c142c1 100644
--- a/sc/source/core/data/table1.cxx
+++ b/sc/source/core/data/table1.cxx
@@ -817,22 +817,25 @@ void ScTable::GetDataArea( SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol, S
 
     if ( !bIncludeOld && !bOnlyDown )
     {
-        if ( !bLeft && rStartCol < MAXCOL && rStartCol < rEndCol )
-            if ( aCol[rStartCol].IsEmptyBlock(rStartRow,rEndRow) )
+        if ( !bLeft )
+            while ( aCol[rStartCol].IsEmptyBlock(rStartRow,rEndRow) && rStartCol < MAXCOL && rStartCol < rEndCol)
                 ++rStartCol;
 
-        if ( !bRight && rEndCol > 0 && rStartCol < rEndCol )
-            if ( aCol[rEndCol].IsEmptyBlock(rStartRow,rEndRow) )
+        if ( !bRight )
+            while ( aCol[rEndCol].IsEmptyBlock(rStartRow,rEndRow) && rEndCol > 0 && rStartCol < rEndCol)
                 --rEndCol;
 
         if ( !bTop && rStartRow < MAXROW && rStartRow < rEndRow )
         {
-            bFound = false;
-            for (i=rStartCol; i<=rEndCol && !bFound; i++)
-                if (aCol[i].HasDataAt(rStartRow))
-                    bFound = true;
-            if (!bFound)
-                ++rStartRow;
+            bool shrink = true;
+            do
+            {
+                for (i=rStartCol; i<=rEndCol && shrink; i++)
+                    if (aCol[i].HasDataAt(rStartRow))
+                        shrink = false;
+                if (shrink)
+                    ++rStartRow;
+            }while( shrink && rStartRow < MAXROW && rStartRow < rEndRow);
         }
     }
 
@@ -840,12 +843,15 @@ void ScTable::GetDataArea( SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol, S
     {
         if ( !bBottom && rEndRow > 0 && rStartRow < rEndRow )
         {
-            bFound = false;
-            for (i=rStartCol; i<=rEndCol && !bFound; i++)
-                if (aCol[i].HasDataAt(rEndRow))
-                    bFound = true;
-            if (!bFound)
-                --rEndRow;
+            bool shrink = true;
+            do
+            {
+                for (i=rStartCol; i<=rEndCol && shrink; i++)
+                    if (aCol[i].HasDataAt(rEndRow))
+                        shrink = false;
+                if (shrink)
+                    --rEndRow;
+            }while( shrink && rEndRow > 0 && rStartRow < rEndRow );
         }
     }
 }
commit 7359ad4fc772bc355905ef8b4a4a7b44dcfc1ebe
Author: Pierre-André Jacquod <pjacquod at alumni.ethz.ch>
Date:   Mon Nov 28 09:54:59 2011 +0100

    if changes selection only down, this is also valid for shrinking
    
    and not only for expanding the selected area. Hence both part should
    test this condition.

diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx
index e03c285..2262eca 100644
--- a/sc/source/core/data/table1.cxx
+++ b/sc/source/core/data/table1.cxx
@@ -815,14 +815,16 @@ void ScTable::GetDataArea( SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol, S
     }
     while( bChanged );
 
-    if ( !bIncludeOld )
+    if ( !bIncludeOld && !bOnlyDown )
     {
         if ( !bLeft && rStartCol < MAXCOL && rStartCol < rEndCol )
             if ( aCol[rStartCol].IsEmptyBlock(rStartRow,rEndRow) )
                 ++rStartCol;
+
         if ( !bRight && rEndCol > 0 && rStartCol < rEndCol )
             if ( aCol[rEndCol].IsEmptyBlock(rStartRow,rEndRow) )
                 --rEndCol;
+
         if ( !bTop && rStartRow < MAXROW && rStartRow < rEndRow )
         {
             bFound = false;
@@ -832,6 +834,10 @@ void ScTable::GetDataArea( SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol, S
             if (!bFound)
                 ++rStartRow;
         }
+    }
+
+    if ( !bIncludeOld )
+    {
         if ( !bBottom && rEndRow > 0 && rStartRow < rEndRow )
         {
             bFound = false;


More information about the Libreoffice-commits mailing list