sw/source/core/doc/docbm.cxx | 135 +++++++++++++++++++++++++------------------ 1 file changed, 80 insertions(+), 55 deletions(-)
New commits: commit 5aadf3ce06f76b07290a8ae2fedb54386c825935 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Thu Jun 12 19:40:58 2014 +0200 still ugly, but lets silent the warning for now Change-Id: I647e969bfc9f8b4294d3e526d8d5b11df7d7bea9 diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx index ba4fa52..39abcd6 100644 --- a/sw/source/core/doc/docbm.cxx +++ b/sw/source/core/doc/docbm.cxx @@ -1793,7 +1793,6 @@ void _RestoreCntntIdx(std::vector<sal_uLong> &rSaveArr, sal_Int32 nChkLen) { const SwDoc* pDoc = rNd.GetDoc(); - const SwRedlineTbl& rRedlTbl = pDoc->GetRedlineTbl(); const SwFrmFmts* pSpz = pDoc->GetSpzFrmFmts(); SwCntntNode* pCNd = (SwCntntNode*)rNd.GetCntntNode(); @@ -2058,7 +2057,7 @@ void CntntIdxStoreImpl::RestoreBkmksLen(SwNode& rNd, sal_uLong nLen, sal_Int32 n void CntntIdxStoreImpl::SaveRedlines(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nCntnt) { const SwRedlineTbl& rRedlTbl = pDoc->GetRedlineTbl(); - for( long int nIdx = 0 ; nIdx < rRedlTbl.size(); ++nIdx ) + for( long int nIdx = 0 ; static_cast<unsigned long int>(nIdx) < rRedlTbl.size(); ++nIdx ) { const SwRangeRedline* pRdl = rRedlTbl[ nIdx ]; int nPointPos = lcl_RelativePosition( *pRdl->GetPoint(), nNode, nCntnt ); commit ba327f6b86d17499725f344972151fbfb6be6938 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Thu Jun 12 13:01:27 2014 +0200 remove old redline save/restore Change-Id: I3165f84d44c74bca3a2d75ebf3cd681b9d5d120a diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx index 400eaeb..ba4fa52 100644 --- a/sw/source/core/doc/docbm.cxx +++ b/sw/source/core/doc/docbm.cxx @@ -1184,8 +1184,6 @@ namespace // CntntType -- // 0x2000 = Paragraph anchored frame // 0x2001 = frame anchored at character, which should be moved - // 0x1000 = Redline Mark - // 0x1001 = Redline Point // 0x0800 = Crsr from the CrsrShell Mark // 0x0801 = Crsr from the CrsrShell Point // 0x0400 = UnoCrsr Mark @@ -1511,34 +1509,6 @@ void _SaveCntntIdx(SwDoc* pDoc, { // 1. Bookmarks _SwSaveTypeCountContent aSave; - // 2. Redlines - aSave.SetTypeAndCount( 0x1000, 0 ); - const SwRedlineTbl& rRedlTbl = pDoc->GetRedlineTbl(); - for( ; aSave.GetCount() < rRedlTbl.size(); aSave.IncCount() ) - { - const SwRangeRedline* pRdl = rRedlTbl[ aSave.GetCount() ]; - int nPointPos = lcl_RelativePosition( *pRdl->GetPoint(), nNode, nCntnt ); - int nMarkPos = pRdl->HasMark() ? lcl_RelativePosition( *pRdl->GetMark(), nNode, nCntnt ) : - nPointPos; - // #i59534: We have to store the positions inside the same node before the insert position - // and the one at the insert position if the corresponding Point/Mark position is before - // the insert position. - if( nPointPos == BEFORE_SAME_NODE || - ( nPointPos == SAME_POSITION && nMarkPos < SAME_POSITION ) ) - { - aSave.SetContent( pRdl->GetPoint()->nContent.GetIndex() ); - aSave.IncType(); - aSave.Add( rSaveArr ); - aSave.DecType(); - } - if( pRdl->HasMark() && ( nMarkPos == BEFORE_SAME_NODE || - ( nMarkPos == SAME_POSITION && nPointPos < SAME_POSITION ) ) ) - { - aSave.SetContent( pRdl->GetMark()->nContent.GetIndex() ); - aSave.Add( rSaveArr ); - } - } - // 4. Paragraph anchored objects { SwCntntNode *pNode = pDoc->GetNodes()[nNode]->GetCntntNode(); @@ -1687,7 +1657,6 @@ void _RestoreCntntIdx(SwDoc* pDoc, bool bAuto) { SwCntntNode* pCNd = pDoc->GetNodes()[ nNode ]->GetCntntNode(); - const SwRedlineTbl& rRedlTbl = pDoc->GetRedlineTbl(); SwFrmFmts* pSpz = pDoc->GetSpzFrmFmts(); sal_uInt16 n = 0; while( n < rSaveArr.size() ) @@ -1696,12 +1665,6 @@ void _RestoreCntntIdx(SwDoc* pDoc, SwPosition* pPos = 0; switch( aSave.GetType() ) { - case 0x1001: - pPos = (SwPosition*)rRedlTbl[ aSave.GetCount() ]->GetPoint(); - break; - case 0x1000: - pPos = (SwPosition*)rRedlTbl[ aSave.GetCount() ]->GetMark(); - break; case 0x2000: { SwFrmFmt *pFrmFmt = (*pSpz)[ aSave.GetCount() ]; @@ -1845,12 +1808,6 @@ void _RestoreCntntIdx(std::vector<sal_uLong> &rSaveArr, SwPosition* pPos = 0; switch( aSave.GetType() ) { - case 0x1001: - pPos = (SwPosition*)rRedlTbl[ aSave.GetCount() ]->GetPoint(); - break; - case 0x1000: - pPos = (SwPosition*)rRedlTbl[ aSave.GetCount() ]->GetMark(); - break; case 0x2000: case 0x2001: { commit c8ad16ca7c6b47e0cf86dde5e89e51502d437636 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Thu Jun 12 12:47:20 2014 +0200 refactor redline save/restore Change-Id: I4840d694954a5c0419abfa4c0fbe67b756f8253c diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx index dbd9d98..400eaeb 100644 --- a/sw/source/core/doc/docbm.cxx +++ b/sw/source/core/doc/docbm.cxx @@ -1971,38 +1971,43 @@ void _RestoreCntntIdx(std::vector<sal_uLong> &rSaveArr, namespace { - struct BkmkEntry + struct MarkEntry { - long int m_nBkmkIdx; + long int m_nIdx; bool m_bOther; sal_Int32 m_nCntnt; }; struct CntntIdxStoreImpl : sw::mark::CntntIdxStore { std::vector<sal_uLong> m_aSaveArr; - std::vector<BkmkEntry> m_aBkmkEntries; + std::vector<MarkEntry> m_aBkmkEntries; + std::vector<MarkEntry> m_aRedlineEntries; virtual void Clear() SAL_OVERRIDE { m_aBkmkEntries.clear(); + m_aRedlineEntries.clear(); m_aSaveArr.clear(); } virtual bool Empty() SAL_OVERRIDE { - return m_aBkmkEntries.empty() && m_aSaveArr.empty(); + return m_aBkmkEntries.empty() && m_aRedlineEntries.empty() && m_aSaveArr.empty(); } virtual void Save(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nCntnt, sal_uInt8 nSaveFly=0) SAL_OVERRIDE { SaveBkmks(pDoc, nNode, nCntnt); + SaveRedlines(pDoc, nNode, nCntnt); return _SaveCntntIdx(pDoc, nNode, nCntnt, m_aSaveArr, nSaveFly); } virtual void Restore(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nOffset=0, bool bAuto = false) SAL_OVERRIDE { RestoreBkmks(pDoc, nNode, nOffset); + RestoreRedlines(pDoc, nNode, nOffset); return _RestoreCntntIdx(pDoc, m_aSaveArr, nNode, nOffset, bAuto); } virtual void Restore(SwNode& rNd, sal_Int32 nLen, sal_Int32 nCorrLen) SAL_OVERRIDE { RestoreBkmksLen(rNd, nLen, nCorrLen); + RestoreRedlinesLen(rNd, nLen, nCorrLen); return _RestoreCntntIdx(m_aSaveArr, rNd, nLen, nCorrLen); } virtual ~CntntIdxStoreImpl(){}; @@ -2010,6 +2015,9 @@ namespace inline void SaveBkmks(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nCntnt); inline void RestoreBkmks(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nOffset); inline void RestoreBkmksLen(SwNode& rNd, sal_uLong nLen, sal_Int32 nCorrLen); + inline void SaveRedlines(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nCntnt); + inline void RestoreRedlines(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nOffset); + inline void RestoreRedlinesLen(SwNode& rNd, sal_uLong nLen, sal_Int32 nCorrLen); inline const SwPosition& GetRightMarkPos(::sw::mark::IMark* pMark, bool bOther) { return bOther ? pMark->GetOtherMarkPos() : pMark->GetMarkPos(); }; inline void SetRightMarkPos(MarkBase* pMark, bool bOther, const SwPosition* const pPos) @@ -2033,7 +2041,7 @@ void CntntIdxStoreImpl::SaveBkmks(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nCntnt { if(pBkmk->GetMarkPos().nContent.GetIndex() < nCntnt) { - const BkmkEntry aEntry = { ppBkmk - pMarkAccess->getAllMarksBegin(), false, pBkmk->GetMarkPos().nContent.GetIndex() }; + const MarkEntry aEntry = { ppBkmk - pMarkAccess->getAllMarksBegin(), false, pBkmk->GetMarkPos().nContent.GetIndex() }; m_aBkmkEntries.push_back(aEntry); } else // if a bookmark position is equal nCntnt, the other position @@ -2045,10 +2053,10 @@ void CntntIdxStoreImpl::SaveBkmks(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nCntnt { if(bMarkPosEqual) { // the other position is before, the (main) position is equal - const BkmkEntry aEntry = { ppBkmk - pMarkAccess->getAllMarksBegin(), false, pBkmk->GetMarkPos().nContent.GetIndex() }; + const MarkEntry aEntry = { ppBkmk - pMarkAccess->getAllMarksBegin(), false, pBkmk->GetMarkPos().nContent.GetIndex() }; m_aBkmkEntries.push_back(aEntry); } - const BkmkEntry aEntry = { ppBkmk - pMarkAccess->getAllMarksBegin(), true, pBkmk->GetOtherMarkPos().nContent.GetIndex() }; + const MarkEntry aEntry = { ppBkmk - pMarkAccess->getAllMarksBegin(), true, pBkmk->GetOtherMarkPos().nContent.GetIndex() }; m_aBkmkEntries.push_back(aEntry); } } @@ -2058,9 +2066,9 @@ void CntntIdxStoreImpl::RestoreBkmks(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nOf { IDocumentMarkAccess* const pMarkAccess = pDoc->getIDocumentMarkAccess(); SwCntntNode* pCNd = pDoc->GetNodes()[ nNode ]->GetCntntNode(); - BOOST_FOREACH(const BkmkEntry& aEntry, m_aBkmkEntries) + BOOST_FOREACH(const MarkEntry& aEntry, m_aBkmkEntries) { - if (MarkBase* pMark = dynamic_cast<MarkBase*>(pMarkAccess->getAllMarksBegin()[aEntry.m_nBkmkIdx].get())) + if (MarkBase* pMark = dynamic_cast<MarkBase*>(pMarkAccess->getAllMarksBegin()[aEntry.m_nIdx].get())) { SwPosition aNewPos(GetRightMarkPos(pMark, aEntry.m_bOther)); aNewPos.nNode = *pCNd; @@ -2075,11 +2083,11 @@ void CntntIdxStoreImpl::RestoreBkmksLen(SwNode& rNd, sal_uLong nLen, sal_Int32 n const SwDoc* pDoc = rNd.GetDoc(); IDocumentMarkAccess* const pMarkAccess = const_cast<IDocumentMarkAccess*>(pDoc->getIDocumentMarkAccess()); SwCntntNode* pCNd = (SwCntntNode*)rNd.GetCntntNode(); - BOOST_FOREACH(const BkmkEntry& aEntry, m_aBkmkEntries) + BOOST_FOREACH(const MarkEntry& aEntry, m_aBkmkEntries) { if( aEntry.m_nCntnt < nCorrLen ) { - if (MarkBase* pMark = dynamic_cast<MarkBase*>(pMarkAccess->getAllMarksBegin()[aEntry.m_nBkmkIdx].get())) + if (MarkBase* pMark = dynamic_cast<MarkBase*>(pMarkAccess->getAllMarksBegin()[aEntry.m_nIdx].get())) { SwPosition aNewPos(GetRightMarkPos(pMark, aEntry.m_bOther)); aNewPos.nNode = *pCNd; @@ -2090,6 +2098,67 @@ void CntntIdxStoreImpl::RestoreBkmksLen(SwNode& rNd, sal_uLong nLen, sal_Int32 n } } +void CntntIdxStoreImpl::SaveRedlines(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nCntnt) +{ + const SwRedlineTbl& rRedlTbl = pDoc->GetRedlineTbl(); + for( long int nIdx = 0 ; nIdx < rRedlTbl.size(); ++nIdx ) + { + const SwRangeRedline* pRdl = rRedlTbl[ nIdx ]; + int nPointPos = lcl_RelativePosition( *pRdl->GetPoint(), nNode, nCntnt ); + int nMarkPos = pRdl->HasMark() ? lcl_RelativePosition( *pRdl->GetMark(), nNode, nCntnt ) : + nPointPos; + // #i59534: We have to store the positions inside the same node before the insert position + // and the one at the insert position if the corresponding Point/Mark position is before + // the insert position. + if( nPointPos == BEFORE_SAME_NODE || + ( nPointPos == SAME_POSITION && nMarkPos < SAME_POSITION ) ) + { + const MarkEntry aEntry = { nIdx, false, pRdl->GetPoint()->nContent.GetIndex() }; + m_aRedlineEntries.push_back(aEntry); + } + if( pRdl->HasMark() && ( nMarkPos == BEFORE_SAME_NODE || + ( nMarkPos == SAME_POSITION && nPointPos < SAME_POSITION ) ) ) + { + const MarkEntry aEntry = { nIdx, true, pRdl->GetMark()->nContent.GetIndex() }; + m_aRedlineEntries.push_back(aEntry); + } + } +} + +void CntntIdxStoreImpl::RestoreRedlines(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nOffset) +{ + SwCntntNode* pCNd = pDoc->GetNodes()[ nNode ]->GetCntntNode(); + const SwRedlineTbl& rRedlTbl = pDoc->GetRedlineTbl(); + SwPosition* pPos = NULL; + BOOST_FOREACH(const MarkEntry& aEntry, m_aRedlineEntries) + { + pPos = (SwPosition*)( aEntry.m_bOther + ? rRedlTbl[ aEntry.m_nIdx ]->GetMark() + : rRedlTbl[ aEntry.m_nIdx ]->GetPoint()); + pPos->nNode = *pCNd; + pPos->nContent.Assign( pCNd, aEntry.m_nCntnt + nOffset ); + } +} + +void CntntIdxStoreImpl::RestoreRedlinesLen (SwNode& rNd, sal_uLong nLen, sal_Int32 nCorrLen) +{ + const SwDoc* pDoc = rNd.GetDoc(); + SwCntntNode* pCNd = (SwCntntNode*)rNd.GetCntntNode(); + const SwRedlineTbl& rRedlTbl = pDoc->GetRedlineTbl(); + SwPosition* pPos = NULL; + BOOST_FOREACH(const MarkEntry& aEntry, m_aRedlineEntries) + { + if( aEntry.m_nCntnt < nCorrLen ) + { + pPos = (SwPosition*)( aEntry.m_bOther + ? rRedlTbl[ aEntry.m_nIdx ]->GetMark() + : rRedlTbl[ aEntry.m_nIdx ]->GetPoint()); + pPos->nNode = *pCNd; + pPos->nContent.Assign( pCNd, std::min( aEntry.m_nCntnt, static_cast<sal_Int32>(nLen) ) ); + } + } +} + namespace sw { namespace mark { boost::shared_ptr<CntntIdxStore> CntntIdxStore::Create() { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits