[Libreoffice-commits] core.git: Branch 'distro/nisz/libreoffice-7-1' - sc/inc sc/qa sc/source

Gabor Kelemen (via logerrit) logerrit at kemper.freedesktop.org
Thu Sep 2 09:02:58 UTC 2021


 sc/inc/document.hxx                                            |    5 -
 sc/inc/table.hxx                                               |    7 +
 sc/qa/unit/bugfix-test.cxx                                     |   19 ++++
 sc/qa/unit/data/ods/tdf104502_hiddenColsCountedInPageCount.ods |binary
 sc/source/core/data/documen2.cxx                               |    4 
 sc/source/core/data/document.cxx                               |    4 
 sc/source/core/data/table1.cxx                                 |   47 +++++++---
 sc/source/ui/unoobj/cursuno.cxx                                |    2 
 8 files changed, 66 insertions(+), 22 deletions(-)

New commits:
commit fca8b4a696bdad0411ff86353c9d9d2bfd3f2616
Author:     Gabor Kelemen <kelemen.gabor2 at nisz.hu>
AuthorDate: Thu Sep 2 10:37:47 2021 +0200
Commit:     Gabor Kelemen <kelemen.gabor2 at nisz.hu>
CommitDate: Thu Sep 2 11:02:19 2021 +0200

    Revert "Revert "tdf#104502 sc: skip hidden columns at printing pages""
    
    This reverts commit 2cce94aa1b1e54afe9e1cbb42b218799903b46c3.
    
    Reason for revert: Data loss bug was fixed in master
    
    Change-Id: Iac72a623d6f7eb9f8d8cdf85614697a8ab9d13ed
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121465
    Tested-by: Gabor Kelemen <kelemen.gabor2 at nisz.hu>
    Reviewed-by: Gabor Kelemen <kelemen.gabor2 at nisz.hu>

diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 3a61417b2c10..51130b2fe7cb 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -1456,9 +1456,10 @@ public:
     bool                        GetDataAreaSubrange(ScRange& rRange) const;
 
     SC_DLLPUBLIC bool           GetCellArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow ) const;
-    SC_DLLPUBLIC bool           GetTableArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow ) const;
+    SC_DLLPUBLIC bool           GetTableArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow,
+                                              bool bCalcHiddens = false) const;
     SC_DLLPUBLIC bool           GetPrintArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow,
-                                              bool bNotes = true ) const;
+                                              bool bNotes = true, bool bCalcHiddens = false) const;
     SC_DLLPUBLIC bool           GetPrintAreaHor( SCTAB nTab, SCROW nStartRow, SCROW nEndRow,
                                                  SCCOL& rEndCol ) const;
     SC_DLLPUBLIC bool           GetPrintAreaVer( SCTAB nTab, SCCOL nStartCol, SCCOL nEndCol,
diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx
index 561be59701b7..8b9802055861 100644
--- a/sc/inc/table.hxx
+++ b/sc/inc/table.hxx
@@ -198,6 +198,8 @@ private:
 
     mutable SCCOL nTableAreaX;
     mutable SCROW nTableAreaY;
+    mutable SCCOL nTableAreaVisibleX;
+    mutable SCROW nTableAreaVisibleY;
 
     SCTAB           nTab;
     ScDocument&     rDocument;
@@ -232,6 +234,7 @@ private:
     bool            bLoadingRTL:1;
     bool            bPageSizeValid:1;
     mutable bool    bTableAreaValid:1;
+    mutable bool    bTableAreaVisibleValid:1;
     bool            bVisible:1;
     bool            bStreamValid:1;
     bool            bPendingRowHeights:1;
@@ -567,8 +570,8 @@ public:
     void        InvalidatePageBreaks();
 
     bool        GetCellArea( SCCOL& rEndCol, SCROW& rEndRow ) const;            // FALSE = empty
-    bool        GetTableArea( SCCOL& rEndCol, SCROW& rEndRow ) const;
-    bool        GetPrintArea( SCCOL& rEndCol, SCROW& rEndRow, bool bNotes ) const;
+    bool        GetTableArea( SCCOL& rEndCol, SCROW& rEndRow, bool bCalcHiddens = false) const;
+    bool        GetPrintArea( SCCOL& rEndCol, SCROW& rEndRow, bool bNotes, bool bCalcHiddens = false) const;
     bool        GetPrintAreaHor( SCROW nStartRow, SCROW nEndRow,
                                 SCCOL& rEndCol ) const;
     bool        GetPrintAreaVer( SCCOL nStartCol, SCCOL nEndCol,
diff --git a/sc/qa/unit/bugfix-test.cxx b/sc/qa/unit/bugfix-test.cxx
index be2a00a94e76..88b48326505e 100644
--- a/sc/qa/unit/bugfix-test.cxx
+++ b/sc/qa/unit/bugfix-test.cxx
@@ -58,6 +58,7 @@ public:
     void testTdf128951();
     void testTdf129789();
     void testTdf130725();
+    void testTdf104502_hiddenColsCountedInPageCount();
 
     CPPUNIT_TEST_SUITE(ScFiltersTest);
     CPPUNIT_TEST(testTdf137576_Measureline);
@@ -80,6 +81,7 @@ public:
     CPPUNIT_TEST(testTdf128951);
     CPPUNIT_TEST(testTdf129789);
     CPPUNIT_TEST(testTdf130725);
+    CPPUNIT_TEST(testTdf104502_hiddenColsCountedInPageCount);
     CPPUNIT_TEST_SUITE_END();
 
 private:
@@ -716,6 +718,23 @@ void ScFiltersTest::testTdf130725()
         0.0042, xCell->getValue()); // strict equality
 }
 
+void ScFiltersTest::testTdf104502_hiddenColsCountedInPageCount()
+{
+    ScDocShellRef xShell = loadDoc(u"tdf104502_hiddenColsCountedInPageCount.", FORMAT_ODS);
+    CPPUNIT_ASSERT(xShell.is());
+
+    ScDocument& rDoc = xShell->GetDocument();
+
+    //Check that hidden columns are not calculated into Print Area
+    SCCOL nEndCol = 0;
+    SCROW nEndRow = 0;
+    CPPUNIT_ASSERT(rDoc.GetPrintArea(0, nEndCol, nEndRow, false));
+    CPPUNIT_ASSERT_EQUAL(SCCOL(0), nEndCol);
+    CPPUNIT_ASSERT_EQUAL(SCROW(55), nEndRow);
+
+    xShell->DoClose();
+}
+
 ScFiltersTest::ScFiltersTest()
       : ScBootstrapFixture( "sc/qa/unit/data" )
 {
diff --git a/sc/qa/unit/data/ods/tdf104502_hiddenColsCountedInPageCount.ods b/sc/qa/unit/data/ods/tdf104502_hiddenColsCountedInPageCount.ods
new file mode 100644
index 000000000000..166b86b2e8c1
Binary files /dev/null and b/sc/qa/unit/data/ods/tdf104502_hiddenColsCountedInPageCount.ods differ
diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx
index be95822d89ba..5a624e8fe24a 100644
--- a/sc/source/core/data/documen2.cxx
+++ b/sc/source/core/data/documen2.cxx
@@ -571,11 +571,11 @@ const svl::SharedStringPool& ScDocument::GetSharedStringPool() const
 }
 
 bool ScDocument::GetPrintArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow,
-                                bool bNotes ) const
+                                bool bNotes, bool bCalcHiddens) const
 {
     if (ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
     {
-        bool bAny = maTabs[nTab]->GetPrintArea( rEndCol, rEndRow, bNotes );
+        bool bAny = maTabs[nTab]->GetPrintArea( rEndCol, rEndRow, bNotes, bCalcHiddens);
         if (mpDrawLayer)
         {
             ScRange aDrawRange(0,0,nTab, MaxCol(),MaxRow(),nTab);
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index b3cac25303af..a2eead753ae3 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -1018,11 +1018,11 @@ bool ScDocument::GetCellArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow ) const
     return false;
 }
 
-bool ScDocument::GetTableArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow ) const
+bool ScDocument::GetTableArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow, bool bCalcHiddens) const
 {
     if (ValidTab(nTab) && nTab < static_cast<SCTAB> (maTabs.size()))
         if (maTabs[nTab])
-            return maTabs[nTab]->GetTableArea( rEndCol, rEndRow );
+            return maTabs[nTab]->GetTableArea( rEndCol, rEndRow, bCalcHiddens);
 
     rEndCol = 0;
     rEndRow = 0;
diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx
index 11ac1f1d3e83..8b4a6e1344da 100644
--- a/sc/source/core/data/table1.cxx
+++ b/sc/source/core/data/table1.cxx
@@ -248,6 +248,8 @@ ScTable::ScTable( ScDocument& rDoc, SCTAB nNewTab, const OUString& rNewName,
     mpFilteredRows(new ScFlatBoolRowSegments(rDoc.MaxRow())),
     nTableAreaX( 0 ),
     nTableAreaY( 0 ),
+    nTableAreaVisibleX( 0 ),
+    nTableAreaVisibleY( 0 ),
     nTab( nNewTab ),
     rDocument( rDoc ),
     pSortCollator( nullptr ),
@@ -540,22 +542,35 @@ bool ScTable::GetCellArea( SCCOL& rEndCol, SCROW& rEndRow ) const
     return bFound;
 }
 
-bool ScTable::GetTableArea( SCCOL& rEndCol, SCROW& rEndRow ) const
+bool ScTable::GetTableArea( SCCOL& rEndCol, SCROW& rEndRow, bool bCalcHiddens) const
 {
     bool bRet = true;               //TODO: remember?
-    if (!bTableAreaValid)
+    if (bCalcHiddens)
     {
-        bRet = GetPrintArea(nTableAreaX, nTableAreaY, true);
-        bTableAreaValid = true;
+        if (!bTableAreaValid)
+        {
+            bRet = GetPrintArea(nTableAreaX, nTableAreaY, true, bCalcHiddens);
+            bTableAreaValid = true;
+        }
+        rEndCol = nTableAreaX;
+        rEndRow = nTableAreaY;
+    }
+    else
+    {
+        if (!bTableAreaVisibleValid)
+        {
+            bRet = GetPrintArea(nTableAreaVisibleX, nTableAreaVisibleY, true, bCalcHiddens);
+            bTableAreaVisibleValid = true;
+        }
+        rEndCol = nTableAreaVisibleX;
+        rEndRow = nTableAreaVisibleY;
     }
-    rEndCol = nTableAreaX;
-    rEndRow = nTableAreaY;
     return bRet;
 }
 
 const SCCOL SC_COLUMNS_STOP = 30;
 
-bool ScTable::GetPrintArea( SCCOL& rEndCol, SCROW& rEndRow, bool bNotes ) const
+bool ScTable::GetPrintArea( SCCOL& rEndCol, SCROW& rEndRow, bool bNotes, bool bCalcHiddens ) const
 {
     bool bFound = false;
     SCCOL nMaxX = 0;
@@ -563,6 +578,8 @@ bool ScTable::GetPrintArea( SCCOL& rEndCol, SCROW& rEndRow, bool bNotes ) const
     SCCOL i;
 
     for (i=0; i<aCol.size(); i++)               // Test data
+    {
+        if (bCalcHiddens || !rDocument.ColHidden(i, nTab))
         {
             if (!aCol[i].IsEmptyData())
             {
@@ -588,18 +605,22 @@ bool ScTable::GetPrintArea( SCCOL& rEndCol, SCROW& rEndRow, bool bNotes ) const
                 }
             }
         }
+    }
 
     SCCOL nMaxDataX = nMaxX;
 
     for (i=0; i<aCol.size(); i++)               // Test attribute
     {
-        SCROW nLastRow;
-        if (aCol[i].GetLastVisibleAttr( nLastRow ))
+        if (bCalcHiddens || !rDocument.ColHidden(i, nTab))
         {
-            bFound = true;
-            nMaxX = i;
-            if (nLastRow > nMaxY)
-                nMaxY = nLastRow;
+            SCROW nLastRow;
+            if (aCol[i].GetLastVisibleAttr( nLastRow ))
+            {
+                bFound = true;
+                nMaxX = i;
+                if (nLastRow > nMaxY)
+                    nMaxY = nLastRow;
+            }
         }
     }
 
diff --git a/sc/source/ui/unoobj/cursuno.cxx b/sc/source/ui/unoobj/cursuno.cxx
index a301be0ae24f..7928fceb0dbb 100644
--- a/sc/source/ui/unoobj/cursuno.cxx
+++ b/sc/source/ui/unoobj/cursuno.cxx
@@ -257,7 +257,7 @@ void SAL_CALL ScCellCursorObj::gotoEndOfUsedArea( sal_Bool bExpand )
 
     SCCOL nUsedX = 0;       // fetch the end
     SCROW nUsedY = 0;
-    if (!pDocSh->GetDocument().GetTableArea( nTab, nUsedX, nUsedY ))
+    if (!pDocSh->GetDocument().GetTableArea( nTab, nUsedX, nUsedY, true ))
     {
         nUsedX = 0;
         nUsedY = 0;


More information about the Libreoffice-commits mailing list