sw/source/core/doc/doc.cxx | 9 ++++----- sw/source/core/doc/docbm.cxx | 36 ++++++++++++++++++++++++++++++++++++ sw/source/core/doc/docedt.cxx | 18 ++++++++---------- sw/source/core/docnode/ndtbl.cxx | 26 ++++++++++---------------- sw/source/core/inc/mvsave.hxx | 19 ++++++++++++------- sw/source/core/txtnode/ndtxt.cxx | 16 ++++++++-------- sw/source/core/undo/untbl.cxx | 12 +++++------- 7 files changed, 83 insertions(+), 53 deletions(-)
New commits: commit a72ea67d52bf083034756332bf5f7e5c1c416129 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Tue Jun 10 10:14:22 2014 +0200 decouple CntntStore so it can be refactored Change-Id: I26554a0e269d63830fd84b37a4323f40c80fc014 diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx index b6340d8..effc0bd 100644 --- a/sw/source/core/doc/doc.cxx +++ b/sw/source/core/doc/doc.cxx @@ -383,17 +383,16 @@ bool SwDoc::SplitNode( const SwPosition &rPos, bool bChkTableStart ) } } - const boost::shared_ptr<sw::mark::CntntIdxStore> aBkmkArr(sw::mark::CreateCntntIdxStore()); - _SaveCntntIdx( this, rPos.nNode.GetIndex(), rPos.nContent.GetIndex(), - *aBkmkArr.get(), SAVEFLY_SPLIT ); + const boost::shared_ptr<sw::mark::CntntIdxStore> pCntntStore(sw::mark::CntntIdxStore::Create()); + pCntntStore->Save( this, rPos.nNode.GetIndex(), rPos.nContent.GetIndex(), SAVEFLY_SPLIT ); // FIXME: only SwTxtNode has a valid implementation of SplitCntntNode! OSL_ENSURE(pNode->IsTxtNode(), "splitting non-text node?"); pNode = pNode->SplitCntntNode( rPos ); if (pNode) { // move all bookmarks, TOXMarks, FlyAtCnt - if( !aBkmkArr.get()->empty() ) - _RestoreCntntIdx( this, *aBkmkArr.get(), rPos.nNode.GetIndex()-1, 0, true ); + if( !pCntntStore->Empty() ) + pCntntStore->Restore( this, rPos.nNode.GetIndex()-1, 0, true ); // To-Do - add 'SwExtraRedlineTbl' also ? if( IsRedlineOn() || (!IsIgnoreRedline() && !mpRedlineTbl->empty() )) diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx index ea560b7..271096c 100644 --- a/sw/source/core/doc/docbm.cxx +++ b/sw/source/core/doc/docbm.cxx @@ -1503,10 +1503,6 @@ void _DelBookmarks( } } -boost::shared_ptr< ::sw::mark::CntntIdxStore> sw::mark::CreateCntntIdxStore() -{ - return boost::shared_ptr< ::sw::mark::CntntIdxStore>(new sw::mark::CntntIdxStore()); -} void _SaveCntntIdx(SwDoc* pDoc, sal_uLong nNode, @@ -2054,4 +2050,39 @@ void _RestoreCntntIdx(std::vector<sal_uLong> &rSaveArr, } } +namespace +{ + struct CntntIdxStoreImpl : sw::mark::CntntIdxStore + { + std::vector<sal_uLong> aSaveArr; + virtual void Clear() + { + aSaveArr.clear(); + } + virtual bool Empty() + { + return aSaveArr.empty(); + } + virtual void Save(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nCntnt, sal_uInt8 nSaveFly=0) + { + return _SaveCntntIdx(pDoc, nNode, nCntnt, aSaveArr, nSaveFly); + } + virtual void Restore(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nOffset=0, bool bAuto = false) + { + return _RestoreCntntIdx(pDoc, aSaveArr, nNode, nOffset, bAuto); + } + virtual void Restore(SwNode& rNd, sal_Int32 nLen, sal_Int32 nCorrLen) + { + return _RestoreCntntIdx(aSaveArr, rNd, nLen, nCorrLen); + } + virtual ~CntntIdxStoreImpl(){}; + }; +} + +namespace sw { namespace mark { + boost::shared_ptr<CntntIdxStore> CntntIdxStore::Create() + { + return boost::shared_ptr<CntntIdxStore>(new CntntIdxStoreImpl()); + } +}} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/doc/docedt.cxx b/sw/source/core/doc/docedt.cxx index c83aefa..2ce11ac 100644 --- a/sw/source/core/doc/docedt.cxx +++ b/sw/source/core/doc/docedt.cxx @@ -905,14 +905,13 @@ bool SwDoc::MoveRange( SwPaM& rPaM, SwPosition& rPos, SwMoveFlags eMvFlags ) bSplit = true; const sal_Int32 nMkCntnt = rPaM.GetMark()->nContent.GetIndex(); - const boost::shared_ptr<sw::mark::CntntIdxStore> aBkmkArr(sw::mark::CreateCntntIdxStore()); - _SaveCntntIdx( this, rPos.nNode.GetIndex(), rPos.nContent.GetIndex(), - *aBkmkArr.get(), SAVEFLY_SPLIT ); + const boost::shared_ptr<sw::mark::CntntIdxStore> pCntntStore(sw::mark::CntntIdxStore::Create()); + pCntntStore->Save( this, rPos.nNode.GetIndex(), rPos.nContent.GetIndex(), SAVEFLY_SPLIT ); pTNd = static_cast<SwTxtNode*>(pTNd->SplitCntntNode( rPos )); - if( !aBkmkArr.get()->empty() ) - _RestoreCntntIdx( this, *aBkmkArr.get(), rPos.nNode.GetIndex()-1, 0, true ); + if( !pCntntStore->Empty() ) + pCntntStore->Restore( this, rPos.nNode.GetIndex()-1, 0, true ); // correct the PaM! if( rPos.nNode == rPaM.GetMark()->nNode ) @@ -1328,9 +1327,8 @@ void sw_JoinText( SwPaM& rPam, bool bJoinPrev ) } pOldTxtNd->FmtToTxtAttr( pTxtNd ); - const boost::shared_ptr< sw::mark::CntntIdxStore> aBkmkArr(sw::mark::CreateCntntIdxStore()); - ::_SaveCntntIdx( pDoc, aOldIdx.GetIndex(), - pOldTxtNd->Len(), *aBkmkArr.get() ); + const boost::shared_ptr< sw::mark::CntntIdxStore> pCntntStore(sw::mark::CntntIdxStore::Create()); + pCntntStore->Save( pDoc, aOldIdx.GetIndex(), pOldTxtNd->Len() ); SwIndex aAlphaIdx(pTxtNd); pOldTxtNd->CutText( pTxtNd, aAlphaIdx, SwIndex(pOldTxtNd), @@ -1339,8 +1337,8 @@ void sw_JoinText( SwPaM& rPam, bool bJoinPrev ) pDoc->CorrRel( rPam.GetPoint()->nNode, aAlphaPos, 0, true ); // move all Bookmarks/TOXMarks - if( !aBkmkArr.get()->empty() ) - ::_RestoreCntntIdx( pDoc, *aBkmkArr.get(), aIdx.GetIndex() ); + if( !pCntntStore->Empty() ) + pCntntStore->Restore( pDoc, aIdx.GetIndex() ); // If the passed PaM is not in the Crsr ring, // treat it separately (e.g. when it's being called from AutoFormat) diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx index cd0943e..fad6ee0 100644 --- a/sw/source/core/docnode/ndtbl.cxx +++ b/sw/source/core/docnode/ndtbl.cxx @@ -1048,9 +1048,8 @@ SwTableNode* SwNodes::TextToTable( const SwNodeRange& rRange, sal_Unicode cCh, SwStartNode* pSttNd; SwPosition aCntPos( aSttIdx, SwIndex( pTxtNd )); - const boost::shared_ptr< sw::mark::CntntIdxStore> aBkmkArr(sw::mark::CreateCntntIdxStore()); - _SaveCntntIdx( pDoc, aSttIdx.GetIndex(), pTxtNd->GetTxt().getLength(), - *aBkmkArr.get() ); + const boost::shared_ptr< sw::mark::CntntIdxStore> pCntntStore(sw::mark::CntntIdxStore::Create()); + pCntntStore->Save( pDoc, aSttIdx.GetIndex(), pTxtNd->GetTxt().getLength() ); if( T2T_PARA != cCh ) { @@ -1061,9 +1060,8 @@ SwTableNode* SwNodes::TextToTable( const SwNodeRange& rRange, sal_Unicode cCh, aCntPos.nContent = nChPos; SwCntntNode* pNewNd = pTxtNd->SplitCntntNode( aCntPos ); - if( !aBkmkArr.get()->empty() ) - _RestoreCntntIdx( *aBkmkArr.get(), *pNewNd, nChPos, - nChPos + 1 ); + if( !pCntntStore->Empty() ) + pCntntStore->Restore( *pNewNd, nChPos, nChPos + 1 ); // Delete separator and correct search string pTxtNd->EraseText( aCntPos.nContent, 1 ); @@ -1088,9 +1086,8 @@ SwTableNode* SwNodes::TextToTable( const SwNodeRange& rRange, sal_Unicode cCh, } // Now for the last substring - if( !aBkmkArr.get()->empty() ) - _RestoreCntntIdx( *aBkmkArr.get(), *pTxtNd, pTxtNd->GetTxt().getLength(), - pTxtNd->GetTxt().getLength()+1 ); + if( !pCntntStore->Empty()) + pCntntStore->Restore( *pTxtNd, pTxtNd->GetTxt().getLength(), pTxtNd->GetTxt().getLength()+1 ); pSttNd = new SwStartNode( aCntPos.nNode, ND_STARTNODE, SwTableBoxStartNode ); const SwNodeIndex aTmpIdx( aCntPos.nNode, 1 ); @@ -1519,17 +1516,14 @@ static void lcl_DelBox( SwTableBox* pBox, _DelTabPara* pDelPara ) pDelPara->pUndo->AddBoxPos( *pDoc, nNdIdx, aDelRg.aEnd.GetIndex(), aCntIdx.GetIndex() ); - const boost::shared_ptr<sw::mark::CntntIdxStore> aBkmkArr(sw::mark::CreateCntntIdxStore()); + const boost::shared_ptr<sw::mark::CntntIdxStore> pCntntStore(sw::mark::CntntIdxStore::Create()); const sal_Int32 nOldTxtLen = aCntIdx.GetIndex(); - _SaveCntntIdx( pDoc, nNdIdx, pCurTxtNd->GetTxt().getLength(), - *aBkmkArr.get() ); + pCntntStore->Save( pDoc, nNdIdx, pCurTxtNd->GetTxt().getLength() ); pDelPara->pLastNd->JoinNext(); - if( !aBkmkArr.get()->empty() ) - _RestoreCntntIdx( pDoc, *aBkmkArr.get(), - pDelPara->pLastNd->GetIndex(), - nOldTxtLen ); + if( !pCntntStore->Empty() ) + pCntntStore->Restore( pDoc, pDelPara->pLastNd->GetIndex(), nOldTxtLen ); } else if( pDelPara->pUndo ) { diff --git a/sw/source/core/inc/mvsave.hxx b/sw/source/core/inc/mvsave.hxx index c6e9295..f53f8a3 100644 --- a/sw/source/core/inc/mvsave.hxx +++ b/sw/source/core/inc/mvsave.hxx @@ -71,8 +71,17 @@ namespace sw { namespace mark ::boost::shared_ptr< ::sfx2::MetadatableUndo > m_pMetadataUndo; }; - typedef std::vector<sal_uLong> CntntIdxStore; - boost::shared_ptr<CntntIdxStore> CreateCntntIdxStore(); + class CntntIdxStore + { + public: + virtual void Clear() =0; + virtual bool Empty() =0; + virtual void Save(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nCntnt, sal_uInt8 nSaveFly=0) =0; + virtual void Restore(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nOffset=0, bool bAuto = false) =0; + virtual void Restore(SwNode& rNd, sal_Int32 nLen, sal_Int32 nCorrLen) =0; + virtual ~CntntIdxStore() {}; + static boost::shared_ptr<CntntIdxStore> Create(); + }; }} #define SAVEFLY 1 @@ -84,14 +93,6 @@ void _DelBookmarks(const SwNodeIndex& rStt, const SwIndex* pSttIdx =0, const SwIndex* pEndIdx =0); -void _SaveCntntIdx( SwDoc* pDoc, sal_uLong nNode, sal_Int32 nCntnt, - sw::mark::CntntIdxStore& rSaveArr, sal_uInt8 nSaveFly = 0 ); -void _RestoreCntntIdx( SwDoc* pDoc, sw::mark::CntntIdxStore& rSaveArr, - sal_uLong nNode, sal_Int32 nOffset = 0, - bool bAuto = false ); -void _RestoreCntntIdx( sw::mark::CntntIdxStore& rSaveArr, const SwNode& rNd, - sal_Int32 nLen, sal_Int32 nCorrLen ); - /** data structure to temporarily hold fly anchor positions relative to some * location. */ struct _SaveFly diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx index 152e468..d785c6a 100644 --- a/sw/source/core/txtnode/ndtxt.cxx +++ b/sw/source/core/txtnode/ndtxt.cxx @@ -619,8 +619,8 @@ SwCntntNode *SwTxtNode::JoinNext() if( SwCntntNode::CanJoinNext( &aIdx ) ) { SwDoc* pDoc = rNds.GetDoc(); - const boost::shared_ptr<sw::mark::CntntIdxStore> aBkmkArr(sw::mark::CreateCntntIdxStore()); - _SaveCntntIdx( pDoc, aIdx.GetIndex(), SAL_MAX_INT32, *aBkmkArr.get(), SAVEFLY ); + const boost::shared_ptr<sw::mark::CntntIdxStore> pCntntStore(sw::mark::CntntIdxStore::Create()); + pCntntStore->Save(pDoc, aIdx.GetIndex(), SAL_MAX_INT32, SAVEFLY); SwTxtNode *pTxtNode = aIdx.GetNode().GetTxtNode(); sal_Int32 nOldLen = m_Text.getLength(); @@ -685,8 +685,8 @@ SwCntntNode *SwTxtNode::JoinNext() pTxtNode->CutText( this, SwIndex(pTxtNode), pTxtNode->Len() ); } // verschiebe noch alle Bookmarks/TOXMarks - if( !aBkmkArr.get()->empty() ) - _RestoreCntntIdx( pDoc, *aBkmkArr.get(), GetIndex(), nOldLen ); + if( !pCntntStore->Empty()) + pCntntStore->Restore( pDoc, GetIndex(), nOldLen ); if( pTxtNode->HasAnyIndex() ) { @@ -713,8 +713,8 @@ SwCntntNode *SwTxtNode::JoinPrev() if( SwCntntNode::CanJoinPrev( &aIdx ) ) { SwDoc* pDoc = rNds.GetDoc(); - const boost::shared_ptr<sw::mark::CntntIdxStore> aBkmkArr(sw::mark::CreateCntntIdxStore()); - _SaveCntntIdx( pDoc, aIdx.GetIndex(), SAL_MAX_INT32, *aBkmkArr.get(), SAVEFLY ); + const boost::shared_ptr<sw::mark::CntntIdxStore> pCntntStore(sw::mark::CntntIdxStore::Create()); + pCntntStore->Save( pDoc, aIdx.GetIndex(), SAL_MAX_INT32, SAVEFLY ); SwTxtNode *pTxtNode = aIdx.GetNode().GetTxtNode(); const sal_Int32 nLen = pTxtNode->Len(); @@ -779,8 +779,8 @@ SwCntntNode *SwTxtNode::JoinPrev() pTxtNode->CutText( this, SwIndex(this), SwIndex(pTxtNode), nLen ); } // verschiebe noch alle Bookmarks/TOXMarks - if( !aBkmkArr.get()->empty() ) - _RestoreCntntIdx( pDoc, *aBkmkArr.get(), GetIndex() ); + if( !pCntntStore->Empty() ) + pCntntStore->Restore( pDoc, GetIndex() ); if( pTxtNode->HasAnyIndex() ) { diff --git a/sw/source/core/undo/untbl.cxx b/sw/source/core/undo/untbl.cxx index 76ba22c..f40696f 100644 --- a/sw/source/core/undo/untbl.cxx +++ b/sw/source/core/undo/untbl.cxx @@ -540,7 +540,7 @@ SwTableNode* SwNodes::UndoTableToText( sal_uLong nSttNd, sal_uLong nEndNd, SwTableLine* pLine = new SwTableLine( pLineFmt, rSavedData.size(), 0 ); pTblNd->GetTable().GetTabLines().insert( pTblNd->GetTable().GetTabLines().begin(), pLine ); - const boost::shared_ptr<sw::mark::CntntIdxStore> aBkmkArr(sw::mark::CreateCntntIdxStore()); + const boost::shared_ptr<sw::mark::CntntIdxStore> pCntntStore(sw::mark::CntntIdxStore::Create()); for( sal_uInt16 n = rSavedData.size(); n; ) { const SwTblToTxtSave* pSave = &rSavedData[ --n ]; @@ -558,16 +558,14 @@ SwTableNode* SwNodes::UndoTableToText( sal_uLong nSttNd, sal_uLong nEndNd, pTxtNd->EraseText( aCntPos, 1 ); SwCntntNode* pNewNd = pTxtNd->SplitCntntNode( SwPosition( aSttIdx, aCntPos )); - if( !aBkmkArr.get()->empty() ) - _RestoreCntntIdx( *aBkmkArr.get(), *pNewNd, pSave->m_nCntnt, - pSave->m_nCntnt + 1 ); + if( !pCntntStore->Empty() ) + pCntntStore->Restore( *pNewNd, pSave->m_nCntnt, pSave->m_nCntnt + 1 ); } else { - aBkmkArr.get()->clear(); + pCntntStore->Clear(); if( pTxtNd ) - _SaveCntntIdx( GetDoc(), aSttIdx.GetIndex(), - pTxtNd->GetTxt().getLength(), *aBkmkArr.get() ); + pCntntStore->Save( GetDoc(), aSttIdx.GetIndex(), pTxtNd->GetTxt().getLength() ); } if( pTxtNd ) commit e5fe5601a658532bd4fe18f08b668c1187827596 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Mon Jun 9 15:02:19 2014 +0200 create factory function for encapsulation Change-Id: I4cf6ca2855787102f6f9edd477e0d6e4c6a43503 diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx index 270fe28..b6340d8 100644 --- a/sw/source/core/doc/doc.cxx +++ b/sw/source/core/doc/doc.cxx @@ -383,17 +383,17 @@ bool SwDoc::SplitNode( const SwPosition &rPos, bool bChkTableStart ) } } - sw::mark::CntntIdxStore aBkmkArr; + const boost::shared_ptr<sw::mark::CntntIdxStore> aBkmkArr(sw::mark::CreateCntntIdxStore()); _SaveCntntIdx( this, rPos.nNode.GetIndex(), rPos.nContent.GetIndex(), - aBkmkArr, SAVEFLY_SPLIT ); + *aBkmkArr.get(), SAVEFLY_SPLIT ); // FIXME: only SwTxtNode has a valid implementation of SplitCntntNode! OSL_ENSURE(pNode->IsTxtNode(), "splitting non-text node?"); pNode = pNode->SplitCntntNode( rPos ); if (pNode) { // move all bookmarks, TOXMarks, FlyAtCnt - if( !aBkmkArr.empty() ) - _RestoreCntntIdx( this, aBkmkArr, rPos.nNode.GetIndex()-1, 0, true ); + if( !aBkmkArr.get()->empty() ) + _RestoreCntntIdx( this, *aBkmkArr.get(), rPos.nNode.GetIndex()-1, 0, true ); // To-Do - add 'SwExtraRedlineTbl' also ? if( IsRedlineOn() || (!IsIgnoreRedline() && !mpRedlineTbl->empty() )) diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx index 0ef7fb7..ea560b7 100644 --- a/sw/source/core/doc/docbm.cxx +++ b/sw/source/core/doc/docbm.cxx @@ -1503,6 +1503,11 @@ void _DelBookmarks( } } +boost::shared_ptr< ::sw::mark::CntntIdxStore> sw::mark::CreateCntntIdxStore() +{ + return boost::shared_ptr< ::sw::mark::CntntIdxStore>(new sw::mark::CntntIdxStore()); +} + void _SaveCntntIdx(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nCntnt, diff --git a/sw/source/core/doc/docedt.cxx b/sw/source/core/doc/docedt.cxx index 5e40769..c83aefa 100644 --- a/sw/source/core/doc/docedt.cxx +++ b/sw/source/core/doc/docedt.cxx @@ -905,14 +905,14 @@ bool SwDoc::MoveRange( SwPaM& rPaM, SwPosition& rPos, SwMoveFlags eMvFlags ) bSplit = true; const sal_Int32 nMkCntnt = rPaM.GetMark()->nContent.GetIndex(); - sw::mark::CntntIdxStore aBkmkArr; + const boost::shared_ptr<sw::mark::CntntIdxStore> aBkmkArr(sw::mark::CreateCntntIdxStore()); _SaveCntntIdx( this, rPos.nNode.GetIndex(), rPos.nContent.GetIndex(), - aBkmkArr, SAVEFLY_SPLIT ); + *aBkmkArr.get(), SAVEFLY_SPLIT ); pTNd = static_cast<SwTxtNode*>(pTNd->SplitCntntNode( rPos )); - if( !aBkmkArr.empty() ) - _RestoreCntntIdx( this, aBkmkArr, rPos.nNode.GetIndex()-1, 0, true ); + if( !aBkmkArr.get()->empty() ) + _RestoreCntntIdx( this, *aBkmkArr.get(), rPos.nNode.GetIndex()-1, 0, true ); // correct the PaM! if( rPos.nNode == rPaM.GetMark()->nNode ) @@ -1328,9 +1328,9 @@ void sw_JoinText( SwPaM& rPam, bool bJoinPrev ) } pOldTxtNd->FmtToTxtAttr( pTxtNd ); - sw::mark::CntntIdxStore aBkmkArr; + const boost::shared_ptr< sw::mark::CntntIdxStore> aBkmkArr(sw::mark::CreateCntntIdxStore()); ::_SaveCntntIdx( pDoc, aOldIdx.GetIndex(), - pOldTxtNd->Len(), aBkmkArr ); + pOldTxtNd->Len(), *aBkmkArr.get() ); SwIndex aAlphaIdx(pTxtNd); pOldTxtNd->CutText( pTxtNd, aAlphaIdx, SwIndex(pOldTxtNd), @@ -1339,8 +1339,8 @@ void sw_JoinText( SwPaM& rPam, bool bJoinPrev ) pDoc->CorrRel( rPam.GetPoint()->nNode, aAlphaPos, 0, true ); // move all Bookmarks/TOXMarks - if( !aBkmkArr.empty() ) - ::_RestoreCntntIdx( pDoc, aBkmkArr, aIdx.GetIndex() ); + if( !aBkmkArr.get()->empty() ) + ::_RestoreCntntIdx( pDoc, *aBkmkArr.get(), aIdx.GetIndex() ); // If the passed PaM is not in the Crsr ring, // treat it separately (e.g. when it's being called from AutoFormat) diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx index c216488..cd0943e 100644 --- a/sw/source/core/docnode/ndtbl.cxx +++ b/sw/source/core/docnode/ndtbl.cxx @@ -1048,9 +1048,9 @@ SwTableNode* SwNodes::TextToTable( const SwNodeRange& rRange, sal_Unicode cCh, SwStartNode* pSttNd; SwPosition aCntPos( aSttIdx, SwIndex( pTxtNd )); - sw::mark::CntntIdxStore aBkmkArr; + const boost::shared_ptr< sw::mark::CntntIdxStore> aBkmkArr(sw::mark::CreateCntntIdxStore()); _SaveCntntIdx( pDoc, aSttIdx.GetIndex(), pTxtNd->GetTxt().getLength(), - aBkmkArr ); + *aBkmkArr.get() ); if( T2T_PARA != cCh ) { @@ -1061,8 +1061,8 @@ SwTableNode* SwNodes::TextToTable( const SwNodeRange& rRange, sal_Unicode cCh, aCntPos.nContent = nChPos; SwCntntNode* pNewNd = pTxtNd->SplitCntntNode( aCntPos ); - if( !aBkmkArr.empty() ) - _RestoreCntntIdx( aBkmkArr, *pNewNd, nChPos, + if( !aBkmkArr.get()->empty() ) + _RestoreCntntIdx( *aBkmkArr.get(), *pNewNd, nChPos, nChPos + 1 ); // Delete separator and correct search string @@ -1088,8 +1088,8 @@ SwTableNode* SwNodes::TextToTable( const SwNodeRange& rRange, sal_Unicode cCh, } // Now for the last substring - if( !aBkmkArr.empty() ) - _RestoreCntntIdx( aBkmkArr, *pTxtNd, pTxtNd->GetTxt().getLength(), + if( !aBkmkArr.get()->empty() ) + _RestoreCntntIdx( *aBkmkArr.get(), *pTxtNd, pTxtNd->GetTxt().getLength(), pTxtNd->GetTxt().getLength()+1 ); pSttNd = new SwStartNode( aCntPos.nNode, ND_STARTNODE, SwTableBoxStartNode ); @@ -1519,15 +1519,15 @@ static void lcl_DelBox( SwTableBox* pBox, _DelTabPara* pDelPara ) pDelPara->pUndo->AddBoxPos( *pDoc, nNdIdx, aDelRg.aEnd.GetIndex(), aCntIdx.GetIndex() ); - sw::mark::CntntIdxStore aBkmkArr; + const boost::shared_ptr<sw::mark::CntntIdxStore> aBkmkArr(sw::mark::CreateCntntIdxStore()); const sal_Int32 nOldTxtLen = aCntIdx.GetIndex(); _SaveCntntIdx( pDoc, nNdIdx, pCurTxtNd->GetTxt().getLength(), - aBkmkArr ); + *aBkmkArr.get() ); pDelPara->pLastNd->JoinNext(); - if( !aBkmkArr.empty() ) - _RestoreCntntIdx( pDoc, aBkmkArr, + if( !aBkmkArr.get()->empty() ) + _RestoreCntntIdx( pDoc, *aBkmkArr.get(), pDelPara->pLastNd->GetIndex(), nOldTxtLen ); } diff --git a/sw/source/core/inc/mvsave.hxx b/sw/source/core/inc/mvsave.hxx index 588772d..c6e9295 100644 --- a/sw/source/core/inc/mvsave.hxx +++ b/sw/source/core/inc/mvsave.hxx @@ -72,6 +72,7 @@ namespace sw { namespace mark }; typedef std::vector<sal_uLong> CntntIdxStore; + boost::shared_ptr<CntntIdxStore> CreateCntntIdxStore(); }} #define SAVEFLY 1 diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx index 78d98c4..152e468 100644 --- a/sw/source/core/txtnode/ndtxt.cxx +++ b/sw/source/core/txtnode/ndtxt.cxx @@ -619,8 +619,8 @@ SwCntntNode *SwTxtNode::JoinNext() if( SwCntntNode::CanJoinNext( &aIdx ) ) { SwDoc* pDoc = rNds.GetDoc(); - sw::mark::CntntIdxStore aBkmkArr; - _SaveCntntIdx( pDoc, aIdx.GetIndex(), SAL_MAX_INT32, aBkmkArr, SAVEFLY ); + const boost::shared_ptr<sw::mark::CntntIdxStore> aBkmkArr(sw::mark::CreateCntntIdxStore()); + _SaveCntntIdx( pDoc, aIdx.GetIndex(), SAL_MAX_INT32, *aBkmkArr.get(), SAVEFLY ); SwTxtNode *pTxtNode = aIdx.GetNode().GetTxtNode(); sal_Int32 nOldLen = m_Text.getLength(); @@ -685,8 +685,8 @@ SwCntntNode *SwTxtNode::JoinNext() pTxtNode->CutText( this, SwIndex(pTxtNode), pTxtNode->Len() ); } // verschiebe noch alle Bookmarks/TOXMarks - if( !aBkmkArr.empty() ) - _RestoreCntntIdx( pDoc, aBkmkArr, GetIndex(), nOldLen ); + if( !aBkmkArr.get()->empty() ) + _RestoreCntntIdx( pDoc, *aBkmkArr.get(), GetIndex(), nOldLen ); if( pTxtNode->HasAnyIndex() ) { @@ -713,8 +713,8 @@ SwCntntNode *SwTxtNode::JoinPrev() if( SwCntntNode::CanJoinPrev( &aIdx ) ) { SwDoc* pDoc = rNds.GetDoc(); - sw::mark::CntntIdxStore aBkmkArr; - _SaveCntntIdx( pDoc, aIdx.GetIndex(), SAL_MAX_INT32, aBkmkArr, SAVEFLY ); + const boost::shared_ptr<sw::mark::CntntIdxStore> aBkmkArr(sw::mark::CreateCntntIdxStore()); + _SaveCntntIdx( pDoc, aIdx.GetIndex(), SAL_MAX_INT32, *aBkmkArr.get(), SAVEFLY ); SwTxtNode *pTxtNode = aIdx.GetNode().GetTxtNode(); const sal_Int32 nLen = pTxtNode->Len(); @@ -779,8 +779,8 @@ SwCntntNode *SwTxtNode::JoinPrev() pTxtNode->CutText( this, SwIndex(this), SwIndex(pTxtNode), nLen ); } // verschiebe noch alle Bookmarks/TOXMarks - if( !aBkmkArr.empty() ) - _RestoreCntntIdx( pDoc, aBkmkArr, GetIndex() ); + if( !aBkmkArr.get()->empty() ) + _RestoreCntntIdx( pDoc, *aBkmkArr.get(), GetIndex() ); if( pTxtNode->HasAnyIndex() ) { diff --git a/sw/source/core/undo/untbl.cxx b/sw/source/core/undo/untbl.cxx index c350f76..76ba22c 100644 --- a/sw/source/core/undo/untbl.cxx +++ b/sw/source/core/undo/untbl.cxx @@ -540,7 +540,7 @@ SwTableNode* SwNodes::UndoTableToText( sal_uLong nSttNd, sal_uLong nEndNd, SwTableLine* pLine = new SwTableLine( pLineFmt, rSavedData.size(), 0 ); pTblNd->GetTable().GetTabLines().insert( pTblNd->GetTable().GetTabLines().begin(), pLine ); - sw::mark::CntntIdxStore aBkmkArr; + const boost::shared_ptr<sw::mark::CntntIdxStore> aBkmkArr(sw::mark::CreateCntntIdxStore()); for( sal_uInt16 n = rSavedData.size(); n; ) { const SwTblToTxtSave* pSave = &rSavedData[ --n ]; @@ -558,16 +558,16 @@ SwTableNode* SwNodes::UndoTableToText( sal_uLong nSttNd, sal_uLong nEndNd, pTxtNd->EraseText( aCntPos, 1 ); SwCntntNode* pNewNd = pTxtNd->SplitCntntNode( SwPosition( aSttIdx, aCntPos )); - if( !aBkmkArr.empty() ) - _RestoreCntntIdx( aBkmkArr, *pNewNd, pSave->m_nCntnt, + if( !aBkmkArr.get()->empty() ) + _RestoreCntntIdx( *aBkmkArr.get(), *pNewNd, pSave->m_nCntnt, pSave->m_nCntnt + 1 ); } else { - aBkmkArr.clear(); + aBkmkArr.get()->clear(); if( pTxtNd ) _SaveCntntIdx( GetDoc(), aSttIdx.GetIndex(), - pTxtNd->GetTxt().getLength(), aBkmkArr ); + pTxtNd->GetTxt().getLength(), *aBkmkArr.get() ); } if( pTxtNd ) commit bbcf8a2ea88c0e837db630a9087e1442aa2f9bd2 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Mon Jun 9 14:15:27 2014 +0200 typedef the internal type Change-Id: I11e785427add72b56bc48cfac1640211dfba6cc6 diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx index 39a2849..270fe28 100644 --- a/sw/source/core/doc/doc.cxx +++ b/sw/source/core/doc/doc.cxx @@ -383,7 +383,7 @@ bool SwDoc::SplitNode( const SwPosition &rPos, bool bChkTableStart ) } } - std::vector<sal_uLong> aBkmkArr; + sw::mark::CntntIdxStore aBkmkArr; _SaveCntntIdx( this, rPos.nNode.GetIndex(), rPos.nContent.GetIndex(), aBkmkArr, SAVEFLY_SPLIT ); // FIXME: only SwTxtNode has a valid implementation of SplitCntntNode! diff --git a/sw/source/core/doc/docedt.cxx b/sw/source/core/doc/docedt.cxx index 546693b..5e40769 100644 --- a/sw/source/core/doc/docedt.cxx +++ b/sw/source/core/doc/docedt.cxx @@ -905,7 +905,7 @@ bool SwDoc::MoveRange( SwPaM& rPaM, SwPosition& rPos, SwMoveFlags eMvFlags ) bSplit = true; const sal_Int32 nMkCntnt = rPaM.GetMark()->nContent.GetIndex(); - std::vector<sal_uLong> aBkmkArr; + sw::mark::CntntIdxStore aBkmkArr; _SaveCntntIdx( this, rPos.nNode.GetIndex(), rPos.nContent.GetIndex(), aBkmkArr, SAVEFLY_SPLIT ); @@ -1328,7 +1328,7 @@ void sw_JoinText( SwPaM& rPam, bool bJoinPrev ) } pOldTxtNd->FmtToTxtAttr( pTxtNd ); - std::vector<sal_uLong> aBkmkArr; + sw::mark::CntntIdxStore aBkmkArr; ::_SaveCntntIdx( pDoc, aOldIdx.GetIndex(), pOldTxtNd->Len(), aBkmkArr ); diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx index 493d957..c216488 100644 --- a/sw/source/core/docnode/ndtbl.cxx +++ b/sw/source/core/docnode/ndtbl.cxx @@ -1048,7 +1048,7 @@ SwTableNode* SwNodes::TextToTable( const SwNodeRange& rRange, sal_Unicode cCh, SwStartNode* pSttNd; SwPosition aCntPos( aSttIdx, SwIndex( pTxtNd )); - std::vector<sal_uLong> aBkmkArr; + sw::mark::CntntIdxStore aBkmkArr; _SaveCntntIdx( pDoc, aSttIdx.GetIndex(), pTxtNd->GetTxt().getLength(), aBkmkArr ); @@ -1519,7 +1519,7 @@ static void lcl_DelBox( SwTableBox* pBox, _DelTabPara* pDelPara ) pDelPara->pUndo->AddBoxPos( *pDoc, nNdIdx, aDelRg.aEnd.GetIndex(), aCntIdx.GetIndex() ); - std::vector<sal_uLong> aBkmkArr; + sw::mark::CntntIdxStore aBkmkArr; const sal_Int32 nOldTxtLen = aCntIdx.GetIndex(); _SaveCntntIdx( pDoc, nNdIdx, pCurTxtNd->GetTxt().getLength(), aBkmkArr ); diff --git a/sw/source/core/inc/mvsave.hxx b/sw/source/core/inc/mvsave.hxx index da49227..588772d 100644 --- a/sw/source/core/inc/mvsave.hxx +++ b/sw/source/core/inc/mvsave.hxx @@ -70,6 +70,8 @@ namespace sw { namespace mark sal_Int32 m_nCntnt2; ::boost::shared_ptr< ::sfx2::MetadatableUndo > m_pMetadataUndo; }; + + typedef std::vector<sal_uLong> CntntIdxStore; }} #define SAVEFLY 1 @@ -80,12 +82,13 @@ void _DelBookmarks(const SwNodeIndex& rStt, ::std::vector< ::sw::mark::SaveBookmark> * SaveBkmk =0, const SwIndex* pSttIdx =0, const SwIndex* pEndIdx =0); + void _SaveCntntIdx( SwDoc* pDoc, sal_uLong nNode, sal_Int32 nCntnt, - std::vector<sal_uLong>& rSaveArr, sal_uInt8 nSaveFly = 0 ); -void _RestoreCntntIdx( SwDoc* pDoc, std::vector<sal_uLong>& rSaveArr, + sw::mark::CntntIdxStore& rSaveArr, sal_uInt8 nSaveFly = 0 ); +void _RestoreCntntIdx( SwDoc* pDoc, sw::mark::CntntIdxStore& rSaveArr, sal_uLong nNode, sal_Int32 nOffset = 0, bool bAuto = false ); -void _RestoreCntntIdx( std::vector<sal_uLong>& rSaveArr, const SwNode& rNd, +void _RestoreCntntIdx( sw::mark::CntntIdxStore& rSaveArr, const SwNode& rNd, sal_Int32 nLen, sal_Int32 nCorrLen ); /** data structure to temporarily hold fly anchor positions relative to some diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx index 235e516..78d98c4 100644 --- a/sw/source/core/txtnode/ndtxt.cxx +++ b/sw/source/core/txtnode/ndtxt.cxx @@ -619,7 +619,7 @@ SwCntntNode *SwTxtNode::JoinNext() if( SwCntntNode::CanJoinNext( &aIdx ) ) { SwDoc* pDoc = rNds.GetDoc(); - std::vector<sal_uLong> aBkmkArr; + sw::mark::CntntIdxStore aBkmkArr; _SaveCntntIdx( pDoc, aIdx.GetIndex(), SAL_MAX_INT32, aBkmkArr, SAVEFLY ); SwTxtNode *pTxtNode = aIdx.GetNode().GetTxtNode(); sal_Int32 nOldLen = m_Text.getLength(); @@ -713,7 +713,7 @@ SwCntntNode *SwTxtNode::JoinPrev() if( SwCntntNode::CanJoinPrev( &aIdx ) ) { SwDoc* pDoc = rNds.GetDoc(); - std::vector<sal_uLong> aBkmkArr; + sw::mark::CntntIdxStore aBkmkArr; _SaveCntntIdx( pDoc, aIdx.GetIndex(), SAL_MAX_INT32, aBkmkArr, SAVEFLY ); SwTxtNode *pTxtNode = aIdx.GetNode().GetTxtNode(); const sal_Int32 nLen = pTxtNode->Len(); diff --git a/sw/source/core/undo/untbl.cxx b/sw/source/core/undo/untbl.cxx index e1d4833..c350f76 100644 --- a/sw/source/core/undo/untbl.cxx +++ b/sw/source/core/undo/untbl.cxx @@ -540,7 +540,7 @@ SwTableNode* SwNodes::UndoTableToText( sal_uLong nSttNd, sal_uLong nEndNd, SwTableLine* pLine = new SwTableLine( pLineFmt, rSavedData.size(), 0 ); pTblNd->GetTable().GetTabLines().insert( pTblNd->GetTable().GetTabLines().begin(), pLine ); - std::vector<sal_uLong> aBkmkArr; + sw::mark::CntntIdxStore aBkmkArr; for( sal_uInt16 n = rSavedData.size(); n; ) { const SwTblToTxtSave* pSave = &rSavedData[ --n ]; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits