summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2022-08-15 10:44:50 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2022-08-15 16:54:05 +0200
commit077cbb5faecf75b333531afad04d2c9622a47c91 (patch)
tree3b558f9e5271f1f8d5d599aac898607c93a9ef64
parentResolves: tdf#149858 embedded starmath not using correct initial zoom (diff)
downloadcore-077cbb5faecf75b333531afad04d2c9622a47c91.tar.gz
core-077cbb5faecf75b333531afad04d2c9622a47c91.zip
pass SwNode and sal_Int32 to deleteMarks
instead of SwNodeIndex and SwContentIndex. Part of the process of hiding the implementation of SwPosition. Change-Id: I290fbc14d738d1bbf5d3f613eae6d114fc7cda17 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138271 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--sw/inc/IDocumentMarkAccess.hxx8
-rw-r--r--sw/source/core/doc/DocumentContentOperationsManager.cxx6
-rw-r--r--sw/source/core/doc/docbm.cxx102
-rw-r--r--sw/source/core/inc/MarkManager.hxx6
-rw-r--r--sw/source/core/inc/mvsave.hxx8
-rw-r--r--sw/source/filter/html/htmltab.cxx2
6 files changed, 73 insertions, 59 deletions
diff --git a/sw/inc/IDocumentMarkAccess.hxx b/sw/inc/IDocumentMarkAccess.hxx
index 0790a27ef1ea..98037c7917e3 100644
--- a/sw/inc/IDocumentMarkAccess.hxx
+++ b/sw/inc/IDocumentMarkAccess.hxx
@@ -225,11 +225,11 @@ class IDocumentMarkAccess
*/
virtual void deleteMarks(
- const SwNodeIndex& rStt,
- const SwNodeIndex& rEnd,
+ const SwNode& rStt,
+ const SwNode& rEnd,
std::vector< ::sw::mark::SaveBookmark>* pSaveBkmk, // Ugly: SaveBookmark is core-internal
- const SwContentIndex* pSttIdx,
- const SwContentIndex* pEndIdx) =0;
+ std::optional<sal_Int32> oStartContentIdx,
+ std::optional<sal_Int32> oEndContentIdx) =0;
/** Deletes a mark.
diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx
index 1972be388df2..91534b7e6863 100644
--- a/sw/source/core/doc/DocumentContentOperationsManager.cxx
+++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx
@@ -2524,8 +2524,8 @@ bool DocumentContentOperationsManager::MoveRange( SwPaM& rPaM, SwPosition& rPos,
for(auto& rBkmk : aSaveBkmks)
rBkmk.SetInDoc(
&m_rDoc,
- rPaM.GetMark()->nNode,
- &rPaM.GetMark()->nContent);
+ rPaM.GetMark()->GetNode(),
+ rPaM.GetMark()->GetContentIndex());
*rPaM.GetPoint() = *aSavePam.End();
// Move the Flys to the new position.
@@ -2645,7 +2645,7 @@ bool DocumentContentOperationsManager::MoveNodeRange( SwNodeRange& rRange, SwNod
// Add the Bookmarks back to the Document
for(auto& rBkmk : aSaveBkmks)
- rBkmk.SetInDoc(&m_rDoc, aIdx);
+ rBkmk.SetInDoc(&m_rDoc, aIdx.GetNode());
if( !aSavRedlInsPosArr.empty() )
{
diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx
index 914e1374554c..512c139b41fe 100644
--- a/sw/source/core/doc/docbm.cxx
+++ b/sw/source/core/doc/docbm.cxx
@@ -185,12 +185,12 @@ bool IDocumentMarkAccess::iterator::operator>=(iterator const& rOther) const
namespace
{
- bool lcl_GreaterThan( const SwPosition& rPos, const SwNodeIndex& rNdIdx, const SwContentIndex* pIdx )
+ bool lcl_GreaterThan( const SwPosition& rPos, const SwNode& rNdIdx, std::optional<sal_Int32> oContentIdx )
{
- return pIdx != nullptr
+ return oContentIdx.has_value()
? ( rPos.nNode > rNdIdx
|| ( rPos.nNode == rNdIdx
- && rPos.nContent >= pIdx->GetIndex() ) )
+ && rPos.nContent >= *oContentIdx ) )
: rPos.nNode >= rNdIdx;
}
@@ -202,6 +202,14 @@ namespace
&& rPos.nContent < pIdx->GetIndex() );
}
+ bool lcl_Lower( const SwPosition& rPos, const SwNode& rNdIdx, std::optional<sal_Int32> oContentIdx )
+ {
+ return rPos.nNode < rNdIdx
+ || ( oContentIdx.has_value()
+ && rPos.nNode == rNdIdx
+ && rPos.nContent < *oContentIdx );
+ }
+
bool lcl_MarkOrderingByStart(const ::sw::mark::MarkBase *const pFirst,
const ::sw::mark::MarkBase *const pSecond)
{
@@ -246,7 +254,7 @@ namespace
void lcl_PositionFromContentNode(
std::optional<SwPosition>& rFoundPos,
- SwContentNode * const pContentNode,
+ const SwContentNode * const pContentNode,
const bool bAtEnd)
{
rFoundPos.emplace(*pContentNode);
@@ -259,21 +267,21 @@ namespace
// else set it to the ContentNode of the Pos outside the Range
void lcl_FindExpelPosition(
std::optional<SwPosition>& rFoundPos,
- const SwNodeIndex& rStt,
- const SwNodeIndex& rEnd,
+ const SwNode& rStt,
+ const SwNode& rEnd,
const SwPosition& rOtherPosition)
{
- SwContentNode * pNode = rEnd.GetNode().GetContentNode();
+ const SwContentNode * pNode = rEnd.GetContentNode();
bool bPosAtEndOfNode = false;
if ( pNode == nullptr)
{
- SwNodeIndex aEnd = rEnd;
+ SwNodeIndex aEnd(rEnd);
pNode = rEnd.GetNodes().GoNext( &aEnd );
bPosAtEndOfNode = false;
}
if ( pNode == nullptr )
{
- SwNodeIndex aStt = rStt;
+ SwNodeIndex aStt(rStt);
pNode = SwNodes::GoPrevious(&aStt);
bPosAtEndOfNode = true;
}
@@ -973,10 +981,10 @@ namespace sw::mark
static bool isDeleteMark(
::sw::mark::MarkBase const*const pMark,
- SwNodeIndex const& rStt,
- SwNodeIndex const& rEnd,
- SwContentIndex const*const pSttIdx,
- SwContentIndex const*const pEndIdx,
+ SwNode const& rStt,
+ SwNode const& rEnd,
+ std::optional<sal_Int32> oStartContentIdx,
+ std::optional<sal_Int32> oEndContentIdx,
bool & rbIsPosInRange,
bool & rbIsOtherPosInRange)
{
@@ -989,20 +997,20 @@ namespace sw::mark
}
// on position ??
- rbIsPosInRange = lcl_GreaterThan(pMark->GetMarkPos(), rStt, pSttIdx)
- && lcl_Lower(pMark->GetMarkPos(), rEnd, pEndIdx);
+ rbIsPosInRange = lcl_GreaterThan(pMark->GetMarkPos(), rStt, oStartContentIdx)
+ && lcl_Lower(pMark->GetMarkPos(), rEnd, oEndContentIdx);
rbIsOtherPosInRange = pMark->IsExpanded()
- && lcl_GreaterThan(pMark->GetOtherMarkPos(), rStt, pSttIdx)
- && lcl_Lower(pMark->GetOtherMarkPos(), rEnd, pEndIdx);
+ && lcl_GreaterThan(pMark->GetOtherMarkPos(), rStt, oStartContentIdx)
+ && lcl_Lower(pMark->GetOtherMarkPos(), rEnd, oEndContentIdx);
// special case: completely in range, touching the end?
- if ( pEndIdx != nullptr
+ if ( oEndContentIdx.has_value()
&& ( ( rbIsOtherPosInRange
&& pMark->GetMarkPos().nNode == rEnd
- && pMark->GetMarkPos().nContent == *pEndIdx )
+ && pMark->GetMarkPos().nContent == *oEndContentIdx )
|| ( rbIsPosInRange
&& pMark->IsExpanded()
&& pMark->GetOtherMarkPos().nNode == rEnd
- && pMark->GetOtherMarkPos().nContent == *pEndIdx ) ) )
+ && pMark->GetOtherMarkPos().nContent == *oEndContentIdx ) ) )
{
rbIsPosInRange = true;
rbIsOtherPosInRange = true;
@@ -1021,15 +1029,15 @@ namespace sw::mark
case IDocumentMarkAccess::MarkType::CROSSREF_HEADING_BOOKMARK:
case IDocumentMarkAccess::MarkType::CROSSREF_NUMITEM_BOOKMARK:
// no delete of cross-reference bookmarks, if range is inside one paragraph
- bDeleteMark = rStt != rEnd;
+ bDeleteMark = &rStt != &rEnd;
break;
case IDocumentMarkAccess::MarkType::UNO_BOOKMARK:
// no delete of UNO mark, if it is not expanded and only touches the start of the range
bDeleteMark = rbIsOtherPosInRange
|| pMark->IsExpanded()
- || pSttIdx == nullptr
+ || !oStartContentIdx.has_value()
|| pMark->GetMarkPos().nNode != rStt
- || pMark->GetMarkPos().nContent != *pSttIdx;
+ || pMark->GetMarkPos().nContent != *oStartContentIdx;
break;
default:
bDeleteMark = true;
@@ -1052,7 +1060,7 @@ namespace sw::mark
bool bIsPosInRange(false);
bool bIsOtherPosInRange(false);
bool const bDeleteMark = isDeleteMark(*ppMark,
- rStart.nNode, rEnd.nNode, &rStart.nContent, &rEnd.nContent,
+ rStart.GetNode(), rEnd.GetNode(), rStart.GetContentIndex(), rEnd.GetContentIndex(),
bIsPosInRange, bIsOtherPosInRange);
if (bDeleteMark
&& IDocumentMarkAccess::GetType(**ppMark) == MarkType::BOOKMARK)
@@ -1064,11 +1072,11 @@ namespace sw::mark
}
void MarkManager::deleteMarks(
- const SwNodeIndex& rStt,
- const SwNodeIndex& rEnd,
+ const SwNode& rStt,
+ const SwNode& rEnd,
std::vector<SaveBookmark>* pSaveBkmk,
- const SwContentIndex* pSttIdx,
- const SwContentIndex* pEndIdx )
+ std::optional<sal_Int32> oStartContentIdx,
+ std::optional<sal_Int32> oEndContentIdx )
{
std::vector<const_iterator_t> vMarksToDelete;
bool bIsSortingNeeded = false;
@@ -1087,7 +1095,7 @@ namespace sw::mark
::sw::mark::MarkBase *const pMark = *ppMark;
bool bIsPosInRange(false);
bool bIsOtherPosInRange(false);
- bool const bDeleteMark = isDeleteMark(pMark, rStt, rEnd, pSttIdx, pEndIdx, bIsPosInRange, bIsOtherPosInRange);
+ bool const bDeleteMark = isDeleteMark(pMark, rStt, rEnd, oStartContentIdx, oEndContentIdx, bIsPosInRange, bIsOtherPosInRange);
if ( bIsPosInRange
&& ( bIsOtherPosInRange
@@ -1097,7 +1105,7 @@ namespace sw::mark
{
if ( pSaveBkmk )
{
- pSaveBkmk->push_back( SaveBookmark( *pMark, rStt, pSttIdx ) );
+ pSaveBkmk->push_back( SaveBookmark( *pMark, rStt, oStartContentIdx ) );
}
vMarksToDelete.emplace_back(ppMark);
}
@@ -1112,9 +1120,9 @@ namespace sw::mark
// move position of that is in the range out of it
std::optional< SwPosition > oNewPos;
- if ( pEndIdx != nullptr )
+ if ( oEndContentIdx )
{
- oNewPos.emplace( rEnd, *pEndIdx );
+ oNewPos.emplace( *rEnd.GetContentNode(), *oEndContentIdx );
}
else
{
@@ -1795,8 +1803,8 @@ const IDocumentMarkAccess* SwDoc::getIDocumentMarkAccess() const
SaveBookmark::SaveBookmark(
const IMark& rBkmk,
- const SwNodeIndex & rMvPos,
- const SwContentIndex* pIdx)
+ const SwNode& rMvPos,
+ std::optional<sal_Int32> oContentIdx)
: m_aName(rBkmk.GetName())
, m_bHidden(false)
, m_eOrigBkmType(IDocumentMarkAccess::GetType(rBkmk))
@@ -1820,8 +1828,8 @@ SaveBookmark::SaveBookmark(
m_nContent1 = rBkmk.GetMarkPos().GetContentIndex();
m_nNode1 -= rMvPos.GetIndex();
- if(pIdx && !m_nNode1)
- m_nContent1 -= pIdx->GetIndex();
+ if(oContentIdx && !m_nNode1)
+ m_nContent1 -= *oContentIdx;
if(rBkmk.IsExpanded())
{
@@ -1829,8 +1837,8 @@ SaveBookmark::SaveBookmark(
m_nContent2 = rBkmk.GetOtherMarkPos().GetContentIndex();
m_nNode2 -= rMvPos.GetIndex();
- if(pIdx && !m_nNode2)
- m_nContent2 -= pIdx->GetIndex();
+ if(oContentIdx && !m_nNode2)
+ m_nContent2 -= *oContentIdx;
}
else
{
@@ -1841,19 +1849,19 @@ SaveBookmark::SaveBookmark(
void SaveBookmark::SetInDoc(
SwDoc* pDoc,
- const SwNodeIndex& rNewPos,
- const SwContentIndex* pIdx)
+ const SwNode& rNewPos,
+ std::optional<sal_Int32> oContentIdx)
{
- SwPaM aPam(rNewPos.GetNode());
- if(pIdx)
- aPam.GetPoint()->nContent = *pIdx;
+ SwPaM aPam(rNewPos);
+ if(oContentIdx)
+ aPam.GetPoint()->nContent = *oContentIdx;
if(NODE_OFFSET_MAX != m_nNode2)
{
aPam.SetMark();
aPam.GetMark()->nNode += m_nNode2;
- if(pIdx && !m_nNode2)
+ if(oContentIdx && !m_nNode2)
aPam.GetMark()->nContent += m_nContent2;
else
aPam.GetMark()->nContent.Assign(aPam.GetMarkContentNode(), m_nContent2);
@@ -1861,7 +1869,7 @@ void SaveBookmark::SetInDoc(
aPam.GetPoint()->nNode += m_nNode1;
- if(pIdx && !m_nNode1)
+ if(oContentIdx && !m_nNode1)
aPam.GetPoint()->nContent += m_nContent1;
else
aPam.GetPoint()->nContent.Assign(aPam.GetPointContentNode(), m_nContent1);
@@ -1908,7 +1916,9 @@ void DelBookmarks(
return;
SwDoc& rDoc = rStt.GetNode().GetDoc();
- rDoc.getIDocumentMarkAccess()->deleteMarks(rStt, rEnd, pSaveBkmk, pSttIdx, pEndIdx);
+ rDoc.getIDocumentMarkAccess()->deleteMarks(rStt.GetNode(), rEnd.GetNode(), pSaveBkmk,
+ pSttIdx ? std::optional{pSttIdx->GetIndex()} : std::nullopt,
+ pEndIdx ? std::optional{pEndIdx->GetIndex()} : std::nullopt);
// Copy all Redlines which are in the move area into an array
// which holds all position information as offset.
diff --git a/sw/source/core/inc/MarkManager.hxx b/sw/source/core/inc/MarkManager.hxx
index 44f1b1deb389..2af05601867c 100644
--- a/sw/source/core/inc/MarkManager.hxx
+++ b/sw/source/core/inc/MarkManager.hxx
@@ -63,7 +63,11 @@ namespace sw::mark {
virtual void correctMarksAbsolute(const SwNodeIndex& rOldNode, const SwPosition& rNewPos, const sal_Int32 nOffset) override;
virtual void correctMarksRelative(const SwNodeIndex& rOldNode, const SwPosition& rNewPos, const sal_Int32 nOffset) override;
- virtual void deleteMarks(const SwNodeIndex& rStt, const SwNodeIndex& rEnd, std::vector< ::sw::mark::SaveBookmark>* pSaveBkmk, const SwContentIndex* pSttIdx, const SwContentIndex* pEndIdx) override;
+ virtual void deleteMarks(const SwNode& rStt,
+ const SwNode& rEnd,
+ std::vector< ::sw::mark::SaveBookmark>* pSaveBkmk,
+ std::optional<sal_Int32> oStartContentIdx,
+ std::optional<sal_Int32> oEndContentIdx) override;
// deleters
virtual std::unique_ptr<ILazyDeleter>
diff --git a/sw/source/core/inc/mvsave.hxx b/sw/source/core/inc/mvsave.hxx
index 896a2228311f..6ef3f92edfb1 100644
--- a/sw/source/core/inc/mvsave.hxx
+++ b/sw/source/core/inc/mvsave.hxx
@@ -50,11 +50,11 @@ namespace sw::mark
public:
SaveBookmark(
const ::sw::mark::IMark& rBkmk,
- const SwNodeIndex& rMvPos,
- const SwContentIndex* pIdx);
+ const SwNode& rMvPos,
+ std::optional<sal_Int32> oContentIdx);
void SetInDoc(SwDoc* pDoc,
- const SwNodeIndex&,
- const SwContentIndex* pIdx =nullptr);
+ const SwNode&,
+ std::optional<sal_Int32> oContentIdx = std::nullopt);
private:
OUString m_aName;
diff --git a/sw/source/filter/html/htmltab.cxx b/sw/source/filter/html/htmltab.cxx
index 5d8b4b5aea29..88b8c9e0663d 100644
--- a/sw/source/filter/html/htmltab.cxx
+++ b/sw/source/filter/html/htmltab.cxx
@@ -4913,7 +4913,7 @@ void SwHTMLParser::ClearFootnotesMarksInRange(const SwNodeIndex& rMkNdIdx, const
//ofz#9733 drop bookmarks in this range
IDocumentMarkAccess* const pMarkAccess = rDoc.getIDocumentMarkAccess();
- pMarkAccess->deleteMarks(rMkNdIdx, SwNodeIndex(rPtNdIdx, 1), nullptr, nullptr, nullptr);
+ pMarkAccess->deleteMarks(rMkNdIdx.GetNode(), SwNodeIndex(rPtNdIdx, 1).GetNode(), nullptr, std::nullopt, std::nullopt);
SwFrameFormats& rTable = *rDoc.GetSpzFrameFormats();
for ( auto i = rTable.size(); i; )