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; } }