summaryrefslogtreecommitdiff
path: root/sc/source/filter/xcl97/XclExpChangeTrack.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/filter/xcl97/XclExpChangeTrack.cxx')
-rw-r--r--sc/source/filter/xcl97/XclExpChangeTrack.cxx35
1 files changed, 11 insertions, 24 deletions
diff --git a/sc/source/filter/xcl97/XclExpChangeTrack.cxx b/sc/source/filter/xcl97/XclExpChangeTrack.cxx
index 48f5a790f5bb..760599ff594b 100644
--- a/sc/source/filter/xcl97/XclExpChangeTrack.cxx
+++ b/sc/source/filter/xcl97/XclExpChangeTrack.cxx
@@ -1072,7 +1072,6 @@ XclExpChangeTrack::XclExpChangeTrack( const XclExpRoot& rRoot ) :
aTabIdBufferList(),
pTabIdBuffer( NULL ),
pTempDoc( NULL ),
- pTempChangeTrack( NULL ),
nNewAction( 1 ),
pHeader( NULL ),
bValidGUID( sal_False )
@@ -1081,7 +1080,8 @@ XclExpChangeTrack::XclExpChangeTrack( const XclExpRoot& rRoot ) :
if( !GetOldRoot().pTabId )
return;
- if( !CreateTempChangeTrack() )
+ ScChangeTrack* pTempChangeTrack = CreateTempChangeTrack();
+ if (!pTempChangeTrack)
return;
pTabIdBuffer = new XclExpChTrTabIdBuffer( GetTabInfo().GetXclTabCount() );
@@ -1143,25 +1143,23 @@ XclExpChangeTrack::XclExpChangeTrack( const XclExpRoot& rRoot ) :
XclExpChangeTrack::~XclExpChangeTrack()
{
- if( pTempChangeTrack )
- delete pTempChangeTrack;
if( pTempDoc )
delete pTempDoc;
}
-sal_Bool XclExpChangeTrack::CreateTempChangeTrack()
+ScChangeTrack* XclExpChangeTrack::CreateTempChangeTrack()
{
// get original change track
ScChangeTrack* pOrigChangeTrack = GetDoc().GetChangeTrack();
DBG_ASSERT( pOrigChangeTrack, "XclExpChangeTrack::CreateTempChangeTrack - no change track data" );
if( !pOrigChangeTrack )
- return sal_False;
+ return NULL;
// create empty document
pTempDoc = new ScDocument;
DBG_ASSERT( pTempDoc, "XclExpChangeTrack::CreateTempChangeTrack - no temp document" );
if( !pTempDoc )
- return sal_False;
+ return NULL;
// adjust table count
SCTAB nOrigCount = GetDoc().GetTableCount();
@@ -1176,26 +1174,13 @@ sal_Bool XclExpChangeTrack::CreateTempChangeTrack()
if( nOrigCount != pTempDoc->GetTableCount() )
return sal_False;
- // create empty change track
- pTempChangeTrack = new ScChangeTrack( pTempDoc );
- DBG_ASSERT( pTempChangeTrack, "XclExpChangeTrack::CreateTempChangeTrack - no temp change track" );
- if( !pTempChangeTrack )
- return sal_False;
-
- // copy original change track
- SvMemoryStream aMemStrm;
- if( !pOrigChangeTrack->Store( aMemStrm ) )
- return sal_False;
- aMemStrm.Seek( STREAM_SEEK_TO_BEGIN );
- if( !pTempChangeTrack->Load( aMemStrm, (USHORT) pTempDoc->GetSrcVersion() ) )
- return sal_False;
-
- return sal_True;
+ return pOrigChangeTrack->Clone(pTempDoc);
}
void XclExpChangeTrack::PushActionRecord( const ScChangeAction& rAction )
{
XclExpChTrAction* pXclAction = NULL;
+ ScChangeTrack* pTempChangeTrack = pTempDoc->GetChangeTrack();
switch( rAction.GetType() )
{
case SC_CAT_CONTENT:
@@ -1205,7 +1190,8 @@ void XclExpChangeTrack::PushActionRecord( const ScChangeAction& rAction )
case SC_CAT_INSERT_COLS:
case SC_CAT_DELETE_ROWS:
case SC_CAT_DELETE_COLS:
- pXclAction = new XclExpChTrInsert( rAction, GetRoot(), *pTabIdBuffer, *pTempChangeTrack );
+ if (pTempChangeTrack)
+ pXclAction = new XclExpChTrInsert( rAction, GetRoot(), *pTabIdBuffer, *pTempChangeTrack );
break;
case SC_CAT_INSERT_TABS:
{
@@ -1217,7 +1203,8 @@ void XclExpChangeTrack::PushActionRecord( const ScChangeAction& rAction )
}
break;
case SC_CAT_MOVE:
- pXclAction = new XclExpChTrMoveRange( (const ScChangeActionMove&) rAction, GetRoot(), *pTabIdBuffer, *pTempChangeTrack );
+ if (pTempChangeTrack)
+ pXclAction = new XclExpChTrMoveRange( (const ScChangeActionMove&) rAction, GetRoot(), *pTabIdBuffer, *pTempChangeTrack );
break;
default:;
}