summaryrefslogtreecommitdiff
path: root/sw/source/core/doc/DocumentRedlineManager.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/doc/DocumentRedlineManager.cxx')
-rw-r--r--sw/source/core/doc/DocumentRedlineManager.cxx40
1 files changed, 25 insertions, 15 deletions
diff --git a/sw/source/core/doc/DocumentRedlineManager.cxx b/sw/source/core/doc/DocumentRedlineManager.cxx
index 24d0bdc4e69c..873b4d60d975 100644
--- a/sw/source/core/doc/DocumentRedlineManager.cxx
+++ b/sw/source/core/doc/DocumentRedlineManager.cxx
@@ -606,7 +606,7 @@ void DocumentRedlineManager::SetRedlineMode( RedlineMode_t eMode )
bool bSaveInXMLImportFlag = m_rDoc.IsInXMLImport();
m_rDoc.SetInXMLImport( false );
// and then hide/display everything
- void (SwRangeRedline::*pFnc)( sal_uInt16 ) = 0;
+ void (SwRangeRedline::*pFnc)(sal_uInt16, size_t) = 0;
switch( nsRedlineMode_t::REDLINE_SHOW_MASK & eMode )
{
@@ -628,10 +628,17 @@ void DocumentRedlineManager::SetRedlineMode( RedlineMode_t eMode )
_CHECK_REDLINE( *this )
- if( pFnc )
- for( sal_uInt16 nLoop = 1; nLoop <= 2; ++nLoop )
- for( sal_uInt16 i = 0; i < mpRedlineTbl->size(); ++i )
- ((*mpRedlineTbl)[ i ]->*pFnc)( nLoop );
+ if (pFnc)
+ {
+ for (sal_uInt16 nLoop = 1; nLoop <= 2; ++nLoop)
+ for (size_t i = 0; i < mpRedlineTbl->size(); ++i)
+ ((*mpRedlineTbl)[i]->*pFnc)(nLoop, i);
+
+ //SwRangeRedline::MoveFromSection routinely changes
+ //the keys that mpRedlineTbl is sorted by
+ mpRedlineTbl->Resort();
+ }
+
_CHECK_REDLINE( *this )
m_rDoc.SetInXMLImport( bSaveInXMLImportFlag );
}
@@ -1123,8 +1130,8 @@ bool DocumentRedlineManager::AppendRedline( SwRangeRedline* pNewRedl, bool bCall
// Before we can merge, we make it visible!
// We insert temporarily so that pNew is
// also dealt with when moving the indices.
- mpRedlineTbl->Insert( pNewRedl );
- pRedl->Show();
+ mpRedlineTbl->Insert(pNewRedl);
+ pRedl->Show(0, mpRedlineTbl->GetPos(pRedl));
mpRedlineTbl->Remove( pNewRedl );
pRStt = pRedl->Start();
pREnd = pRedl->End();
@@ -1301,7 +1308,9 @@ bool DocumentRedlineManager::AppendRedline( SwRangeRedline* pNewRedl, bool bCall
pRedl->PushData( *pNewRedl );
delete pNewRedl, pNewRedl = 0;
if( IsHideChanges( meRedlineMode ))
- pRedl->Hide();
+ {
+ pRedl->Hide(0, mpRedlineTbl->GetPos(pRedl));
+ }
bCompress = true;
}
break;
@@ -1364,8 +1373,8 @@ bool DocumentRedlineManager::AppendRedline( SwRangeRedline* pNewRedl, bool bCall
pNewRedl->SetEnd( *pRStt, pEnd );
if( IsHideChanges( meRedlineMode ))
{
- mpRedlineTbl->Insert( pNewRedl );
- pRedl->Hide();
+ mpRedlineTbl->Insert(pNewRedl);
+ pRedl->Hide(0, mpRedlineTbl->GetPos(pRedl));
mpRedlineTbl->Remove( pNewRedl );
}
}
@@ -1393,7 +1402,7 @@ bool DocumentRedlineManager::AppendRedline( SwRangeRedline* pNewRedl, bool bCall
if( IsHideChanges( meRedlineMode ))
{
mpRedlineTbl->Insert( pNewRedl );
- pRedl->Hide();
+ pRedl->Hide(0, mpRedlineTbl->GetPos(pRedl));
mpRedlineTbl->Remove( pNewRedl );
}
}
@@ -1764,7 +1773,7 @@ void DocumentRedlineManager::CompressRedlines()
{
_CHECK_REDLINE( *this )
- void (SwRangeRedline::*pFnc)(sal_uInt16) = 0;
+ void (SwRangeRedline::*pFnc)(sal_uInt16, size_t) = 0;
switch( nsRedlineMode_t::REDLINE_SHOW_MASK & meRedlineMode )
{
case nsRedlineMode_t::REDLINE_SHOW_INSERT | nsRedlineMode_t::REDLINE_SHOW_DELETE:
@@ -1792,14 +1801,15 @@ void DocumentRedlineManager::CompressRedlines()
!pCurEnd->nNode.GetNode().StartOfSectionNode()->IsTableNode() )
{
// we then can merge them
- pPrev->Show();
- pCur->Show();
+ size_t nPrevIndex = n-1;
+ pPrev->Show(0, nPrevIndex);
+ pCur->Show(0, n);
pPrev->SetEnd( *pCur->End() );
mpRedlineTbl->DeleteAndDestroy( n );
--n;
if( pFnc )
- (pPrev->*pFnc)(0);
+ (pPrev->*pFnc)(0, nPrevIndex);
}
}
_CHECK_REDLINE( *this )