summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2019-12-12 16:49:19 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2019-12-13 07:04:49 +0100
commitafad9ccb381a02b90654a5fa302480e46f38a1fc (patch)
tree805e39b189c25d8dbd8ab932baca0fc0d7482d06
parentd755b2d4a3340f42a90d15d4795cc947a0b18e4a (diff)
sc: rowcol: tdf#50916 pass ScDocument* around in data/
Change-Id: Ifa99d1c8d593e2a5dd81a3aaf4cd702d3ba96b89 Reviewed-on: https://gerrit.libreoffice.org/85060 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--sc/inc/columniterator.hxx6
-rw-r--r--sc/inc/formulacell.hxx4
-rw-r--r--sc/inc/formulaiter.hxx3
-rw-r--r--sc/qa/unit/subsequent_export-test.cxx2
-rw-r--r--sc/source/core/data/attarray.cxx26
-rw-r--r--sc/source/core/data/bcaslot.cxx6
-rw-r--r--sc/source/core/data/column.cxx6
-rw-r--r--sc/source/core/data/column2.cxx12
-rw-r--r--sc/source/core/data/column4.cxx30
-rw-r--r--sc/source/core/data/columniterator.cxx12
-rw-r--r--sc/source/core/data/columnspanset.cxx12
-rw-r--r--sc/source/core/data/dociter.cxx24
-rw-r--r--sc/source/core/data/documen8.cxx4
-rw-r--r--sc/source/core/data/document.cxx10
-rw-r--r--sc/source/core/data/dpcache.cxx2
-rw-r--r--sc/source/core/data/drwlayer.cxx4
-rw-r--r--sc/source/core/data/fillinfo.cxx4
-rw-r--r--sc/source/core/data/formulacell.cxx14
-rw-r--r--sc/source/core/data/formulaiter.cxx11
-rw-r--r--sc/source/core/data/markarr.cxx4
-rw-r--r--sc/source/core/data/table4.cxx2
-rw-r--r--sc/source/core/data/table5.cxx2
-rw-r--r--sc/source/core/inc/bcaslot.hxx6
-rw-r--r--sc/source/core/tool/chgtrack.cxx2
-rw-r--r--sc/source/core/tool/detfunc.cxx20
-rw-r--r--sc/source/filter/xml/xmlcelli.cxx2
-rw-r--r--sc/source/ui/Accessibility/AccessibleCell.cxx4
-rw-r--r--sc/source/ui/app/transobj.cxx2
-rw-r--r--sc/source/ui/docshell/impex.cxx2
-rw-r--r--sc/source/ui/docshell/tablink.cxx2
-rw-r--r--sc/source/ui/unoobj/cellsuno.cxx8
-rw-r--r--sc/source/ui/view/gridwin.cxx2
32 files changed, 126 insertions, 124 deletions
diff --git a/sc/inc/columniterator.hxx b/sc/inc/columniterator.hxx
index 51270f363ea7..a217b6d9dff0 100644
--- a/sc/inc/columniterator.hxx
+++ b/sc/inc/columniterator.hxx
@@ -32,7 +32,7 @@ class ScColumnTextWidthIterator
public:
ScColumnTextWidthIterator(const ScColumnTextWidthIterator&) = delete;
const ScColumnTextWidthIterator& operator=(const ScColumnTextWidthIterator&) = delete;
- ScColumnTextWidthIterator(ScColumn& rCol, SCROW nStartRow, SCROW nEndRow);
+ ScColumnTextWidthIterator(const ScDocument& rDoc, ScColumn& rCol, SCROW nStartRow, SCROW nEndRow);
/**
* @param rDoc document instance.
@@ -42,7 +42,7 @@ public:
* validity.
* @param nEndRow end row position.
*/
- ScColumnTextWidthIterator(ScDocument& rDoc, const ScAddress& rStartPos, SCROW nEndRow);
+ ScColumnTextWidthIterator(const ScDocument& rDoc, const ScAddress& rStartPos, SCROW nEndRow);
void next();
bool hasCell() const;
@@ -51,7 +51,7 @@ public:
void setValue(sal_uInt16 nVal);
private:
- void init(SCROW nStartRow, SCROW nEndRow);
+ void init(const ScDocument& rDoc, SCROW nStartRow, SCROW nEndRow);
void getDataIterators(size_t nOffsetInBlock);
void checkEndRow();
};
diff --git a/sc/inc/formulacell.hxx b/sc/inc/formulacell.hxx
index 9a5af01a3851..9f9ab5f23587 100644
--- a/sc/inc/formulacell.hxx
+++ b/sc/inc/formulacell.hxx
@@ -332,9 +332,9 @@ public:
*/
svl::SharedString GetRawString() const;
const ScMatrix* GetMatrix();
- bool GetMatrixOrigin( ScAddress& rPos ) const;
+ bool GetMatrixOrigin( const ScDocument* pDoc, ScAddress& rPos ) const;
void GetResultDimensions( SCSIZE& rCols, SCSIZE& rRows );
- sc::MatrixEdge GetMatrixEdge( ScAddress& rOrgPos ) const;
+ sc::MatrixEdge GetMatrixEdge( const ScDocument* pDoc, ScAddress& rOrgPos ) const;
FormulaError GetErrCode(); // interpret first if necessary
FormulaError GetRawError() const; // don't interpret, just return code or result error
bool GetErrorOrValue( FormulaError& rErr, double& rVal );
diff --git a/sc/inc/formulaiter.hxx b/sc/inc/formulaiter.hxx
index aa92e78c7b65..660a201836da 100644
--- a/sc/inc/formulaiter.hxx
+++ b/sc/inc/formulaiter.hxx
@@ -32,10 +32,11 @@ class ScFormulaCell;
class ScDetectiveRefIter
{
private:
+ const ScDocument* mpDoc;
formula::FormulaTokenArrayPlainIterator maIter;
ScAddress const aPos;
public:
- ScDetectiveRefIter( ScFormulaCell* pCell );
+ ScDetectiveRefIter( const ScDocument* pDoc, ScFormulaCell* pCell );
bool GetNextRef( ScRange& rRange );
formula::FormulaToken* GetNextRefToken();
};
diff --git a/sc/qa/unit/subsequent_export-test.cxx b/sc/qa/unit/subsequent_export-test.cxx
index 1b85a34ce8c0..a8a0acf765ea 100644
--- a/sc/qa/unit/subsequent_export-test.cxx
+++ b/sc/qa/unit/subsequent_export-test.cxx
@@ -2089,7 +2089,7 @@ void checkMatrixRange(ScDocument& rDoc, const ScRange& rRange)
const ScFormulaCell* pCell = rDoc.GetFormulaCell(aPos);
CPPUNIT_ASSERT_MESSAGE("This must be a formula cell.", pCell);
- bIsMatrix = pCell->GetMatrixOrigin(aMatOrigin);
+ bIsMatrix = pCell->GetMatrixOrigin(&rDoc, aMatOrigin);
CPPUNIT_ASSERT_MESSAGE("Not a part of matrix formula.", bIsMatrix);
CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong matrix origin.", aMatRange.aStart, aMatOrigin);
}
diff --git a/sc/source/core/data/attarray.cxx b/sc/source/core/data/attarray.cxx
index e7be9ee52394..1a45201521dc 100644
--- a/sc/source/core/data/attarray.cxx
+++ b/sc/source/core/data/attarray.cxx
@@ -240,7 +240,7 @@ const ScPatternAttr* ScAttrArray::GetPattern( SCROW nRow ) const
{
if ( mvData.empty() )
{
- if ( !ValidRow( nRow ) )
+ if ( !pDocument->ValidRow(nRow) )
return nullptr;
return pDocument->GetDefPattern();
}
@@ -256,7 +256,7 @@ const ScPatternAttr* ScAttrArray::GetPatternRange( SCROW& rStartRow,
{
if ( mvData.empty() )
{
- if ( !ValidRow( nRow ) )
+ if ( !pDocument->ValidRow( nRow ) )
return nullptr;
rStartRow = 0;
rEndRow = pDocument->MaxRow();
@@ -277,7 +277,7 @@ const ScPatternAttr* ScAttrArray::GetPatternRange( SCROW& rStartRow,
void ScAttrArray::AddCondFormat( SCROW nStartRow, SCROW nEndRow, sal_uInt32 nIndex )
{
- if(!ValidRow(nStartRow) || !ValidRow(nEndRow))
+ if(!pDocument->ValidRow(nStartRow) || !pDocument->ValidRow(nEndRow))
return;
if(nEndRow < nStartRow)
@@ -337,7 +337,7 @@ void ScAttrArray::AddCondFormat( SCROW nStartRow, SCROW nEndRow, sal_uInt32 nInd
void ScAttrArray::RemoveCondFormat( SCROW nStartRow, SCROW nEndRow, sal_uInt32 nIndex )
{
- if(!ValidRow(nStartRow) || !ValidRow(nEndRow))
+ if(!pDocument->ValidRow(nStartRow) || !pDocument->ValidRow(nEndRow))
return;
if(nEndRow < nStartRow)
@@ -454,7 +454,7 @@ bool ScAttrArray::Reserve( SCSIZE nReserve )
const ScPatternAttr* ScAttrArray::SetPatternAreaImpl(SCROW nStartRow, SCROW nEndRow, const ScPatternAttr* pPattern,
bool bPutToPool, ScEditDataArray* pDataArray, bool bPassingOwnership )
{
- if (ValidRow(nStartRow) && ValidRow(nEndRow))
+ if (pDocument->ValidRow(nStartRow) && pDocument->ValidRow(nEndRow))
{
if (bPutToPool)
{
@@ -632,7 +632,7 @@ const ScPatternAttr* ScAttrArray::SetPatternAreaImpl(SCROW nStartRow, SCROW nEnd
void ScAttrArray::ApplyStyleArea( SCROW nStartRow, SCROW nEndRow, const ScStyleSheet& rStyle )
{
- if (ValidRow(nStartRow) && ValidRow(nEndRow))
+ if (pDocument->ValidRow(nStartRow) && pDocument->ValidRow(nEndRow))
{
SetDefaultIfNotInit();
SCSIZE nPos;
@@ -730,7 +730,7 @@ void ScAttrArray::ApplyLineStyleArea( SCROW nStartRow, SCROW nEndRow,
if ( bColorOnly && !pLine )
return;
- if (ValidRow(nStartRow) && ValidRow(nEndRow))
+ if (pDocument->ValidRow(nStartRow) && pDocument->ValidRow(nEndRow))
{
SCSIZE nPos;
SCROW nStart=0;
@@ -853,7 +853,7 @@ void ScAttrArray::ApplyCacheArea( SCROW nStartRow, SCROW nEndRow, SfxItemPoolCac
TestData();
#endif
- if (ValidRow(nStartRow) && ValidRow(nEndRow))
+ if (pDocument->ValidRow(nStartRow) && pDocument->ValidRow(nEndRow))
{
SCSIZE nPos;
SCROW nStart=0;
@@ -978,7 +978,7 @@ static void lcl_MergeDeep( SfxItemSet& rMergeSet, const SfxItemSet& rSource )
void ScAttrArray::MergePatternArea( SCROW nStartRow, SCROW nEndRow,
ScMergePatternState& rState, bool bDeep ) const
{
- if (ValidRow(nStartRow) && ValidRow(nEndRow))
+ if (pDocument->ValidRow(nStartRow) && pDocument->ValidRow(nEndRow))
{
SCSIZE nPos = 0;
SCROW nStart=0;
@@ -1778,7 +1778,7 @@ void ScAttrArray::ChangeIndent( SCROW nStartRow, SCROW nEndRow, bool bIncrement
SCROW ScAttrArray::GetNextUnprotected( SCROW nRow, bool bUp ) const
{
long nRet = nRow;
- if (ValidRow(nRow))
+ if (pDocument->ValidRow(nRow))
{
if ( mvData.empty() )
{
@@ -2529,7 +2529,7 @@ SCROW ScAttrArray::SearchStyle(
if (pMarkArray)
{
nRow = pMarkArray->GetNextMarked( nRow, bUp );
- if (!ValidRow(nRow))
+ if (!pDocument->ValidRow(nRow))
return nRow;
}
@@ -2587,7 +2587,7 @@ SCROW ScAttrArray::SearchStyle(
}
}
- OSL_ENSURE( bFound || !ValidRow(nRow), "Internal failure in ScAttrArray::SearchStyle" );
+ OSL_ENSURE( bFound || !pDocument->ValidRow(nRow), "Internal failure in ScAttrArray::SearchStyle" );
return nRow;
}
@@ -2597,7 +2597,7 @@ bool ScAttrArray::SearchStyleRange(
const ScMarkArray* pMarkArray) const
{
SCROW nStartRow = SearchStyle( rRow, pSearchStyle, bUp, pMarkArray );
- if (ValidRow(nStartRow))
+ if (pDocument->ValidRow(nStartRow))
{
if ( mvData.empty() )
{
diff --git a/sc/source/core/data/bcaslot.cxx b/sc/source/core/data/bcaslot.cxx
index 227a6d751e63..af791ccc55ef 100644
--- a/sc/source/core/data/bcaslot.cxx
+++ b/sc/source/core/data/bcaslot.cxx
@@ -641,11 +641,11 @@ ScBroadcastAreaSlotMachine::~ScBroadcastAreaSlotMachine()
}
inline SCSIZE ScBroadcastAreaSlotMachine::ComputeSlotOffset(
- const ScAddress& rAddress )
+ const ScAddress& rAddress ) const
{
SCROW nRow = rAddress.Row();
SCCOL nCol = rAddress.Col();
- if ( !ValidRow(nRow) || !ValidCol(nCol) )
+ if ( !pDoc->ValidRow(nRow) || !pDoc->ValidCol(nCol) )
{
OSL_FAIL( "Row/Col invalid, using first slot!" );
return 0;
@@ -665,7 +665,7 @@ inline SCSIZE ScBroadcastAreaSlotMachine::ComputeSlotOffset(
}
void ScBroadcastAreaSlotMachine::ComputeAreaPoints( const ScRange& rRange,
- SCSIZE& rStart, SCSIZE& rEnd, SCSIZE& rRowBreak )
+ SCSIZE& rStart, SCSIZE& rEnd, SCSIZE& rRowBreak ) const
{
rStart = ComputeSlotOffset( rRange.aStart );
rEnd = ComputeSlotOffset( rRange.aEnd );
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index 63080b5dfb7f..fcc0e00de4bd 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -128,7 +128,7 @@ sc::MatrixEdge ScColumn::GetBlockMatrixEdges( SCROW nRow1, SCROW nRow2, sc::Matr
if (pCell->GetMatrixFlag() == ScMatrixMode::NONE)
return MatrixEdge::Nothing;
- return pCell->GetMatrixEdge(aOrigin);
+ return pCell->GetMatrixEdge(GetDoc(), aOrigin);
}
bool bOpen = false;
@@ -158,7 +158,7 @@ sc::MatrixEdge ScColumn::GetBlockMatrixEdges( SCROW nRow1, SCROW nRow2, sc::Matr
if (pCell->GetMatrixFlag() == ScMatrixMode::NONE)
continue;
- nEdges = pCell->GetMatrixEdge(aOrigin);
+ nEdges = pCell->GetMatrixEdge(GetDoc(), aOrigin);
if (nEdges == MatrixEdge::Nothing)
continue;
@@ -233,7 +233,7 @@ bool ScColumn::HasSelectionMatrixFragment(const ScMarkData& rMark) const
// cell is not a part of a matrix.
continue;
- MatrixEdge nEdges = pCell->GetMatrixEdge(aOrigin);
+ MatrixEdge nEdges = pCell->GetMatrixEdge(GetDoc(), aOrigin);
if (nEdges == MatrixEdge::Nothing)
continue;
diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx
index 545179eb2857..d3db033b63f2 100644
--- a/sc/source/core/data/column2.cxx
+++ b/sc/source/core/data/column2.cxx
@@ -988,7 +988,7 @@ bool ScColumn::GetNextSpellingCell(SCROW& nRow, bool bInSel, const ScMarkData& r
if (bInSel)
{
nRow = rData.GetNextMarked(nCol, nRow, false);
- if (!ValidRow(nRow))
+ if (!pDocument->ValidRow(nRow))
{
nRow = GetDoc()->MaxRow()+1;
bStop = true;
@@ -2010,7 +2010,7 @@ void ScColumn::SetTextWidth(SCROW nRow, sal_uInt16 nWidth)
SvtScriptType ScColumn::GetScriptType( SCROW nRow ) const
{
- if (!ValidRow(nRow) || maCellTextAttrs.is_empty(nRow))
+ if (!GetDoc()->ValidRow(nRow) || maCellTextAttrs.is_empty(nRow))
return SvtScriptType::NONE;
return maCellTextAttrs.get<sc::CellTextAttr>(nRow).mnScriptType;
@@ -2019,7 +2019,7 @@ SvtScriptType ScColumn::GetScriptType( SCROW nRow ) const
SvtScriptType ScColumn::GetRangeScriptType(
sc::CellTextAttrStoreType::iterator& itPos, SCROW nRow1, SCROW nRow2, const sc::CellStoreType::iterator& itrCells_ )
{
- if (!ValidRow(nRow1) || !ValidRow(nRow2) || nRow1 > nRow2)
+ if (!GetDoc()->ValidRow(nRow1) || !GetDoc()->ValidRow(nRow2) || nRow1 > nRow2)
return SvtScriptType::NONE;
SCROW nRow = nRow1;
@@ -2089,7 +2089,7 @@ SvtScriptType ScColumn::GetRangeScriptType(
void ScColumn::SetScriptType( SCROW nRow, SvtScriptType nType )
{
- if (!ValidRow(nRow))
+ if (!GetDoc()->ValidRow(nRow))
return;
sc::CellTextAttrStoreType::position_type aPos = maCellTextAttrs.position(nRow);
@@ -2999,7 +2999,7 @@ void ScColumn::SetNumberFormat( SCROW nRow, sal_uInt32 nNumberFormat )
ScFormulaCell * const * ScColumn::GetFormulaCellBlockAddress( SCROW nRow, size_t& rBlockSize ) const
{
- if (!ValidRow(nRow))
+ if (!GetDoc()->ValidRow(nRow))
{
rBlockSize = 0;
return nullptr;
@@ -3252,7 +3252,7 @@ void ScColumn::EndListening( SvtListener& rLst, SCROW nRow )
void ScColumn::StartListening( sc::StartListeningContext& rCxt, const ScAddress& rAddress, SvtListener& rLst )
{
- if (!ValidRow(rAddress.Row()))
+ if (!GetDoc()->ValidRow(rAddress.Row()))
return;
sc::ColumnBlockPosition* p = rCxt.getBlockPosition(rAddress.Tab(), rAddress.Col());
diff --git a/sc/source/core/data/column4.cxx b/sc/source/core/data/column4.cxx
index 8e0ae07bbef1..b684a87c84d1 100644
--- a/sc/source/core/data/column4.cxx
+++ b/sc/source/core/data/column4.cxx
@@ -94,8 +94,9 @@ sc::MultiDataCellState::StateType ScColumn::HasDataCellsInRange(
void ScColumn::DeleteBeforeCopyFromClip(
sc::CopyFromClipContext& rCxt, const ScColumn& rClipCol, sc::ColumnSpanSet& rBroadcastSpans )
{
+ ScDocument* pDocument = GetDoc();
sc::CopyFromClipContext::Range aRange = rCxt.getDestRange();
- if (!ValidRow(aRange.mnRow1) || !ValidRow(aRange.mnRow2))
+ if (!pDocument->ValidRow(aRange.mnRow1) || !pDocument->ValidRow(aRange.mnRow2))
return;
ScRange aClipRange = rCxt.getClipDoc()->GetClipParam().getWholeRange();
@@ -114,7 +115,6 @@ void ScColumn::DeleteBeforeCopyFromClip(
return;
// Translate the clip column spans into the destination column, and repeat as needed.
- ScDocument* pDocument = GetDoc();
std::vector<sc::RowSpan> aDestSpans;
SCROW nDestOffset = aRange.mnRow1 - nClipRow1;
bool bContinue = true;
@@ -309,7 +309,7 @@ void ScColumn::CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCROW nRow1,
void ScColumn::SetValues( const SCROW nRow, const std::vector<double>& rVals )
{
- if (!ValidRow(nRow))
+ if (!GetDoc()->ValidRow(nRow))
return;
SCROW nLastRow = nRow + rVals.size() - 1;
@@ -339,7 +339,7 @@ void ScColumn::SetValues( const SCROW nRow, const std::vector<double>& rVals )
void ScColumn::TransferCellValuesTo( SCROW nRow, size_t nLen, sc::CellValues& rDest )
{
- if (!ValidRow(nRow))
+ if (!GetDoc()->ValidRow(nRow))
return;
SCROW nLastRow = nRow + nLen - 1;
@@ -364,7 +364,7 @@ void ScColumn::TransferCellValuesTo( SCROW nRow, size_t nLen, sc::CellValues& rD
void ScColumn::CopyCellValuesFrom( SCROW nRow, const sc::CellValues& rSrc )
{
- if (!ValidRow(nRow))
+ if (!GetDoc()->ValidRow(nRow))
return;
SCROW nLastRow = nRow + rSrc.size() - 1;
@@ -431,7 +431,7 @@ public:
void ScColumn::ConvertFormulaToValue(
sc::EndListeningContext& rCxt, SCROW nRow1, SCROW nRow2, sc::TableValues* pUndo )
{
- if (!ValidRow(nRow1) || !ValidRow(nRow2) || nRow1 > nRow2)
+ if (!GetDoc()->ValidRow(nRow1) || !GetDoc()->ValidRow(nRow2) || nRow1 > nRow2)
return;
std::vector<SCROW> aBounds;
@@ -614,7 +614,7 @@ void ScColumn::CloneFormulaCell(
std::unique_ptr<ScPostIt> ScColumn::ReleaseNote( SCROW nRow )
{
- if (!ValidRow(nRow))
+ if (!GetDoc()->ValidRow(nRow))
return nullptr;
ScPostIt* p = nullptr;
@@ -672,7 +672,7 @@ void ScColumn::ForgetNoteCaptions( SCROW nRow1, SCROW nRow2, bool bPreserveData
if (maCellNotes.empty())
return;
- if (!ValidRow(nRow1) || !ValidRow(nRow2))
+ if (!GetDoc()->ValidRow(nRow1) || !GetDoc()->ValidRow(nRow2))
return;
NoteCaptionCleaner aFunc(bPreserveData);
@@ -1065,7 +1065,7 @@ public:
void ScColumn::UpdateScriptTypes( SCROW nRow1, SCROW nRow2 )
{
- if (!ValidRow(nRow1) || !ValidRow(nRow2) || nRow1 > nRow2)
+ if (!GetDoc()->ValidRow(nRow1) || !GetDoc()->ValidRow(nRow2) || nRow1 > nRow2)
return;
ScriptTypeUpdater aFunc(*this);
@@ -1239,7 +1239,7 @@ public:
void ScColumn::CollectListeners( std::vector<SvtListener*>& rListeners, SCROW nRow1, SCROW nRow2 )
{
- if (nRow2 < nRow1 || !ValidRow(nRow1) || !ValidRow(nRow2))
+ if (nRow2 < nRow1 || !GetDoc()->ValidRow(nRow1) || !GetDoc()->ValidRow(nRow2))
return;
ListenerCollector aFunc(rListeners);
@@ -1248,7 +1248,7 @@ void ScColumn::CollectListeners( std::vector<SvtListener*>& rListeners, SCROW nR
void ScColumn::CollectFormulaCells( std::vector<ScFormulaCell*>& rCells, SCROW nRow1, SCROW nRow2 )
{
- if (nRow2 < nRow1 || !ValidRow(nRow1) || !ValidRow(nRow2))
+ if (nRow2 < nRow1 || !GetDoc()->ValidRow(nRow1) || !GetDoc()->ValidRow(nRow2))
return;
FormulaCellCollector aFunc(rCells);
@@ -1277,7 +1277,7 @@ bool ScColumn::HasFormulaCell( SCROW nRow1, SCROW nRow2 ) const
if (!mnBlkCountFormula)
return false;
- if (nRow2 < nRow1 || !ValidRow(nRow1) || !ValidRow(nRow2))
+ if (nRow2 < nRow1 || !GetDoc()->ValidRow(nRow1) || !GetDoc()->ValidRow(nRow2))
return false;
if (nRow1 == 0 && nRow2 == GetDoc()->MaxRow())
@@ -1493,7 +1493,7 @@ void ScColumn::EndListeningFormulaCells(
void ScColumn::EndListeningIntersectedGroup(
sc::EndListeningContext& rCxt, SCROW nRow, std::vector<ScAddress>* pGroupPos )
{
- if (!ValidRow(nRow))
+ if (!GetDoc()->ValidRow(nRow))
return;
sc::CellStoreType::position_type aPos = maCells.position(nRow);
@@ -1631,7 +1631,7 @@ void ScColumn::SetNeedsListeningGroup( SCROW nRow )
std::unique_ptr<sc::ColumnIterator> ScColumn::GetColumnIterator( SCROW nRow1, SCROW nRow2 ) const
{
- if (!ValidRow(nRow1) || !ValidRow(nRow2) || nRow1 > nRow2)
+ if (!GetDoc()->ValidRow(nRow1) || !GetDoc()->ValidRow(nRow2) || nRow1 > nRow2)
return std::unique_ptr<sc::ColumnIterator>();
return std::make_unique<sc::ColumnIterator>(maCells, nRow1, nRow2);
@@ -1829,7 +1829,7 @@ static void lcl_EvalDirty(sc::CellStoreType& rCells, SCROW nRow1, SCROW nRow2, S
// Returns true if at least one FC is dirty.
bool ScColumn::EnsureFormulaCellResults( SCROW nRow1, SCROW nRow2, bool bSkipRunning )
{
- if (!ValidRow(nRow1) || !ValidRow(nRow2) || nRow1 > nRow2)
+ if (!GetDoc()->ValidRow(nRow1) || !GetDoc()->ValidRow(nRow2) || nRow1 > nRow2)
return false;
if (!HasFormulaCell(nRow1, nRow2))
diff --git a/sc/source/core/data/columniterator.cxx b/sc/source/core/data/columniterator.cxx
index 7f3048d3661b..a65541fabb53 100644
--- a/sc/source/core/data/columniterator.cxx
+++ b/sc/source/core/data/columniterator.cxx
@@ -14,23 +14,23 @@
#include <osl/diagnose.h>
-ScColumnTextWidthIterator::ScColumnTextWidthIterator(ScColumn& rCol, SCROW nStartRow, SCROW nEndRow) :
+ScColumnTextWidthIterator::ScColumnTextWidthIterator(const ScDocument& rDoc, ScColumn& rCol, SCROW nStartRow, SCROW nEndRow) :
mnEnd(static_cast<size_t>(nEndRow)),
mnCurPos(0)
{
miBlockCur = rCol.maCellTextAttrs.begin();
miBlockEnd = rCol.maCellTextAttrs.end();
- init(nStartRow, nEndRow);
+ init(rDoc, nStartRow, nEndRow);
}
-ScColumnTextWidthIterator::ScColumnTextWidthIterator(ScDocument& rDoc, const ScAddress& rStartPos, SCROW nEndRow) :
+ScColumnTextWidthIterator::ScColumnTextWidthIterator(const ScDocument& rDoc, const ScAddress& rStartPos, SCROW nEndRow) :
mnEnd(static_cast<size_t>(nEndRow)),
mnCurPos(0)
{
auto & rCellTextAttrs = rDoc.maTabs[rStartPos.Tab()]->aCol[rStartPos.Col()].maCellTextAttrs;
miBlockCur = rCellTextAttrs.begin();
miBlockEnd = rCellTextAttrs.end();
- init(rStartPos.Row(), nEndRow);
+ init(rDoc, rStartPos.Row(), nEndRow);
}
void ScColumnTextWidthIterator::next()
@@ -87,9 +87,9 @@ void ScColumnTextWidthIterator::setValue(sal_uInt16 nVal)
miDataCur->mnTextWidth = nVal;
}
-void ScColumnTextWidthIterator::init(SCROW nStartRow, SCROW nEndRow)
+void ScColumnTextWidthIterator::init(const ScDocument& rDoc, SCROW nStartRow, SCROW nEndRow)
{
- if (!ValidRow(nStartRow) || !ValidRow(nEndRow))
+ if (!rDoc.ValidRow(nStartRow) || !rDoc.ValidRow(nEndRow))
miBlockCur = miBlockEnd;
size_t nStart = static_cast<size_t>(nStartRow);
diff --git a/sc/source/core/data/columnspanset.cxx b/sc/source/core/data/columnspanset.cxx
index fe4408a58494..849783b5bce5 100644
--- a/sc/source/core/data/columnspanset.cxx
+++ b/sc/source/core/data/columnspanset.cxx
@@ -82,7 +82,7 @@ ColumnSpanSet::ColumnType& ColumnSpanSet::getColumn(const ScDocument& rDoc, SCTA
void ColumnSpanSet::set(const ScDocument& rDoc, SCTAB nTab, SCCOL nCol, SCROW nRow, bool bVal)
{
- if (!ValidTab(nTab) || !ValidCol(nCol) || !ValidRow(nRow))
+ if (!ValidTab(nTab) || !rDoc.ValidCol(nCol) || !rDoc.ValidRow(nRow))
return;
ColumnType& rCol = getColumn(rDoc, nTab, nCol);
@@ -91,7 +91,7 @@ void ColumnSpanSet::set(const ScDocument& rDoc, SCTAB nTab, SCCOL nCol, SCROW nR
void ColumnSpanSet::set(const ScDocument& rDoc, SCTAB nTab, SCCOL nCol, SCROW nRow1, SCROW nRow2, bool bVal)
{
- if (!ValidTab(nTab) || !ValidCol(nCol) || !ValidRow(nRow1) || !ValidRow(nRow2))
+ if (!ValidTab(nTab) || !rDoc.ValidCol(nCol) || !rDoc.ValidRow(nRow1) || !rDoc.ValidRow(nRow2))
return;
ColumnType& rCol = getColumn(rDoc, nTab, nCol);
@@ -121,7 +121,7 @@ void ColumnSpanSet::set( const ScDocument& rDoc, SCTAB nTab, SCCOL nCol, const S
void ColumnSpanSet::scan(
const ScDocument& rDoc, SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, bool bVal)
{
- if (!ValidColRow(nCol1, nRow1) || !ValidColRow(nCol2, nRow2))
+ if (!rDoc.ValidColRow(nCol1, nRow1) || !rDoc.ValidColRow(nCol2, nRow2))
return;
if (nCol1 > nCol2 || nRow1 > nRow2)
@@ -191,7 +191,7 @@ void ColumnSpanSet::executeColumnAction(ScDocument& rDoc, ColumnAction& ac) cons
if (!pTab)
continue;
- if (!ValidCol(nCol) || nCol >= pTab->GetAllocatedColumnsCount())
+ if (!rDoc.ValidCol(nCol) || nCol >= pTab->GetAllocatedColumnsCount())
{
// End the loop.
nCol = rTab.size();
@@ -345,7 +345,7 @@ void RangeColumnSpanSet::executeColumnAction(ScDocument& rDoc, sc::ColumnSpanSet
SCCOL nEndCol = pTab->ClampToAllocatedColumns(range.aEnd.Col());
for (SCCOL nCol = range.aStart.Col(); nCol <= nEndCol; ++nCol)
{
- if (!ValidCol(nCol))
+ if (!rDoc.ValidCol(nCol))
break;
ScColumn& rColumn = pTab->aCol[nCol];
@@ -366,7 +366,7 @@ void RangeColumnSpanSet::executeColumnAction(ScDocument& rDoc, sc::ColumnSpanSet
SCCOL nEndCol = pTab->ClampToAllocatedColumns(range.aEnd.Col());
for (SCCOL nCol = range.aStart.Col(); nCol <= nEndCol; ++nCol)
{
- if (!ValidCol(nCol))
+ if (!rDoc.ValidCol(nCol))
break;
ScColumn& rColumn = pTab->aCol[nCol];
diff --git a/sc/source/core/data/dociter.cxx b/sc/source/core/data/dociter.cxx
index 4616f5698b0f..bad6d64ff7c8 100644
--- a/sc/source/core/data/dociter.cxx
+++ b/sc/source/core/data/dociter.cxx
@@ -117,10 +117,10 @@ ScValueIterator::ScValueIterator( ScDocument* pDocument, const ScRange& rRange,
{
SCTAB nDocMaxTab = pDocument->GetTableCount() - 1;
- if (!ValidCol(maStartPos.Col())) maStartPos.SetCol(pDoc->MaxCol());
- if (!ValidCol(maEndPos.Col())) maEndPos.SetCol(pDoc->MaxCol());
- if (!ValidRow(maStartPos.Row())) maStartPos.SetRow(pDoc->MaxRow());
- if (!ValidRow(maEndPos.Row())) maEndPos.SetRow(pDoc->MaxRow());
+ if (!pDocument->ValidCol(maStartPos.Col())) maStartPos.SetCol(pDoc->MaxCol());
+ if (!pDocument->ValidCol(maEndPos.Col())) maEndPos.SetCol(pDoc->MaxCol());
+ if (!pDocument->ValidRow(maStartPos.Row())) maStartPos.SetRow(pDoc->MaxRow());
+ if (!pDocument->ValidRow(maEndPos.Row())) maEndPos.SetRow(pDoc->MaxRow());
if (!ValidTab(maStartPos.Tab()) || maStartPos.Tab() > nDocMaxTab) maStartPos.SetTab(nDocMaxTab);
if (!ValidTab(maEndPos.Tab()) || maEndPos.Tab() > nDocMaxTab) maEndPos.SetTab(nDocMaxTab);
}
@@ -876,10 +876,10 @@ void ScCellIterator::init()
PutInOrder(maStartPos, maEndPos);
- if (!ValidCol(maStartPos.Col())) maStartPos.SetCol(mpDoc->MaxCol());
- if (!ValidCol(maEndPos.Col())) maEndPos.SetCol(mpDoc->MaxCol());
- if (!ValidRow(maStartPos.Row())) maStartPos.SetRow(mpDoc->MaxRow());
- if (!ValidRow(maEndPos.Row())) maEndPos.SetRow(mpDoc->MaxRow());
+ if (!mpDoc->ValidCol(maStartPos.Col())) maStartPos.SetCol(mpDoc->MaxCol());
+ if (!mpDoc->ValidCol(maEndPos.Col())) maEndPos.SetCol(mpDoc->MaxCol());
+ if (!mpDoc->ValidRow(maStartPos.Row())) maStartPos.SetRow(mpDoc->MaxRow());
+ if (!mpDoc->ValidRow(maEndPos.Row())) maEndPos.SetRow(mpDoc->MaxRow());
if (!ValidTab(maStartPos.Tab(), nDocMaxTab)) maStartPos.SetTab(nDocMaxTab);
if (!ValidTab(maEndPos.Tab(), nDocMaxTab)) maEndPos.SetTab(nDocMaxTab);
@@ -2294,10 +2294,10 @@ ScHorizontalValueIterator::ScHorizontalValueIterator( ScDocument* pDocument,
PutInOrder( nStartRow, nEndRow);
PutInOrder( nStartTab, nEndTab );
- if (!ValidCol(nStartCol)) nStartCol = pDoc->MaxCol();
- if (!ValidCol(nEndCol)) nEndCol = pDoc->MaxCol();
- if (!ValidRow(nStartRow)) nStartRow = pDoc->MaxRow();
- if (!ValidRow(nEndRow)) nEndRow = pDoc->MaxRow();
+ if (!pDoc->ValidCol(nStartCol)) nStartCol = pDoc->MaxCol();
+ if (!pDoc->ValidCol(nEndCol)) nEndCol = pDoc->MaxCol();
+ if (!pDoc->ValidRow(nStartRow)) nStartRow = pDoc->MaxRow();
+ if (!pDoc->ValidRow(nEndRow)) nEndRow = pDoc->MaxRow();
if (!ValidTab(nStartTab)) nStartTab = MAXTAB;
if (!ValidTab(nEndTab)) nEndTab = MAXTAB;
diff --git a/sc/source/core/data/documen8.cxx b/sc/source/core/data/documen8.cxx
index 44525f009b42..2310dc82716e 100644
--- a/sc/source/core/data/documen8.cxx
+++ b/sc/source/core/data/documen8.cxx
@@ -580,7 +580,7 @@ bool ScDocument::IdleCalcTextWidth() // true = try next again
aScope.setCol(pTab->ClampToAllocatedColumns(aScope.Col()));
// Start at specified cell position (nCol, nRow, nTab).
ScColumn* pCol = &pTab->aCol[aScope.Col()];
- std::unique_ptr<ScColumnTextWidthIterator> pColIter(new ScColumnTextWidthIterator(*pCol, aScope.Row(), MaxRow()));
+ std::unique_ptr<ScColumnTextWidthIterator> pColIter(new ScColumnTextWidthIterator(*this, *pCol, aScope.Row(), MaxRow()));
OutputDevice* pDev = nullptr;
sal_uInt16 nRestart = 0;
@@ -677,7 +677,7 @@ bool ScDocument::IdleCalcTextWidth() // true = try next again
if ( nZoom > 0 )
{
pCol = &pTab->aCol[aScope.Col()];
- pColIter.reset(new ScColumnTextWidthIterator(*pCol, aScope.Row(), MaxRow()));
+ pColIter.reset(new ScColumnTextWidthIterator(*this, *pCol, aScope.Row(), MaxRow()));
}
else
{
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index fa1913a0c11c..3f87a7f24a98 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -5431,7 +5431,7 @@ bool ScDocument::GetMatrixFormulaRange( const ScAddress& rCellPos, ScRange& rMat
return false;
ScAddress aOrigin = rCellPos;
- if (!pFCell->GetMatrixOrigin(aOrigin))
+ if (!pFCell->GetMatrixOrigin(this, aOrigin))
// Failed to get the address of the matrix origin.
return false;
@@ -5453,7 +5453,7 @@ bool ScDocument::GetMatrixFormulaRange( const ScAddress& rCellPos, ScRange& rMat
// from old file format).
// Needs an "invalid" initialized address.
aOrigin.SetInvalid();
- pFCell->GetMatrixEdge(aOrigin);
+ pFCell->GetMatrixEdge(this, aOrigin);
pFCell->GetMatColsRows(nSizeX, nSizeY);
}
@@ -6403,9 +6403,9 @@ void ScDocument::RemoveSubTotalCell(ScFormulaCell* pCell)
namespace {
-bool lcl_hasDirtyRange(ScFormulaCell* pCell, const ScRange& rDirtyRange)
+bool lcl_hasDirtyRange(const ScDocument* pDoc, ScFormulaCell* pCell, const ScRange& rDirtyRange)
{
- ScDetectiveRefIter aRefIter(pCell);
+ ScDetectiveRefIter aRefIter(pDoc, pCell);
ScRange aRange;
while (aRefIter.GetNextRef(aRange))
{
@@ -6429,7 +6429,7 @@ void ScDocument::SetSubTotalCellsDirty(const ScRange& rDirtyRange)
if (pCell->IsSubTotal())
{
aNewSet.insert(pCell);
- if (lcl_hasDirtyRange(pCell, rDirtyRange))
+ if (lcl_hasDirtyRange(this, pCell, rDirtyRange))
pCell->SetDirty();
}
}
diff --git a/sc/source/core/data/dpcache.cxx b/sc/source/core/data/dpcache.cxx
index 5746e3e1a2e4..95f932339443 100644
--- a/sc/source/core/data/dpcache.cxx
+++ b/sc/source/core/data/dpcache.cxx
@@ -523,7 +523,7 @@ void ScDPCache::InitFromDoc(ScDocument* pDoc, const ScRange& rRange)
aDocData.mnEndRow = rRange.aEnd.Row();
// Sanity check
- if (!ValidRow(aDocData.mnStartRow) || !ValidRow(aDocData.mnEndRow) || aDocData.mnEndRow <= aDocData.mnStartRow)
+ if (!GetDoc()->ValidRow(aDocData.mnStartRow) || !GetDoc()->ValidRow(aDocData.mnEndRow) || aDocData.mnEndRow <= aDocData.mnStartRow)
return;
SCCOL nStartCol = rRange.aStart.Col();
diff --git a/sc/source/core/data/drwlayer.cxx b/sc/source/core/data/drwlayer.cxx
index 515118d84c23..7006bbd48e8e 100644
--- a/sc/source/core/data/drwlayer.cxx
+++ b/sc/source/core/data/drwlayer.cxx
@@ -1847,8 +1847,8 @@ void ScDrawLayer::MirrorRectRTL( tools::Rectangle& rRect )
tools::Rectangle ScDrawLayer::GetCellRect( const ScDocument& rDoc, const ScAddress& rPos, bool bMergedCell )
{
tools::Rectangle aCellRect;
- OSL_ENSURE( ValidColRowTab( rPos.Col(), rPos.Row(), rPos.Tab() ), "ScDrawLayer::GetCellRect - invalid cell address" );
- if( ValidColRowTab( rPos.Col(), rPos.Row(), rPos.Tab() ) )
+ OSL_ENSURE( rDoc.ValidColRowTab( rPos.Col(), rPos.Row(), rPos.Tab() ), "ScDrawLayer::GetCellRect - invalid cell address" );
+ if( rDoc.ValidColRowTab( rPos.Col(), rPos.Row(), rPos.Tab() ) )
{
// find top left position of passed cell address
Point aTopLeft;
diff --git a/sc/source/core/data/fillinfo.cxx b/sc/source/core/data/fillinfo.cxx
index 610c4fb6a53b..cf649db4b5eb 100644
--- a/sc/source/core/data/fillinfo.cxx
+++ b/sc/source/core/data/fillinfo.cxx
@@ -202,7 +202,7 @@ void initRowInfo(const ScDocument* pDoc, RowInfo* pRowInfo, const SCSIZE nMaxRow
if (nY > nDocHeightEndRow)
{
- if (ValidRow(nY))
+ if (pDoc->ValidRow(nY))
nDocHeight = pDoc->GetRowHeight( nY, nTab, nullptr, &nDocHeightEndRow );
else
nDocHeight = ScGlobal::nStdRowHeight;
@@ -261,7 +261,7 @@ void initColWidths(RowInfo* pRowInfo, const ScDocument* pDoc, double fColScale,
for (SCCOL nArrCol=nCol2+3; nArrCol<=nRotMax+2; nArrCol++) // Add remaining widths
{
SCCOL nX = nArrCol-1;
- if ( ValidCol(nX) )
+ if ( pDoc->ValidCol(nX) )
{
if (!pDoc->ColHidden(nX, nTab))
{
diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx
index adeb53d311ed..693eeb6c678b 100644
--- a/sc/source/core/data/formulacell.cxx
+++ b/sc/source/core/data/formulacell.cxx
@@ -2800,7 +2800,7 @@ const ScMatrix* ScFormulaCell::GetMatrix()
return aResult.GetMatrix().get();
}
-bool ScFormulaCell::GetMatrixOrigin( ScAddress& rPos ) const
+bool ScFormulaCell::GetMatrixOrigin( const ScDocument* pDoc, ScAddress& rPos ) const
{
switch ( cMatrixFlag )
{
@@ -2815,7 +2815,7 @@ bool ScFormulaCell::GetMatrixOrigin( ScAddress& rPos ) const
{
ScSingleRefData& rRef = *t->GetSingleRef();
ScAddress aAbs = rRef.toAbs(aPos);
- if (ValidAddress(aAbs))
+ if (pDoc->ValidAddress(aAbs))
{
rPos = aAbs;
return true;
@@ -2828,7 +2828,7 @@ bool ScFormulaCell::GetMatrixOrigin( ScAddress& rPos ) const
return false;
}
-sc::MatrixEdge ScFormulaCell::GetMatrixEdge( ScAddress& rOrgPos ) const
+sc::MatrixEdge ScFormulaCell::GetMatrixEdge( const ScDocument* pDoc, ScAddress& rOrgPos ) const
{
switch ( cMatrixFlag )
{
@@ -2838,7 +2838,7 @@ sc::MatrixEdge ScFormulaCell::GetMatrixEdge( ScAddress& rOrgPos ) const
static thread_local SCCOL nC;
static thread_local SCROW nR;
ScAddress aOrg;
- if ( !GetMatrixOrigin( aOrg ) )
+ if ( !GetMatrixOrigin( pDoc, aOrg ) )
return sc::MatrixEdge::Nothing;
if ( aOrg != rOrgPos )
{ // First time or a different matrix than last time.
@@ -2866,7 +2866,7 @@ sc::MatrixEdge ScFormulaCell::GetMatrixEdge( ScAddress& rOrgPos ) const
{
pCell = pDocument->GetFormulaCell(aAdr);
if (pCell && pCell->cMatrixFlag == ScMatrixMode::Reference &&
- pCell->GetMatrixOrigin(aTmpOrg) && aTmpOrg == aOrg)
+ pCell->GetMatrixOrigin(pDocument, aTmpOrg) && aTmpOrg == aOrg)
{
nC++;
aAdr.IncCol();
@@ -2881,7 +2881,7 @@ sc::MatrixEdge ScFormulaCell::GetMatrixEdge( ScAddress& rOrgPos ) const
{
pCell = pDocument->GetFormulaCell(aAdr);
if (pCell && pCell->cMatrixFlag == ScMatrixMode::Reference &&
- pCell->GetMatrixOrigin(aTmpOrg) && aTmpOrg == aOrg)
+ pCell->GetMatrixOrigin(pDocument, aTmpOrg) && aTmpOrg == aOrg)
{
nR++;
aAdr.IncRow();
@@ -3182,7 +3182,7 @@ bool checkCompileColRowName(
{
const ScSingleRefData& rRef = *t->GetSingleRef();
ScAddress aAbs = rRef.toAbs(aPos);
- if (ValidAddress(aAbs))
+ if (rDoc.ValidAddress(aAbs))
{
if (rCxt.maRange.In(aAbs))
return true;
diff --git a/sc/source/core/data/formulaiter.cxx b/sc/source/core/data/formulaiter.cxx
index bd37a4bc2163..4f71466888fa 100644
--- a/sc/source/core/data/formulaiter.cxx
+++ b/sc/source/core/data/formulaiter.cxx
@@ -26,23 +26,24 @@
using namespace formula;
-ScDetectiveRefIter::ScDetectiveRefIter( ScFormulaCell* pCell ) :
+ScDetectiveRefIter::ScDetectiveRefIter( const ScDocument* pDoc, ScFormulaCell* pCell ) :
+ mpDoc(pDoc),
maIter(*pCell->GetCode()),
aPos(pCell->aPos)
{
}
-static bool lcl_ScDetectiveRefIter_SkipRef( formula::FormulaToken* p, const ScAddress& rPos )
+static bool lcl_ScDetectiveRefIter_SkipRef( const ScDocument* pDoc, formula::FormulaToken* p, const ScAddress& rPos )
{
ScSingleRefData& rRef1 = *p->GetSingleRef();
ScAddress aAbs1 = rRef1.toAbs(rPos);
- if (!ValidAddress(aAbs1))
+ if (!pDoc->ValidAddress(aAbs1))
return true;
if ( p->GetType() == svDoubleRef || p->GetType() == svExternalDoubleRef )
{
ScSingleRefData& rRef2 = p->GetDoubleRef()->Ref2;
ScAddress aAbs2 = rRef2.toAbs(rPos);
- if (!ValidAddress(aAbs2))
+ if (!pDoc->ValidAddress(aAbs2))
return true;
}
return false;
@@ -66,7 +67,7 @@ bool ScDetectiveRefIter::GetNextRef( ScRange& rRange )
formula::FormulaToken* ScDetectiveRefIter::GetNextRefToken()
{
formula::FormulaToken* p = maIter.GetNextReferenceRPN();
- while (p && lcl_ScDetectiveRefIter_SkipRef(p, aPos))
+ while (p && lcl_ScDetectiveRefIter_SkipRef(mpDoc, p, aPos))
{
p = maIter.GetNextReferenceRPN();
}
diff --git a/sc/source/core/data/markarr.cxx b/sc/source/core/data/markarr.cxx
index 83aca1a37d2f..242eabf881db 100644
--- a/sc/source/core/data/markarr.cxx
+++ b/sc/source/core/data/markarr.cxx
@@ -110,7 +110,7 @@ bool ScMarkArray::GetMark( SCROW nRow ) const
void ScMarkArray::SetMarkArea( SCROW nStartRow, SCROW nEndRow, bool bMarked )
{
- if (ValidRow(nStartRow) && ValidRow(nEndRow))
+ if (ValidRow(nStartRow, mnMaxRow) && ValidRow(nEndRow, mnMaxRow))
{
if ((nStartRow == 0) && (nEndRow == mnMaxRow))
{
@@ -357,7 +357,7 @@ SCROW ScMarkArray::GetNextMarked( SCROW nRow, bool bUp ) const
const_cast<ScMarkArray*>(this)->Reset(); // create pData for further processing
SCROW nRet = nRow;
- if (ValidRow(nRow))
+ if (ValidRow(nRow, mnMaxRow))
{
SCSIZE nIndex;
Search(nRow, nIndex);
diff --git a/sc/source/core/data/table4.cxx b/sc/source/core/data/table4.cxx
index 28b085fff466..c79e81af397c 100644
--- a/sc/source/core/data/table4.cxx
+++ b/sc/source/core/data/table4.cxx
@@ -476,7 +476,7 @@ void ScTable::FillFormula(
if ( bLast && pDestCell->GetMatrixFlag() != ScMatrixMode::NONE )
{
ScAddress aOrg;
- if ( pDestCell->GetMatrixOrigin( aOrg ) )
+ if ( pDestCell->GetMatrixOrigin( &GetDoc(), aOrg ) )
{
if ( nDestCol >= aOrg.Col() && nDestRow >= aOrg.Row() )
{
diff --git a/sc/source/core/data/table5.cxx b/sc/source/core/data/table5.cxx
index 9975d96212c5..6c2645077d70 100644
--- a/sc/source/core/data/table5.cxx
+++ b/sc/source/core/data/table5.cxx
@@ -1204,7 +1204,7 @@ void ScTable::InvalidateTextWidth( const ScAddress* pAdrFrom, const ScAddress* p
for (SCCOL nCol = nCol1; nCol <= nCol2; ++nCol)
{
- ScColumnTextWidthIterator aIter(aCol[nCol], nRow1, nRow2);
+ ScColumnTextWidthIterator aIter(GetDoc(), aCol[nCol], nRow1, nRow2);
sc::ColumnBlockPosition blockPos; // cache mdds position
InitColumnBlockPosition( blockPos, nCol );
diff --git a/sc/source/core/inc/bcaslot.hxx b/sc/source/core/inc/bcaslot.hxx
index 11c0942df9a2..36374d9b6dba 100644
--- a/sc/source/core/inc/bcaslot.hxx
+++ b/sc/source/core/inc/bcaslot.hxx
@@ -296,10 +296,10 @@ private:
ScBroadcastArea *pEOUpdateChain;
sal_uInt32 nInBulkBroadcast;
- static inline SCSIZE ComputeSlotOffset( const ScAddress& rAddress );
- static void ComputeAreaPoints( const ScRange& rRange,
+ inline SCSIZE ComputeSlotOffset( const ScAddress& rAddress ) const;
+ void ComputeAreaPoints( const ScRange& rRange,
SCSIZE& nStart, SCSIZE& nEnd,
- SCSIZE& nRowBreak );
+ SCSIZE& nRowBreak ) const;
public:
ScBroadcastAreaSlotMachine( ScDocument* pDoc );
diff --git a/sc/source/core/tool/chgtrack.cxx b/sc/source/core/tool/chgtrack.cxx
index ba8c11ffa5ba..0b9f18ec3779 100644
--- a/sc/source/core/tool/chgtrack.cxx
+++ b/sc/source/core/tool/chgtrack.cxx
@@ -2909,7 +2909,7 @@ void ScChangeTrack::Dependencies( ScChangeAction* pAct )
if ( ScChangeActionContent::GetContentCellType(rCell) == SC_CACCT_MATREF )
{
ScAddress aOrg;
- bool bOrgFound = rCell.mpFormula->GetMatrixOrigin(aOrg);
+ bool bOrgFound = rCell.mpFormula->GetMatrixOrigin(pDoc, aOrg);
ScChangeActionContent* pContent = (bOrgFound ? SearchContentAt( aOrg, pAct ) : nullptr);
if ( pContent && pContent->IsMatrixOrigin() )
{
diff --git a/sc/source/core/tool/detfunc.cxx b/sc/source/core/tool/detfunc.cxx
index 8cf2f8a5fd33..045998d7cdf8 100644
--- a/sc/source/core/tool/detfunc.cxx
+++ b/sc/source/core/tool/detfunc.cxx
@@ -310,9 +310,9 @@ bool ScDetectiveFunc::HasError( const ScRange& rRange, ScAddress& rErrPos )
Point ScDetectiveFunc::GetDrawPos( SCCOL nCol, SCROW nRow, DrawPosMode eMode ) const
{
- OSL_ENSURE( ValidColRow( nCol, nRow ), "ScDetectiveFunc::GetDrawPos - invalid cell address" );
- nCol = SanitizeCol( nCol );
- nRow = SanitizeRow( nRow );
+ OSL_ENSURE( pDoc->ValidColRow( nCol, nRow ), "ScDetectiveFunc::GetDrawPos - invalid cell address" );
+ nCol = pDoc->SanitizeCol( nCol );
+ nRow = pDoc->SanitizeRow( nRow );
Point aPos;
@@ -831,7 +831,7 @@ sal_uInt16 ScDetectiveFunc::InsertPredLevel( SCCOL nCol, SCROW nRow, ScDetective
sal_uInt16 nResult = DET_INS_EMPTY;
- ScDetectiveRefIter aIter(pFCell);
+ ScDetectiveRefIter aIter(pDoc, pFCell);
ScRange aRef;
while ( aIter.GetNextRef( aRef ) )
{
@@ -925,7 +925,7 @@ sal_uInt16 ScDetectiveFunc::FindPredLevel( SCCOL nCol, SCROW nRow, sal_uInt16 nL
DeleteArrowsAt( nCol, nRow, true ); // arrows, that are pointing here
}
- ScDetectiveRefIter aIter(pFCell);
+ ScDetectiveRefIter aIter(pDoc, pFCell);
ScRange aRef;
while ( aIter.GetNextRef( aRef) )
{
@@ -976,7 +976,7 @@ sal_uInt16 ScDetectiveFunc::InsertErrorLevel( SCCOL nCol, SCROW nRow, ScDetectiv
sal_uInt16 nResult = DET_INS_EMPTY;
- ScDetectiveRefIter aIter(pFCell);
+ ScDetectiveRefIter aIter(pDoc, pFCell);
ScRange aRef;
ScAddress aErrorPos;
bool bHasError = false;
@@ -1026,7 +1026,7 @@ sal_uInt16 ScDetectiveFunc::InsertSuccLevel( SCCOL nCol1, SCROW nRow1, SCCOL nCo
pFCell->Interpret(); // can't be called after SetRunning
pFCell->SetRunning(true);
- ScDetectiveRefIter aIter(pFCell);
+ ScDetectiveRefIter aIter(pDoc, pFCell);
ScRange aRef;
while ( aIter.GetNextRef( aRef) )
{
@@ -1114,7 +1114,7 @@ sal_uInt16 ScDetectiveFunc::FindSuccLevel( SCCOL nCol1, SCROW nRow1, SCCOL nCol2
pFCell->Interpret(); // can't be called after SetRunning
pFCell->SetRunning(true);
- ScDetectiveRefIter aIter(pFCell);
+ ScDetectiveRefIter aIter(pDoc, pFCell);
ScRange aRef;
while ( aIter.GetNextRef( aRef) )
{
@@ -1372,7 +1372,7 @@ void ScDetectiveFunc::GetAllPreds(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW n
continue;
ScFormulaCell* pFCell = aIter.getFormulaCell();
- ScDetectiveRefIter aRefIter(pFCell);
+ ScDetectiveRefIter aRefIter(pDoc, pFCell);
for (formula::FormulaToken* p = aRefIter.GetNextRefToken(); p; p = aRefIter.GetNextRefToken())
{
ScTokenRef pRef(p->Clone());
@@ -1395,7 +1395,7 @@ void ScDetectiveFunc::GetAllSuccs(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW n
continue;
ScFormulaCell* pFCell = aIter.getFormulaCell();
- ScDetectiveRefIter aRefIter(pFCell);
+ ScDetectiveRefIter aRefIter(pDoc, pFCell);
for (formula::FormulaToken* p = aRefIter.GetNextRefToken(); p; p = aRefIter.GetNextRefToken())
{
const ScAddress& aPos = aIter.GetPos();
diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx
index 853578ea9ac5..a14c667abaa0 100644
--- a/sc/source/filter/xml/xmlcelli.cxx
+++ b/sc/source/filter/xml/xmlcelli.cxx
@@ -1070,7 +1070,7 @@ void ScXMLTableRowCellContext::PutTextCell( const ScAddress& rCurrentPos,
else
{
ScAddress aTopLeftMatrixCell;
- if (pFCell && pFCell->GetMatrixOrigin(aTopLeftMatrixCell))
+ if (pFCell && pFCell->GetMatrixOrigin(pDoc, aTopLeftMatrixCell))
{
ScFormulaCell* pMatrixCell = pDoc->GetFormulaCell(aTopLeftMatrixCell);
if (pMatrixCell)
diff --git a/sc/source/ui/Accessibility/AccessibleCell.cxx b/sc/source/ui/Accessibility/AccessibleCell.cxx
index 008a3ea6d04a..ff0b52423d79 100644
--- a/sc/source/ui/Accessibility/AccessibleCell.cxx
+++ b/sc/source/ui/Accessibility/AccessibleCell.cxx
@@ -393,7 +393,7 @@ void ScAccessibleCell::FillDependents(utl::AccessibleRelationSetHelper* pRelatio
if (aCellIter.getType() == CELLTYPE_FORMULA)
{
bool bFound = false;
- ScDetectiveRefIter aIter(aCellIter.getFormulaCell());
+ ScDetectiveRefIter aIter(mpDoc, aCellIter.getFormulaCell());
ScRange aRef;
while ( !bFound && aIter.GetNextRef( aRef ) )
{
@@ -415,7 +415,7 @@ void ScAccessibleCell::FillPrecedents(utl::AccessibleRelationSetHelper* pRelatio
if (aCell.meType == CELLTYPE_FORMULA)
{
ScFormulaCell* pCell = aCell.mpFormula;
- ScDetectiveRefIter aIter(pCell);
+ ScDetectiveRefIter aIter(mpDoc, pCell);
ScRange aRef;
while ( aIter.GetNextRef( aRef ) )
{
diff --git a/sc/source/ui/app/transobj.cxx b/sc/source/ui/app/transobj.cxx
index dd11e67c0f42..f94f66a1f53e 100644
--- a/sc/source/ui/app/transobj.cxx
+++ b/sc/source/ui/app/transobj.cxx
@@ -864,7 +864,7 @@ void ScTransferObj::StripRefs( ScDocument* pDoc,
ScFormulaCell* pFCell = aIter.getFormulaCell();
bool bOut = false;
- ScDetectiveRefIter aRefIter( pFCell );
+ ScDetectiveRefIter aRefIter( pDoc, pFCell );
while ( !bOut && aRefIter.GetNextRef( aRef ) )
{
if ( aRef.aStart.Tab() != nSrcTab || aRef.aEnd.Tab() != nSrcTab ||
diff --git a/sc/source/ui/docshell/impex.cxx b/sc/source/ui/docshell/impex.cxx
index 5b115f5bd276..bfa4447b3d73 100644
--- a/sc/source/ui/docshell/impex.cxx
+++ b/sc/source/ui/docshell/impex.cxx
@@ -2192,7 +2192,7 @@ bool ScImportExport::Doc2Sylk( SvStream& rStrm )
case ScMatrixMode::Reference :
{ // diff expression with 'I' M$-extension
ScAddress aPos;
- (void)pFCell->GetMatrixOrigin( aPos );
+ (void)pFCell->GetMatrixOrigin( pDoc, aPos );
aPrefix = ";I;R"
+ OUString::number( aPos.Row() - nStartRow + 1 )
+ ";C"
diff --git a/sc/source/ui/docshell/tablink.cxx b/sc/source/ui/docshell/tablink.cxx
index 9956c7114a60..6d43206f4c0a 100644
--- a/sc/source/ui/docshell/tablink.cxx
+++ b/sc/source/ui/docshell/tablink.cxx
@@ -301,7 +301,7 @@ bool ScTableLink::Refresh(const OUString& rNewFile, const OUString& rNewFilter,
continue;
ScFormulaCell* pCell = aIter.getFormulaCell();
- ScDetectiveRefIter aRefIter(pCell);
+ ScDetectiveRefIter aRefIter(&rDoc, pCell);
ScRange aRefRange;
while ( aRefIter.GetNextRef( aRefRange ) )
{
diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx
index 660ffffc657d..8920c1503765 100644
--- a/sc/source/ui/unoobj/cellsuno.cxx
+++ b/sc/source/ui/unoobj/cellsuno.cxx
@@ -3702,7 +3702,7 @@ uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryPreceden
if (aIter.getType() != CELLTYPE_FORMULA)
continue;
- ScDetectiveRefIter aRefIter(aIter.getFormulaCell());
+ ScDetectiveRefIter aRefIter(&rDoc, aIter.getFormulaCell());
ScRange aRefRange;
while ( aRefIter.GetNextRef( aRefRange) )
{
@@ -3751,7 +3751,7 @@ uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryDependen
continue;
bool bMark = false;
- ScDetectiveRefIter aIter(aCellIter.getFormulaCell());
+ ScDetectiveRefIter aIter(&rDoc, aCellIter.getFormulaCell());
ScRange aRefRange;
while ( aIter.GetNextRef( aRefRange) && !bMark )
{
@@ -4857,7 +4857,7 @@ OUString SAL_CALL ScCellRangeObj::getArrayFormula()
const ScFormulaCell* pFCell2 = aCell2.mpFormula;
ScAddress aStart1;
ScAddress aStart2;
- if (pFCell1->GetMatrixOrigin(aStart1) && pFCell2->GetMatrixOrigin(aStart2))
+ if (pFCell1->GetMatrixOrigin(&rDoc, aStart1) && pFCell2->GetMatrixOrigin(&rDoc, aStart2))
{
if (aStart1 == aStart2) // both the same matrix
pFCell1->GetFormula(aFormula); // it doesn't matter from which cell
@@ -4921,7 +4921,7 @@ uno::Sequence<sheet::FormulaToken> SAL_CALL ScCellRangeObj::getArrayTokens()
const ScFormulaCell* pFCell2 = aCell2.mpFormula;
ScAddress aStart1;
ScAddress aStart2;
- if (pFCell1->GetMatrixOrigin(aStart1) && pFCell2->GetMatrixOrigin(aStart2))
+ if (pFCell1->GetMatrixOrigin(&rDoc, aStart1) && pFCell2->GetMatrixOrigin(&rDoc, aStart2))
{
if (aStart1 == aStart2)
{
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 894f3d3f8e94..e3a7a8f69de0 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -345,7 +345,7 @@ static bool lcl_IsEditableMatrix( ScDocument* pDoc, const ScRange& rRange )
ScRefCellValue aCell(*pDoc, rRange.aEnd);
ScAddress aPos;
- return (aCell.meType == CELLTYPE_FORMULA && aCell.mpFormula->GetMatrixOrigin(aPos) && aPos == rRange.aStart);
+ return (aCell.meType == CELLTYPE_FORMULA && aCell.mpFormula->GetMatrixOrigin(pDoc, aPos) && aPos == rRange.aStart);
}
static void lcl_UnLockComment( ScDrawView* pView, const Point& rPos, const ScViewData* pViewData )