sc/source/ui/inc/printfun.hxx  |   75 +++++++++++++++++++++++---------
 sc/source/ui/view/printfun.cxx |   96 ++++++++++++++---------------------------
 2 files changed, 89 insertions(+), 82 deletions(-)

New commits:
commit b4c79383501225f53d1ef0fa430dd84cd97f2979
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Sun Jun 12 11:31:56 2022 +0200
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Fri Jul 8 08:52:42 2022 +0200

    sc: refactor and simplify PrintPageRanges::calculate
    
    push more responisbility to PrintPageRangesInput with operator
    overloads and use ScRange instead of individual startRow, endRow,
    startCol, endCol and tab.
    
    Change-Id: Ia94c578c6dea48d65c59ceead2dc326faffc81ae
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135676
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/sc/source/ui/inc/printfun.hxx b/sc/source/ui/inc/printfun.hxx
index b58acd9f4c52..f9780bd0e53c 100644
--- a/sc/source/ui/inc/printfun.hxx
+++ b/sc/source/ui/inc/printfun.hxx
@@ -100,22 +100,64 @@ struct PrintPageRangesInput
 {
     bool m_bSkipEmpty;
     bool m_bPrintArea;
-    SCROW m_nStartRow;
-    SCROW m_nEndRow;
-    SCCOL m_nStartCol;
-    SCCOL m_nEndCol;
-    SCTAB m_nPrintTab;
+    ScRange m_aRange;
     Size  m_aDocSize;
 
     PrintPageRangesInput()
         : m_bSkipEmpty(false)
         , m_bPrintArea(false)
-        , m_nStartRow(0)
-        , m_nEndRow(0)
-        , m_nStartCol(0)
-        , m_nEndCol(0)
-        , m_nPrintTab(0)
     {}
+
+    PrintPageRangesInput(bool bSkipEmpty, bool bPrintArea, ScRange const& 
rRange, Size const& rDocSize)
+        : m_bSkipEmpty(bSkipEmpty)
+        , m_bPrintArea(bPrintArea)
+        , m_aRange(rRange)
+        , m_aDocSize(rDocSize)
+    {}
+
+    bool operator==(PrintPageRangesInput const& rInput) const
+    {
+        return
+            m_bSkipEmpty == rInput.m_bSkipEmpty &&
+            m_bPrintArea == rInput.m_bPrintArea &&
+            m_aRange == rInput.m_aRange &&
+            m_aDocSize   == rInput.m_aDocSize;
+    }
+
+    PrintPageRangesInput& operator=(PrintPageRangesInput const& rInput)
+    {
+        m_bSkipEmpty = rInput.m_bSkipEmpty;
+        m_bPrintArea = rInput.m_bPrintArea;
+        m_aRange = rInput.m_aRange;
+        m_aDocSize = rInput.m_aDocSize;
+
+        return *this;
+    }
+
+    SCROW getStartRow() const
+    {
+        return m_aRange.aStart.Row();
+    }
+
+    SCROW getEndRow() const
+    {
+        return m_aRange.aEnd.Row();
+    }
+
+    SCCOL getStartColumn() const
+    {
+        return m_aRange.aStart.Col();
+    }
+
+    SCCOL getEndColumn() const
+    {
+        return m_aRange.aEnd.Col();
+    }
+
+    SCTAB getPrintTab() const
+    {
+        return m_aRange.aStart.Tab();
+    }
 };
 
 class PrintPageRanges
@@ -134,19 +176,12 @@ public:
 
     PrintPageRangesInput m_aInput;
 
-    bool checkIfAlreadyCalculatedAndSet(bool bSkipEmpty, bool bPrintArea,
-                                        SCROW nStartRow, SCROW nEndRow,
-                                        SCCOL nStartCol, SCCOL nEndCol,
-                                        SCTAB nPrintTab, Size const & 
aDocSize);
-
-    void calculate(ScDocument& rDoc, bool bSkipEmpty, bool bPrintArea,
-                   SCROW nStartRow, SCROW nEndRow, SCCOL nStartCol, SCCOL 
nEndCol,
-                   SCTAB nPrintTab, Size const & aDocSize);
+    void calculate(ScDocument& rDoc, PrintPageRangesInput const& rInput);
 };
 
-}
+} // end sc namespace
 
-struct ScPrintState                         //  Save Variables from ScPrintFunc
+struct ScPrintState //  Save Variables from ScPrintFunc
 {
     SCTAB   nPrintTab;
     SCCOL   nStartCol;
diff --git a/sc/source/ui/view/printfun.cxx b/sc/source/ui/view/printfun.cxx
index 3cb543a8fbaf..c07abc7100ac 100644
--- a/sc/source/ui/view/printfun.cxx
+++ b/sc/source/ui/view/printfun.cxx
@@ -3036,7 +3036,11 @@ static void lcl_SetHidden( const ScDocument& rDoc, SCTAB 
nPrintTab, ScPageRowEnt
 void ScPrintFunc::CalcPages()               // calculates aPageRect and pages 
from nZoom
 {
     assert( bPrintAreaValid );
-    m_aRanges.calculate(rDoc, aTableParam.bSkipEmpty, aAreaParam.bPrintArea, 
nStartRow, nEndRow, nStartCol, nEndCol, nPrintTab, GetDocPageSize());
+
+    sc::PrintPageRangesInput aInput(aTableParam.bSkipEmpty, 
aAreaParam.bPrintArea,
+                                    ScRange(nStartCol, nStartRow, nPrintTab, 
nEndCol, nEndRow, nPrintTab),
+                                    GetDocPageSize());
+    m_aRanges.calculate(rDoc, aInput);
 }
 
 namespace sc
@@ -3048,47 +3052,15 @@ PrintPageRanges::PrintPageRanges()
     , m_nTotalY(0)
 {}
 
-bool PrintPageRanges::checkIfAlreadyCalculatedAndSet(
-                                    bool bSkipEmpty, bool bPrintArea,
-                                    SCROW nStartRow, SCROW nEndRow,
-                                    SCCOL nStartCol, SCCOL nEndCol,
-                                    SCTAB nPrintTab, Size const & rDocSize)
-{
-    if (bSkipEmpty == m_aInput.m_bSkipEmpty &&
-        bPrintArea == m_aInput.m_bPrintArea &&
-        nStartRow  == m_aInput.m_nStartRow && nEndRow == m_aInput.m_nEndRow &&
-        nStartCol  == m_aInput.m_nStartCol && nEndCol == m_aInput.m_nEndCol &&
-        nPrintTab  == m_aInput.m_nPrintTab &&
-        rDocSize   == m_aInput.m_aDocSize)
-    {
-        return true;
-    }
-
-    m_aInput.m_bSkipEmpty = bSkipEmpty;
-    m_aInput.m_bPrintArea = bPrintArea;
-    m_aInput.m_nStartRow  = nStartRow;
-    m_aInput.m_nEndRow    = nEndRow;
-    m_aInput.m_nStartCol  = nStartCol;
-    m_aInput.m_nEndCol    = nEndCol;
-    m_aInput.m_nPrintTab  = nPrintTab;
-    m_aInput.m_aDocSize   = rDocSize;
-
-    return false;
-}
-
-void PrintPageRanges::calculate(ScDocument& rDoc,
-                                bool bSkipEmpty, bool bPrintArea,
-                                SCROW nStartRow, SCROW nEndRow,
-                                SCCOL nStartCol, SCCOL nEndCol,
-                                SCTAB nPrintTab, Size const & rDocSize)
+void PrintPageRanges::calculate(ScDocument& rDoc, PrintPageRangesInput const& 
rInput)
 {
     // Already calculated?
-    if (checkIfAlreadyCalculatedAndSet(bSkipEmpty, bPrintArea,
-                                       nStartRow, nEndRow, nStartCol, nEndCol,
-                                       nPrintTab, rDocSize))
+    if (m_aInput == rInput)
         return;
 
-    rDoc.SetPageSize(nPrintTab, rDocSize);
+    m_aInput = rInput;
+
+    rDoc.SetPageSize(m_aInput.getPrintTab(), m_aInput.m_aDocSize);
 
     // Clear the map to prevent any outdated values to "survive" when
     // we have to recalculate the new values anyway
@@ -3100,17 +3072,17 @@ void PrintPageRanges::calculate(ScDocument& rDoc,
         m_xPageEndX->resize(rDoc.MaxCol()+1, SCCOL());
     }
 
-    if (bPrintArea)
+    if (m_aInput.m_bPrintArea)
     {
-        ScRange aRange(nStartCol, nStartRow, nPrintTab, nEndCol, nEndRow, 
nPrintTab);
-        rDoc.UpdatePageBreaks(nPrintTab, &aRange);
+        ScRange aRange(m_aInput.getStartColumn(), m_aInput.getStartRow(), 
m_aInput.getPrintTab(), m_aInput.getEndColumn(), m_aInput.getEndRow(), 
m_aInput.getPrintTab());
+        rDoc.UpdatePageBreaks(m_aInput.getPrintTab(), &aRange);
     }
     else
     {
-        rDoc.UpdatePageBreaks(nPrintTab); // else, end is marked
+        rDoc.UpdatePageBreaks(m_aInput.getPrintTab()); // else, end is marked
     }
 
-    const size_t nRealCnt = nEndRow - nStartRow + 1;
+    const size_t nRealCnt = m_aInput.getEndRow() - m_aInput.getStartRow() + 1;
 
     // #i123672# use dynamic mem to react on size changes
     if (m_xPageEndY->size() < nRealCnt+1)
@@ -3126,11 +3098,11 @@ void PrintPageRanges::calculate(ScDocument& rDoc,
     m_nTotalY = 0;
 
     bool bVisCol = false;
-    for (SCCOL i = nStartCol; i <= nEndCol; i++)
+    for (SCCOL i = m_aInput.getStartColumn(); i <= m_aInput.getEndColumn(); 
i++)
     {
-        bool bHidden = rDoc.ColHidden(i, nPrintTab);
-        bool bPageBreak(rDoc.HasColBreak(i, nPrintTab) & ScBreakType::Page);
-        if (i > nStartCol && bVisCol && bPageBreak)
+        bool bHidden = rDoc.ColHidden(i, m_aInput.getPrintTab());
+        bool bPageBreak(rDoc.HasColBreak(i, m_aInput.getPrintTab()) & 
ScBreakType::Page);
+        if (i > m_aInput.getStartColumn() && bVisCol && bPageBreak)
         {
             OSL_ENSURE(m_nPagesX < m_xPageEndX->size(), "vector access error 
for aPageEndX");
             (*m_xPageEndX)[m_nPagesX] = i-1;
@@ -3143,40 +3115,40 @@ void PrintPageRanges::calculate(ScDocument& rDoc,
     if (bVisCol) // also at the end, no empty pages
     {
         OSL_ENSURE(m_nPagesX < m_xPageEndX->size(), "vector access error for 
aPageEndX");
-        (*m_xPageEndX)[m_nPagesX] = nEndCol;
+        (*m_xPageEndX)[m_nPagesX] = m_aInput.getEndColumn();
         ++m_nPagesX;
     }
 
     bool bVisRow = false;
-    SCROW nPageStartRow = nStartRow;
+    SCROW nPageStartRow = m_aInput.getStartRow();
     SCROW nLastVisibleRow = -1;
 
-    std::unique_ptr<ScRowBreakIterator> 
pRowBreakIter(rDoc.GetRowBreakIterator(nPrintTab));
+    std::unique_ptr<ScRowBreakIterator> 
pRowBreakIter(rDoc.GetRowBreakIterator(m_aInput.getPrintTab()));
     SCROW nNextPageBreak = pRowBreakIter->first();
-    while (nNextPageBreak != ScRowBreakIterator::NOT_FOUND && nNextPageBreak < 
nStartRow)
+    while (nNextPageBreak != ScRowBreakIterator::NOT_FOUND && nNextPageBreak < 
m_aInput.getStartRow())
         // Skip until the page break position is at the start row or greater.
         nNextPageBreak = pRowBreakIter->next();
 
-    for (SCROW nRow = nStartRow; nRow <= nEndRow; ++nRow)
+    for (SCROW nRow = m_aInput.getStartRow(); nRow <= m_aInput.getEndRow(); 
++nRow)
     {
         bool bPageBreak = (nNextPageBreak == nRow);
         if (bPageBreak)
             nNextPageBreak = pRowBreakIter->next();
 
-        if (nRow > nStartRow && bVisRow && bPageBreak)
+        if (nRow > m_aInput.getStartRow() && bVisRow && bPageBreak)
         {
             OSL_ENSURE(m_nTotalY < m_xPageEndY->size(), "vector access error 
for rPageEndY");
             (*m_xPageEndY)[m_nTotalY] = nRow - 1;
             ++m_nTotalY;
 
-            if (!bSkipEmpty || !rDoc.IsPrintEmpty(nStartCol, nPageStartRow, 
nEndCol, nRow-1, nPrintTab))
+            if (!m_aInput.m_bSkipEmpty || 
!rDoc.IsPrintEmpty(m_aInput.getStartColumn(), nPageStartRow, 
m_aInput.getEndColumn(), nRow-1, m_aInput.getPrintTab()))
             {
                 auto& rPageRow = (*m_xPageRows)[m_nPagesY];
                 rPageRow.SetStartRow(nPageStartRow);
                 rPageRow.SetEndRow(nRow - 1);
                 rPageRow.SetPagesX(m_nPagesX);
-                if (bSkipEmpty)
-                    lcl_SetHidden(rDoc, nPrintTab, rPageRow, nStartCol, 
*m_xPageEndX);
+                if (m_aInput.m_bSkipEmpty)
+                    lcl_SetHidden(rDoc, m_aInput.getPrintTab(), rPageRow, 
m_aInput.getStartColumn(), *m_xPageEndX);
                 ++m_nPagesY;
             }
 
@@ -3193,7 +3165,7 @@ void PrintPageRanges::calculate(ScDocument& rDoc,
         }
 
         SCROW nLastRow = -1;
-        if (!rDoc.RowHidden(nRow, nPrintTab, nullptr, &nLastRow))
+        if (!rDoc.RowHidden(nRow, m_aInput.getPrintTab(), nullptr, &nLastRow))
         {
             bVisRow = true;
             nLastVisibleRow = nLastRow;
@@ -3210,17 +3182,17 @@ void PrintPageRanges::calculate(ScDocument& rDoc,
         return;
 
     OSL_ENSURE(m_nTotalY < m_xPageEndY->size(), "vector access error for 
maPageEndY");
-    (*m_xPageEndY)[m_nTotalY] = nEndRow;
+    (*m_xPageEndY)[m_nTotalY] = m_aInput.getEndRow();
     ++m_nTotalY;
 
-    if (!bSkipEmpty || !rDoc.IsPrintEmpty(nStartCol, nPageStartRow, nEndCol, 
nEndRow, nPrintTab))
+    if (!m_aInput.m_bSkipEmpty || 
!rDoc.IsPrintEmpty(m_aInput.getStartColumn(), nPageStartRow, 
m_aInput.getEndColumn(), m_aInput.getEndRow(), m_aInput.getPrintTab()))
     {
         auto& rPageRow = (*m_xPageRows)[m_nPagesY];
         rPageRow.SetStartRow(nPageStartRow);
-        rPageRow.SetEndRow(nEndRow);
+        rPageRow.SetEndRow(m_aInput.getEndRow());
         rPageRow.SetPagesX(m_nPagesX);
-        if (bSkipEmpty)
-            lcl_SetHidden(rDoc, nPrintTab, rPageRow, nStartCol, *m_xPageEndX);
+        if (m_aInput.m_bSkipEmpty)
+            lcl_SetHidden(rDoc, m_aInput.getPrintTab(), rPageRow, 
m_aInput.getStartColumn(), *m_xPageEndX);
         ++m_nPagesY;
     }
 }

Reply via email to