summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2022-08-24 14:11:01 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2022-08-24 16:20:31 +0200
commitcfa942249162d5503b8a34d5813fddfb1182283a (patch)
tree574ec529eb35e36f2cf9b4a5e56114a7bb496256
parent59f30175bfc557aa7c752ab0b45af9d34215d4dc (diff)
pass SwNode to FindPrvNxtFrameNode instead of SwNodeIndex
part of the process of hiding the internals of SwPosition Change-Id: Ib0c24ca1179f9c8dd92e9b327daea8a5079cead1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138765 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--sw/inc/ndarr.hxx6
-rw-r--r--sw/source/core/crsr/crsrsh.cxx5
-rw-r--r--sw/source/core/docnode/ndsect.cxx3
-rw-r--r--sw/source/core/docnode/ndtbl.cxx13
-rw-r--r--sw/source/core/docnode/nodes.cxx34
-rw-r--r--sw/source/core/layout/frmtool.cxx5
-rw-r--r--sw/source/core/txtnode/ndtxt.cxx3
7 files changed, 29 insertions, 40 deletions
diff --git a/sw/inc/ndarr.hxx b/sw/inc/ndarr.hxx
index 902f227800c3..0dabda23ec9f 100644
--- a/sw/inc/ndarr.hxx
+++ b/sw/inc/ndarr.hxx
@@ -311,10 +311,10 @@ public:
const SwDoc& GetDoc() const { return m_rMyDoc; }
/** Search previous / next content node or table node with frames.
- Search is started backward with the one before rFrameIdx and
+ Search is started backward with the one before rFrameNd and
forward after pEnd.
- If no valid node is found, return 0. rFrameIdx points to the node with frames. **/
- SwNode* FindPrvNxtFrameNode( SwNodeIndex& rFrameIdx,
+ If no valid node is found, return nullptr. **/
+ SwNode* FindPrvNxtFrameNode( const SwNode& rFrameNd,
const SwNode* pEnd,
SwRootFrame const* pLayout = nullptr) const;
diff --git a/sw/source/core/crsr/crsrsh.cxx b/sw/source/core/crsr/crsrsh.cxx
index 2e34d4696be2..bcc0b2433c1f 100644
--- a/sw/source/core/crsr/crsrsh.cxx
+++ b/sw/source/core/crsr/crsrsh.cxx
@@ -1517,12 +1517,11 @@ static bool lcl_CheckHiddenSection( SwNodeIndex& rIdx )
const SwSectionNode* pSectNd = rIdx.GetNode().FindSectionNode();
if( pSectNd && pSectNd->GetSection().IsHiddenFlag() )
{
- SwNodeIndex aTmp( *pSectNd );
const SwNode* pFrameNd =
- rIdx.GetNodes().FindPrvNxtFrameNode( aTmp, pSectNd->EndOfSectionNode() );
+ rIdx.GetNodes().FindPrvNxtFrameNode( *pSectNd, pSectNd->EndOfSectionNode() );
bOk = pFrameNd != nullptr;
SAL_WARN_IF(!bOk, "sw.core", "found no Node with Frames");
- rIdx = aTmp;
+ rIdx = *(bOk ? pFrameNd : pSectNd);
}
return bOk;
}
diff --git a/sw/source/core/docnode/ndsect.cxx b/sw/source/core/docnode/ndsect.cxx
index 5fb4438bb438..d97c08d278ff 100644
--- a/sw/source/core/docnode/ndsect.cxx
+++ b/sw/source/core/docnode/ndsect.cxx
@@ -919,8 +919,7 @@ SwSectionNode* SwNodes::InsertTextSection(SwNode& rNd,
std::optional<SwNode2LayoutSaveUpperFrames> oNode2Layout;
if( bInsFrame )
{
- SwNodeIndex aTmp( *pSectNd );
- if( !pSectNd->GetNodes().FindPrvNxtFrameNode( aTmp, pSectNd->EndOfSectionNode() ) )
+ if( !pSectNd->GetNodes().FindPrvNxtFrameNode( *pSectNd, pSectNd->EndOfSectionNode() ) )
// Collect all Uppers
oNode2Layout.emplace(*pSectNd);
}
diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx
index 556f9a11a869..fe2fc3b6822b 100644
--- a/sw/source/core/docnode/ndtbl.cxx
+++ b/sw/source/core/docnode/ndtbl.cxx
@@ -1583,8 +1583,8 @@ bool SwNodes::TableToText( const SwNodeRange& rRange, sal_Unicode cCh,
// If the Table was alone in a Section, create the Frames via the Table's Upper
std::optional<SwNode2LayoutSaveUpperFrames> oNode2Layout;
- SwNodeIndex aFrameIdx( rRange.aStart );
- SwNode* pFrameNd = FindPrvNxtFrameNode( aFrameIdx, &rRange.aEnd.GetNode() );
+ SwNode* pFrameNd = FindPrvNxtFrameNode( rRange.aStart.GetNode(), &rRange.aEnd.GetNode() );
+ SwNodeIndex aFrameIdx( pFrameNd ? *pFrameNd: rRange.aStart.GetNode() );
if( !pFrameNd )
// Collect all Uppers
oNode2Layout.emplace(*pTableNd);
@@ -2382,10 +2382,13 @@ void SwTableNode::MakeFramesForAdjacentContentNode(const SwNodeIndex & rIdx)
void SwTableNode::MakeOwnFrames(SwNodeIndex* pIdxBehind)
{
OSL_ENSURE( pIdxBehind, "No Index" );
- *pIdxBehind = *this;
- SwNode *pNd = GetNodes().FindPrvNxtFrameNode( *pIdxBehind, EndOfSectionNode() );
+ SwNode *pNd = GetNodes().FindPrvNxtFrameNode( *this, EndOfSectionNode() );
if( !pNd )
- return ;
+ {
+ *pIdxBehind = *this;
+ return;
+ }
+ *pIdxBehind = *pNd;
SwFrame *pFrame( nullptr );
SwLayoutFrame *pUpper( nullptr );
diff --git a/sw/source/core/docnode/nodes.cxx b/sw/source/core/docnode/nodes.cxx
index 48c135861686..93384c28d12a 100644
--- a/sw/source/core/docnode/nodes.cxx
+++ b/sw/source/core/docnode/nodes.cxx
@@ -366,8 +366,7 @@ void SwNodes::ChgNode( SwNodeIndex const & rDelPos, SwNodeOffset nSz,
// get the frames:
SwNodeIndex aIdx( *pPrevInsNd, 1 );
- SwNodeIndex aFrameNdIdx( aIdx );
- SwNode* pFrameNd = rNds.FindPrvNxtFrameNode( aFrameNdIdx,
+ SwNode* pFrameNd = rNds.FindPrvNxtFrameNode( aIdx.GetNode(),
rNds[ rInsPos.GetIndex() - 1 ] );
if( !pFrameNd )
@@ -2182,16 +2181,16 @@ SwContentNode* SwNodes::GoPrevSection( SwPosition * pIdx,
//TODO: The inventor of the "single responsibility principle" will be crying if you ever show this code to him!
/** find the next/previous ContentNode or table node that should have layout
- * frames that are siblings to the ones of the node at rFrameIdx.
+ * frames that are siblings to the ones of the node at rFrameNd.
*
- * Search is started backward with the one before rFrameIdx and
+ * Search is started backward with the one before rFrameNd and
* forward after pEnd.
*
- * @param rFrameIdx in: node with frames to search in; out: found node
- * @param pEnd last node after rFrameIdx that should be excluded from search
+ * @param rFrameNd in: node with frames to search in; out: found node
+ * @param pEnd last node after rFrameNd that should be excluded from search
* @return result node; 0 if not found
*/
-SwNode* SwNodes::FindPrvNxtFrameNode( SwNodeIndex& rFrameIdx,
+SwNode* SwNodes::FindPrvNxtFrameNode( const SwNode& rFrameNd,
SwNode const*const pEnd,
SwRootFrame const*const pLayout) const
{
@@ -2202,20 +2201,20 @@ SwNode* SwNodes::FindPrvNxtFrameNode( SwNodeIndex& rFrameIdx,
// no layout -> skip
if( GetDoc().getIDocumentLayoutAccess().GetCurrentViewShell() )
{
- SwNode *const pSttNd = &rFrameIdx.GetNode();
+ const SwNode *const pSttNd = &rFrameNd;
// inside a hidden section?
- SwSectionNode *const pSectNd = pSttNd->IsSectionNode()
+ const SwSectionNode *const pSectNd = pSttNd->IsSectionNode()
? pSttNd->StartOfSectionNode()->FindSectionNode()
: pSttNd->FindSectionNode();
if( !( pSectNd && pSectNd->GetSection().CalcHiddenFlag() ) )
{
// in a table in table situation we have to assure that we don't leave the
// outer table cell when the inner table is looking for a PrvNxt...
- SwTableNode *const pTableNd = pSttNd->IsTableNode()
+ const SwTableNode *const pTableNd = pSttNd->IsTableNode()
? pSttNd->StartOfSectionNode()->FindTableNode()
: pSttNd->FindTableNode();
- SwNodeIndex aIdx( rFrameIdx );
+ SwNodeIndex aIdx( rFrameNd );
// search backward for a content or table node
@@ -2227,7 +2226,6 @@ SwNode* SwNodes::FindPrvNxtFrameNode( SwNodeIndex& rFrameIdx,
if (pFrameNd->IsContentNode())
{
// TODO why does this not check for nested tables like forward direction
- rFrameIdx = aIdx;
return pFrameNd;
}
else if (pFrameNd->IsEndNode() && pFrameNd->StartOfSectionNode()->IsTableNode())
@@ -2237,7 +2235,6 @@ SwNode* SwNodes::FindPrvNxtFrameNode( SwNodeIndex& rFrameIdx,
|| pFrameNd->StartOfSectionNode()->GetRedlineMergeFlag() != SwNode::Merge::Hidden)
{
pFrameNd = pFrameNd->StartOfSectionNode();
- rFrameIdx = *pFrameNd;
return pFrameNd;
}
else
@@ -2251,7 +2248,7 @@ SwNode* SwNodes::FindPrvNxtFrameNode( SwNodeIndex& rFrameIdx,
{
pFrameNd = GoPrevSection( &aIdx, true, false );
if ( nullptr != pFrameNd && !(
- ::CheckNodesRange( aIdx.GetNode(), rFrameIdx.GetNode(), true ) &&
+ ::CheckNodesRange( aIdx.GetNode(), rFrameNd, true ) &&
// Never out of the table at the start
pFrameNd->FindTableNode() == pTableNd &&
// Bug 37652: Never out of the table at the end
@@ -2286,11 +2283,6 @@ SwNode* SwNodes::FindPrvNxtFrameNode( SwNodeIndex& rFrameIdx,
pTableNode != pSttNd->StartOfSectionNode()->FindTableNode())
{
pFrameNd = pTableNode;
- rFrameIdx = *pFrameNd;
- }
- else
- {
- rFrameIdx = aIdx;
}
return pFrameNd;
}
@@ -2300,7 +2292,6 @@ SwNode* SwNodes::FindPrvNxtFrameNode( SwNodeIndex& rFrameIdx,
|| !pLayout->HasMergedParas()
|| pFrameNd->GetRedlineMergeFlag() != SwNode::Merge::Hidden)
{
- rFrameIdx = *pFrameNd;
return pFrameNd;
}
else
@@ -2315,7 +2306,7 @@ SwNode* SwNodes::FindPrvNxtFrameNode( SwNodeIndex& rFrameIdx,
pFrameNd = GoNextSection( &aIdx, true, false );
// NEVER leave the section when doing this!
if (pFrameNd
- && !(::CheckNodesRange(aIdx.GetNode(), rFrameIdx.GetNode(), true)
+ && !(::CheckNodesRange(aIdx.GetNode(), rFrameNd, true)
&& (pFrameNd->FindTableNode() == pTableNd &&
// NEVER go out of the table cell at the end
(!pFrameNd->FindTableNode() || pFrameNd->FindTableBoxStartNode()
@@ -2352,7 +2343,6 @@ SwNode* SwNodes::FindPrvNxtFrameNode( SwNodeIndex& rFrameIdx,
}
if( aIdx.GetNode().IsTableNode() )
{
- rFrameIdx = aIdx;
pFrameNd = &aIdx.GetNode();
assert(!"this isn't dead code?");
}
diff --git a/sw/source/core/layout/frmtool.cxx b/sw/source/core/layout/frmtool.cxx
index 5052badaffa5..4c535d18c9b8 100644
--- a/sw/source/core/layout/frmtool.cxx
+++ b/sw/source/core/layout/frmtool.cxx
@@ -2014,15 +2014,14 @@ void MakeFrames( SwDoc *pDoc, SwNode &rSttIdx, SwNode &rEndIdx )
{
bObjsDirect = false;
- SwNodeIndex aTmp( rSttIdx );
SwNodeOffset nEndIdx = rEndIdx.GetIndex();
// TODO for multiple layouts there should be a loop here
- SwNode* pNd = pDoc->GetNodes().FindPrvNxtFrameNode( aTmp,
+ SwNode* pNd = pDoc->GetNodes().FindPrvNxtFrameNode( rSttIdx,
pDoc->GetNodes()[ nEndIdx-1 ],
pDoc->getIDocumentLayoutAccess().GetCurrentLayout());
if ( pNd )
{
- bool bApres = aTmp < rSttIdx;
+ bool bApres = *pNd < rSttIdx;
SwNode2Layout aNode2Layout( *pNd, rSttIdx.GetIndex() );
SwFrame* pFrame;
sw::FrameMode eMode = sw::FrameMode::Existing;
diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx
index a1dd438f4562..ecaecb08f30f 100644
--- a/sw/source/core/txtnode/ndtxt.cxx
+++ b/sw/source/core/txtnode/ndtxt.cxx
@@ -134,8 +134,7 @@ SwTextNode *SwNodes::MakeTextNode( SwNode& rWhere,
if( static_cast<SwSectionNode*>(pNd)->GetSection().IsHidden() ||
static_cast<SwSectionNode*>(pNd)->IsContentHidden() )
{
- SwNodeIndex aTmpIdx( *pNode );
- pNd = FindPrvNxtFrameNode( aTmpIdx, pNode );
+ pNd = FindPrvNxtFrameNode( *pNode, pNode );
if( !pNd )
return pNode;
aTmp = *pNd;