sw/inc/pam.hxx | 4 +++ sw/source/core/crsr/pam.cxx | 20 ++++++++++++---- sw/source/core/crsr/swcrsr.cxx | 6 ++-- sw/source/core/doc/DocumentContentOperationsManager.cxx | 9 +++---- sw/source/core/fields/expfld.cxx | 3 -- sw/source/core/frmedt/fecopy.cxx | 2 - sw/source/core/layout/trvlfrm.cxx | 11 +++----- sw/source/core/undo/undobj.cxx | 6 +--- sw/source/core/unocore/unotext.cxx | 4 +-- sw/source/filter/writer/writer.cxx | 3 -- 10 files changed, 37 insertions(+), 31 deletions(-)
New commits: commit 502357eef1a6d74a0aeb0b3f2ed956cb6f671008 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Thu Aug 4 11:07:20 2022 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Thu Aug 4 14:45:55 2022 +0200 introduce SwPosition::AssignStartIndex and AssignEndIndex as part of the process of hiding the internals of SwPosition Change-Id: I496a0e24257a1ec6653a3becef4889b6fdf5339b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137788 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/sw/inc/pam.hxx b/sw/inc/pam.hxx index 0b40c03a7733..f9cb439d0407 100644 --- a/sw/inc/pam.hxx +++ b/sw/inc/pam.hxx @@ -88,6 +88,10 @@ struct SAL_WARN_UNUSED SW_DLLPUBLIC SwPosition void Assign( const SwContentNode& rNode, sal_Int32 nContentOffset = 0 ); void Assign( const SwNode& rNd ); void Assign( const SwNodeIndex& rNdIdx ); + /// Set nNode to rNd, and nContent to the beginning of rNd + void AssignStartIndex( const SwContentNode& rNd ); + /// Set nNode to rNd, and nContent to the end of rNd + void AssignEndIndex( const SwContentNode& rNd ); /// Adjust node position, and resets content position to zero void Adjust( SwNodeOffset nDelta ); }; diff --git a/sw/source/core/crsr/pam.cxx b/sw/source/core/crsr/pam.cxx index e734b1cd9aa0..bf90bc847719 100644 --- a/sw/source/core/crsr/pam.cxx +++ b/sw/source/core/crsr/pam.cxx @@ -239,6 +239,16 @@ void SwPosition::Adjust( SwNodeOffset nDelta ) nNode += nDelta; nContent.Assign(nNode.GetNode().GetContentNode(), 0); } +void SwPosition::AssignStartIndex( const SwContentNode& rNd ) +{ + nNode = rNd; + nContent.Assign(&rNd, 0); +} +void SwPosition::AssignEndIndex( const SwContentNode& rNd ) +{ + nNode = rNd; + nContent.Assign(&rNd, rNd.Len()); +} std::ostream &operator <<(std::ostream& s, const SwPosition& position) @@ -1016,7 +1026,7 @@ void GoStartDoc( SwPosition * pPos ) // we always need to find a ContentNode! SwContentNode* pCNd = rNodes.GoNext( &pPos->nNode ); if( pCNd ) - pCNd->MakeStartIndex( &pPos->nContent ); + pPos->AssignStartIndex(*pCNd); } void GoEndDoc( SwPosition * pPos ) @@ -1025,7 +1035,7 @@ void GoEndDoc( SwPosition * pPos ) pPos->nNode = rNodes.GetEndOfContent(); SwContentNode* pCNd = GoPreviousNds( &pPos->nNode, true ); if( pCNd ) - pCNd->MakeEndIndex( &pPos->nContent ); + pPos->AssignEndIndex(*pCNd); } void GoStartSection( SwPosition * pPos ) @@ -1038,7 +1048,7 @@ void GoStartSection( SwPosition * pPos ) do { SwNodes::GoStartOfSection( &pPos->nNode ); } while( nLevel-- ); // already on a ContentNode - pPos->GetNode().GetContentNode()->MakeStartIndex( &pPos->nContent ); + pPos->AssignStartIndex(*pPos->GetNode().GetContentNode()); } /// go to the end of the current base section @@ -1052,8 +1062,8 @@ void GoEndSection( SwPosition * pPos ) do { SwNodes::GoEndOfSection( &pPos->nNode ); } while( nLevel-- ); // now on an EndNode, thus to the previous ContentNode - if( GoPreviousNds( &pPos->nNode, true ) ) - pPos->GetNode().GetContentNode()->MakeEndIndex( &pPos->nContent ); + if( SwContentNode* pCNd = GoPreviousNds( &pPos->nNode, true ) ) + pPos->AssignEndIndex(*pCNd); } bool GoInDoc( SwPaM & rPam, SwMoveFnCollection const & fnMove ) diff --git a/sw/source/core/crsr/swcrsr.cxx b/sw/source/core/crsr/swcrsr.cxx index 45ff8a132d6c..5d962d9e2e3e 100644 --- a/sw/source/core/crsr/swcrsr.cxx +++ b/sw/source/core/crsr/swcrsr.cxx @@ -901,7 +901,7 @@ static bool lcl_MakeSelFwrd( const SwNode& rSttNd, const SwNode& rEndNd, pCNd = rNds.GoNext( &rPam.GetPoint()->nNode ); if( !pCNd ) return false; - pCNd->MakeStartIndex( &rPam.GetPoint()->nContent ); + rPam.GetPoint()->AssignStartIndex(*pCNd); } else if( rSttNd.GetIndex() > rPam.GetPoint()->GetNodeIndex() || rPam.GetPoint()->GetNodeIndex() >= rEndNd.GetIndex() ) @@ -913,7 +913,7 @@ static bool lcl_MakeSelFwrd( const SwNode& rSttNd, const SwNode& rEndNd, pCNd = SwNodes::GoPrevious( &rPam.GetPoint()->nNode ); if( !pCNd ) return false; - pCNd->MakeEndIndex( &rPam.GetPoint()->nContent ); + rPam.GetPoint()->AssignEndIndex(*pCNd); return *rPam.GetMark() < *rPam.GetPoint(); } @@ -933,7 +933,7 @@ static bool lcl_MakeSelBkwrd( const SwNode& rSttNd, const SwNode& rEndNd, pCNd = SwNodes::GoPrevious( &rPam.GetPoint()->nNode ); if( !pCNd ) return false; - pCNd->MakeEndIndex( &rPam.GetPoint()->nContent ); + rPam.GetPoint()->AssignEndIndex(*pCNd); } else if( rEndNd.GetIndex() > rPam.GetPoint()->GetNodeIndex() || rPam.GetPoint()->GetNodeIndex() >= rSttNd.GetIndex() ) diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx index c5dca681c9eb..a5c2941979cc 100644 --- a/sw/source/core/doc/DocumentContentOperationsManager.cxx +++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx @@ -2164,11 +2164,11 @@ bool DocumentContentOperationsManager::DelFullPara( SwPaM& rPam ) } if (SwTextNode *const pNode = temp.Start()->GetNode().GetTextNode()) { // rPam may not have nContent set but IsFieldmarkOverlap requires it - pNode->MakeStartIndex(&temp.Start()->nContent); + temp.Start()->AssignStartIndex(*pNode); } if (SwTextNode *const pNode = temp.End()->GetNode().GetTextNode()) { - pNode->MakeEndIndex(&temp.End()->nContent); + temp.End()->AssignEndIndex(*pNode); } if (sw::mark::IsFieldmarkOverlap(temp)) { // a bit of a problem: we want to completely remove the nodes @@ -5290,14 +5290,13 @@ bool DocumentContentOperationsManager::CopyImplImpl(SwPaM& rPam, SwPosition& rPo if( rPos.nNode != aInsPos ) { - pCopyPam->GetMark()->nNode = aInsPos; if (aInsPos < rPos.nNode) { // tdf#134250 decremented in (pEndTextNd && !pDestTextNd) above - pCopyPam->GetContentNode(false)->MakeEndIndex(&pCopyPam->GetMark()->nContent); + pCopyPam->GetMark()->AssignEndIndex(*aInsPos.GetNode().GetContentNode()); } else // incremented in (!pSttTextNd && pDestTextNd) above { - pCopyPam->GetMark()->nContent.Assign(pCopyPam->GetContentNode(false), 0); + pCopyPam->GetMark()->Assign(aInsPos); } rPos = *pCopyPam->GetMark(); } diff --git a/sw/source/core/fields/expfld.cxx b/sw/source/core/fields/expfld.cxx index 383fb8d1a778..f0a0f474312c 100644 --- a/sw/source/core/fields/expfld.cxx +++ b/sw/source/core/fields/expfld.cxx @@ -191,8 +191,7 @@ const SwTextNode* GetBodyTextNode( const SwDoc& rDoc, SwPosition& rPos, pTextNode = rPos.GetNode().GetTextNode(); if ( RndStdIds::FLY_AT_PARA == rAnchor.GetAnchorId() ) { - const_cast<SwTextNode*>(pTextNode)->MakeStartIndex( - &rPos.nContent ); + rPos.AssignStartIndex(*pTextNode); } // do not break yet, might be as well in Header/Footer/Footnote/Fly diff --git a/sw/source/core/frmedt/fecopy.cxx b/sw/source/core/frmedt/fecopy.cxx index bc7388ce56ba..2a23f31eb3bc 100644 --- a/sw/source/core/frmedt/fecopy.cxx +++ b/sw/source/core/frmedt/fecopy.cxx @@ -838,7 +838,7 @@ bool SwFEShell::Paste(SwDoc& rClpDoc, bool bNestedTable) SwPaM aCpyPam(aIdx, SwNodeIndex(rClpDoc.GetNodes().GetEndOfContent(), -1)); if (SwContentNode *const pAtEnd = aCpyPam.GetNode(true).GetContentNode()) { - pAtEnd->MakeEndIndex(&aCpyPam.GetPoint()->nContent); + aCpyPam.GetPoint()->AssignEndIndex(*pAtEnd); } // If there are table formulas in the area, then display the table first diff --git a/sw/source/core/layout/trvlfrm.cxx b/sw/source/core/layout/trvlfrm.cxx index 37e7b77dc775..b5247220de5d 100644 --- a/sw/source/core/layout/trvlfrm.cxx +++ b/sw/source/core/layout/trvlfrm.cxx @@ -617,8 +617,7 @@ bool SwNoTextFrame::LeftMargin(SwPaM *pPam) const { if( &pPam->GetNode() != GetNode() ) return false; - const_cast<SwContentNode*>(GetNode())-> - MakeStartIndex(&pPam->GetPoint()->nContent); + pPam->GetPoint()->AssignStartIndex(*GetNode()); return true; } @@ -626,8 +625,7 @@ bool SwNoTextFrame::RightMargin(SwPaM *pPam, bool) const { if( &pPam->GetNode() != GetNode() ) return false; - const_cast<SwContentNode*>(GetNode())-> - MakeEndIndex(&pPam->GetPoint()->nContent); + pPam->GetPoint()->AssignEndIndex(*GetNode()); return true; } @@ -953,11 +951,10 @@ static bool lcl_UpDown( SwPaM *pPam, const SwContentFrame *pStart, { // set the Point on the Content-Node assert(pCnt->IsNoTextFrame()); SwContentNode *const pCNd = const_cast<SwContentNode*>(static_cast<SwNoTextFrame const*>(pCnt)->GetNode()); - pPam->GetPoint()->nNode = *pCNd; if ( fnNxtPrv == lcl_GetPrvCnt ) - pCNd->MakeEndIndex( &pPam->GetPoint()->nContent ); + pPam->GetPoint()->AssignEndIndex(*pCNd); else - pCNd->MakeStartIndex( &pPam->GetPoint()->nContent ); + pPam->GetPoint()->AssignStartIndex(*pCNd); } return true; } diff --git a/sw/source/core/undo/undobj.cxx b/sw/source/core/undo/undobj.cxx index dfa4fc114ba3..dce1ef41d575 100644 --- a/sw/source/core/undo/undobj.cxx +++ b/sw/source/core/undo/undobj.cxx @@ -842,11 +842,9 @@ void SwUndoSaveContent::MovePtForward( SwPaM& rPam, bool bMvBkwrd ) rPam.Move( fnMoveForward ); else { - ++rPam.GetPoint()->nNode; + rPam.GetPoint()->Adjust(SwNodeOffset(1)); SwContentNode* pCNd = rPam.GetContentNode(); - if( pCNd ) - pCNd->MakeStartIndex( &rPam.GetPoint()->nContent ); - else + if( !pCNd ) rPam.Move( fnMoveForward ); } } diff --git a/sw/source/core/unocore/unotext.cxx b/sw/source/core/unocore/unotext.cxx index f4033be51050..2cb69face648 100644 --- a/sw/source/core/unocore/unotext.cxx +++ b/sw/source/core/unocore/unotext.cxx @@ -2390,11 +2390,11 @@ SwXText::copyText( pFirstNode = temp.GetMark()->GetNode().GetTextNode(); if (pFirstNode) { - pFirstNode->MakeStartIndex(&temp.GetMark()->nContent); + temp.GetMark()->AssignStartIndex(*pFirstNode); } if (SwTextNode *const pNode = temp.GetPoint()->GetNode().GetTextNode()) { - pNode->MakeEndIndex(&temp.GetPoint()->nContent); + temp.GetPoint()->AssignEndIndex(*pNode); } // Explicitly request copy text mode, so // sw::DocumentContentOperationsManager::CopyFlyInFlyImpl() will copy shapes anchored to diff --git a/sw/source/filter/writer/writer.cxx b/sw/source/filter/writer/writer.cxx index a810ff47e3e0..640cec57bcc9 100644 --- a/sw/source/filter/writer/writer.cxx +++ b/sw/source/filter/writer/writer.cxx @@ -206,8 +206,7 @@ Writer::NewUnoCursor(SwDoc & rDoc, SwNodeOffset const nStartIdx, SwNodeOffset co if (!pCNode) pCNode = SwNodes::GoPrevious(&aStt); assert(pCNode && "No more ContentNode at StartPos"); - pCNode->MakeEndIndex( &pNew->GetPoint()->nContent ); - pNew->GetPoint()->nNode = aStt; + pNew->GetPoint()->AssignEndIndex( *pCNode ); return pNew; }