loplugin:flatten in sw/core/undo
Change-Id: I34662fd439578fc6f446c5216c5c1b735b79718d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99860
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/sw/source/core/undo/SwUndoFmt.cxx b/sw/source/core/undo/SwUndoFmt.cxx
index d0e3798..bb9ffa7 100644
--- a/sw/source/core/undo/SwUndoFmt.cxx
+++ b/sw/source/core/undo/SwUndoFmt.cxx
@@ -43,22 +43,22 @@ SwUndoFormatCreate::~SwUndoFormatCreate()
void SwUndoFormatCreate::UndoImpl(::sw::UndoRedoContext &)
{
if (!m_pNew)
return;
if (m_sNewName.isEmpty())
m_sNewName = m_pNew->GetName();
if (!m_sNewName.isEmpty())
m_pNew = Find(m_sNewName);
if (m_pNew)
{
if (m_sNewName.isEmpty())
m_sNewName = m_pNew->GetName();
m_pNewSet = new SfxItemSet(m_pNew->GetAttrSet());
m_nId = m_pNew->GetPoolFormatId() & COLL_GET_RANGE_BITS;
m_bAuto = m_pNew->IsAuto();
if (!m_sNewName.isEmpty())
m_pNew = Find(m_sNewName);
if (m_pNew)
{
m_pNewSet = new SfxItemSet(m_pNew->GetAttrSet());
m_nId = m_pNew->GetPoolFormatId() & COLL_GET_RANGE_BITS;
m_bAuto = m_pNew->IsAuto();
Delete();
}
Delete();
}
}
diff --git a/sw/source/core/undo/SwUndoPageDesc.cxx b/sw/source/core/undo/SwUndoPageDesc.cxx
index 1ca66f9..888f513 100644
--- a/sw/source/core/undo/SwUndoPageDesc.cxx
+++ b/sw/source/core/undo/SwUndoPageDesc.cxx
@@ -69,56 +69,56 @@ SwUndoPageDesc::SwUndoPageDesc(const SwPageDesc & _aOld,
m_bExchange = false;
if( ( rOldHead.IsActive() || rOldFoot.IsActive() ) && ( rOldDesc.IsFirstShared() != rNewDesc.IsFirstShared() ) )
m_bExchange = false;
if( m_bExchange )
{
if( rNewHead.IsActive() )
{
SwFrameFormat* pFormat = new SwFrameFormat( *rNewHead.GetHeaderFormat() );
// The Ctor of this object will remove the duplicate!
SwFormatHeader aFormatHeader(pFormat);
(void)aFormatHeader;
if (!rNewDesc.IsHeaderShared())
{
pFormat = new SwFrameFormat( *rNewDesc.GetLeft().GetHeader().GetHeaderFormat() );
// The Ctor of this object will remove the duplicate!
SwFormatHeader aLeftHeader(pFormat);
(void)aLeftHeader;
}
if (!rNewDesc.IsFirstShared())
{
pFormat = new SwFrameFormat( *rNewDesc.GetFirstMaster().GetHeader().GetHeaderFormat() );
// The Ctor of this object will remove the duplicate!
SwFormatHeader aFirstHeader(pFormat);
(void)aFirstHeader;
}
}
// Same procedure for footers...
if( rNewFoot.IsActive() )
{
SwFrameFormat* pFormat = new SwFrameFormat( *rNewFoot.GetFooterFormat() );
// The Ctor of this object will remove the duplicate!
SwFormatFooter aFormatFooter(pFormat);
(void)aFormatFooter;
if (!rNewDesc.IsFooterShared())
{
pFormat = new SwFrameFormat( *rNewDesc.GetLeft().GetFooter().GetFooterFormat() );
// The Ctor of this object will remove the duplicate!
SwFormatFooter aLeftFooter(pFormat);
(void)aLeftFooter;
}
if (!rNewDesc.IsFirstShared())
{
pFormat = new SwFrameFormat( *rNewDesc.GetFirstMaster().GetFooter().GetFooterFormat() );
// The Ctor of this object will remove the duplicate!
SwFormatFooter aFirstFooter(pFormat);
(void)aFirstFooter;
}
}
if( !m_bExchange )
return;
// After this exchange method the old page description will point to zero,
// the new one will point to the node position of the original content nodes.
ExchangeContentNodes( m_aOld.m_PageDesc, m_aNew.m_PageDesc );
if( rNewHead.IsActive() )
{
SwFrameFormat* pFormat = new SwFrameFormat( *rNewHead.GetHeaderFormat() );
// The Ctor of this object will remove the duplicate!
SwFormatHeader aFormatHeader(pFormat);
(void)aFormatHeader;
if (!rNewDesc.IsHeaderShared())
{
pFormat = new SwFrameFormat( *rNewDesc.GetLeft().GetHeader().GetHeaderFormat() );
// The Ctor of this object will remove the duplicate!
SwFormatHeader aLeftHeader(pFormat);
(void)aLeftHeader;
}
if (!rNewDesc.IsFirstShared())
{
pFormat = new SwFrameFormat( *rNewDesc.GetFirstMaster().GetHeader().GetHeaderFormat() );
// The Ctor of this object will remove the duplicate!
SwFormatHeader aFirstHeader(pFormat);
(void)aFirstHeader;
}
}
// Same procedure for footers...
if( rNewFoot.IsActive() )
{
SwFrameFormat* pFormat = new SwFrameFormat( *rNewFoot.GetFooterFormat() );
// The Ctor of this object will remove the duplicate!
SwFormatFooter aFormatFooter(pFormat);
(void)aFormatFooter;
if (!rNewDesc.IsFooterShared())
{
pFormat = new SwFrameFormat( *rNewDesc.GetLeft().GetFooter().GetFooterFormat() );
// The Ctor of this object will remove the duplicate!
SwFormatFooter aLeftFooter(pFormat);
(void)aLeftFooter;
}
if (!rNewDesc.IsFirstShared())
{
pFormat = new SwFrameFormat( *rNewDesc.GetFirstMaster().GetFooter().GetFooterFormat() );
// The Ctor of this object will remove the duplicate!
SwFormatFooter aFirstFooter(pFormat);
(void)aFirstFooter;
}
}
// After this exchange method the old page description will point to zero,
// the new one will point to the node position of the original content nodes.
ExchangeContentNodes( m_aOld.m_PageDesc, m_aNew.m_PageDesc );
}
SwUndoPageDesc::~SwUndoPageDesc()
diff --git a/sw/source/core/undo/rolbck.cxx b/sw/source/core/undo/rolbck.cxx
index 8806f4f..dbc6675 100644
--- a/sw/source/core/undo/rolbck.cxx
+++ b/sw/source/core/undo/rolbck.cxx
@@ -261,21 +261,21 @@ void SwHistorySetText::SetInDoc( SwDoc* pDoc, bool )
SwTextNode * pTextNd = pDoc->GetNodes()[ m_nNodeIndex ]->GetTextNode();
OSL_ENSURE( pTextNd, "SwHistorySetText::SetInDoc: not a TextNode" );
if ( pTextNd )
if ( !pTextNd )
return;
SwTextAttr *const pAttr = pTextNd->InsertItem(*m_pAttr, m_nStart, m_nEnd,
SetAttrMode::NOTXTATRCHR |
SetAttrMode::NOHINTADJUST );
// shouldn't be possible to hit any error/merging path from here
assert(pAttr);
if (m_bFormatIgnoreStart)
{
SwTextAttr *const pAttr = pTextNd->InsertItem(*m_pAttr, m_nStart, m_nEnd,
SetAttrMode::NOTXTATRCHR |
SetAttrMode::NOHINTADJUST );
// shouldn't be possible to hit any error/merging path from here
assert(pAttr);
if (m_bFormatIgnoreStart)
{
pAttr->SetFormatIgnoreStart(true);
}
if (m_bFormatIgnoreEnd)
{
pAttr->SetFormatIgnoreEnd(true);
}
pAttr->SetFormatIgnoreStart(true);
}
if (m_bFormatIgnoreEnd)
{
pAttr->SetFormatIgnoreEnd(true);
}
}
@@ -545,20 +545,20 @@ void SwHistoryChangeFormatColl::SetInDoc( SwDoc* pDoc, bool )
// before setting the format, check if it is still available in the
// document. if it has been deleted, there is no undo!
if ( pContentNd && m_nNodeType == pContentNd->GetNodeType() )
if ( !(pContentNd && m_nNodeType == pContentNd->GetNodeType()) )
return;
if ( SwNodeType::Text == m_nNodeType )
{
if ( SwNodeType::Text == m_nNodeType )
{
if (pDoc->GetTextFormatColls()->IsAlive(static_cast<SwTextFormatColl *>(m_pColl)))
{
pContentNd->ChgFormatColl( m_pColl );
}
}
else if (pDoc->GetGrfFormatColls()->IsAlive(static_cast<SwGrfFormatColl *>(m_pColl)))
if (pDoc->GetTextFormatColls()->IsAlive(static_cast<SwTextFormatColl *>(m_pColl)))
{
pContentNd->ChgFormatColl( m_pColl );
}
}
else if (pDoc->GetGrfFormatColls()->IsAlive(static_cast<SwGrfFormatColl *>(m_pColl)))
{
pContentNd->ChgFormatColl( m_pColl );
}
}
SwHistoryTextFlyCnt::SwHistoryTextFlyCnt( SwFrameFormat* const pFlyFormat )
@@ -615,19 +615,19 @@ SwHistoryBookmark::SwHistoryBookmark(
, m_eBkmkType(IDocumentMarkAccess::GetType(rBkmk))
{
const ::sw::mark::IBookmark* const pBookmark = dynamic_cast< const ::sw::mark::IBookmark* >(&rBkmk);
if(pBookmark)
{
m_aKeycode = pBookmark->GetKeyCode();
m_aShortName = pBookmark->GetShortName();
m_bHidden = pBookmark->IsHidden();
m_aHideCondition = pBookmark->GetHideCondition();
if(!pBookmark)
return;
::sfx2::Metadatable const*const pMetadatable(
dynamic_cast< ::sfx2::Metadatable const* >(pBookmark));
if (pMetadatable)
{
m_pMetadataUndo = pMetadatable->CreateUndo();
}
m_aKeycode = pBookmark->GetKeyCode();
m_aShortName = pBookmark->GetShortName();
m_bHidden = pBookmark->IsHidden();
m_aHideCondition = pBookmark->GetHideCondition();
::sfx2::Metadatable const*const pMetadatable(
dynamic_cast< ::sfx2::Metadatable const* >(pBookmark));
if (pMetadatable)
{
m_pMetadataUndo = pMetadatable->CreateUndo();
}
}
@@ -682,32 +682,32 @@ void SwHistoryBookmark::SetInDoc( SwDoc* pDoc, bool )
*pPam->GetMark() = pMark->GetOtherMarkPos();
}
if (pPam)
{
if ( pMark != nullptr )
{
pMarkAccess->deleteMark( pMark );
}
::sw::mark::IBookmark* const pBookmark =
dynamic_cast<::sw::mark::IBookmark*>(
pMarkAccess->makeMark(*pPam, m_aName, m_eBkmkType, sw::mark::InsertMode::New));
if ( pBookmark != nullptr )
{
pBookmark->SetKeyCode(m_aKeycode);
pBookmark->SetShortName(m_aShortName);
pBookmark->Hide(m_bHidden);
pBookmark->SetHideCondition(m_aHideCondition);
if (!pPam)
return;
if (m_pMetadataUndo)
{
::sfx2::Metadatable * const pMeta(
dynamic_cast< ::sfx2::Metadatable* >(pBookmark));
OSL_ENSURE(pMeta, "metadata undo, but not metadatable?");
if (pMeta)
{
pMeta->RestoreMetadata(m_pMetadataUndo);
}
}
if ( pMark != nullptr )
{
pMarkAccess->deleteMark( pMark );
}
::sw::mark::IBookmark* const pBookmark =
dynamic_cast<::sw::mark::IBookmark*>(
pMarkAccess->makeMark(*pPam, m_aName, m_eBkmkType, sw::mark::InsertMode::New));
if ( pBookmark == nullptr )
return;
pBookmark->SetKeyCode(m_aKeycode);
pBookmark->SetShortName(m_aShortName);
pBookmark->Hide(m_bHidden);
pBookmark->SetHideCondition(m_aHideCondition);
if (m_pMetadataUndo)
{
::sfx2::Metadatable * const pMeta(
dynamic_cast< ::sfx2::Metadatable* >(pBookmark));
OSL_ENSURE(pMeta, "metadata undo, but not metadatable?");
if (pMeta)
{
pMeta->RestoreMetadata(m_pMetadataUndo);
}
}
}
@@ -929,31 +929,31 @@ void SwHistoryChangeFlyAnchor::SetInDoc( SwDoc* pDoc, bool )
{
::sw::UndoGuard const undoGuard(pDoc->GetIDocumentUndoRedo());
if (pDoc->GetSpzFrameFormats()->IsAlive(&m_rFormat)) // Format does still exist
if (!pDoc->GetSpzFrameFormats()->IsAlive(&m_rFormat)) // Format does still exist
return;
SwFormatAnchor aTmp( m_rFormat.GetAnchor() );
SwNode* pNd = pDoc->GetNodes()[ m_nOldNodeIndex ];
SwContentNode* pCNd = pNd->GetContentNode();
SwPosition aPos( *pNd );
if ( COMPLETE_STRING != m_nOldContentIndex )
{
SwFormatAnchor aTmp( m_rFormat.GetAnchor() );
SwNode* pNd = pDoc->GetNodes()[ m_nOldNodeIndex ];
SwContentNode* pCNd = pNd->GetContentNode();
SwPosition aPos( *pNd );
if ( COMPLETE_STRING != m_nOldContentIndex )
OSL_ENSURE(pCNd, "SwHistoryChangeFlyAnchor: no ContentNode");
if (pCNd)
{
OSL_ENSURE(pCNd, "SwHistoryChangeFlyAnchor: no ContentNode");
if (pCNd)
{
aPos.nContent.Assign( pCNd, m_nOldContentIndex );
}
aPos.nContent.Assign( pCNd, m_nOldContentIndex );
}
aTmp.SetAnchor( &aPos );
// so the Layout does not get confused
if (!pCNd || !pCNd->getLayoutFrame(pDoc->getIDocumentLayoutAccess().GetCurrentLayout(), nullptr, nullptr))
{
m_rFormat.DelFrames();
}
m_rFormat.SetFormatAttr( aTmp );
}
aTmp.SetAnchor( &aPos );
// so the Layout does not get confused
if (!pCNd || !pCNd->getLayoutFrame(pDoc->getIDocumentLayoutAccess().GetCurrentLayout(), nullptr, nullptr))
{
m_rFormat.DelFrames();
}
m_rFormat.SetFormatAttr( aTmp );
}
SwHistoryChangeFlyChain::SwHistoryChangeFlyChain( SwFlyFrameFormat& rFormat,
@@ -967,32 +967,32 @@ SwHistoryChangeFlyChain::SwHistoryChangeFlyChain( SwFlyFrameFormat& rFormat,
void SwHistoryChangeFlyChain::SetInDoc( SwDoc* pDoc, bool )
{
if (pDoc->GetSpzFrameFormats()->IsAlive(m_pFlyFormat))
if (!pDoc->GetSpzFrameFormats()->IsAlive(m_pFlyFormat))
return;
SwFormatChain aChain;
if (m_pPrevFormat &&
pDoc->GetSpzFrameFormats()->IsAlive(m_pPrevFormat))
{
SwFormatChain aChain;
aChain.SetPrev( m_pPrevFormat );
SwFormatChain aTmp( m_pPrevFormat->GetChain() );
aTmp.SetNext( m_pFlyFormat );
m_pPrevFormat->SetFormatAttr( aTmp );
}
if (m_pPrevFormat &&
pDoc->GetSpzFrameFormats()->IsAlive(m_pPrevFormat))
{
aChain.SetPrev( m_pPrevFormat );
SwFormatChain aTmp( m_pPrevFormat->GetChain() );
aTmp.SetNext( m_pFlyFormat );
m_pPrevFormat->SetFormatAttr( aTmp );
}
if (m_pNextFormat &&
pDoc->GetSpzFrameFormats()->IsAlive(m_pNextFormat))
{
aChain.SetNext( m_pNextFormat );
SwFormatChain aTmp( m_pNextFormat->GetChain() );
aTmp.SetPrev( m_pFlyFormat );
m_pNextFormat->SetFormatAttr( aTmp );
}
if (m_pNextFormat &&
pDoc->GetSpzFrameFormats()->IsAlive(m_pNextFormat))
{
aChain.SetNext( m_pNextFormat );
SwFormatChain aTmp( m_pNextFormat->GetChain() );
aTmp.SetPrev( m_pFlyFormat );
m_pNextFormat->SetFormatAttr( aTmp );
}
if ( aChain.GetNext() || aChain.GetPrev() )
{
m_pFlyFormat->SetFormatAttr( aChain );
}
if ( aChain.GetNext() || aChain.GetPrev() )
{
m_pFlyFormat->SetFormatAttr( aChain );
}
}
@@ -1265,21 +1265,21 @@ void SwHistory::CopyFormatAttr(
const SfxItemSet& rSet,
sal_uLong nNodeIdx)
{
if(rSet.Count())
if(!rSet.Count())
return;
SfxItemIter aIter(rSet);
const SfxPoolItem* pItem = aIter.GetCurItem();
do
{
SfxItemIter aIter(rSet);
const SfxPoolItem* pItem = aIter.GetCurItem();
do
if(!IsInvalidItem(pItem))
{
if(!IsInvalidItem(pItem))
{
Add(pItem, pItem, nNodeIdx);
}
Add(pItem, pItem, nNodeIdx);
}
pItem = aIter.NextItem();
pItem = aIter.NextItem();
} while(pItem);
}
} while(pItem);
}
void SwHistory::dumpAsXml(xmlTextWriterPtr pWriter) const
@@ -1380,49 +1380,49 @@ SwRegHistory::SwRegHistory( const SwNode& rNd, SwHistory* pHst )
void SwRegHistory::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
{
if ( m_pHistory && pNew && pOld != pNew )
{
if ( pNew->Which() < POOLATTR_END )
{
if(RES_UPDATE_ATTR == pNew->Which())
{
// const SfxItemPool& rPool = static_cast< const SwUpdateAttr* >(pNew)->GetSfxItemPool();
if ( !(m_pHistory && pNew && pOld != pNew) )
return;
m_pHistory->Add(
// rPool,
pOld,
pNew,
m_nNodeIndex);
if ( pNew->Which() < POOLATTR_END )
{
if(RES_UPDATE_ATTR == pNew->Which())
{
// const SfxItemPool& rPool = static_cast< const SwUpdateAttr* >(pNew)->GetSfxItemPool();
m_pHistory->Add(
// rPool,
pOld,
pNew,
m_nNodeIndex);
}
else
{
OSL_ENSURE(false, "Unexpected update attribute (!)");
}
}
else if (pOld && RES_ATTRSET_CHG == pNew->Which())
{
std::unique_ptr<SwHistoryHint> pNewHstr;
const SfxItemSet& rSet = *static_cast< const SwAttrSetChg* >(pOld)->GetChgSet();
if ( 1 < rSet.Count() )
{
pNewHstr.reset( new SwHistorySetAttrSet( rSet, m_nNodeIndex, m_WhichIdSet ) );
}
else if (const SfxPoolItem* pItem = SfxItemIter(rSet).GetCurItem())
{
if ( m_WhichIdSet.count( pItem->Which() ) )
{
pNewHstr.reset( new SwHistorySetFormat( pItem, m_nNodeIndex ) );
}
else
{
OSL_ENSURE(false, "Unexpected update attribute (!)");
pNewHstr.reset( new SwHistoryResetFormat( pItem, m_nNodeIndex ) );
}
}
else if (pOld && RES_ATTRSET_CHG == pNew->Which())
{
std::unique_ptr<SwHistoryHint> pNewHstr;
const SfxItemSet& rSet = *static_cast< const SwAttrSetChg* >(pOld)->GetChgSet();
if ( 1 < rSet.Count() )
{
pNewHstr.reset( new SwHistorySetAttrSet( rSet, m_nNodeIndex, m_WhichIdSet ) );
}
else if (const SfxPoolItem* pItem = SfxItemIter(rSet).GetCurItem())
{
if ( m_WhichIdSet.count( pItem->Which() ) )
{
pNewHstr.reset( new SwHistorySetFormat( pItem, m_nNodeIndex ) );
}
else
{
pNewHstr.reset( new SwHistoryResetFormat( pItem, m_nNodeIndex ) );
}
}
if (pNewHstr)
m_pHistory->m_SwpHstry.push_back( std::move(pNewHstr) );
}
if (pNewHstr)
m_pHistory->m_SwpHstry.push_back( std::move(pNewHstr) );
}
}
@@ -1511,27 +1511,27 @@ void SwRegHistory::MakeSetWhichIds()
m_WhichIdSet.clear();
if( GetRegisteredIn() )
if( !GetRegisteredIn() )
return;
const SfxItemSet* pSet = nullptr;
if( dynamic_cast< const SwContentNode *>( GetRegisteredIn() ) != nullptr )
{
const SfxItemSet* pSet = nullptr;
if( dynamic_cast< const SwContentNode *>( GetRegisteredIn() ) != nullptr )
pSet = static_cast<SwContentNode*>(
GetRegisteredIn())->GetpSwAttrSet();
}
else if ( dynamic_cast< const SwFormat *>( GetRegisteredIn() ) != nullptr )
{
pSet = &static_cast<SwFormat*>(
GetRegisteredIn())->GetAttrSet();
}
if( pSet && pSet->Count() )
{
SfxItemIter aIter( *pSet );
for (const SfxPoolItem* pItem = aIter.GetCurItem(); pItem; pItem = aIter.NextItem())
{
pSet = static_cast<SwContentNode*>(
GetRegisteredIn())->GetpSwAttrSet();
}
else if ( dynamic_cast< const SwFormat *>( GetRegisteredIn() ) != nullptr )
{
pSet = &static_cast<SwFormat*>(
GetRegisteredIn())->GetAttrSet();
}
if( pSet && pSet->Count() )
{
SfxItemIter aIter( *pSet );
for (const SfxPoolItem* pItem = aIter.GetCurItem(); pItem; pItem = aIter.NextItem())
{
sal_uInt16 nW = pItem->Which();
m_WhichIdSet.insert( nW );
}
sal_uInt16 nW = pItem->Which();
m_WhichIdSet.insert( nW );
}
}
}
diff --git a/sw/source/core/undo/unattr.cxx b/sw/source/core/undo/unattr.cxx
index efc6999..715de15 100644
--- a/sw/source/core/undo/unattr.cxx
+++ b/sw/source/core/undo/unattr.cxx
@@ -62,31 +62,31 @@ SwUndoFormatAttrHelper::SwUndoFormatAttrHelper( SwFormat& rFormat, bool bSvDrwPt
void SwUndoFormatAttrHelper::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
{
if( pOld ) {
if ( pOld->Which() == RES_OBJECTDYING ) {
CheckRegistration( pOld );
} else if ( pNew ) {
const SwDoc& rDoc = *static_cast<SwFormat*>(GetRegisteredInNonConst())->GetDoc();
if( POOLATTR_END >= pOld->Which() ) {
if ( GetUndo() ) {
m_pUndo->PutAttr( *pOld, rDoc );
} else {
m_pUndo.reset( new SwUndoFormatAttr( *pOld,
*static_cast<SwFormat*>(GetRegisteredInNonConst()), m_bSaveDrawPt ) );
if( !pOld ) return;
if ( pOld->Which() == RES_OBJECTDYING ) {
CheckRegistration( pOld );
} else if ( pNew ) {
const SwDoc& rDoc = *static_cast<SwFormat*>(GetRegisteredInNonConst())->GetDoc();
if( POOLATTR_END >= pOld->Which() ) {
if ( GetUndo() ) {
m_pUndo->PutAttr( *pOld, rDoc );
} else {
m_pUndo.reset( new SwUndoFormatAttr( *pOld,
*static_cast<SwFormat*>(GetRegisteredInNonConst()), m_bSaveDrawPt ) );
}
} else if ( RES_ATTRSET_CHG == pOld->Which() ) {
if ( GetUndo() ) {
SfxItemIter aIter(
*static_cast<const SwAttrSetChg*>(pOld)->GetChgSet() );
for (auto pItem = aIter.GetCurItem(); pItem; pItem = aIter.NextItem())
{
m_pUndo->PutAttr( *pItem, rDoc );
}
} else if ( RES_ATTRSET_CHG == pOld->Which() ) {
if ( GetUndo() ) {
SfxItemIter aIter(
*static_cast<const SwAttrSetChg*>(pOld)->GetChgSet() );
for (auto pItem = aIter.GetCurItem(); pItem; pItem = aIter.NextItem())
{
m_pUndo->PutAttr( *pItem, rDoc );
}
} else {
m_pUndo.reset( new SwUndoFormatAttr(
*static_cast<const SwAttrSetChg*>(pOld)->GetChgSet(),
*static_cast<SwFormat*>(GetRegisteredInNonConst()), m_bSaveDrawPt ) );
}
} else {
m_pUndo.reset( new SwUndoFormatAttr(
*static_cast<const SwAttrSetChg*>(pOld)->GetChgSet(),
*static_cast<SwFormat*>(GetRegisteredInNonConst()), m_bSaveDrawPt ) );
}
}
}
@@ -180,19 +180,19 @@ void SwUndoFormatAttr::UndoImpl(::sw::UndoRedoContext & rContext)
}
}
if ( !bAnchorAttrRestored ) {
SwUndoFormatAttrHelper aTmp( *pFormat, m_bSaveDrawPt );
pFormat->SetFormatAttr( *m_pOldSet );
if ( aTmp.GetUndo() ) {
// transfer ownership of helper object's old set
m_pOldSet = std::move(aTmp.GetUndo()->m_pOldSet);
} else {
m_pOldSet->ClearItem();
}
if ( bAnchorAttrRestored ) return;
if ( RES_FLYFRMFMT == m_nFormatWhich || RES_DRAWFRMFMT == m_nFormatWhich ) {
rContext.SetSelections(static_cast<SwFrameFormat*>(pFormat), nullptr);
}
SwUndoFormatAttrHelper aTmp( *pFormat, m_bSaveDrawPt );
pFormat->SetFormatAttr( *m_pOldSet );
if ( aTmp.GetUndo() ) {
// transfer ownership of helper object's old set
m_pOldSet = std::move(aTmp.GetUndo()->m_pOldSet);
} else {
m_pOldSet->ClearItem();
}
if ( RES_FLYFRMFMT == m_nFormatWhich || RES_DRAWFRMFMT == m_nFormatWhich ) {
rContext.SetSelections(static_cast<SwFrameFormat*>(pFormat), nullptr);
}
}
diff --git a/sw/source/core/undo/undel.cxx b/sw/source/core/undo/undel.cxx
index e8d01b9..075a306 100644
--- a/sw/source/core/undo/undel.cxx
+++ b/sw/source/core/undo/undel.cxx
@@ -120,27 +120,27 @@ static void DelFullParaMoveFrames(SwDoc & rDoc, SwUndRng const& rRange,
SwTextNode * pFirstMergedDeletedTextNode(nullptr);
SwTextNode *const pNextNode = FindFirstAndNextNode(rDoc, rRange,
rRedlineSaveData, pFirstMergedDeletedTextNode);
if (pNextNode)
if (!pNextNode)
return;
std::vector<SwTextFrame*> frames;
SwIterator<SwTextFrame, SwTextNode, sw::IteratorMode::UnwrapMulti> aIter(*pFirstMergedDeletedTextNode);
for (SwTextFrame* pFrame = aIter.First(); pFrame; pFrame = aIter.Next())
{
std::vector<SwTextFrame*> frames;
SwIterator<SwTextFrame, SwTextNode, sw::IteratorMode::UnwrapMulti> aIter(*pFirstMergedDeletedTextNode);
for (SwTextFrame* pFrame = aIter.First(); pFrame; pFrame = aIter.Next())
if (pFrame->getRootFrame()->IsHideRedlines())
{
if (pFrame->getRootFrame()->IsHideRedlines())
{
assert(pFrame->GetMergedPara());
assert(pFrame->GetMergedPara()->pFirstNode == pFirstMergedDeletedTextNode);
assert(pNextNode->GetIndex() <= pFrame->GetMergedPara()->pLastNode->GetIndex());
frames.push_back(pFrame);
}
assert(pFrame->GetMergedPara());
assert(pFrame->GetMergedPara()->pFirstNode == pFirstMergedDeletedTextNode);
assert(pNextNode->GetIndex() <= pFrame->GetMergedPara()->pLastNode->GetIndex());
frames.push_back(pFrame);
}
for (SwTextFrame *const pFrame : frames)
{
// sw_redlinehide: don't need FrameMode::Existing here
// because everything from pNextNode onwards is already
// correctly hidden
pFrame->RegisterToNode(*pNextNode, true);
}
}
for (SwTextFrame *const pFrame : frames)
{
// sw_redlinehide: don't need FrameMode::Existing here
// because everything from pNextNode onwards is already
// correctly hidden
pFrame->RegisterToNode(*pNextNode, true);
}
}
@@ -818,24 +818,24 @@ SwRewriter SwUndoDelete::GetRewriter() const
// Every object, anchored "AtContent" will be reanchored at rPos
static void lcl_ReAnchorAtContentFlyFrames( const SwFrameFormats& rSpzArr, SwPosition &rPos, sal_uLong nOldIdx )
{
if( !rSpzArr.empty() )
if( rSpzArr.empty() )
return;
SwFlyFrameFormat* pFormat;
const SwFormatAnchor* pAnchor;
const SwPosition* pAPos;
for( size_t n = 0; n < rSpzArr.size(); ++n )
{
SwFlyFrameFormat* pFormat;
const SwFormatAnchor* pAnchor;
const SwPosition* pAPos;
for( size_t n = 0; n < rSpzArr.size(); ++n )
pFormat = static_cast<SwFlyFrameFormat*>(rSpzArr[n]);
pAnchor = &pFormat->GetAnchor();
if (pAnchor->GetAnchorId() == RndStdIds::FLY_AT_PARA)
{
pFormat = static_cast<SwFlyFrameFormat*>(rSpzArr[n]);
pAnchor = &pFormat->GetAnchor();
if (pAnchor->GetAnchorId() == RndStdIds::FLY_AT_PARA)
pAPos = pAnchor->GetContentAnchor();
if( pAPos && nOldIdx == pAPos->nNode.GetIndex() )
{
pAPos = pAnchor->GetContentAnchor();
if( pAPos && nOldIdx == pAPos->nNode.GetIndex() )
{
SwFormatAnchor aAnch( *pAnchor );
aAnch.SetAnchor( &rPos );
pFormat->SetFormatAttr( aAnch );
}
SwFormatAnchor aAnch( *pAnchor );
aAnch.SetAnchor( &rPos );
pFormat->SetFormatAttr( aAnch );
}
}
}
diff --git a/sw/source/core/undo/undobj.cxx b/sw/source/core/undo/undobj.cxx
index f0ed413..268e0ea 100644
--- a/sw/source/core/undo/undobj.cxx
+++ b/sw/source/core/undo/undobj.cxx
@@ -1066,125 +1066,125 @@ void SwUndoSaveContent::DelContentIndex( const SwPosition& rMark,
}
// 3. Bookmarks
if( DelContentType::Bkm & nDelContentType )
{
IDocumentMarkAccess* const pMarkAccess = pDoc->getIDocumentMarkAccess();
if( pMarkAccess->getAllMarksCount() )
{
for( sal_Int32 n = 0; n < pMarkAccess->getAllMarksCount(); ++n )
{
// #i81002#
bool bSavePos = false;
bool bSaveOtherPos = false;
const ::sw::mark::IMark *const pBkmk = pMarkAccess->getAllMarksBegin()[n];
auto const type(IDocumentMarkAccess::GetType(*pBkmk));
if( !(DelContentType::Bkm & nDelContentType) )
return;
if( DelContentType::CheckNoCntnt & nDelContentType )
IDocumentMarkAccess* const pMarkAccess = pDoc->getIDocumentMarkAccess();
if( !pMarkAccess->getAllMarksCount() )
return;
for( sal_Int32 n = 0; n < pMarkAccess->getAllMarksCount(); ++n )
{
// #i81002#
bool bSavePos = false;
bool bSaveOtherPos = false;
const ::sw::mark::IMark *const pBkmk = pMarkAccess->getAllMarksBegin()[n];
auto const type(IDocumentMarkAccess::GetType(*pBkmk));
if( DelContentType::CheckNoCntnt & nDelContentType )
{
if ( pStt->nNode <= pBkmk->GetMarkPos().nNode
&& pBkmk->GetMarkPos().nNode < pEnd->nNode )
{
bSavePos = true;
}
if ( pBkmk->IsExpanded()
&& pStt->nNode <= pBkmk->GetOtherMarkPos().nNode
&& pBkmk->GetOtherMarkPos().nNode < pEnd->nNode )
{
bSaveOtherPos = true;
}
}
else
{
// #i92125#
// keep cross-reference bookmarks, if content inside one paragraph is deleted.
if ( rMark.nNode == rPoint.nNode
&& ( type == IDocumentMarkAccess::MarkType::CROSSREF_HEADING_BOOKMARK
|| type == IDocumentMarkAccess::MarkType::CROSSREF_NUMITEM_BOOKMARK))
{
continue;
}
bool bMaybe = false;
if ( *pStt <= pBkmk->GetMarkPos() && pBkmk->GetMarkPos() <= *pEnd )
{
if ( pBkmk->GetMarkPos() == *pEnd
|| ( *pStt == pBkmk->GetMarkPos() && pBkmk->IsExpanded() ) )
bMaybe = true;
else
bSavePos = true;
}
if( pBkmk->IsExpanded() &&
*pStt <= pBkmk->GetOtherMarkPos() && pBkmk->GetOtherMarkPos() <= *pEnd )
{
if ( bSavePos || bSaveOtherPos
|| (*pStt < pBkmk->GetOtherMarkPos() && pBkmk->GetOtherMarkPos() < *pEnd)
|| type == IDocumentMarkAccess::MarkType::TEXT_FIELDMARK
|| type == IDocumentMarkAccess::MarkType::CHECKBOX_FIELDMARK
|| type == IDocumentMarkAccess::MarkType::DROPDOWN_FIELDMARK
|| type == IDocumentMarkAccess::MarkType::DATE_FIELDMARK)
{
if ( pStt->nNode <= pBkmk->GetMarkPos().nNode
&& pBkmk->GetMarkPos().nNode < pEnd->nNode )
if( bMaybe )
bSavePos = true;
bSaveOtherPos = true;
}
}
if ( !bSavePos && !bSaveOtherPos
&& dynamic_cast< const ::sw::mark::CrossRefBookmark* >(pBkmk) )
{
// certain special handling for cross-reference bookmarks
const bool bDifferentTextNodesAtMarkAndPoint =
rMark.nNode != rPoint.nNode
&& rMark.nNode.GetNode().GetTextNode()
&& rPoint.nNode.GetNode().GetTextNode();
if ( bDifferentTextNodesAtMarkAndPoint )
{
// delete cross-reference bookmark at <pStt>, if only part of
// <pEnd> text node content is deleted.
if( pStt->nNode == pBkmk->GetMarkPos().nNode
&& pEnd->nContent.GetIndex() != pEnd->nNode.GetNode().GetTextNode()->Len() )
{
bSavePos = true;
bSaveOtherPos = false; // cross-reference bookmarks are not expanded
}
if ( pBkmk->IsExpanded()
&& pStt->nNode <= pBkmk->GetOtherMarkPos().nNode
&& pBkmk->GetOtherMarkPos().nNode < pEnd->nNode )
// delete cross-reference bookmark at <pEnd>, if only part of
// <pStt> text node content is deleted.
else if( pEnd->nNode == pBkmk->GetMarkPos().nNode &&
pStt->nContent.GetIndex() != 0 )
{
bSaveOtherPos = true;
bSavePos = true;
bSaveOtherPos = false; // cross-reference bookmarks are not expanded
}
}
else
}
else if (type == IDocumentMarkAccess::MarkType::ANNOTATIONMARK)
{
// delete annotation marks, if its end position is covered by the deletion
const SwPosition& rAnnotationEndPos = pBkmk->GetMarkEnd();
if ( *pStt < rAnnotationEndPos && rAnnotationEndPos <= *pEnd )
{
// #i92125#
// keep cross-reference bookmarks, if content inside one paragraph is deleted.
if ( rMark.nNode == rPoint.nNode
&& ( type == IDocumentMarkAccess::MarkType::CROSSREF_HEADING_BOOKMARK
|| type == IDocumentMarkAccess::MarkType::CROSSREF_NUMITEM_BOOKMARK))
{
continue;
}
bool bMaybe = false;
if ( *pStt <= pBkmk->GetMarkPos() && pBkmk->GetMarkPos() <= *pEnd )
{
if ( pBkmk->GetMarkPos() == *pEnd
|| ( *pStt == pBkmk->GetMarkPos() && pBkmk->IsExpanded() ) )
bMaybe = true;
else
bSavePos = true;
}
if( pBkmk->IsExpanded() &&
*pStt <= pBkmk->GetOtherMarkPos() && pBkmk->GetOtherMarkPos() <= *pEnd )
{
if ( bSavePos || bSaveOtherPos
|| (*pStt < pBkmk->GetOtherMarkPos() && pBkmk->GetOtherMarkPos() < *pEnd)
|| type == IDocumentMarkAccess::MarkType::TEXT_FIELDMARK
|| type == IDocumentMarkAccess::MarkType::CHECKBOX_FIELDMARK
|| type == IDocumentMarkAccess::MarkType::DROPDOWN_FIELDMARK
|| type == IDocumentMarkAccess::MarkType::DATE_FIELDMARK)
{
if( bMaybe )
bSavePos = true;
bSaveOtherPos = true;
}
}
if ( !bSavePos && !bSaveOtherPos
&& dynamic_cast< const ::sw::mark::CrossRefBookmark* >(pBkmk) )
{
// certain special handling for cross-reference bookmarks
const bool bDifferentTextNodesAtMarkAndPoint =
rMark.nNode != rPoint.nNode
&& rMark.nNode.GetNode().GetTextNode()
&& rPoint.nNode.GetNode().GetTextNode();
if ( bDifferentTextNodesAtMarkAndPoint )
{
// delete cross-reference bookmark at <pStt>, if only part of
// <pEnd> text node content is deleted.
if( pStt->nNode == pBkmk->GetMarkPos().nNode
&& pEnd->nContent.GetIndex() != pEnd->nNode.GetNode().GetTextNode()->Len() )
{
bSavePos = true;
bSaveOtherPos = false; // cross-reference bookmarks are not expanded
}
// delete cross-reference bookmark at <pEnd>, if only part of
// <pStt> text node content is deleted.
else if( pEnd->nNode == pBkmk->GetMarkPos().nNode &&
pStt->nContent.GetIndex() != 0 )
{
bSavePos = true;
bSaveOtherPos = false; // cross-reference bookmarks are not expanded
}
}
}
else if (type == IDocumentMarkAccess::MarkType::ANNOTATIONMARK)
{
// delete annotation marks, if its end position is covered by the deletion
const SwPosition& rAnnotationEndPos = pBkmk->GetMarkEnd();
if ( *pStt < rAnnotationEndPos && rAnnotationEndPos <= *pEnd )
{
bSavePos = true;
bSaveOtherPos = pBkmk->IsExpanded(); //tdf#90138, only save the other pos if there is one
}
}
bSavePos = true;
bSaveOtherPos = pBkmk->IsExpanded(); //tdf#90138, only save the other pos if there is one
}
}
}
if ( bSavePos || bSaveOtherPos )
{
if (type != IDocumentMarkAccess::MarkType::UNO_BOOKMARK)
{
if( !m_pHistory )
m_pHistory.reset( new SwHistory );
m_pHistory->Add( *pBkmk, bSavePos, bSaveOtherPos );
}
if ( bSavePos
&& ( bSaveOtherPos
|| !pBkmk->IsExpanded() ) )
{
pMarkAccess->deleteMark(pMarkAccess->getAllMarksBegin()+n);
n--;
}
}
if ( bSavePos || bSaveOtherPos )
{
if (type != IDocumentMarkAccess::MarkType::UNO_BOOKMARK)
{
if( !m_pHistory )
m_pHistory.reset( new SwHistory );
m_pHistory->Add( *pBkmk, bSavePos, bSaveOtherPos );
}
if ( bSavePos
&& ( bSaveOtherPos
|| !pBkmk->IsExpanded() ) )
{
pMarkAccess->deleteMark(pMarkAccess->getAllMarksBegin()+n);
n--;
}
}
}
@@ -1265,40 +1265,40 @@ void SwUndoSaveSection::SaveSection(
void SwUndoSaveSection::RestoreSection( SwDoc* pDoc, SwNodeIndex* pIdx,
sal_uInt16 nSectType )
{
if( ULONG_MAX != m_nStartPos ) // was there any content?
{
// check if the content is at the old position
SwNodeIndex aSttIdx( pDoc->GetNodes(), m_nStartPos );
if( ULONG_MAX == m_nStartPos ) // was there any content?
return;
// move the content from UndoNodes array into Fly
SwStartNode* pSttNd = SwNodes::MakeEmptySection( aSttIdx,
static_cast<SwStartNodeType>(nSectType) );
// check if the content is at the old position
SwNodeIndex aSttIdx( pDoc->GetNodes(), m_nStartPos );
RestoreSection( pDoc, SwNodeIndex( *pSttNd->EndOfSectionNode() ));
// move the content from UndoNodes array into Fly
SwStartNode* pSttNd = SwNodes::MakeEmptySection( aSttIdx,
static_cast<SwStartNodeType>(nSectType) );
if( pIdx )
*pIdx = *pSttNd;
}
RestoreSection( pDoc, SwNodeIndex( *pSttNd->EndOfSectionNode() ));
if( pIdx )
*pIdx = *pSttNd;
}
void SwUndoSaveSection::RestoreSection(
SwDoc *const pDoc, const SwNodeIndex& rInsPos, bool bForceCreateFrames)
{
if( ULONG_MAX != m_nStartPos ) // was there any content?
if( ULONG_MAX == m_nStartPos ) // was there any content?
return;
SwPosition aInsPos( rInsPos );
sal_uLong nEnd = m_pMovedStart->GetIndex() + m_nMoveLen - 1;
MoveFromUndoNds(*pDoc, m_pMovedStart->GetIndex(), aInsPos, &nEnd, bForceCreateFrames);
// destroy indices again, content was deleted from UndoNodes array
m_pMovedStart.reset();
m_nMoveLen = 0;
if( m_pRedlineSaveData )
{
SwPosition aInsPos( rInsPos );
sal_uLong nEnd = m_pMovedStart->GetIndex() + m_nMoveLen - 1;
MoveFromUndoNds(*pDoc, m_pMovedStart->GetIndex(), aInsPos, &nEnd, bForceCreateFrames);
// destroy indices again, content was deleted from UndoNodes array
m_pMovedStart.reset();
m_nMoveLen = 0;
if( m_pRedlineSaveData )
{
SwUndo::SetSaveData( *pDoc, *m_pRedlineSaveData );
m_pRedlineSaveData.reset();
}
SwUndo::SetSaveData( *pDoc, *m_pRedlineSaveData );
m_pRedlineSaveData.reset();
}
}
diff --git a/sw/source/core/undo/undobj1.cxx b/sw/source/core/undo/undobj1.cxx
index b9757d2..ea0f0f8 100644
--- a/sw/source/core/undo/undobj1.cxx
+++ b/sw/source/core/undo/undobj1.cxx
@@ -555,68 +555,68 @@ void SwUndoSetFlyFormat::UndoImpl(::sw::UndoRedoContext & rContext)
// Is the new Format still existent?
SwFrameFormat* pDerivedFromFrameFormat = rDoc.FindFrameFormatByName(m_DerivedFromFormatName);
if (pDerivedFromFrameFormat)
if (!pDerivedFromFrameFormat)
return;
if( m_bAnchorChanged )
m_pFrameFormat->DelFrames();
if( m_pFrameFormat->DerivedFrom() != pDerivedFromFrameFormat)
m_pFrameFormat->SetDerivedFrom(pDerivedFromFrameFormat);
SfxItemIter aIter( *m_pItemSet );
for (const SfxPoolItem* pItem = aIter.GetCurItem(); pItem; pItem = aIter.NextItem())
{
if( m_bAnchorChanged )
m_pFrameFormat->DelFrames();
if( m_pFrameFormat->DerivedFrom() != pDerivedFromFrameFormat)
m_pFrameFormat->SetDerivedFrom(pDerivedFromFrameFormat);
SfxItemIter aIter( *m_pItemSet );
for (const SfxPoolItem* pItem = aIter.GetCurItem(); pItem; pItem = aIter.NextItem())
{
if( IsInvalidItem( pItem ))
m_pFrameFormat->ResetFormatAttr( m_pItemSet->GetWhichByPos(
aIter.GetCurPos() ));
else
m_pFrameFormat->SetFormatAttr( *pItem );
}
if( m_bAnchorChanged )
{
const SwFormatAnchor& rOldAnch = m_pFrameFormat->GetAnchor();
if (RndStdIds::FLY_AS_CHAR == rOldAnch.GetAnchorId())
{
// With InContents it's tricky: the text attribute needs to be
// deleted. Unfortunately, this not only destroys the Frames but
// also the format. To prevent that, first detach the
// connection between attribute and format.
const SwPosition *pPos = rOldAnch.GetContentAnchor();
SwTextNode *pTextNode = pPos->nNode.GetNode().GetTextNode();
OSL_ENSURE( pTextNode->HasHints(), "Missing FlyInCnt-Hint." );
const sal_Int32 nIdx = pPos->nContent.GetIndex();
SwTextAttr * pHint = pTextNode->GetTextAttrForCharAt(
nIdx, RES_TXTATR_FLYCNT );
assert(pHint && "Missing Hint.");
OSL_ENSURE( pHint->Which() == RES_TXTATR_FLYCNT,
"Missing FlyInCnt-Hint." );
OSL_ENSURE( pHint->GetFlyCnt().GetFrameFormat() == m_pFrameFormat,
"Wrong TextFlyCnt-Hint." );
const_cast<SwFormatFlyCnt&>(pHint->GetFlyCnt()).SetFlyFormat();
// Connection is now detached, therefore the attribute can be
// deleted
pTextNode->DeleteAttributes( RES_TXTATR_FLYCNT, nIdx, nIdx );
}
// reposition anchor
SwFormatAnchor aNewAnchor( m_nOldAnchorType );
GetAnchor( aNewAnchor, m_nOldNode, m_nOldContent );
m_pFrameFormat->SetFormatAttr( aNewAnchor );
if (RndStdIds::FLY_AS_CHAR == aNewAnchor.GetAnchorId())
{
const SwPosition* pPos = aNewAnchor.GetContentAnchor();
SwFormatFlyCnt aFormat( m_pFrameFormat );
pPos->nNode.GetNode().GetTextNode()->InsertItem( aFormat,
m_nOldContent, 0 );
}
m_pFrameFormat->MakeFrames();
}
rContext.SetSelections(m_pFrameFormat, nullptr);
if( IsInvalidItem( pItem ))
m_pFrameFormat->ResetFormatAttr( m_pItemSet->GetWhichByPos(
aIter.GetCurPos() ));
else
m_pFrameFormat->SetFormatAttr( *pItem );
}
if( m_bAnchorChanged )
{
const SwFormatAnchor& rOldAnch = m_pFrameFormat->GetAnchor();
if (RndStdIds::FLY_AS_CHAR == rOldAnch.GetAnchorId())
{
// With InContents it's tricky: the text attribute needs to be
// deleted. Unfortunately, this not only destroys the Frames but
// also the format. To prevent that, first detach the
// connection between attribute and format.
const SwPosition *pPos = rOldAnch.GetContentAnchor();
SwTextNode *pTextNode = pPos->nNode.GetNode().GetTextNode();
OSL_ENSURE( pTextNode->HasHints(), "Missing FlyInCnt-Hint." );
const sal_Int32 nIdx = pPos->nContent.GetIndex();
SwTextAttr * pHint = pTextNode->GetTextAttrForCharAt(
nIdx, RES_TXTATR_FLYCNT );
assert(pHint && "Missing Hint.");
OSL_ENSURE( pHint->Which() == RES_TXTATR_FLYCNT,
"Missing FlyInCnt-Hint." );
OSL_ENSURE( pHint->GetFlyCnt().GetFrameFormat() == m_pFrameFormat,
"Wrong TextFlyCnt-Hint." );
const_cast<SwFormatFlyCnt&>(pHint->GetFlyCnt()).SetFlyFormat();
// Connection is now detached, therefore the attribute can be
// deleted
pTextNode->DeleteAttributes( RES_TXTATR_FLYCNT, nIdx, nIdx );
}
// reposition anchor
SwFormatAnchor aNewAnchor( m_nOldAnchorType );
GetAnchor( aNewAnchor, m_nOldNode, m_nOldContent );
m_pFrameFormat->SetFormatAttr( aNewAnchor );
if (RndStdIds::FLY_AS_CHAR == aNewAnchor.GetAnchorId())
{
const SwPosition* pPos = aNewAnchor.GetContentAnchor();
SwFormatFlyCnt aFormat( m_pFrameFormat );
pPos->nNode.GetNode().GetTextNode()->InsertItem( aFormat,
m_nOldContent, 0 );
}
m_pFrameFormat->MakeFrames();
}
rContext.SetSelections(m_pFrameFormat, nullptr);
}
void SwUndoSetFlyFormat::RedoImpl(::sw::UndoRedoContext & rContext)
@@ -625,21 +625,21 @@ void SwUndoSetFlyFormat::RedoImpl(::sw::UndoRedoContext & rContext)
// Is the new Format still existent?
SwFrameFormat* pNewFrameFormat = rDoc.FindFrameFormatByName(m_NewFormatName);
if (pNewFrameFormat)
{
if( m_bAnchorChanged )
{
SwFormatAnchor aNewAnchor( m_nNewAnchorType );
GetAnchor( aNewAnchor, m_nNewNode, m_nNewContent );
SfxItemSet aSet( rDoc.GetAttrPool(), aFrameFormatSetRange );
aSet.Put( aNewAnchor );
rDoc.SetFrameFormatToFly( *m_pFrameFormat, *pNewFrameFormat, &aSet );
}
else
rDoc.SetFrameFormatToFly( *m_pFrameFormat, *pNewFrameFormat);
if (!pNewFrameFormat)
return;
rContext.SetSelections(m_pFrameFormat, nullptr);
if( m_bAnchorChanged )
{
SwFormatAnchor aNewAnchor( m_nNewAnchorType );
GetAnchor( aNewAnchor, m_nNewNode, m_nNewContent );
SfxItemSet aSet( rDoc.GetAttrPool(), aFrameFormatSetRange );
aSet.Put( aNewAnchor );
rDoc.SetFrameFormatToFly( *m_pFrameFormat, *pNewFrameFormat, &aSet );
}
else
rDoc.SetFrameFormatToFly( *m_pFrameFormat, *pNewFrameFormat);
rContext.SetSelections(m_pFrameFormat, nullptr);
}
void SwUndoSetFlyFormat::PutAttr( sal_uInt16 nWhich, const SfxPoolItem* pItem )
@@ -697,19 +697,19 @@ void SwUndoSetFlyFormat::PutAttr( sal_uInt16 nWhich, const SfxPoolItem* pItem )
void SwUndoSetFlyFormat::Modify( const SfxPoolItem* pOld, const SfxPoolItem* )
{
if( pOld )
{
sal_uInt16 nWhich = pOld->Which();
if( !pOld )
return;
if( nWhich < POOLATTR_END )
PutAttr( nWhich, pOld );
else if( RES_ATTRSET_CHG == nWhich )
sal_uInt16 nWhich = pOld->Which();
if( nWhich < POOLATTR_END )
PutAttr( nWhich, pOld );
else if( RES_ATTRSET_CHG == nWhich )
{
SfxItemIter aIter( *static_cast<const SwAttrSetChg*>(pOld)->GetChgSet() );
for (const SfxPoolItem* pItem = aIter.GetCurItem(); pItem; pItem = aIter.NextItem())
{
SfxItemIter aIter( *static_cast<const SwAttrSetChg*>(pOld)->GetChgSet() );
for (const SfxPoolItem* pItem = aIter.GetCurItem(); pItem; pItem = aIter.NextItem())
{
PutAttr( pItem->Which(), pItem );
}
PutAttr( pItem->Which(), pItem );
}
}
}
diff --git a/sw/source/core/undo/undraw.cxx b/sw/source/core/undo/undraw.cxx
index b6c8bd5..e66e325 100644
--- a/sw/source/core/undo/undraw.cxx
+++ b/sw/source/core/undo/undraw.cxx
@@ -105,72 +105,72 @@ static void lcl_SendRemoveToUno( SwFormat& rFormat )
static void lcl_SaveAnchor( SwFrameFormat* pFormat, sal_uLong& rNodePos )
{
const SwFormatAnchor& rAnchor = pFormat->GetAnchor();
if ((RndStdIds::FLY_AT_PARA == rAnchor.GetAnchorId()) ||
if (!((RndStdIds::FLY_AT_PARA == rAnchor.GetAnchorId()) ||
(RndStdIds::FLY_AT_CHAR == rAnchor.GetAnchorId()) ||
(RndStdIds::FLY_AT_FLY == rAnchor.GetAnchorId()) ||
(RndStdIds::FLY_AS_CHAR == rAnchor.GetAnchorId()))
(RndStdIds::FLY_AS_CHAR == rAnchor.GetAnchorId())))
return;
rNodePos = rAnchor.GetContentAnchor()->nNode.GetIndex();
sal_Int32 nContentPos = 0;
if (RndStdIds::FLY_AS_CHAR == rAnchor.GetAnchorId())
{
rNodePos = rAnchor.GetContentAnchor()->nNode.GetIndex();
sal_Int32 nContentPos = 0;
nContentPos = rAnchor.GetContentAnchor()->nContent.GetIndex();
if (RndStdIds::FLY_AS_CHAR == rAnchor.GetAnchorId())
// destroy TextAttribute
SwTextNode *pTextNd = pFormat->GetDoc()->GetNodes()[ rNodePos ]->GetTextNode();
OSL_ENSURE( pTextNd, "No text node found!" );
SwTextFlyCnt* pAttr = static_cast<SwTextFlyCnt*>(
pTextNd->GetTextAttrForCharAt( nContentPos, RES_TXTATR_FLYCNT ));
// attribute still in text node, delete
if( pAttr && pAttr->GetFlyCnt().GetFrameFormat() == pFormat )
{
nContentPos = rAnchor.GetContentAnchor()->nContent.GetIndex();
// destroy TextAttribute
SwTextNode *pTextNd = pFormat->GetDoc()->GetNodes()[ rNodePos ]->GetTextNode();
OSL_ENSURE( pTextNd, "No text node found!" );
SwTextFlyCnt* pAttr = static_cast<SwTextFlyCnt*>(
pTextNd->GetTextAttrForCharAt( nContentPos, RES_TXTATR_FLYCNT ));
// attribute still in text node, delete
if( pAttr && pAttr->GetFlyCnt().GetFrameFormat() == pFormat )
{
// just set pointer to 0, don't delete
const_cast<SwFormatFlyCnt&>(pAttr->GetFlyCnt()).SetFlyFormat();
SwIndex aIdx( pTextNd, nContentPos );
pTextNd->EraseText( aIdx, 1 );
}
// just set pointer to 0, don't delete
const_cast<SwFormatFlyCnt&>(pAttr->GetFlyCnt()).SetFlyFormat();
SwIndex aIdx( pTextNd, nContentPos );
pTextNd->EraseText( aIdx, 1 );
}
else if (RndStdIds::FLY_AT_CHAR == rAnchor.GetAnchorId())
{
nContentPos = rAnchor.GetContentAnchor()->nContent.GetIndex();
}
pFormat->SetFormatAttr( SwFormatAnchor( rAnchor.GetAnchorId(), nContentPos ) );
}
else if (RndStdIds::FLY_AT_CHAR == rAnchor.GetAnchorId())
{
nContentPos = rAnchor.GetContentAnchor()->nContent.GetIndex();
}
pFormat->SetFormatAttr( SwFormatAnchor( rAnchor.GetAnchorId(), nContentPos ) );
}
static void lcl_RestoreAnchor( SwFrameFormat* pFormat, sal_uLong nNodePos )
{
const SwFormatAnchor& rAnchor = pFormat->GetAnchor();
if ((RndStdIds::FLY_AT_PARA == rAnchor.GetAnchorId()) ||
if (!((RndStdIds::FLY_AT_PARA == rAnchor.GetAnchorId()) ||
(RndStdIds::FLY_AT_CHAR == rAnchor.GetAnchorId()) ||
(RndStdIds::FLY_AT_FLY == rAnchor.GetAnchorId()) ||
(RndStdIds::FLY_AS_CHAR == rAnchor.GetAnchorId()))
(RndStdIds::FLY_AS_CHAR == rAnchor.GetAnchorId())))
return;
const sal_Int32 nContentPos = rAnchor.GetPageNum();
SwNodes& rNds = pFormat->GetDoc()->GetNodes();
SwNodeIndex aIdx( rNds, nNodePos );
SwPosition aPos( aIdx );
SwFormatAnchor aTmp( rAnchor.GetAnchorId() );
if ((RndStdIds::FLY_AS_CHAR == rAnchor.GetAnchorId()) ||
(RndStdIds::FLY_AT_CHAR == rAnchor.GetAnchorId()))
{
const sal_Int32 nContentPos = rAnchor.GetPageNum();
SwNodes& rNds = pFormat->GetDoc()->GetNodes();
aPos.nContent.Assign( aIdx.GetNode().GetContentNode(), nContentPos );
}
aTmp.SetAnchor( &aPos );
RndStdIds nAnchorId = rAnchor.GetAnchorId();
pFormat->SetFormatAttr( aTmp );
SwNodeIndex aIdx( rNds, nNodePos );
SwPosition aPos( aIdx );
SwFormatAnchor aTmp( rAnchor.GetAnchorId() );
if ((RndStdIds::FLY_AS_CHAR == rAnchor.GetAnchorId()) ||
(RndStdIds::FLY_AT_CHAR == rAnchor.GetAnchorId()))
{
aPos.nContent.Assign( aIdx.GetNode().GetContentNode(), nContentPos );
}
aTmp.SetAnchor( &aPos );
RndStdIds nAnchorId = rAnchor.GetAnchorId();
pFormat->SetFormatAttr( aTmp );
if (RndStdIds::FLY_AS_CHAR == nAnchorId)
{
SwTextNode *pTextNd = aIdx.GetNode().GetTextNode();
OSL_ENSURE( pTextNd, "no Text Node" );
SwFormatFlyCnt aFormat( pFormat );
pTextNd->InsertItem( aFormat, nContentPos, nContentPos );
}
if (RndStdIds::FLY_AS_CHAR == nAnchorId)
{
SwTextNode *pTextNd = aIdx.GetNode().GetTextNode();
OSL_ENSURE( pTextNd, "no Text Node" );
SwFormatFlyCnt aFormat( pFormat );
pTextNd->InsertItem( aFormat, nContentPos, nContentPos );
}
}
diff --git a/sw/source/core/undo/unovwr.cxx b/sw/source/core/undo/unovwr.cxx
index 56fa55b..c3ac1ee 100644
--- a/sw/source/core/undo/unovwr.cxx
+++ b/sw/source/core/undo/unovwr.cxx
@@ -448,26 +448,26 @@ void SwUndoTransliterate::AddChanges( SwTextNode& rTNd,
void UndoTransliterate_Data::SetChangeAtNode( SwDoc& rDoc )
{
SwTextNode* pTNd = rDoc.GetNodes()[ nNdIdx ]->GetTextNode();
if( pTNd )
{
Sequence <sal_Int32> aOffsets( pOffsets ? pOffsets->getLength() : nLen );
if( pOffsets )
aOffsets = *pOffsets;
else
{
sal_Int32* p = aOffsets.getArray();
for( sal_Int32 n = 0; n < nLen; ++n, ++p )
*p = n + nStart;
}
pTNd->ReplaceTextOnly( nStart, nLen, sText, aOffsets );
if( !pTNd )
return;
if( pHistory )
{
if( pTNd->GetpSwpHints() )
pTNd->ClearSwpHintsArr( false );
pHistory->TmpRollback( &rDoc, 0, false );
pHistory->SetTmpEnd( pHistory->Count() );
}
Sequence <sal_Int32> aOffsets( pOffsets ? pOffsets->getLength() : nLen );
if( pOffsets )
aOffsets = *pOffsets;
else
{
sal_Int32* p = aOffsets.getArray();
for( sal_Int32 n = 0; n < nLen; ++n, ++p )
*p = n + nStart;
}
pTNd->ReplaceTextOnly( nStart, nLen, sText, aOffsets );
if( pHistory )
{
if( pTNd->GetpSwpHints() )
pTNd->ClearSwpHintsArr( false );
pHistory->TmpRollback( &rDoc, 0, false );
pHistory->SetTmpEnd( pHistory->Count() );
}
}
diff --git a/sw/source/core/undo/unsect.cxx b/sw/source/core/undo/unsect.cxx
index db5deea..4d40d20 100644
--- a/sw/source/core/undo/unsect.cxx
+++ b/sw/source/core/undo/unsect.cxx
@@ -100,20 +100,20 @@ SwUndoInsSection::SwUndoInsSection(
if( !FillSaveData( rPam, *m_pRedlineSaveData, false ))
m_pRedlineSaveData.reset();
if( !rPam.HasMark() )
if( rPam.HasMark() )
return;
const SwContentNode* pCNd = rPam.GetPoint()->nNode.GetNode().GetContentNode();
if( pCNd && pCNd->HasSwAttrSet() && (
!rPam.GetPoint()->nContent.GetIndex() ||
rPam.GetPoint()->nContent.GetIndex() == pCNd->Len() ))
{
const SwContentNode* pCNd = rPam.GetPoint()->nNode.GetNode().GetContentNode();
if( pCNd && pCNd->HasSwAttrSet() && (
!rPam.GetPoint()->nContent.GetIndex() ||
rPam.GetPoint()->nContent.GetIndex() == pCNd->Len() ))
SfxItemSet aBrkSet( rDoc.GetAttrPool(), aBreakSetRange );
aBrkSet.Put( *pCNd->GetpSwAttrSet() );
if( aBrkSet.Count() )
{
SfxItemSet aBrkSet( rDoc.GetAttrPool(), aBreakSetRange );
aBrkSet.Put( *pCNd->GetpSwAttrSet() );
if( aBrkSet.Count() )
{
m_pHistory.reset( new SwHistory );
m_pHistory->CopyFormatAttr( aBrkSet, pCNd->GetIndex() );
}
m_pHistory.reset( new SwHistory );
m_pHistory->CopyFormatAttr( aBrkSet, pCNd->GetIndex() );
}
}
}
@@ -486,26 +486,26 @@ void SwUndoUpdateSection::UndoImpl(::sw::UndoRedoContext & rContext)
}
m_pAttrSet = std::move(pCur);
if (!m_bOnlyAttrChanged)
if (m_bOnlyAttrChanged)
return;
const bool bUpdate =
(!rNdSect.IsLinkType() && m_pSectionData->IsLinkType())
|| ( !m_pSectionData->GetLinkFileName().isEmpty()
&& (m_pSectionData->GetLinkFileName() !=
rNdSect.GetLinkFileName()));
// swap stored section data with live section data
SwSectionData *const pOld( new SwSectionData(rNdSect) );
rNdSect.SetSectionData(*m_pSectionData);
m_pSectionData.reset(pOld);
if( bUpdate )
rNdSect.CreateLink( LinkCreateType::Update );
else if( SectionType::Content == rNdSect.GetType() && rNdSect.IsConnected() )
{
const bool bUpdate =
(!rNdSect.IsLinkType() && m_pSectionData->IsLinkType())
|| ( !m_pSectionData->GetLinkFileName().isEmpty()
&& (m_pSectionData->GetLinkFileName() !=
rNdSect.GetLinkFileName()));
// swap stored section data with live section data
SwSectionData *const pOld( new SwSectionData(rNdSect) );
rNdSect.SetSectionData(*m_pSectionData);
m_pSectionData.reset(pOld);
if( bUpdate )
rNdSect.CreateLink( LinkCreateType::Update );
else if( SectionType::Content == rNdSect.GetType() && rNdSect.IsConnected() )
{
rNdSect.Disconnect();
rDoc.getIDocumentLinksAdministration().GetLinkManager().Remove( &rNdSect.GetBaseLink() );
}
rNdSect.Disconnect();
rDoc.getIDocumentLinksAdministration().GetLinkManager().Remove( &rNdSect.GetBaseLink() );
}
}
diff --git a/sw/source/core/undo/unspnd.cxx b/sw/source/core/undo/unspnd.cxx
index 54129f3..be2d009 100644
--- a/sw/source/core/undo/unspnd.cxx
+++ b/sw/source/core/undo/unspnd.cxx
@@ -153,39 +153,39 @@ void SwUndoSplitNode::RedoImpl(::sw::UndoRedoContext & rContext)
rPam.GetPoint()->nNode = m_nNode;
SwTextNode * pTNd = rPam.GetNode().GetTextNode();
OSL_ENSURE(pTNd, "SwUndoSplitNode::RedoImpl(): SwTextNode expected");
if (pTNd)
if (!pTNd)
return;
rPam.GetPoint()->nContent.Assign( pTNd, m_nContent );
SwDoc* pDoc = rPam.GetDoc();
pDoc->getIDocumentContentOperations().SplitNode( *rPam.GetPoint(), m_bCheckTableStart );
if (m_pHistory)
{
rPam.GetPoint()->nContent.Assign( pTNd, m_nContent );
SwDoc* pDoc = rPam.GetDoc();
pDoc->getIDocumentContentOperations().SplitNode( *rPam.GetPoint(), m_bCheckTableStart );
if (m_pHistory)
{
m_pHistory->SetTmpEnd(m_pHistory->Count());
}
if( ( m_pRedlineData && IDocumentRedlineAccess::IsRedlineOn( GetRedlineFlags() )) ||
( !( RedlineFlags::Ignore & GetRedlineFlags() ) &&
!pDoc->getIDocumentRedlineAccess().GetRedlineTable().empty() ))
{
rPam.SetMark();
if( rPam.Move( fnMoveBackward ))
{
if( m_pRedlineData && IDocumentRedlineAccess::IsRedlineOn( GetRedlineFlags() ))
{
RedlineFlags eOld = pDoc->getIDocumentRedlineAccess().GetRedlineFlags();
pDoc->getIDocumentRedlineAccess().SetRedlineFlags_intern(eOld & ~RedlineFlags::Ignore);
pDoc->getIDocumentRedlineAccess().AppendRedline( new SwRangeRedline( *m_pRedlineData, rPam ), true);
pDoc->getIDocumentRedlineAccess().SetRedlineFlags_intern( eOld );
}
else
pDoc->getIDocumentRedlineAccess().SplitRedline( rPam );
rPam.Exchange();
}
rPam.DeleteMark();
}
m_pHistory->SetTmpEnd(m_pHistory->Count());
}
if( !(( m_pRedlineData && IDocumentRedlineAccess::IsRedlineOn( GetRedlineFlags() )) ||
( !( RedlineFlags::Ignore & GetRedlineFlags() ) &&
!pDoc->getIDocumentRedlineAccess().GetRedlineTable().empty() )))
return;
rPam.SetMark();
if( rPam.Move( fnMoveBackward ))
{
if( m_pRedlineData && IDocumentRedlineAccess::IsRedlineOn( GetRedlineFlags() ))
{
RedlineFlags eOld = pDoc->getIDocumentRedlineAccess().GetRedlineFlags();
pDoc->getIDocumentRedlineAccess().SetRedlineFlags_intern(eOld & ~RedlineFlags::Ignore);
pDoc->getIDocumentRedlineAccess().AppendRedline( new SwRangeRedline( *m_pRedlineData, rPam ), true);
pDoc->getIDocumentRedlineAccess().SetRedlineFlags_intern( eOld );
}
else
pDoc->getIDocumentRedlineAccess().SplitRedline( rPam );
rPam.Exchange();
}
rPam.DeleteMark();
}
void SwUndoSplitNode::RepeatImpl(::sw::RepeatContext & rContext)
diff --git a/sw/source/core/undo/untbl.cxx b/sw/source/core/undo/untbl.cxx
index 8cbf571..5212849 100644
--- a/sw/source/core/undo/untbl.cxx
+++ b/sw/source/core/undo/untbl.cxx
@@ -316,26 +316,26 @@ void SwUndoInsTable::RedoImpl(::sw::UndoRedoContext & rContext)
m_pDDEFieldType.reset();
}
if( (m_pRedlineData && IDocumentRedlineAccess::IsRedlineOn( GetRedlineFlags() )) ||
if( !((m_pRedlineData && IDocumentRedlineAccess::IsRedlineOn( GetRedlineFlags() )) ||
( !( RedlineFlags::Ignore & GetRedlineFlags() ) &&
!rDoc.getIDocumentRedlineAccess().GetRedlineTable().empty() ))
!rDoc.getIDocumentRedlineAccess().GetRedlineTable().empty() )))
return;
SwPaM aPam( *pTableNode->EndOfSectionNode(), *pTableNode, 1 );
SwContentNode* pCNd = aPam.GetContentNode( false );
if( pCNd )
aPam.GetMark()->nContent.Assign( pCNd, 0 );
if( m_pRedlineData && IDocumentRedlineAccess::IsRedlineOn( GetRedlineFlags() ) )
{
SwPaM aPam( *pTableNode->EndOfSectionNode(), *pTableNode, 1 );
SwContentNode* pCNd = aPam.GetContentNode( false );
if( pCNd )
aPam.GetMark()->nContent.Assign( pCNd, 0 );
RedlineFlags eOld = rDoc.getIDocumentRedlineAccess().GetRedlineFlags();
rDoc.getIDocumentRedlineAccess().SetRedlineFlags_intern(eOld & ~RedlineFlags::Ignore);
if( m_pRedlineData && IDocumentRedlineAccess::IsRedlineOn( GetRedlineFlags() ) )
{
RedlineFlags eOld = rDoc.getIDocumentRedlineAccess().GetRedlineFlags();
rDoc.getIDocumentRedlineAccess().SetRedlineFlags_intern(eOld & ~RedlineFlags::Ignore);
rDoc.getIDocumentRedlineAccess().AppendRedline( new SwRangeRedline( *m_pRedlineData, aPam ), true);
rDoc.getIDocumentRedlineAccess().SetRedlineFlags_intern( eOld );
}
else
rDoc.getIDocumentRedlineAccess().SplitRedline( aPam );
rDoc.getIDocumentRedlineAccess().AppendRedline( new SwRangeRedline( *m_pRedlineData, aPam ), true);
rDoc.getIDocumentRedlineAccess().SetRedlineFlags_intern( eOld );
}
else
rDoc.getIDocumentRedlineAccess().SplitRedline( aPam );
}
void SwUndoInsTable::RepeatImpl(::sw::RepeatContext & rContext)
diff --git a/sw/source/core/undo/untblk.cxx b/sw/source/core/undo/untblk.cxx
index f6e7451..8c706cd 100644
--- a/sw/source/core/undo/untblk.cxx
+++ b/sw/source/core/undo/untblk.cxx
@@ -135,31 +135,31 @@ void SwUndoInserts::SetInsertRange( const SwPaM& rPam, bool bScanFlys,
// Fill m_FlyUndos with flys anchored to first and last paragraphs
if( bScanFlys)
if( !bScanFlys)
return;
// than collect all new Flys
SwDoc* pDoc = rPam.GetDoc();
const size_t nArrLen = pDoc->GetSpzFrameFormats()->size();
for( size_t n = 0; n < nArrLen; ++n )
{
// than collect all new Flys
SwDoc* pDoc = rPam.GetDoc();
const size_t nArrLen = pDoc->GetSpzFrameFormats()->size();
for( size_t n = 0; n < nArrLen; ++n )
SwFrameFormat* pFormat = (*pDoc->GetSpzFrameFormats())[n];
SwFormatAnchor const*const pAnchor = &pFormat->GetAnchor();
if (IsCreateUndoForNewFly(*pAnchor, m_nSttNode, m_nEndNode))
{
SwFrameFormat* pFormat = (*pDoc->GetSpzFrameFormats())[n];
SwFormatAnchor const*const pAnchor = &pFormat->GetAnchor();
if (IsCreateUndoForNewFly(*pAnchor, m_nSttNode, m_nEndNode))
std::vector<SwFrameFormat*>::iterator it;
if( !m_pFrameFormats ||
m_pFrameFormats->end() == ( it = std::find( m_pFrameFormats->begin(), m_pFrameFormats->end(), pFormat ) ) )
{
std::vector<SwFrameFormat*>::iterator it;
if( !m_pFrameFormats ||
m_pFrameFormats->end() == ( it = std::find( m_pFrameFormats->begin(), m_pFrameFormats->end(), pFormat ) ) )
{
std::shared_ptr<SwUndoInsLayFormat> const pFlyUndo =
std::make_shared<SwUndoInsLayFormat>(pFormat, 0, 0);
m_FlyUndos.push_back(pFlyUndo);
}
else
m_pFrameFormats->erase( it );
std::shared_ptr<SwUndoInsLayFormat> const pFlyUndo =
std::make_shared<SwUndoInsLayFormat>(pFormat, 0, 0);
m_FlyUndos.push_back(pFlyUndo);
}
else
m_pFrameFormats->erase( it );
}
m_pFrameFormats.reset();
}
m_pFrameFormats.reset();
}
/** This is not the same as IsDestroyFrameAnchoredAtChar()
@@ -323,46 +323,46 @@ void SwUndoInserts::UndoImpl(::sw::UndoRedoContext & rContext)
SwNodeIndex& rIdx = rPam.GetPoint()->nNode;
SwTextNode* pTextNode = rIdx.GetNode().GetTextNode();
if( pTextNode )
if( !pTextNode )
return;
if( !m_pTextFormatColl ) // if 0 than it's no TextNode -> delete
{
if( !m_pTextFormatColl ) // if 0 than it's no TextNode -> delete
SwNodeIndex aDelIdx( rIdx );
assert(0 < m_nDeleteTextNodes && m_nDeleteTextNodes < 3);
for (int i = 0; i < m_nDeleteTextNodes; ++i)
{
SwNodeIndex aDelIdx( rIdx );
assert(0 < m_nDeleteTextNodes && m_nDeleteTextNodes < 3);
for (int i = 0; i < m_nDeleteTextNodes; ++i)
{
rPam.Move(fnMoveForward, GoInNode);
}
rPam.DeleteMark();
for (int i = 0; i < m_nDeleteTextNodes; ++i)
{
RemoveIdxRel(aDelIdx.GetIndex() + i, *rPam.GetPoint());
}
rDoc.GetNodes().Delete( aDelIdx, m_nDeleteTextNodes );
rPam.Move(fnMoveForward, GoInNode);
}
else
rPam.DeleteMark();
for (int i = 0; i < m_nDeleteTextNodes; ++i)
{
if( bJoinNext && pTextNode->CanJoinNext())
{
{
RemoveIdxRel( rIdx.GetIndex()+1, SwPosition( rIdx,
SwIndex( pTextNode, pTextNode->GetText().getLength() )));
}
pTextNode->JoinNext();
}
// reset all text attributes in the paragraph!
pTextNode->RstTextAttr( SwIndex(pTextNode, 0), pTextNode->Len(), 0, nullptr, true );
pTextNode->ResetAllAttr();
if (rDoc.GetTextFormatColls()->IsAlive(m_pTextFormatColl))
m_pTextFormatColl = static_cast<SwTextFormatColl*>(pTextNode->ChgFormatColl( m_pTextFormatColl )) ;
m_pHistory->SetTmpEnd( m_nSetPos );
m_pHistory->TmpRollback(&rDoc, 0, false);
RemoveIdxRel(aDelIdx.GetIndex() + i, *rPam.GetPoint());
}
rDoc.GetNodes().Delete( aDelIdx, m_nDeleteTextNodes );
}
else
{
if( bJoinNext && pTextNode->CanJoinNext())
{
{
RemoveIdxRel( rIdx.GetIndex()+1, SwPosition( rIdx,
SwIndex( pTextNode, pTextNode->GetText().getLength() )));
}
pTextNode->JoinNext();
}
// reset all text attributes in the paragraph!
pTextNode->RstTextAttr( SwIndex(pTextNode, 0), pTextNode->Len(), 0, nullptr, true );
pTextNode->ResetAllAttr();
if (rDoc.GetTextFormatColls()->IsAlive(m_pTextFormatColl))
m_pTextFormatColl = static_cast<SwTextFormatColl*>(pTextNode->ChgFormatColl( m_pTextFormatColl )) ;
m_pHistory->SetTmpEnd( m_nSetPos );
m_pHistory->TmpRollback(&rDoc, 0, false);
}
}