pass ScRange around by value

it's a very small object, and trivially movable. No need to allocate it
separately

Change-Id: I0adf947433e73a425f39004297c450a93ac4e5f7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135216
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
Noel Grandin
2022-06-01 18:12:09 +02:00
parent 49b9401465
commit dabd26614d
15 changed files with 129 additions and 138 deletions
+4 -4
View File
@@ -2102,8 +2102,8 @@ public:
SC_DLLPUBLIC bool HasPrintRange();
SC_DLLPUBLIC sal_uInt16 GetPrintRangeCount( SCTAB nTab );
SC_DLLPUBLIC const ScRange* GetPrintRange( SCTAB nTab, sal_uInt16 nPos );
SC_DLLPUBLIC const ScRange* GetRepeatColRange( SCTAB nTab );
SC_DLLPUBLIC const ScRange* GetRepeatRowRange( SCTAB nTab );
SC_DLLPUBLIC std::optional<ScRange> GetRepeatColRange( SCTAB nTab );
SC_DLLPUBLIC std::optional<ScRange> GetRepeatRowRange( SCTAB nTab );
/** Returns true, if the specified sheet is always printed. */
bool IsPrintEntireSheet( SCTAB nTab ) const;
@@ -2113,8 +2113,8 @@ public:
SC_DLLPUBLIC void AddPrintRange( SCTAB nTab, const ScRange& rNew );
/** Marks the specified sheet to be printed completely. Deletes old print ranges on the sheet! */
SC_DLLPUBLIC void SetPrintEntireSheet( SCTAB nTab );
SC_DLLPUBLIC void SetRepeatColRange( SCTAB nTab, std::unique_ptr<ScRange> pNew );
SC_DLLPUBLIC void SetRepeatRowRange( SCTAB nTab, std::unique_ptr<ScRange> pNew );
SC_DLLPUBLIC void SetRepeatColRange( SCTAB nTab, std::optional<ScRange> oNew );
SC_DLLPUBLIC void SetRepeatRowRange( SCTAB nTab, std::optional<ScRange> oNew );
std::unique_ptr<ScPrintRangeSaver> CreatePrintRangeSaver() const;
void RestorePrintRanges( const ScPrintRangeSaver& rSaver );
+7 -6
View File
@@ -20,8 +20,9 @@
#pragma once
#include "address.hxx"
#include <vector>
#include <optional>
#include <memory>
#include <vector>
namespace tools { class JsonWriter; }
@@ -30,8 +31,8 @@ class ScPrintSaverTab
typedef ::std::vector< ScRange > ScRangeVec;
ScRangeVec maPrintRanges; ///< Array
std::unique_ptr<ScRange> mpRepeatCol; ///< single
std::unique_ptr<ScRange> mpRepeatRow; ///< single
std::optional<ScRange> moRepeatCol; ///< single
std::optional<ScRange> moRepeatRow; ///< single
bool mbEntireSheet;
public:
@@ -39,12 +40,12 @@ public:
~ScPrintSaverTab();
void SetAreas( ScRangeVec&& rRanges, bool bEntireSheet );
void SetRepeat( const ScRange* pCol, const ScRange* pRow );
void SetRepeat( std::optional<ScRange> oCol, std::optional<ScRange> oRow );
const ScRangeVec& GetPrintRanges() const { return maPrintRanges; }
bool IsEntireSheet() const { return mbEntireSheet; }
const ScRange* GetRepeatCol() const { return mpRepeatCol.get(); }
const ScRange* GetRepeatRow() const { return mpRepeatRow.get(); }
const std::optional<ScRange>& GetRepeatCol() const { return moRepeatCol; }
const std::optional<ScRange>& GetRepeatRow() const { return moRepeatRow; }
bool operator==( const ScPrintSaverTab& rCmp ) const;
};
+6 -6
View File
@@ -216,8 +216,8 @@ private:
ScRangeVec aPrintRanges;
std::unique_ptr<ScRange> pRepeatColRange;
std::unique_ptr<ScRange> pRepeatRowRange;
std::optional<ScRange> moRepeatColRange;
std::optional<ScRange> moRepeatRowRange;
sal_uInt16 nLockCount;
@@ -793,10 +793,10 @@ public:
void ClearSelectionItems( const sal_uInt16* pWhich, const ScMarkData& rMark );
void ChangeSelectionIndent( bool bIncrement, const ScMarkData& rMark );
const ScRange* GetRepeatColRange() const { return pRepeatColRange.get(); }
const ScRange* GetRepeatRowRange() const { return pRepeatRowRange.get(); }
void SetRepeatColRange( std::unique_ptr<ScRange> pNew );
void SetRepeatRowRange( std::unique_ptr<ScRange> pNew );
const std::optional<ScRange>& GetRepeatColRange() const { return moRepeatColRange; }
const std::optional<ScRange>& GetRepeatRowRange() const { return moRepeatRowRange; }
void SetRepeatColRange( std::optional<ScRange> oNew );
void SetRepeatRowRange( std::optional<ScRange> oNew );
sal_uInt16 GetPrintRangeCount() const { return static_cast< sal_uInt16 >( aPrintRanges.size() ); }
const ScRange* GetPrintRange(sal_uInt16 nPos) const;
+1 -1
View File
@@ -505,7 +505,7 @@ void ScFiltersTest2::testPrintRangeODS()
{
ScDocShellRef xDocSh = loadDoc(u"print-range.", FORMAT_ODS);
ScDocument& rDoc = xDocSh->GetDocument();
const ScRange* pRange = rDoc.GetRepeatRowRange(0);
std::optional<ScRange> pRange = rDoc.GetRepeatRowRange(0);
CPPUNIT_ASSERT(pRange);
CPPUNIT_ASSERT_EQUAL(ScRange(0, 0, 0, 0, 1, 0), *pRange);
+8 -8
View File
@@ -6386,20 +6386,20 @@ const ScRange* ScDocument::GetPrintRange( SCTAB nTab, sal_uInt16 nPos )
return nullptr;
}
const ScRange* ScDocument::GetRepeatColRange( SCTAB nTab )
std::optional<ScRange> ScDocument::GetRepeatColRange( SCTAB nTab )
{
if (ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
return maTabs[nTab]->GetRepeatColRange();
return nullptr;
return std::nullopt;
}
const ScRange* ScDocument::GetRepeatRowRange( SCTAB nTab )
std::optional<ScRange> ScDocument::GetRepeatRowRange( SCTAB nTab )
{
if (ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
return maTabs[nTab]->GetRepeatRowRange();
return nullptr;
return std::nullopt;
}
void ScDocument::ClearPrintRanges( SCTAB nTab )
@@ -6420,16 +6420,16 @@ void ScDocument::SetPrintEntireSheet( SCTAB nTab )
maTabs[nTab]->SetPrintEntireSheet();
}
void ScDocument::SetRepeatColRange( SCTAB nTab, std::unique_ptr<ScRange> pNew )
void ScDocument::SetRepeatColRange( SCTAB nTab, std::optional<ScRange> oNew )
{
if (ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
maTabs[nTab]->SetRepeatColRange( std::move(pNew) );
maTabs[nTab]->SetRepeatColRange( std::move(oNew) );
}
void ScDocument::SetRepeatRowRange( SCTAB nTab, std::unique_ptr<ScRange> pNew )
void ScDocument::SetRepeatRowRange( SCTAB nTab, std::optional<ScRange> oNew )
{
if (ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
maTabs[nTab]->SetRepeatRowRange( std::move(pNew) );
maTabs[nTab]->SetRepeatRowRange( std::move(oNew) );
}
std::unique_ptr<ScPrintRangeSaver> ScDocument::CreatePrintRangeSaver() const
+31 -33
View File
@@ -335,8 +335,8 @@ ScTable::~ScTable() COVERITY_NOEXCEPT_FALSE
pSheetEvents.reset();
pOutlineTable.reset();
pSearchText.reset();
pRepeatColRange.reset();
pRepeatRowRange.reset();
moRepeatColRange.reset();
moRepeatRowRange.reset();
pScenarioRanges.reset();
mpRangeName.reset();
pDBDataNoName.reset();
@@ -1873,12 +1873,12 @@ void ScTable::UpdateReference(
}
}
if ( pRepeatColRange )
if ( moRepeatColRange )
{
nSCol = pRepeatColRange->aStart.Col();
nSRow = pRepeatColRange->aStart.Row();
nECol = pRepeatColRange->aEnd.Col();
nERow = pRepeatColRange->aEnd.Row();
nSCol = moRepeatColRange->aStart.Col();
nSRow = moRepeatColRange->aStart.Row();
nECol = moRepeatColRange->aEnd.Col();
nERow = moRepeatColRange->aEnd.Row();
// do not try to modify sheet index of repeat range
if ( ScRefUpdate::Update( &rDocument, eUpdateRefMode,
@@ -1886,19 +1886,19 @@ void ScTable::UpdateReference(
nDx,nDy,0,
nSCol,nSRow,nSTab, nECol,nERow,nETab ) )
{
*pRepeatColRange = ScRange( nSCol, nSRow, 0, nECol, nERow, 0 );
*moRepeatColRange = ScRange( nSCol, nSRow, 0, nECol, nERow, 0 );
bRecalcPages = true;
nRepeatStartX = nSCol; // for UpdatePageBreaks
nRepeatEndX = nECol;
}
}
if ( pRepeatRowRange )
if ( moRepeatRowRange )
{
nSCol = pRepeatRowRange->aStart.Col();
nSRow = pRepeatRowRange->aStart.Row();
nECol = pRepeatRowRange->aEnd.Col();
nERow = pRepeatRowRange->aEnd.Row();
nSCol = moRepeatRowRange->aStart.Col();
nSRow = moRepeatRowRange->aStart.Row();
nECol = moRepeatRowRange->aEnd.Col();
nERow = moRepeatRowRange->aEnd.Row();
// do not try to modify sheet index of repeat range
if ( ScRefUpdate::Update( &rDocument, eUpdateRefMode,
@@ -1906,7 +1906,7 @@ void ScTable::UpdateReference(
nDx,nDy,0,
nSCol,nSRow,nSTab, nECol,nERow,nETab ) )
{
*pRepeatRowRange = ScRange( nSCol, nSRow, 0, nECol, nERow, 0 );
*moRepeatRowRange = ScRange( nSCol, nSRow, 0, nECol, nERow, 0 );
bRecalcPages = true;
nRepeatStartY = nSRow; // for UpdatePageBreaks
nRepeatEndY = nERow;
@@ -2252,35 +2252,35 @@ void ScTable::CopyPrintRange(const ScTable& rTable)
bPrintEntireSheet = rTable.bPrintEntireSheet;
pRepeatColRange.reset();
if (rTable.pRepeatColRange)
moRepeatColRange.reset();
if (rTable.moRepeatColRange)
{
pRepeatColRange.reset(new ScRange(*rTable.pRepeatColRange));
pRepeatColRange->aStart.SetTab(nTab);
pRepeatColRange->aEnd.SetTab(nTab);
moRepeatColRange.emplace(*rTable.moRepeatColRange);
moRepeatColRange->aStart.SetTab(nTab);
moRepeatColRange->aEnd.SetTab(nTab);
}
pRepeatRowRange.reset();
if (rTable.pRepeatRowRange)
moRepeatRowRange.reset();
if (rTable.moRepeatRowRange)
{
pRepeatRowRange.reset(new ScRange(*rTable.pRepeatRowRange));
pRepeatRowRange->aStart.SetTab(nTab);
pRepeatRowRange->aEnd.SetTab(nTab);
moRepeatRowRange.emplace(*rTable.moRepeatRowRange);
moRepeatRowRange->aStart.SetTab(nTab);
moRepeatRowRange->aEnd.SetTab(nTab);
}
}
void ScTable::SetRepeatColRange( std::unique_ptr<ScRange> pNew )
void ScTable::SetRepeatColRange( std::optional<ScRange> oNew )
{
pRepeatColRange = std::move(pNew);
moRepeatColRange = std::move(oNew);
SetStreamValid(false);
InvalidatePageBreaks();
}
void ScTable::SetRepeatRowRange( std::unique_ptr<ScRange> pNew )
void ScTable::SetRepeatRowRange( std::optional<ScRange> oNew )
{
pRepeatRowRange = std::move(pNew);
moRepeatRowRange = std::move(oNew);
SetStreamValid(false);
@@ -2325,17 +2325,15 @@ const ScRange* ScTable::GetPrintRange(sal_uInt16 nPos) const
void ScTable::FillPrintSaver( ScPrintSaverTab& rSaveTab ) const
{
rSaveTab.SetAreas( std::vector(aPrintRanges), bPrintEntireSheet );
rSaveTab.SetRepeat( pRepeatColRange.get(), pRepeatRowRange.get() );
rSaveTab.SetRepeat( moRepeatColRange, moRepeatRowRange );
}
void ScTable::RestorePrintRanges( const ScPrintSaverTab& rSaveTab )
{
aPrintRanges = rSaveTab.GetPrintRanges();
bPrintEntireSheet = rSaveTab.IsEntireSheet();
auto p = rSaveTab.GetRepeatCol();
SetRepeatColRange( std::unique_ptr<ScRange>(p ? new ScRange(*p) : nullptr) );
p = rSaveTab.GetRepeatRow();
SetRepeatRowRange( std::unique_ptr<ScRange>(p ? new ScRange(*p) : nullptr) );
SetRepeatColRange( rSaveTab.GetRepeatCol() );
SetRepeatRowRange( rSaveTab.GetRepeatRow() );
InvalidatePageBreaks(); // #i117952# forget page breaks for an old print range
UpdatePageBreaks(nullptr);
+5 -12
View File
@@ -32,8 +32,6 @@ ScPrintSaverTab::ScPrintSaverTab() :
ScPrintSaverTab::~ScPrintSaverTab()
{
mpRepeatCol.reset();
mpRepeatRow.reset();
}
void ScPrintSaverTab::SetAreas( ScRangeVec&& rRanges, bool bEntireSheet )
@@ -42,22 +40,17 @@ void ScPrintSaverTab::SetAreas( ScRangeVec&& rRanges, bool bEntireSheet )
mbEntireSheet = bEntireSheet;
}
void ScPrintSaverTab::SetRepeat( const ScRange* pCol, const ScRange* pRow )
void ScPrintSaverTab::SetRepeat( std::optional<ScRange> oCol, std::optional<ScRange> oRow )
{
mpRepeatCol.reset(pCol ? new ScRange(*pCol) : nullptr);
mpRepeatRow.reset(pRow ? new ScRange(*pRow) : nullptr);
}
static bool PtrEqual( const ScRange* p1, const ScRange* p2 )
{
return ( !p1 && !p2 ) || ( p1 && p2 && *p1 == *p2 );
moRepeatCol = std::move(oCol);
moRepeatRow = std::move(oRow);
}
bool ScPrintSaverTab::operator==( const ScPrintSaverTab& rCmp ) const
{
return
PtrEqual( mpRepeatCol.get(), rCmp.mpRepeatCol.get() ) &&
PtrEqual( mpRepeatRow.get(), rCmp.mpRepeatRow.get() ) &&
(moRepeatCol == rCmp.moRepeatCol) &&
(moRepeatRow == rCmp.moRepeatRow) &&
(mbEntireSheet == rCmp.mbEntireSheet) &&
(maPrintRanges == rCmp.maPrintRanges);
}
+2 -2
View File
@@ -1371,13 +1371,13 @@ void ImportExcel::PostDocLoad()
{
if( p->aStart.Col() == 0 && p->aEnd.Col() == rD.MaxCol() && bRowVirgin )
{
rD.SetRepeatRowRange( n, std::unique_ptr<ScRange>(new ScRange(*p)) );
rD.SetRepeatRowRange( n, *p );
bRowVirgin = false;
}
if( p->aStart.Row() == 0 && p->aEnd.Row() == rD.MaxRow() && bColVirgin )
{
rD.SetRepeatColRange( n, std::unique_ptr<ScRange>(new ScRange(*p)) );
rD.SetRepeatColRange( n, *p );
bColVirgin = false;
}
+6 -6
View File
@@ -719,15 +719,15 @@ void XclExpNameManagerImpl::CreateBuiltInNames()
ScRangeList aTitleList;
// repeated columns
if( const ScRange* pColRange = rDoc.GetRepeatColRange( nScTab ) )
if( std::optional<ScRange> oColRange = rDoc.GetRepeatColRange( nScTab ) )
aTitleList.push_back( ScRange(
pColRange->aStart.Col(), 0, nScTab,
pColRange->aEnd.Col(), GetXclMaxPos().Row(), nScTab ) );
oColRange->aStart.Col(), 0, nScTab,
oColRange->aEnd.Col(), GetXclMaxPos().Row(), nScTab ) );
// repeated rows
if( const ScRange* pRowRange = rDoc.GetRepeatRowRange( nScTab ) )
if( std::optional<ScRange> oRowRange = rDoc.GetRepeatRowRange( nScTab ) )
aTitleList.push_back( ScRange(
0, pRowRange->aStart.Row(), nScTab,
GetXclMaxPos().Col(), pRowRange->aEnd.Row(), nScTab ) );
0, oRowRange->aStart.Row(), nScTab,
GetXclMaxPos().Col(), oRowRange->aEnd.Row(), nScTab ) );
// create the NAME record
GetAddressConverter().ValidateRangeList( aTitleList, false );
if( !aTitleList.empty() )
@@ -777,10 +777,10 @@ uno::Reference< XAccessibleTable > SAL_CALL ScAccessibleSpreadsheet::getAccessib
uno::Reference< XAccessibleTable > xAccessibleTable;
if( mpDoc && mbIsSpreadsheet )
{
if( const ScRange* pRowRange = mpDoc->GetRepeatRowRange( mnTab ) )
if( std::optional<ScRange> oRowRange = mpDoc->GetRepeatRowRange( mnTab ) )
{
SCROW nStart = pRowRange->aStart.Row();
SCROW nEnd = pRowRange->aEnd.Row();
SCROW nStart = oRowRange->aStart.Row();
SCROW nEnd = oRowRange->aEnd.Row();
ScDocument* pDoc = GetDocument(mpViewShell);
if( (0 <= nStart) && (nStart <= nEnd) && (nEnd <= pDoc->MaxRow()) )
xAccessibleTable.set( new ScAccessibleSpreadsheet( *this, ScRange( 0, nStart, mnTab, pDoc->MaxCol(), nEnd, mnTab ) ) );
@@ -796,10 +796,10 @@ uno::Reference< XAccessibleTable > SAL_CALL ScAccessibleSpreadsheet::getAccessib
uno::Reference< XAccessibleTable > xAccessibleTable;
if( mpDoc && mbIsSpreadsheet )
{
if( const ScRange* pColRange = mpDoc->GetRepeatColRange( mnTab ) )
if( std::optional<ScRange> oColRange = mpDoc->GetRepeatColRange( mnTab ) )
{
SCCOL nStart = pColRange->aStart.Col();
SCCOL nEnd = pColRange->aEnd.Col();
SCCOL nStart = oColRange->aStart.Col();
SCCOL nEnd = oColRange->aEnd.Col();
ScDocument* pDoc = GetDocument(mpViewShell);
if( (0 <= nStart) && (nStart <= nEnd) && (nEnd <= pDoc->MaxCol()) )
xAccessibleTable.set( new ScAccessibleSpreadsheet( *this, ScRange( nStart, 0, mnTab, nEnd, pDoc->MaxRow(), mnTab ) ) );
+11 -11
View File
@@ -1696,8 +1696,8 @@ bool ScDocShell::AdjustPrintZoom( const ScRange& rRange )
bool bHeaders = rSet.Get(ATTR_PAGE_HEADERS).GetValue();
sal_uInt16 nOldScale = rSet.Get(ATTR_PAGE_SCALE).GetValue();
sal_uInt16 nOldPages = rSet.Get(ATTR_PAGE_SCALETOPAGES).GetValue();
const ScRange* pRepeatCol = m_pDocument->GetRepeatColRange( nTab );
const ScRange* pRepeatRow = m_pDocument->GetRepeatRowRange( nTab );
std::optional<ScRange> oRepeatCol = m_pDocument->GetRepeatColRange( nTab );
std::optional<ScRange> oRepeatRow = m_pDocument->GetRepeatRowRange( nTab );
// calculate needed scaling for selection
@@ -1708,12 +1708,12 @@ bool ScDocShell::AdjustPrintZoom( const ScRange& rRange )
nBlkTwipsX += PRINT_HEADER_WIDTH;
SCCOL nStartCol = rRange.aStart.Col();
SCCOL nEndCol = rRange.aEnd.Col();
if ( pRepeatCol && nStartCol >= pRepeatCol->aStart.Col() )
if ( oRepeatCol && nStartCol >= oRepeatCol->aStart.Col() )
{
for (SCCOL i=pRepeatCol->aStart.Col(); i<=pRepeatCol->aEnd.Col(); i++ )
for (SCCOL i=oRepeatCol->aStart.Col(); i<=oRepeatCol->aEnd.Col(); i++ )
nBlkTwipsX += m_pDocument->GetColWidth( i, nTab );
if ( nStartCol <= pRepeatCol->aEnd.Col() )
nStartCol = pRepeatCol->aEnd.Col() + 1;
if ( nStartCol <= oRepeatCol->aEnd.Col() )
nStartCol = oRepeatCol->aEnd.Col() + 1;
}
// legacy compilers' own scope for i
{
@@ -1726,12 +1726,12 @@ bool ScDocShell::AdjustPrintZoom( const ScRange& rRange )
nBlkTwipsY += PRINT_HEADER_HEIGHT;
SCROW nStartRow = rRange.aStart.Row();
SCROW nEndRow = rRange.aEnd.Row();
if ( pRepeatRow && nStartRow >= pRepeatRow->aStart.Row() )
if ( oRepeatRow && nStartRow >= oRepeatRow->aStart.Row() )
{
nBlkTwipsY += m_pDocument->GetRowHeight( pRepeatRow->aStart.Row(),
pRepeatRow->aEnd.Row(), nTab );
if ( nStartRow <= pRepeatRow->aEnd.Row() )
nStartRow = pRepeatRow->aEnd.Row() + 1;
nBlkTwipsY += m_pDocument->GetRowHeight( oRepeatRow->aStart.Row(),
oRepeatRow->aEnd.Row(), nTab );
if ( nStartRow <= oRepeatRow->aEnd.Row() )
nStartRow = oRepeatRow->aEnd.Row() + 1;
}
nBlkTwipsY += m_pDocument->GetRowHeight( nStartRow, nEndRow, nTab );
+12 -12
View File
@@ -63,7 +63,7 @@ namespace
// global functions (->at the end of the file):
static bool lcl_CheckRepeatString( const OUString& rStr, const ScDocument& rDoc, bool bIsRow, ScRange* pRange );
static void lcl_GetRepeatRangeString( const ScRange* pRange, const ScDocument& rDoc, bool bIsRow, OUString& rStr );
static void lcl_GetRepeatRangeString( std::optional<ScRange> oRange, const ScDocument& rDoc, bool bIsRow, OUString& rStr );
#if 0
// this method is useful when debugging address flags.
@@ -187,7 +187,7 @@ void ScPrintAreasDlg::SetReference( const ScRange& rRef, ScDocument& /* rDoc */
else
{
bool bRow = ( m_xEdRepeatRow.get() == m_pRefInputEdit );
lcl_GetRepeatRangeString(&rRef, *pDoc, bRow, aStr);
lcl_GetRepeatRangeString(rRef, *pDoc, bRow, aStr);
m_pRefInputEdit->SetRefString( aStr );
}
Impl_ModifyHdl( *m_pRefInputEdit );
@@ -234,8 +234,8 @@ void ScPrintAreasDlg::SetActive()
void ScPrintAreasDlg::Impl_Reset()
{
OUString aStrRange;
const ScRange* pRepeatColRange = pDoc->GetRepeatColRange( nCurTab );
const ScRange* pRepeatRowRange = pDoc->GetRepeatRowRange( nCurTab );
std::optional<ScRange> oRepeatColRange = pDoc->GetRepeatColRange( nCurTab );
std::optional<ScRange> oRepeatRowRange = pDoc->GetRepeatRowRange( nCurTab );
m_xEdPrintArea->SetModifyHdl (LINK( this, ScPrintAreasDlg, Impl_ModifyHdl));
m_xEdRepeatRow->SetModifyHdl (LINK( this, ScPrintAreasDlg, Impl_ModifyHdl));
@@ -274,12 +274,12 @@ void ScPrintAreasDlg::Impl_Reset()
// repeat row
lcl_GetRepeatRangeString(pRepeatRowRange, *pDoc, true, aStrRange);
lcl_GetRepeatRangeString(oRepeatRowRange, *pDoc, true, aStrRange);
m_xEdRepeatRow->SetText( aStrRange );
// repeat column
lcl_GetRepeatRangeString(pRepeatColRange, *pDoc, false, aStrRange);
lcl_GetRepeatRangeString(oRepeatColRange, *pDoc, false, aStrRange);
m_xEdRepeatCol->SetText( aStrRange );
Impl_ModifyHdl( *m_xEdPrintArea );
@@ -427,13 +427,13 @@ void ScPrintAreasDlg::Impl_FillLists()
if (rEntry.second->HasType(ScRangeData::Type::RowHeader))
{
lcl_GetRepeatRangeString(&aRange, *pDoc, true, aSymbol);
lcl_GetRepeatRangeString(aRange, *pDoc, true, aSymbol);
m_xLbRepeatRow->append(aSymbol, aName);
}
if (rEntry.second->HasType(ScRangeData::Type::ColHeader))
{
lcl_GetRepeatRangeString(&aRange, *pDoc, false, aSymbol);
lcl_GetRepeatRangeString(aRange, *pDoc, false, aSymbol);
m_xLbRepeatCol->append(aSymbol, aName);
}
}
@@ -762,15 +762,15 @@ static bool lcl_CheckRepeatString( const OUString& rStr, const ScDocument& rDoc,
return true;
}
static void lcl_GetRepeatRangeString( const ScRange* pRange, const ScDocument& rDoc, bool bIsRow, OUString& rStr )
static void lcl_GetRepeatRangeString( std::optional<ScRange> oRange, const ScDocument& rDoc, bool bIsRow, OUString& rStr )
{
rStr.clear();
if (!pRange)
if (!oRange)
return;
const formula::FormulaGrammar::AddressConvention eConv = rDoc.GetAddressConvention();
const ScAddress& rStart = pRange->aStart;
const ScAddress& rEnd = pRange->aEnd;
const ScAddress& rStart = oRange->aStart;
const ScAddress& rEnd = oRange->aEnd;
const ScRefFlags nFmt = bIsRow
? (ScRefFlags::ROW_VALID | ScRefFlags::ROW_ABS)
+18 -19
View File
@@ -7083,7 +7083,7 @@ sal_Bool SAL_CALL ScTableSheetObj::getPrintTitleColumns()
{
ScDocument& rDoc = pDocSh->GetDocument();
SCTAB nTab = GetTab_Impl();
return ( rDoc.GetRepeatColRange(nTab) != nullptr );
return rDoc.GetRepeatColRange(nTab).has_value();
}
return false;
}
@@ -7104,11 +7104,11 @@ void SAL_CALL ScTableSheetObj::setPrintTitleColumns( sal_Bool bPrintTitleColumns
{
if ( !rDoc.GetRepeatColRange( nTab ) ) // do not change existing area
{
rDoc.SetRepeatColRange( nTab, std::unique_ptr<ScRange>(new ScRange( 0, 0, nTab, 0, 0, nTab )) ); // enable
rDoc.SetRepeatColRange( nTab, ScRange( 0, 0, nTab, 0, 0, nTab ) ); // enable
}
}
else
rDoc.SetRepeatColRange( nTab, nullptr ); // disable
rDoc.SetRepeatColRange( nTab, std::nullopt ); // disable
PrintAreaUndo_Impl( std::move(pOldRanges) ); // undo, page break, modified etc.
@@ -7124,10 +7124,10 @@ table::CellRangeAddress SAL_CALL ScTableSheetObj::getTitleColumns()
{
ScDocument& rDoc = pDocSh->GetDocument();
SCTAB nTab = GetTab_Impl();
const ScRange* pRange = rDoc.GetRepeatColRange(nTab);
if (pRange)
std::optional<ScRange> oRange = rDoc.GetRepeatColRange(nTab);
if (oRange)
{
ScUnoConversion::FillApiRange( aRet, *pRange );
ScUnoConversion::FillApiRange( aRet, *oRange );
aRet.Sheet = nTab; // core does not care about sheet index
}
}
@@ -7146,9 +7146,9 @@ void SAL_CALL ScTableSheetObj::setTitleColumns( const table::CellRangeAddress& a
std::unique_ptr<ScPrintRangeSaver> pOldRanges = rDoc.CreatePrintRangeSaver();
std::unique_ptr<ScRange> pNew(new ScRange);
ScUnoConversion::FillScRange( *pNew, aTitleColumns );
rDoc.SetRepeatColRange( nTab, std::move(pNew) ); // also always enable
ScRange aNew;
ScUnoConversion::FillScRange( aNew, aTitleColumns );
rDoc.SetRepeatColRange( nTab, std::move(aNew) ); // also always enable
PrintAreaUndo_Impl( std::move(pOldRanges) ); // undo, page breaks, modified etc.
}
@@ -7161,7 +7161,7 @@ sal_Bool SAL_CALL ScTableSheetObj::getPrintTitleRows()
{
ScDocument& rDoc = pDocSh->GetDocument();
SCTAB nTab = GetTab_Impl();
return ( rDoc.GetRepeatRowRange(nTab) != nullptr );
return rDoc.GetRepeatRowRange(nTab).has_value();
}
return false;
}
@@ -7182,12 +7182,11 @@ void SAL_CALL ScTableSheetObj::setPrintTitleRows( sal_Bool bPrintTitleRows )
{
if ( !rDoc.GetRepeatRowRange( nTab ) ) // do not change existing area
{
std::unique_ptr<ScRange> pNew( new ScRange(0, 0, nTab, 0, 0, nTab) );
rDoc.SetRepeatRowRange( nTab, std::move(pNew) ); // enable
rDoc.SetRepeatRowRange( nTab, ScRange(0, 0, nTab, 0, 0, nTab) ); // enable
}
}
else
rDoc.SetRepeatRowRange( nTab, nullptr ); // disable
rDoc.SetRepeatRowRange( nTab, std::nullopt ); // disable
PrintAreaUndo_Impl( std::move(pOldRanges) ); // undo, page breaks, modified etc.
@@ -7203,10 +7202,10 @@ table::CellRangeAddress SAL_CALL ScTableSheetObj::getTitleRows()
{
ScDocument& rDoc = pDocSh->GetDocument();
SCTAB nTab = GetTab_Impl();
const ScRange* pRange = rDoc.GetRepeatRowRange(nTab);
if (pRange)
std::optional<ScRange> oRange = rDoc.GetRepeatRowRange(nTab);
if (oRange)
{
ScUnoConversion::FillApiRange( aRet, *pRange );
ScUnoConversion::FillApiRange( aRet, *oRange );
aRet.Sheet = nTab; // core does not care about sheet index
}
}
@@ -7225,9 +7224,9 @@ void SAL_CALL ScTableSheetObj::setTitleRows( const table::CellRangeAddress& aTit
std::unique_ptr<ScPrintRangeSaver> pOldRanges = rDoc.CreatePrintRangeSaver();
std::unique_ptr<ScRange> pNew(new ScRange);
ScUnoConversion::FillScRange( *pNew, aTitleRows );
rDoc.SetRepeatRowRange( nTab, std::move(pNew) ); // also always enable
ScRange aNew;
ScUnoConversion::FillScRange( aNew, aTitleRows );
rDoc.SetRepeatRowRange( nTab, std::move(aNew) ); // also always enable
PrintAreaUndo_Impl( std::move(pOldRanges) ); // Undo, page breaks, modified etc.
}
+8 -8
View File
@@ -1001,8 +1001,8 @@ void ScPrintFunc::InitParam( const ScPrintOptions* pOptions )
//! walk through all PrintAreas of the table !!!
const ScRange* pPrintArea = rDoc.GetPrintRange( nPrintTab, 0 );
const ScRange* pRepeatCol = rDoc.GetRepeatColRange( nPrintTab );
const ScRange* pRepeatRow = rDoc.GetRepeatRowRange( nPrintTab );
std::optional<ScRange> oRepeatCol = rDoc.GetRepeatColRange( nPrintTab );
std::optional<ScRange> oRepeatRow = rDoc.GetRepeatRowRange( nPrintTab );
// ignoring ATTR_PAGE_PRINTTABLES
@@ -1055,11 +1055,11 @@ void ScPrintFunc::InitParam( const ScPrintOptions* pOptions )
}
}
if ( pRepeatCol )
if ( oRepeatCol )
{
aAreaParam.bRepeatCol = true;
nRepeatStartCol = pRepeatCol->aStart.Col();
nRepeatEndCol = pRepeatCol->aEnd .Col();
nRepeatStartCol = oRepeatCol->aStart.Col();
nRepeatEndCol = oRepeatCol->aEnd .Col();
}
else
{
@@ -1067,11 +1067,11 @@ void ScPrintFunc::InitParam( const ScPrintOptions* pOptions )
nRepeatStartCol = nRepeatEndCol = SCCOL_REPEAT_NONE;
}
if ( pRepeatRow )
if ( oRepeatRow )
{
aAreaParam.bRepeatRow = true;
nRepeatStartRow = pRepeatRow->aStart.Row();
nRepeatEndRow = pRepeatRow->aEnd .Row();
nRepeatStartRow = oRepeatRow->aStart.Row();
nRepeatEndRow = oRepeatRow->aEnd .Row();
}
else
{
+4 -4
View File
@@ -1109,10 +1109,10 @@ void ScViewFunc::SetPrintRanges( bool bEntireSheet, const OUString* pPrint,
if ( pRepCol )
{
if ( pRepCol->isEmpty() )
rDoc.SetRepeatColRange( nTab, nullptr );
rDoc.SetRepeatColRange( nTab, std::nullopt );
else
if ( aRange.ParseAny( *pRepCol, rDoc, aDetails ) & ScRefFlags::VALID )
rDoc.SetRepeatColRange( nTab, std::unique_ptr<ScRange>(new ScRange(aRange)) );
rDoc.SetRepeatColRange( nTab, aRange );
}
// repeat rows
@@ -1120,10 +1120,10 @@ void ScViewFunc::SetPrintRanges( bool bEntireSheet, const OUString* pPrint,
if ( pRepRow )
{
if ( pRepRow->isEmpty() )
rDoc.SetRepeatRowRange( nTab, nullptr );
rDoc.SetRepeatRowRange( nTab, std::nullopt );
else
if ( aRange.ParseAny( *pRepRow, rDoc, aDetails ) & ScRefFlags::VALID )
rDoc.SetRepeatRowRange( nTab, std::unique_ptr<ScRange>(new ScRange(aRange)) );
rDoc.SetRepeatRowRange( nTab, aRange );
}
}