[PATCH] removed lots of commented #defines, N's and ?'s

Christina Rossmanith ChrRossmanith at web.de
Sat Jan 29 13:39:14 PST 2011


---
 binfilter/bf_sc/source/core/data/sc_documen2.cxx | 2298 +++++++++++-----------
 1 files changed, 1113 insertions(+), 1185 deletions(-)

diff --git a/binfilter/bf_sc/source/core/data/sc_documen2.cxx b/binfilter/bf_sc/source/core/data/sc_documen2.cxx
index 2c3919d..69a5486 100644
--- a/binfilter/bf_sc/source/core/data/sc_documen2.cxx
+++ b/binfilter/bf_sc/source/core/data/sc_documen2.cxx
@@ -2,7 +2,7 @@
 /*************************************************************************
  *
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- * 
+ *
  * Copyright 2000, 2010 Oracle and/or its affiliates.
  *
  * OpenOffice.org - a multi-platform office productivity suite
@@ -32,38 +32,12 @@
 
 #define _BIGINT_HXX
 #define _SFXMULTISEL_HXX
-//#define _STACK_HXX
-//#define _QUEUE_HXX
 #define _DYNARR_HXX
 #define _TREELIST_HXX
 #define _CACHESTR_HXX
 #define _NEW_HXX
-//#define _SHL_HXX ***
-//#define _LINK_HXX ***
-//#define _ERRCODE_HXX ***
-//#define _GEN_HXX ***
-//#define _FRACT_HXX ***
-//#define _STRING_HXX ***
-//#define _MTF_HXX ***
-//#define _CONTNR_HXX ***
-//#define _LIST_HXX ***
-//#define _TABLE_HXX ***
 #define _DYNARY_HXX
-//#define _UNQIDX_HXX ***
-//#define _SVMEMPOOL_HXX ***
-//#define _UNQID_HXX ***
-//#define _DEBUG_HXX ***
-//#define _DATE_HXX ***
-//#define _TIME_HXX ***
-//#define _DATETIME_HXX ***
-//#define _INTN_HXX ***
-//#define _WLDCRD_HXX ***
-//#define _FSYS_HXX ***
-//#define _STREAM_HXX ***
 #define _CACHESTR_HXX
-//#define _SV_MULTISEL_HXX
-
-
 
 #define _SV_NOXSOUND
 
@@ -82,7 +56,6 @@
 #define _MOREBUTTON_HXX
 #define _OUTLINER_HXX
 #define _PASSWD_HXX
-//#define _QUEUE_HXX
 #define _RULER_HXX
 #define _SCRWIN_HXX
 #define _SETBRW_HXX
@@ -98,19 +71,14 @@
 #define _STDMENU_HXX
 
 
-//#define _PRNDLG_HXX ***
-//#define _POLY_HXX **
 // TOOLS
 #define _BIGINT_HXX
 #define _SFXMULTISEL_HXX
-//#define _STACK_HXX
-//#define _QUEUE_HXX
 #define _DYNARR_HXX
 #define _TREELIST_HXX
 #define _CACHESTR_HXX
 
 //SV
-//#define _CLIP_HXX
 #define _CONFIG_HXX
 #define _CURSOR_HXX
 #define _FONTDLG_HXX
@@ -120,11 +88,6 @@
 #define _MENUBTN_HXX
 #endif
 
-//#define _SOBASE_HXX
-//#define _SOSTOR_HXX
-//#define _SOCORE_HXX
-//#define _SOINPL_HXX
-
 #define _SFX_DOCFILE_HXX
 #define _SFX_DOCFILT_HXX
 #define _SFX_DOCINF_HXX
@@ -149,7 +112,6 @@
 #define _SFXMNUITEM_HXX
 #define _SFXMNUMGR_HXX
 #define _SFXMULTISEL_HXX
-//#define _SFXMSG_HXX
 #define _SFXMSGDESCR_HXX
 #define _SFXMSGPOOL_HXX
 #define _SFX_MINFITEM_HXX
@@ -161,19 +123,16 @@
 #define _SFXTBXCTRL_HXX
 #define _SFXTBXMGR_HXX
 
-//#define _SI_HXX
-//#define SI_NODRW
 #define _SI_DLL_HXX
 #define _SIDLL_HXX
 #define _SI_NOITEMS
 #define _SI_NOOTHERFORMS
 #define _SI_NOSBXCONTROLS
 #define _SINOSBXCONTROLS
-#define _SI_NODRW		  //
+#define _SI_NODRW
 #define _SI_NOCONTROL
 #define _VCBRW_HXX
 #define _VCTRLS_HXX
-//#define _VCSBX_HXX
 #define _VCONT_HXX
 #define _VDRWOBJ_HXX
 #define _VCATTR_HXX
@@ -182,12 +141,10 @@
 #define _SVBOXITM_HXX
 #define _SVCONTNR_HXX
 #define _SVDIALDLL_HXX
-//#define _SVDATTR_HXX
 #define _SVDRAG_HXX
 #define _SVDXOUT_HXX
 #define _SVDEC_HXX
 #define _SVDIO_HXX
-//#define _SVDLAYER_HXX
 #define _SVINCVW_HXX
 #define _SVRTV_HXX
 #define _SVTABBX_HXX
@@ -241,7 +198,7 @@
 #include "chartlis.hxx"
 #include "validat.hxx"
 #include "detdata.hxx"
-#include "bf_sc.hrc"				// FID_DATACHANGED
+#include "bf_sc.hrc"                            // FID_DATACHANGED
 #include "chgtrack.hxx"
 #include "chgviset.hxx"
 #include "editutil.hxx"
@@ -253,1152 +210,1123 @@
 namespace binfilter {
 // STATIC DATA -----------------------------------------------------------
 
-/*N*/ ScDocument::ScDocument( ScDocumentMode	eMode,
-/*N*/ 						SfxObjectShell* pDocShell ) :
-/*N*/ 		xServiceManager( ::legacy_binfilters::getLegacyProcessServiceFactory() ),
-/*N*/ 		pEditEngine( NULL ),
-/*N*/ 		pShell( pDocShell ),
-/*N*/ 		pPrinter( NULL ),
-/*N*/ 		pDrawLayer( NULL ),
-/*N*/ 		pColorTable( NULL ),
-/*N*/ 		pCondFormList( NULL ),
-/*N*/ 		pValidationList( NULL ),
-/*N*/ 		pFormatExchangeList( NULL ),
-/*N*/ 		pDPCollection( NULL ),
-/*N*/ 		pLinkManager( NULL ),
-/*N*/ 		pFormulaTree( NULL ),
-/*N*/ 		pEOFormulaTree( NULL ),
-/*N*/ 		pFormulaTrack( NULL ),
-/*N*/ 		pEOFormulaTrack( NULL ),
-/*N*/ 		pOtherObjects( NULL ),
-/*N*/ 		pClipData( NULL ),
-/*N*/ 		pDetOpList(NULL),
-/*N*/ 		pChangeTrack( NULL ),
-/*N*/ 		pUnoBroadcaster( NULL ),
-/*N*/ 		pChangeViewSettings( NULL ),
-/*N*/ 		pScriptTypeData( NULL ),
-/*N*/           pCacheFieldEditEngine( NULL ),
-/*N*/ 		pViewOptions( NULL ),
-/*N*/ 		pDocOptions( NULL ),
-/*N*/ 		pExtDocOptions( NULL ),
-/*N*/ 		pConsolidateDlgData( NULL ),
-/*N*/           pLoadedSymbolStringCellList( NULL ),
-/*N*/ 		aCurTextWidthCalcPos(MAXCOL,0,0),
-/*N*/ 		nFormulaCodeInTree(0),
-/*N*/           nXMLImportedFormulaCount( 0 ),
-/*N*/ 		nInterpretLevel(0),
-/*N*/ 		nMacroInterpretLevel(0),
-/*N*/ 		nInterpreterTableOpLevel(0),
-/*N*/ 		nMaxTableNumber( 0 ),
-/*N*/ 		nFormulaTrackCount(0),
-/*N*/ 		nHardRecalcState(0),
-/*N*/ 		nVisibleTab( 0 ),
-/*N*/ 		eLinkMode(LM_UNKNOWN),
-/*N*/ 		bProtected( FALSE ),
-/*N*/ 		bAutoCalc( eMode == SCDOCMODE_DOCUMENT ),
-/*N*/ 		bAutoCalcShellDisabled( FALSE ),
-/*N*/ 		bForcedFormulaPending( FALSE ),
-/*N*/ 		bCalculatingFormulaTree( FALSE ),
-/*N*/ 		bIsClip( eMode == SCDOCMODE_CLIP ),
-/*N*/ 		bCutMode( FALSE ),
-/*N*/ 		bIsUndo( eMode == SCDOCMODE_UNDO ),
-/*N*/ 		bIsEmbedded( FALSE ),
-/*N*/ 		bNoSetDirty( FALSE ),
-/*N*/ 		bInsertingFromOtherDoc( FALSE ),
+ScDocument::ScDocument( ScDocumentMode    eMode,
+                        SfxObjectShell* pDocShell ) :
+                xServiceManager( ::legacy_binfilters::getLegacyProcessServiceFactory() ),
+                pEditEngine( NULL ),
+                pShell( pDocShell ),
+                pPrinter( NULL ),
+                pDrawLayer( NULL ),
+                pColorTable( NULL ),
+                pCondFormList( NULL ),
+                pValidationList( NULL ),
+                pFormatExchangeList( NULL ),
+                pDPCollection( NULL ),
+                pLinkManager( NULL ),
+                pFormulaTree( NULL ),
+                pEOFormulaTree( NULL ),
+                pFormulaTrack( NULL ),
+                pEOFormulaTrack( NULL ),
+                pOtherObjects( NULL ),
+                pClipData( NULL ),
+                pDetOpList(NULL),
+                pChangeTrack( NULL ),
+                pUnoBroadcaster( NULL ),
+                pChangeViewSettings( NULL ),
+                pScriptTypeData( NULL ),
+                pCacheFieldEditEngine( NULL ),
+                pViewOptions( NULL ),
+                pDocOptions( NULL ),
+                pExtDocOptions( NULL ),
+                pConsolidateDlgData( NULL ),
+                pLoadedSymbolStringCellList( NULL ),
+                aCurTextWidthCalcPos(MAXCOL,0,0),
+                nFormulaCodeInTree(0),
+                nXMLImportedFormulaCount( 0 ),
+                nInterpretLevel(0),
+                nMacroInterpretLevel(0),
+                nInterpreterTableOpLevel(0),
+                nMaxTableNumber( 0 ),
+                nFormulaTrackCount(0),
+                nHardRecalcState(0),
+                nVisibleTab( 0 ),
+                eLinkMode(LM_UNKNOWN),
+                bProtected( FALSE ),
+                bAutoCalc( eMode == SCDOCMODE_DOCUMENT ),
+                bAutoCalcShellDisabled( FALSE ),
+                bForcedFormulaPending( FALSE ),
+                bCalculatingFormulaTree( FALSE ),
+                bIsClip( eMode == SCDOCMODE_CLIP ),
+                bCutMode( FALSE ),
+                bIsUndo( eMode == SCDOCMODE_UNDO ),
+                bIsEmbedded( FALSE ),
+                bNoSetDirty( FALSE ),
+                bInsertingFromOtherDoc( FALSE ),
                 bImportingXML( FALSE ),             // #i41083# this has to be set in ScXMLImport::startDocument
-/*N*/ 		bCalcingAfterLoad( FALSE ),
-/*N*/ 		bNoListening( FALSE ),
-/*N*/ 		bLoadingDone( TRUE ),
-/*N*/ 		bIdleDisabled( FALSE ),
-/*N*/ 		bInLinkUpdate( FALSE ),
-/*N*/ 		bChartListenerCollectionNeedsUpdate( FALSE ),
-/*N*/ 		bHasForcedFormulas( FALSE ),
-/*N*/ 		bLostData(FALSE),
-/*N*/ 		bInDtorClear( FALSE ),
-/*N*/ 		bExpandRefs( FALSE ),
-/*N*/ 		bDetectiveDirty( FALSE ),
-/*N*/ 		nMacroCallMode( SC_MACROCALL_ALLOWED ),
-/*N*/ 		bHasMacroFunc( FALSE ),
-/*N*/ 		nVisSpellState( 0 ),
-/*N*/           nAsianCompression(SC_ASIANCOMPRESSION_INVALID),
-/*N*/           nAsianKerning(SC_ASIANKERNING_INVALID),
-/*N*/           bPastingDrawFromOtherDoc( FALSE ),
-/*N*/           nInDdeLinkUpdate( 0 ),
-/*N*/           bInUnoBroadcast( FALSE ),
-/*N*/           bStyleSheetUsageInvalid( TRUE )
-/*N*/ {
-/*N*/ 	eSrcSet = gsl_getSystemTextEncoding();
-/*N*/ 	nSrcVer = SC_CURRENT_VERSION;
-/*N*/ 	nSrcMaxRow = MAXROW;
-/*N*/ 
-/*N*/ 	if ( eMode == SCDOCMODE_DOCUMENT )
-/*N*/ 	{
-/*N*/ 		if ( pDocShell )
-/*N*/ 			pLinkManager = new SvxLinkManager( pDocShell );
-/*N*/ 
-/*N*/ 		xPoolHelper = new ScPoolHelper( this );
-/*N*/ 
-/*N*/ 		pTab[0]  = NULL;
-/*N*/ 		pBASM = new ScBroadcastAreaSlotMachine( this );
-/*N*/ 		pChartListenerCollection = new ScChartListenerCollection( this );
-/*N*/ 		pRefreshTimerControl = new ScRefreshTimerControl;
-/*N*/ 	}
-/*N*/ 	else
-/*N*/ 	{
-/*N*/ 		pTab[0]		= NULL;
-/*N*/ 		pBASM		= NULL;
-/*N*/ 		pChartListenerCollection = NULL;
-/*N*/ 		pRefreshTimerControl = NULL;
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	for (USHORT i=1; i<=MAXTAB; i++)
-/*N*/ 		pTab[i] = NULL;
-/*N*/ 
-/*N*/ 	pRangeName = new ScRangeName( 4, 4, FALSE, this );
-/*N*/ 	pDBCollection = new ScDBCollection( 4, 4, FALSE, this );
-/*N*/ 	pPivotCollection = new ScPivotCollection(4, 4, this );
-/*N*/ 	pSelectionAttr = NULL;
-/*N*/ 	pChartCollection = new ScChartCollection;
-/*N*/ 	xColNameRanges = new ScRangePairList;
-/*N*/ 	xRowNameRanges = new ScRangePairList;
-/*N*/ 	ImplCreateOptions();
-/*N*/ 	// languages for a visible document are set by docshell later (from options)
-/*N*/ 	SetLanguage( ScGlobal::eLnge, ScGlobal::eLnge, ScGlobal::eLnge );
-/*N*/ 
-/*N*/ 	aTrackTimer.SetTimeoutHdl( LINK( this, ScDocument, TrackTimeHdl ) );
-/*N*/ 	aTrackTimer.SetTimeout( 100 );
-/*N*/ }
-
-
-
-
-/*N*/ void ScDocument::StartChangeTracking() // Changetracking.sdc
-/*N*/ {
-/*N*/ 	if (!pChangeTrack)
-/*N*/ 		pChangeTrack = new ScChangeTrack( this );
-/*N*/ }
-
-/*N*/ void ScDocument::EndChangeTracking() // Changetracking.sdc
-/*N*/ {
-/*N*/ 	delete pChangeTrack;
-/*N*/ 	pChangeTrack = NULL;
-/*N*/ }
-
-/*N*/ void ScDocument::SetChangeTrack( ScChangeTrack* pTrack )
-/*N*/ {
+                bCalcingAfterLoad( FALSE ),
+                bNoListening( FALSE ),
+                bLoadingDone( TRUE ),
+                bIdleDisabled( FALSE ),
+                bInLinkUpdate( FALSE ),
+                bChartListenerCollectionNeedsUpdate( FALSE ),
+                bHasForcedFormulas( FALSE ),
+                bLostData(FALSE),
+                bInDtorClear( FALSE ),
+                bExpandRefs( FALSE ),
+                bDetectiveDirty( FALSE ),
+                nMacroCallMode( SC_MACROCALL_ALLOWED ),
+                bHasMacroFunc( FALSE ),
+                nVisSpellState( 0 ),
+                nAsianCompression(SC_ASIANCOMPRESSION_INVALID),
+                nAsianKerning(SC_ASIANKERNING_INVALID),
+                bPastingDrawFromOtherDoc( FALSE ),
+                nInDdeLinkUpdate( 0 ),
+                bInUnoBroadcast( FALSE ),
+                bStyleSheetUsageInvalid( TRUE )
+{
+        eSrcSet = gsl_getSystemTextEncoding();
+        nSrcVer = SC_CURRENT_VERSION;
+        nSrcMaxRow = MAXROW;
+
+        if ( eMode == SCDOCMODE_DOCUMENT )
+        {
+            if ( pDocShell )
+                pLinkManager = new SvxLinkManager( pDocShell );
+                xPoolHelper = new ScPoolHelper( this );
+                pTab[0]  = NULL;
+                pBASM = new ScBroadcastAreaSlotMachine( this );
+                pChartListenerCollection = new ScChartListenerCollection( this );
+                pRefreshTimerControl = new ScRefreshTimerControl;
+        }
+        else
+        {
+                pTab[0]         = NULL;
+                pBASM           = NULL;
+                pChartListenerCollection = NULL;
+                pRefreshTimerControl = NULL;
+        }
+
+        for (USHORT i=1; i<=MAXTAB; i++)
+                pTab[i] = NULL;
+
+        pRangeName = new ScRangeName( 4, 4, FALSE, this );
+        pDBCollection = new ScDBCollection( 4, 4, FALSE, this );
+        pPivotCollection = new ScPivotCollection(4, 4, this );
+        pSelectionAttr = NULL;
+        pChartCollection = new ScChartCollection;
+        xColNameRanges = new ScRangePairList;
+        xRowNameRanges = new ScRangePairList;
+        ImplCreateOptions();
+        // languages for a visible document are set by docshell later (from options)
+        SetLanguage( ScGlobal::eLnge, ScGlobal::eLnge, ScGlobal::eLnge );
+
+        aTrackTimer.SetTimeoutHdl( LINK( this, ScDocument, TrackTimeHdl ) );
+        aTrackTimer.SetTimeout( 100 );
+}
+
+
+
+
+void ScDocument::StartChangeTracking() // Changetracking.sdc
+{
+        if (!pChangeTrack)
+            pChangeTrack = new ScChangeTrack( this );
+}
+
+void ScDocument::EndChangeTracking() // Changetracking.sdc
+{
+        delete pChangeTrack;
+        pChangeTrack = NULL;
+}
+
+void ScDocument::SetChangeTrack( ScChangeTrack* pTrack )
+{
         // #i49161# this is needed to save documents with change tracking
         DBG_ASSERT( pTrack->GetDocument() == this, "SetChangeTrack: different documents" );
         if ( !pTrack || pTrack == pChangeTrack || pTrack->GetDocument() != this )
             return ;
         EndChangeTracking();
         pChangeTrack = pTrack;
-/*N*/ }
-
-
-/*N*/  IMPL_LINK( ScDocument, TrackTimeHdl, Timer*, EMPTYARG )
-/*N*/  {
-/*?*/  	DBG_BF_ASSERT(0, "STRIP");
-/*N*/ 	return 0;
-/*N*/ }
-
-
-/*N*/ ScDocument::~ScDocument()
-/*N*/ {
-/*N*/ 	DBG_ASSERT( !bInLinkUpdate, "bInLinkUpdate in dtor" );
-/*N*/ 
-/*N*/ 	bInDtorClear = TRUE;
-/*N*/ 
-/*N*/ 	// first of all disable all refresh timers by deleting the control
-/*N*/ 	if ( pRefreshTimerControl )
-/*N*/ 	{	// To be sure there isn't anything running do it with a protector,
-/*N*/ 		// this ensures also that nothing needs the control anymore.
-/*N*/ 		ScRefreshTimerProtector aProt( GetRefreshTimerControlAddress() );
-/*N*/ 		delete pRefreshTimerControl, pRefreshTimerControl = NULL;
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	// Links aufrauemen
-/*N*/ 
-/*N*/ 	if ( pLinkManager )
-/*N*/ 	{
-/*N*/ 		// BaseLinks freigeben
-/*N*/ 		for ( USHORT n = pLinkManager->GetServers().Count(); n; )
-/*?*/ 			pLinkManager->GetServers()[ --n ]->Closed();
-/*N*/ 
-/*N*/ 		if ( pLinkManager->GetLinks().Count() )
-/*N*/ 			pLinkManager->Remove( 0, pLinkManager->GetLinks().Count() );
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	ScAddInAsync::RemoveDocument( this );
-/*N*/ 	ScAddInListener::RemoveDocument( this );
-/*N*/ 	delete pChartListenerCollection;	// vor pBASM wg. evtl. Listener!
-/*N*/ 	pChartListenerCollection = NULL;
-/*N*/ 	// BroadcastAreas vor allen Zellen zerstoeren um unnoetige
-/*N*/ 	// Einzel-EndListenings der Formelzellen zu vermeiden
-/*N*/ 	delete pBASM;		// BroadcastAreaSlotMachine
-/*N*/ 	pBASM = NULL;
-/*N*/ 
-/*N*/ 	if (pUnoBroadcaster)
-/*N*/ 	{
-/*N*/ 		delete pUnoBroadcaster;		// broadcasted nochmal SFX_HINT_DYING
-/*N*/ 		pUnoBroadcaster = NULL;
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	Clear();
-/*N*/ 
-/*N*/ 	if (pCondFormList)
-/*N*/ 	{
-/*N*/ 		pCondFormList->DeleteAndDestroy( 0, pCondFormList->Count() );
-/*N*/ 		DELETEZ(pCondFormList);
-/*N*/ 	}
-/*N*/ 	if (pValidationList)
-/*N*/ 	{
-/*N*/ 		pValidationList->DeleteAndDestroy( 0, pValidationList->Count() );
-/*N*/ 		DELETEZ(pValidationList);
-/*N*/ 	}
-/*N*/ 	delete pRangeName;
-/*N*/ 	delete pDBCollection;
-/*N*/ 	delete pPivotCollection;
-/*N*/ 	delete pSelectionAttr;
-/*N*/ 	delete pChartCollection;
-/*N*/ 	DeleteDrawLayer();
-/*N*/ 	delete pFormatExchangeList;
-/*N*/ 	delete pPrinter;
-/*N*/ 	ImplDeleteOptions();
-/*N*/ 	delete pConsolidateDlgData;
-/*N*/ 	delete pLinkManager;
-/*N*/ 	delete pClipData;
-/*N*/ 	delete pDetOpList;					// loescht auch die Eintraege
-/*N*/ 	delete pChangeTrack;
-/*N*/ 	delete pEditEngine;
-/*N*/ 	delete pChangeViewSettings;			// und weg damit
-/*N*/ 
-/*N*/ 	delete pDPCollection;
-/*N*/ 
-/*N*/ 	// delete the EditEngine before destroying the xPoolHelper
-/*N*/ 	delete pCacheFieldEditEngine;
-/*N*/ 
-/*N*/ 	if ( xPoolHelper.is() && !bIsClip )
-/*N*/ 		xPoolHelper->SourceDocumentGone();
-/*N*/ 	xPoolHelper.clear();
-/*N*/ 
-/*N*/ 	DeleteColorTable();
-/*N*/ 	delete pScriptTypeData;
-/*N*/ 	delete pOtherObjects;
-/*N*/ 
-/*N*/ }
-
-
-/*N*/ SvNumberFormatter* ScDocument::GetFormatTable() const
-/*N*/ {
-/*N*/ 	return xPoolHelper->GetFormTable();
-/*N*/ }
-
-/*N*/ SfxItemPool* ScDocument::GetEditPool() const
-/*N*/ {
-/*N*/ 	return xPoolHelper->GetEditPool();
-/*N*/ }
-
-/*N*/ SfxItemPool* ScDocument::GetEnginePool() const
-/*N*/ {
-/*N*/ 	return xPoolHelper->GetEnginePool();
-/*N*/ }
-
-/*N*/ ScFieldEditEngine& ScDocument::GetEditEngine()
-/*N*/ {
-/*N*/ 	if ( !pEditEngine )
-/*N*/ 	{
-/*N*/ 		pEditEngine = new ScFieldEditEngine( GetEnginePool(), GetEditPool() );
-/*N*/ 		pEditEngine->SetUpdateMode( FALSE );
-/*N*/ 		pEditEngine->EnableUndo( FALSE );
-/*N*/ 		pEditEngine->SetRefMapMode( MAP_100TH_MM );
-/*N*/ 		pEditEngine->SetForbiddenCharsTable( xForbiddenCharacters );
-/*N*/ 	}
-/*N*/ 	return *pEditEngine;
-/*N*/ }
-
-/*N*/ void lcl_RefreshPivotData( ScPivotCollection* pColl )
-/*N*/ {
-/*N*/ 	USHORT nCount = pColl->GetCount();
-/*N*/ 	for (USHORT i=0; i<nCount; i++)
-/*N*/ 	{
-/*N*/ 		ScPivot* pPivot = (*pColl)[i];
-/*N*/ 		if (pPivot->CreateData(TRUE))
-/*N*/ 			pPivot->ReleaseData();
-/*N*/ 	}
-/*N*/ }
-
-
-/*N*/ BOOL ScDocument::SymbolStringCellsPending() const
-/*N*/ {
-/*N*/     return pLoadedSymbolStringCellList && pLoadedSymbolStringCellList->Count();
-/*N*/ }
-
-
-/*N*/ List& ScDocument::GetLoadedSymbolStringCellsList()
-/*N*/ {
-/*N*/     if ( !pLoadedSymbolStringCellList )
-/*N*/         pLoadedSymbolStringCellList = new List;
-/*N*/     return *pLoadedSymbolStringCellList;
-/*N*/ }
-
-
-/*N*/ BOOL ScDocument::Load( SvStream& rStream, ScProgress* pProgress )
-/*N*/ {
-/*N*/ 	bLoadingDone = FALSE;
-/*N*/ 
-/*N*/ 	//----------------------------------------------------
-/*N*/ 
-/*N*/ 	Clear();
-/*N*/ 	USHORT nOldBufSize = rStream.GetBufferSize();
-/*N*/ 	rStream.SetBufferSize( 32768 );
-/*N*/ 
-/*N*/ 		//	Progress-Bar
-/*N*/ 
-/*N*/ //	ULONG nCurPos = rStream.Tell();
-/*N*/ //	ULONG nEndPos = rStream.Seek( STREAM_SEEK_TO_END );
-/*N*/ //	rStream.Seek( nCurPos );
-/*N*/ //	ScProgress aProgress( NULL, ScGlobal::GetRscString(STR_LOAD_DOC), nEndPos - nCurPos );
-/*N*/ 
-/*N*/ 	BOOL bError = FALSE;
-/*N*/ 	USHORT nVersion = 0;
-/*N*/ 	USHORT nVerMaxRow = MAXROW_30;		// 8191, wenn in der Datei nichts steht
-/*N*/ 	USHORT nTab = 0;
-/*N*/ 	USHORT nEnumDummy;
-/*N*/ 	String aEmptyName;
-/*N*/ 	String aPageStyle;
-/*N*/ 	CharSet eOldSet = rStream.GetStreamCharSet();
-/*N*/ 
-/*N*/ 	USHORT nID;
-/*N*/ 	rStream >> nID;
-/*N*/ 	if (nID == SCID_DOCUMENT || nID == SCID_NEWDOCUMENT )
-/*N*/ 	{
-/*N*/ 		ScReadHeader aHdr( rStream );
-/*N*/ 		while (aHdr.BytesLeft() && !bError )
-/*N*/ 		{
-/*N*/ 			USHORT nSubID;
-/*N*/ 			rStream >> nSubID;
-/*N*/ 			switch (nSubID)
-/*N*/ 			{
-/*N*/ 				case SCID_DOCFLAGS:
-/*N*/ 					{
-/*N*/ 						ScReadHeader aFlagsHdr( rStream );
-/*N*/ 
-/*N*/ 						rStream >> nVersion;				// 312 abwaerts
-/*N*/ 						rStream.ReadByteString( aPageStyle, rStream.GetStreamCharSet() );
-/*N*/ 						rStream >> bProtected;				// Dokument geschuetzt
-/*N*/ 						String aPass;
-/*N*/ 						rStream.ReadByteString( aPass, rStream.GetStreamCharSet() );
-/*N*/ 						if (aPass.Len())
-/*?*/ 							SvPasswordHelper::GetHashPassword(aProtectPass, aPass);
-/*N*/ 						if ( aFlagsHdr.BytesLeft() )
-/*N*/ 						{
-/*N*/ 							rStream >> nEnumDummy;
-/*N*/ 							eLanguage = LanguageType( nEnumDummy );
-/*N*/ 						}
-/*N*/ 						if ( aFlagsHdr.BytesLeft() )
-/*N*/ 							rStream >> bAutoCalc;
-/*N*/ 						if ( aFlagsHdr.BytesLeft() )
-/*N*/ 							rStream >> nVisibleTab;
-/*N*/ 						if ( aFlagsHdr.BytesLeft() )
-/*N*/ 							rStream >> nVersion;			// echte Version
-/*N*/ 						if ( aFlagsHdr.BytesLeft() )
-/*N*/ 							rStream >> nVerMaxRow;			// sonst auf 8191 lassen
-/*N*/ 
-/*N*/ 						nSrcVer		= nVersion;				// Member
-/*N*/ 						nSrcMaxRow	= nVerMaxRow;			// Member
-/*N*/ 
-/*N*/ 						// Fuer Debugging bis hin zur SC 3.0a:
-/*N*/ 						if( nVersion > 0x0002 && nVersion < SC_NUMFMT )
-/*N*/ 						{
-/*N*/ 							bError = TRUE;
-/*N*/ 							rStream.SetError( SVSTREAM_WRONGVERSION );
-/*N*/ 						}
-/*N*/ 
-/*N*/ 						// Das obere Byte muss kleiner oder gleich sein
-/*N*/ 						//	(3.1 Dateien mit 8192 Zeilen koennen noch gelesen werden)
-/*N*/ 
-/*N*/ 						if( ( nSrcVer & 0xFF00 ) > ( SC_CURRENT_VERSION & 0xFF00 ) )
-/*N*/ 						{
-/*N*/ 							bError = TRUE;
-/*N*/ 							rStream.SetError( SVSTREAM_WRONGVERSION );
-/*N*/ 						}
-/*N*/ 					}
-/*N*/ 					break;
-/*N*/ 				case SCID_CHARSET:
-/*N*/ 					{
-/*N*/ 						ScReadHeader aSetHdr( rStream );
-/*N*/ 						BYTE cSet, cGUI;	// cGUI is dummy, old GUIType
-/*N*/ 						rStream >> cGUI >> cSet;
-/*N*/ 						eSrcSet = (CharSet) cSet;
-/*N*/                         rStream.SetStreamCharSet( ::GetSOLoadTextEncoding(
-/*N*/                             eSrcSet, (USHORT)rStream.GetVersion() ) );
-/*N*/ 					}
-/*N*/ 					break;
-/*?*/ 				case SCID_LINKUPMODE: //	Link Update Mode
-/*?*/ 					{
-/*?*/ 						ScReadHeader aSetHdr( rStream );
-/*?*/ 						BYTE cSet;
-/*?*/ 						rStream >> cSet;
-/*?*/ 						eLinkMode=(ScLkUpdMode) cSet;
-/*?*/ 					}
-/*?*/ 					break;
-/*N*/ 				case SCID_TABLE:
-/*N*/ 					pTab[nTab] = new ScTable(this, nTab, aEmptyName);
-/*N*/ 					pTab[nTab]->SetPageStyle( aPageStyle );
-/*N*/ 					pTab[nTab]->Load(rStream,nVersion,pProgress);
-/*N*/ 					++nTab;
-/*N*/ 					break;
-/*N*/ 				case SCID_DRAWING:
-/*N*/ 					LoadDrawLayer(rStream);
-/*N*/ 					break;
-/*N*/ 				case SCID_DDELINKS:
-/*N*/ 					LoadDdeLinks(rStream);
-/*N*/ 					break;
-/*N*/ 				case SCID_AREALINKS:
-/*N*/ 					LoadAreaLinks(rStream);
-/*N*/ 					break;
-/*N*/ 				case SCID_RANGENAME:
-/*N*/ 					pRangeName->Load(rStream, nVersion );
-/*N*/ 					break;
-/*N*/ 				case SCID_DBAREAS:
-/*N*/ 					pDBCollection->Load( rStream );
-/*N*/ 					break;
-/*?*/ 				case SCID_DATAPILOT:
-/*?*/ 					GetDPCollection()->LoadNew( rStream );
-/*?*/ 					break;
-/*N*/ 				case SCID_PIVOT:
-/*N*/ 					pPivotCollection->Load( rStream );
-/*N*/ 					break;
-/*N*/ 				case SCID_CHARTS:
-/*N*/ 					pChartCollection->Load( this, rStream );
-/*N*/ 					break;
-/*N*/ 				case SCID_COLNAMERANGES:
-/*N*/ 					xColNameRanges->Load( rStream, nVersion );
-/*N*/ 					break;
-/*N*/ 				case SCID_ROWNAMERANGES:
-/*N*/ 					xRowNameRanges->Load( rStream, nVersion );
-/*N*/ 					break;
-/*N*/ 				case SCID_CONDFORMATS:
-/*N*/ 					if (!pCondFormList)
-/*N*/ 						pCondFormList = new ScConditionalFormatList;
-/*N*/ 					pCondFormList->Load( rStream, this );
-/*N*/ 					break;
-/*N*/ 				case SCID_VALIDATION:
-/*N*/ 					if (!pValidationList)
-/*N*/ 						pValidationList = new ScValidationDataList;
-/*N*/ 					pValidationList->Load( rStream, this );
-/*N*/ 					break;
-/*N*/ 				case SCID_DETOPLIST:
-/*N*/ 					if (!pDetOpList)
-/*N*/ 						pDetOpList = new ScDetOpList;
-/*N*/ 					pDetOpList->Load( rStream );
-/*N*/ 					break;
-/*N*/ 				case SCID_NUMFORMAT:
-/*N*/ 					{
-/*N*/ 						ScReadHeader aNumHeader(rStream);
-/*N*/ 						xPoolHelper->GetFormTable()->Load(rStream);
-/*N*/ 					}
-/*N*/ 					break;
-/*N*/ 				case SCID_DOCOPTIONS:
-/*N*/ 					ImplLoadDocOptions(rStream);
-/*N*/ 					break;
-/*N*/ 				case SCID_VIEWOPTIONS:
-/*N*/ 					ImplLoadViewOptions(rStream);
-/*N*/ 					break;
-/*N*/ 				case SCID_PRINTSETUP:
-/*N*/ 					{
-/*N*/ 						ScReadHeader aJobHeader(rStream);
-/*N*/ 						SfxItemSet* pSet = new SfxItemSet( *xPoolHelper->GetDocPool(),
-/*N*/ 								SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN,
-/*N*/ 								SID_PRINTER_CHANGESTODOC,  SID_PRINTER_CHANGESTODOC,
-/*N*/ 								SID_SCPRINTOPTIONS,        SID_SCPRINTOPTIONS,
-/*N*/ 								NULL );
-/*N*/ 						SetPrinter( SfxPrinter::Create( rStream, pSet ) );
-/*N*/ 					}
-/*N*/ 					break;
-/*?*/ 				case SCID_CONSOLIDATA:
-/*?*/ 					if (!pConsolidateDlgData)
-/*?*/ 						pConsolidateDlgData = new ScConsolidateParam;
-/*?*/ 					pConsolidateDlgData->Load( rStream );
-/*?*/ 					break;
-/*?*/ 				case SCID_CHANGETRACK:
-/*N*/					if ( pChangeTrack ) // Changetracking.sdc
-/*N*/ /*?*/ 						pChangeTrack->Clear();	// es kann nur einen geben
-/*N*/ /*?*/ 					else
-/*N*/ /*?*/ 						StartChangeTracking();
-/*N*/ /*?*/ 					pChangeTrack->Load( rStream, nVersion );
-/*?*/ 					break;
-/*N*/ 				case SCID_CHGVIEWSET:
-/*N*/ 				 	if (!pChangeViewSettings)
-/*N*/ 						pChangeViewSettings = new ScChangeViewSettings;
-/*N*/ 					pChangeViewSettings->Load( rStream, nVersion );
-/*N*/ 					break;
-/*N*/ 				default:
-/*N*/ 					{
-/*N*/ 						DBG_ERROR("unbekannter Sub-Record in ScDocument::Load");
-/*N*/ 						ScReadHeader aDummyHdr( rStream );
-/*N*/ 					}
-/*N*/ 			}
-/*N*/ 
-/*N*/ 			if (rStream.GetError() != SVSTREAM_OK)
-/*N*/ 				bError = TRUE;
-/*N*/ 		}
-/*N*/ 	}
-/*N*/ 	else
-/*N*/ 	{
-/*N*/ 		//	Assertion nur, wenn kein Passwort gesetzt ist
-/*N*/ 		DBG_ASSERT( rStream.GetKey().Len(), "Load: SCID_DOCUMENT nicht gefunden" );
-/*N*/ 		bError = TRUE;
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	rStream.SetStreamCharSet( eOldSet );
-/*N*/ 	rStream.SetBufferSize( nOldBufSize );
-/*N*/ 
-/*N*/ 	if (!bError)									// Neuberechnungen
-/*N*/ 	{
-/*N*/ 		xPoolHelper->GetStylePool()->UpdateStdNames();	// falls mit Version in anderer Sprache gespeichert
-/*N*/ 
-/*N*/ 		//	Zahlformat-Sprache
-/*N*/ 		//	(kann nicht in LoadPool passieren, weil der Numberformatter geladen sein muss)
-/*N*/ 
-/*N*/ 		ScDocumentPool* pPool = xPoolHelper->GetDocPool();
-/*N*/ 		if ( pPool->GetLoadingVersion() == 0 )				// 0 = Pool-Version bis 3.1
-/*N*/ 		{
-/*N*/ 			//	in 3.1-Dokumenten gibt es ATTR_LANGUAGE_FORMAT noch nicht
-/*N*/ 			//	darum bei Bedarf zu ATTR_VALUE_FORMAT noch die Sprache dazutun
-/*N*/ 			//	(Bug #37441#)
-/*N*/ 
-/*N*/ 			//	harte Attribute:
-/*N*/ 
-/*N*/ 			SvNumberFormatter* pFormatter = xPoolHelper->GetFormTable();
-/*N*/ 			USHORT nCount = pPool->GetItemCount(ATTR_PATTERN);
-/*N*/ 			ScPatternAttr* pPattern;
-/*N*/ 			for (USHORT i=0; i<nCount; i++)
-/*N*/ 			{
-/*N*/ 				pPattern = (ScPatternAttr*)pPool->GetItem(ATTR_PATTERN, i);
-/*N*/ 				if (pPattern)
-/*N*/                     ScGlobal::AddLanguage( pPattern->GetItemSet(), *pFormatter );
-/*N*/ 			}
-/*N*/ 
-/*N*/ 			//	Vorlagen:
-/*N*/ 
-/*N*/ 			SfxStyleSheetIterator aIter( xPoolHelper->GetStylePool(), SFX_STYLE_FAMILY_PARA );
-/*N*/ 			for ( SfxStyleSheetBase* pStyle = aIter.First(); pStyle; pStyle = aIter.Next() )
-/*N*/                 ScGlobal::AddLanguage( pStyle->GetItemSet(), *pFormatter );
-/*N*/ 		}
-/*N*/ 
-/*N*/         // change FontItems in styles
-/*N*/         xPoolHelper->GetStylePool()->ConvertFontsAfterLoad();
-/*N*/ 
-/*N*/ 		//	Druckbereiche etc.
-/*N*/ 
-/*N*/ 		SfxStyleSheetIterator	aIter( xPoolHelper->GetStylePool(), SFX_STYLE_FAMILY_PAGE );
-/*N*/ 		ScStyleSheet*			pStyleSheet = NULL;
-/*N*/ 
-/*N*/ 		nMaxTableNumber = 0;
-/*N*/ 		for (USHORT i=0; i<=MAXTAB; i++)
-/*N*/ 			if (pTab[i])
-/*N*/ 			{
-/*N*/ 				// MaxTableNumber ermitteln
-/*N*/ 
-/*N*/ 				nMaxTableNumber = i+1;
-/*N*/ 
-/*N*/ 				// Druckbereiche aus <= 3.00.2 Dokumenten
-/*N*/ 				// aus den PageStyles holen und jetzt an
-/*N*/ 				// der Tabelle speichern.
-/*N*/ 
-/*N*/ 				pStyleSheet = (ScStyleSheet*)aIter.Find( pTab[i]->GetPageStyle() );
-/*N*/ 
-/*N*/ 				if ( pStyleSheet )
-/*N*/ 				{
-/*N*/ 					SfxItemSet&			rSet			= pStyleSheet->GetItemSet();
-/*N*/ 					const ScRangeItem*	pPrintAreaItem	= NULL;
-/*N*/ 					const ScRangeItem*	pRepeatColItem	= NULL;
-/*N*/ 					const ScRangeItem*	pRepeatRowItem	= NULL;
-/*N*/ 
-/*N*/ 					rSet.GetItemState( ATTR_PAGE_PRINTAREA, TRUE,
-/*N*/ 									   (const SfxPoolItem**)&pPrintAreaItem );
-/*N*/ 					rSet.GetItemState( ATTR_PAGE_REPEATCOL, TRUE,
-/*N*/ 									   (const SfxPoolItem**)&pRepeatColItem );
-/*N*/ 					rSet.GetItemState( ATTR_PAGE_REPEATROW, TRUE,
-/*N*/ 									   (const SfxPoolItem**)&pRepeatRowItem );
-/*N*/ 
-/*N*/ 					if ( pPrintAreaItem ) // Druckbereiche
-/*N*/ 					{
-/*N*/ 						if ( !pPrintAreaItem->GetFlags() )
-/*N*/ 						{
-/*N*/ 							SetPrintRangeCount( i, 1 );
-/*N*/ 							SetPrintRange( i, 0, pPrintAreaItem->GetRange() );
-/*N*/ 						}
-/*N*/ 						rSet.ClearItem( ATTR_PAGE_PRINTAREA );
-/*N*/ 					}
-/*N*/ 
-/*N*/ 					if ( pRepeatColItem ) // Wiederholungsspalte
-/*N*/ 					{
-/*?*/ 						SetRepeatColRange( i, !pRepeatColItem->GetFlags()
-/*?*/ 											? &pRepeatColItem->GetRange()
-/*?*/ 											: (const ScRange *)NULL );
-/*?*/ 						rSet.ClearItem( ATTR_PAGE_REPEATCOL );
-/*N*/ 					}
-/*N*/ 
-/*N*/ 					if ( pRepeatRowItem ) // Wiederholungszeile
-/*N*/ 					{
-/*?*/ 						SetRepeatRowRange( i, !pRepeatRowItem->GetFlags()
-/*?*/ 											? &pRepeatRowItem->GetRange()
-/*?*/ 											: (const ScRange *)NULL );
-/*?*/ 						rSet.ClearItem( ATTR_PAGE_REPEATROW );
-/*?*/ 					}
-/*N*/ 				}
-/*N*/ 			}
-/*N*/ 
-/*N*/ 
-/*N*/ 		if ( pDPCollection && pDPCollection->GetCount() )
-/*?*/ 			pPivotCollection->FreeAll();
-/*N*/ 		else
-/*N*/ 		{
-/*N*/ 			lcl_RefreshPivotData( pPivotCollection );
-/*N*/ 			GetDPCollection()->ConvertOldTables( *pPivotCollection );
-/*N*/ 		}
-/*N*/ 		if ( pDPCollection )
-/*N*/ 			pDPCollection->EnsureNames();	// make sure every table has a name
-/*N*/ 
-/*N*/ 		SetAutoFilterFlags();
-/*N*/ 		if (pDrawLayer)
-/*N*/ 			UpdateAllCharts();
-/*N*/ #ifdef DBG_UTIL
-/*N*/ //2do: wg. #62107
-/*N*/ // ChartListenerCollection speichern/laden, damit nach dem Laden das Update
-/*N*/ // hier einmal eingespart werden kann und somit nicht mehr alle Charts
-/*N*/ // angefasst werden muessen. Die ChartListenerCollection muss dann zum Master
-/*N*/ // der Referenzen werden.
-/*N*/ //		static BOOL bShown = 0;
-/*N*/ //		if ( !bShown && SOFFICE_FILEFORMAT_NOW > SOFFICE_FILEFORMAT_50 )
-/*N*/ //		{
-/*N*/ //			bShown = 1;
-/*N*/ //			DBG_ERRORFILE( "bei inkompatiblem FileFormat ChartListenerCollection speichern!" );
-/*N*/ //		}
-/*N*/ #endif
-/*N*/ 		UpdateChartListenerCollection();
-/*N*/ 		if (pDrawLayer)
-/*N*/ 			RefreshNoteFlags();
-/*N*/ 		CalcAfterLoad();
-/*N*/ 	}
-/*N*/ 
-/*N*/     if ( pLoadedSymbolStringCellList )
-/*N*/     {   // we had symbol string cells, list was cleared by columns, delete it
-/*N*/         delete pLoadedSymbolStringCellList;
-/*N*/         pLoadedSymbolStringCellList = NULL;
-/*N*/     }
-/*N*/ 
-/*N*/ 	//----------------------------------------------------
-/*N*/ 
-/*N*/ 	bLoadingDone = TRUE;
-/*N*/ 
-/*N*/ 	return !bError;
-/*N*/ }
-
-/*N*/ BOOL ScDocument::Save( SvStream& rStream, ScProgress* pProgress ) const
-/*N*/ {
-/*N*/ 	((ScDocument*)this)->bLoadingDone = FALSE;		// nicht zwischendrin reinpfuschen lassen
-/*N*/ 
-/*N*/ 	((ScDocument*)this)->bLostData = FALSE;			// wird beim Speichern gesetzt
-/*N*/ 
-/*N*/ 	((ScDocument*)this)->nSrcVer = SC_CURRENT_VERSION;
-/*N*/ 	((ScDocument*)this)->nSrcMaxRow = MAXROW;
-/*N*/ 	if ( rStream.GetVersion() <= SOFFICE_FILEFORMAT_31 )
-/*N*/ 	{
-/*N*/ 		//	3.1 Export -> nur 8192 Zeilen schreiben, und kompatible Versionsnummer
-/*N*/ 
-/*N*/ 		((ScDocument*)this)->nSrcVer = SC_31_EXPORT_VER;
-/*N*/ 		((ScDocument*)this)->nSrcMaxRow = MAXROW_30;
-/*N*/ 	}
-/*N*/ 	else if ( rStream.GetVersion() <= SOFFICE_FILEFORMAT_40 )
-/*N*/ 	{	//	4.0 Export -> kompatible Versionsnummer
-/*N*/ 		((ScDocument*)this)->nSrcVer = SC_40_EXPORT_VER;
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	USHORT i;
-/*N*/ 	USHORT nOldBufSize = rStream.GetBufferSize();
-/*N*/ 	rStream.SetBufferSize( 32768 );
-/*N*/ 
-/*N*/ 	CharSet eOldSet = rStream.GetStreamCharSet();
-/*N*/     CharSet eStoreCharSet = ::GetSOStoreTextEncoding(
-/*N*/         gsl_getSystemTextEncoding(), (USHORT)rStream.GetVersion() );
-/*N*/     rStream.SetStreamCharSet( eStoreCharSet );
-/*N*/ 
-/*N*/ 
-/*N*/ 		//	Progress-Bar
-/*N*/ 
-/*N*/ 	long nSavedDocCells = 0;
-/*N*/ //	ScProgress aProgress( NULL, ScGlobal::GetRscString( STR_SAVE_DOC ), GetWeightedCount() + 1 );
-/*N*/ 
-/*N*/ 	{
-/*N*/ 		rStream << (USHORT) SCID_NEWDOCUMENT;
-/*N*/ 		ScWriteHeader aHdr( rStream );
-/*N*/ 
-/*N*/ 		//	Flags
-/*N*/ 
-/*N*/ 		{
-/*N*/ 			rStream << (USHORT) SCID_DOCFLAGS;
-/*N*/ 			ScWriteHeader aFlagsHdr( rStream, 18 );			//! ausprobieren
-/*N*/ 
-/*N*/ 			// wg. Bug in 312 ScToken::RelToRelAbs mit DoubleRefs bekommt
-/*N*/ 			// die 312er immer vorgegaukelt, dass es keine RelRefs gaebe,
-/*N*/ 			// was auch ok ist, da immer absolut gespeichert wird und
-/*N*/ 			// SR_RELATIVE nie zur Verwendung kam und nicht kommen darf.
-/*N*/ 			if ( nSrcVer & 0xFF00 )
-/*N*/ 				rStream << (USHORT) nSrcVer;
-/*N*/ 				// hoehere Major-Version darf von 312 nicht geladen werden
-/*N*/ 			else
-/*N*/ 				rStream << (USHORT) (SC_RELATIVE_REFS - 1);
-/*N*/ 
-/*N*/ 			// dummy page style (for compatibility)
-/*N*/ 			rStream.WriteByteString(
-/*N*/ 						String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM(STRING_STANDARD)),
-/*N*/ 						rStream.GetStreamCharSet() );
-/*N*/ 			rStream << bProtected;					// Dokument geschuetzt
-/*N*/ 			String aPass;
-/*N*/ 			//rStream.WriteByteString( aProtectPass, rStream.GetStreamCharSet() );
-/*N*/ 			rStream.WriteByteString( aPass, rStream.GetStreamCharSet() );
-/*N*/ 			rStream << (USHORT)	eLanguage;
-/*N*/ 			rStream << bAutoCalc;
-/*N*/ 
-/*N*/ 			rStream << nVisibleTab;
-/*N*/ 
-/*N*/ 			// und hier jetzt die echte Versionsnummer
-/*N*/ 			rStream << (USHORT) nSrcVer;
-/*N*/ 
-/*N*/ 			rStream << nSrcMaxRow;					// Zeilenanzahl
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		//	Zeichensatz
-/*N*/ 
-/*N*/ 		{
-/*N*/ 			rStream << (USHORT) SCID_CHARSET;
-/*N*/ 			ScWriteHeader aSetHdr( rStream, 2 );
-/*N*/ 			rStream << (BYTE) 0		// dummy, old System::GetGUIType()
-/*N*/                     << (BYTE) eStoreCharSet;
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		//	Link Update Mode
-/*N*/ 
-/*N*/ 		if(eLinkMode!=LM_UNKNOWN)
-/*N*/ 		{
-/*?*/ 			rStream << (USHORT) SCID_LINKUPMODE;
-/*?*/ 			ScWriteHeader aSetHdr( rStream, 1 );
-/*?*/ 			rStream << (BYTE) eLinkMode;
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		rStream << (USHORT) SCID_RANGENAME;
-/*N*/ 		pRangeName->Store( rStream );
-/*N*/ 
-/*N*/ 		rStream << (USHORT) SCID_DBAREAS;
-/*N*/ 		pDBCollection->Store( rStream );
-/*N*/ 
-/*N*/ 		rStream << (USHORT) SCID_DDELINKS;
-/*N*/ 		SaveDdeLinks( rStream );
-/*N*/ 
-/*N*/ 		rStream << (USHORT) SCID_AREALINKS;
-/*N*/ 		SaveAreaLinks( rStream );
-/*N*/ 
-/*N*/ 		{
-/*N*/ 			rStream << (USHORT) SCID_NUMFORMAT;
-/*N*/ 			ScWriteHeader aNumHeader(rStream);
-/*N*/ 			xPoolHelper->GetFormTable()->Save(rStream);
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		if ( xColNameRanges->Count() )
-/*N*/ 		{
-/*N*/ 			rStream << (USHORT) SCID_COLNAMERANGES;
-/*N*/ 			xColNameRanges->Store( rStream );
-/*N*/ 		}
-/*N*/ 		if ( xRowNameRanges->Count() )
-/*N*/ 		{
-/*N*/ 			rStream << (USHORT) SCID_ROWNAMERANGES;
-/*N*/ 			xRowNameRanges->Store( rStream );
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		if (pCondFormList)
-/*N*/ 			pCondFormList->ResetUsed();		// wird beim Speichern der Tabellen gesetzt
-/*N*/ 		if (pValidationList)
-/*N*/ 			pValidationList->ResetUsed();	// wird beim Speichern der Tabellen gesetzt
-/*N*/ 
-/*N*/ 		//	Tabellen (Daten)
-/*N*/ 
-/*N*/ 		for (i=0; i<=MAXTAB; i++)
-/*N*/ 		{
-/*N*/ 			if (pTab[i])
-/*N*/ 			{
-/*N*/ 				rStream << (USHORT) SCID_TABLE;
-/*N*/ 				pTab[i]->Save(rStream, nSavedDocCells, pProgress);
-/*N*/ 			}
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		//	bedingte Formate / Gueltigkeit
-/*N*/ 		//	beim Speichern der Tabellen ist eingetragen worden,
-/*N*/ 		//	welche Eintraege benutzt werden
-/*N*/ 
-/*N*/ 		if (pCondFormList)
-/*N*/ 		{
-/*N*/ 			rStream << (USHORT) SCID_CONDFORMATS;
-/*N*/ 			pCondFormList->Store(rStream);
-/*N*/ 		}
-/*N*/ 		if (pValidationList)
-/*N*/ 		{
-/*N*/ 			rStream << (USHORT) SCID_VALIDATION;
-/*N*/ 			pValidationList->Store(rStream);
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		//	Liste der Detektiv-Operationen (zum Aktualisieren)
-/*N*/ 		if (pDetOpList)
-/*N*/ 		{
-/*N*/ 			rStream << (USHORT) SCID_DETOPLIST;
-/*N*/ 			pDetOpList->Store(rStream);
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		//	Drawing
-/*N*/ 
-/*N*/ //		if (pDrawLayer && pDrawLayer->HasObjects())
-/*N*/ 		//	auch ohne Objekte - wegen ColorTable etc.
-/*N*/ 
-/*N*/ 		if (pDrawLayer)
-/*N*/ 		{
-/*N*/ 			rStream << (USHORT) SCID_DRAWING;
-/*N*/ 			StoreDrawLayer(rStream);
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		//	Collections
-/*N*/ 
-/*N*/ 		//	(new) DataPilot collection must be saved before old Pivot collection
-/*N*/ 		//	so old data can be skipped by new office
-/*N*/ 		//	not in 3.0 or 4.0 export to avoid warning messages
-/*N*/ 
-/*N*/ 		if ( nSrcVer > SC_40_EXPORT_VER && pDPCollection && pDPCollection->GetCount() )
-/*N*/ 		{
-/*?*/ 			rStream << (USHORT) SCID_DATAPILOT;				// new data
-/*?*/ 			pDPCollection->StoreNew( rStream );
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		rStream << (USHORT) SCID_PIVOT;						// old data
-/*N*/ 		if ( pDPCollection && pDPCollection->GetCount() )
-/*N*/ 			pDPCollection->StoreOld( rStream );
-/*N*/ 		else
-/*N*/ 			pPivotCollection->Store( rStream );				// not converted or all empty
-/*N*/ 
-/*N*/ 				//	Charts werden hier nicht mehr gespeichert, weil
-/*N*/ 				//	jedes Chart seine Daten selber speichert
-/*N*/ 
-/*N*/ 		DBG_ASSERT(!pChartCollection || !pChartCollection->GetCount(),
-/*N*/ 						"wer hat da ein Chart eingetragen?");
-/*N*/ 
-/*N*/ 		rStream << (USHORT) SCID_DOCOPTIONS;
-/*N*/ 		ImplSaveDocOptions(rStream);
-/*N*/ 
-/*N*/ 		rStream << (USHORT) SCID_VIEWOPTIONS;
-/*N*/ 		ImplSaveViewOptions(rStream);
-/*N*/ 
-/*N*/ 		//	Job-Setup vom Printer
-/*N*/ 
-/*N*/ 		if (pPrinter)
-/*N*/ 		{
-/*N*/ 			rStream << (USHORT) SCID_PRINTSETUP;
-/*N*/ 			ScWriteHeader aJobHeader(rStream);
-/*N*/ 
-/*N*/ 			((ScDocument*)this)->GetPrinter()->Store( rStream );
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		if ( nSrcVer > SC_40_EXPORT_VER )	//	Das folgende nicht bei 3.0 oder 4.0 Export...
-/*N*/ 		{
-/*N*/ 			if (pConsolidateDlgData)		//	Einstellungen fuer den Konsolidieren-Dialog
-/*N*/ 			{
-/*?*/ 				rStream << (USHORT) SCID_CONSOLIDATA;
-/*?*/ 				pConsolidateDlgData->Store( rStream );
-/*N*/ 			}
-/*N*/ 			if ( pChangeTrack )
-/*N*/ 			{
-/*N*/ 			 	rStream << (USHORT) SCID_CHANGETRACK;
-/*N*/ 				pChangeTrack->Store( rStream );
-/*N*/ 			}
-/*N*/ 			if ( pChangeViewSettings )
-/*N*/ 			{
-/*N*/ 			 	rStream << (USHORT) SCID_CHGVIEWSET;
-/*N*/ 				pChangeViewSettings->Store( rStream );
-/*N*/ 			}
-/*N*/ 		}
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	rStream.SetStreamCharSet( eOldSet );
-/*N*/ 	rStream.SetBufferSize( nOldBufSize );
-/*N*/ 
-/*N*/ 	((ScDocument*)this)->bLoadingDone = TRUE;
-/*N*/ 
-/*N*/ 	return ( rStream.GetError() == SVSTREAM_OK );
-/*N*/ }
-
-/*N*/ void ScDocument::SetLostData()
-/*N*/ {
-/*N*/ 	bLostData = TRUE;
-/*N*/ }
-
-
-/*N*/ void ScDocument::PutCell( USHORT nCol, USHORT nRow, USHORT nTab,
-/*N*/ 						  ScBaseCell* pCell, ULONG nFormatIndex, BOOL bForceTab )
-/*N*/ {
-/*N*/ 	if (VALIDTAB(nTab))
-/*N*/ 	{
-/*N*/ 		if ( bForceTab && !pTab[nTab] )
-/*N*/ 		{
-/*?*/ 			BOOL bExtras = !bIsUndo;		// Spaltenbreiten, Zeilenhoehen, Flags
-/*?*/ 
-/*?*/ 			pTab[nTab] = new ScTable(this, nTab,
-/*?*/ 								String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("temp")),
-/*?*/ 								bExtras, bExtras);
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		if (pTab[nTab])
-/*N*/ 			pTab[nTab]->PutCell( nCol, nRow, nFormatIndex, pCell );
-/*N*/ 	}
-/*N*/ }
-
-
-/*N*/ BOOL ScDocument::GetPrintArea( USHORT nTab, USHORT& rEndCol, USHORT& rEndRow,
-/*N*/ 								BOOL bNotes ) const
-/*N*/ {
-/*N*/ 	if (nTab<=MAXTAB && pTab[nTab])
-/*N*/ 	{
-/*N*/ 		BOOL bAny = pTab[nTab]->GetPrintArea( rEndCol, rEndRow, bNotes );
-/*N*/ 		if (pDrawLayer)
-/*N*/ 		{
-/*N*/ 			ScRange aDrawRange(0,0,nTab, MAXCOL,MAXROW,nTab);
-/*N*/ 			if (DrawGetPrintArea( aDrawRange, TRUE, TRUE ))
-/*N*/ 			{
-/*N*/ 				if (aDrawRange.aEnd.Col()>rEndCol) rEndCol=aDrawRange.aEnd.Col();
-/*N*/ 				if (aDrawRange.aEnd.Row()>rEndRow) rEndRow=aDrawRange.aEnd.Row();
-/*N*/ 				bAny = TRUE;
-/*N*/ 			}
-/*N*/ 		}
-/*N*/ 		return bAny;
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	rEndCol = 0;
-/*N*/ 	rEndRow = 0;
-/*N*/ 	return FALSE;
-/*N*/ }
-
-
-
-/*N*/ BOOL ScDocument::GetDataStart( USHORT nTab, USHORT& rStartCol, USHORT& rStartRow ) const
-/*N*/ {
-/*N*/ 	if (nTab<=MAXTAB && pTab[nTab])
-/*N*/ 	{
-/*N*/ 		BOOL bAny = pTab[nTab]->GetDataStart( rStartCol, rStartRow );
-/*N*/ 		if (pDrawLayer)
-/*N*/ 		{
-/*N*/ 			ScRange aDrawRange(0,0,nTab, MAXCOL,MAXROW,nTab);
-/*N*/ 			if (DrawGetPrintArea( aDrawRange, TRUE, TRUE ))
-/*N*/ 			{
-/*N*/ 				if (aDrawRange.aStart.Col()<rStartCol) rStartCol=aDrawRange.aStart.Col();
-/*N*/ 				if (aDrawRange.aStart.Row()<rStartRow) rStartRow=aDrawRange.aStart.Row();
-/*N*/ 				bAny = TRUE;
-/*N*/ 			}
-/*N*/ 		}
-/*N*/ 		return bAny;
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	rStartCol = 0;
-/*N*/ 	rStartRow = 0;
-/*N*/ 	return FALSE;
-/*N*/ }
-
-
-
-/*N*/ ULONG ScDocument::TransferTab( ScDocument* pSrcDoc, USHORT nSrcPos,
-/*N*/ 								USHORT nDestPos, BOOL bInsertNew,
-/*N*/ 								BOOL bResultsOnly )
-/*N*/ {
-/*N*/ 	ULONG nRetVal = 1;						// 0 => Fehler 1 = ok
-/*N*/ 											// 2 => RefBox, 3 => NameBox
-/*N*/ 											// 4 => beides
-/*N*/ 	BOOL bValid = TRUE;
-/*N*/ 	if (bInsertNew)				// neu einfuegen
-/*N*/ 	{
-/*?*/ 		String aName;
-/*?*/ 		pSrcDoc->GetName(nSrcPos, aName);
-/*?*/ 		CreateValidTabName(aName);
-/*?*/ 		bValid = InsertTab(nDestPos, aName);
-/*N*/ 	}
-/*N*/ 	else						// bestehende Tabelle ersetzen
-/*N*/ 	{
-/*N*/ 		if (VALIDTAB(nDestPos) && pTab[nDestPos])
-/*N*/ 		{
-/*N*/ 			pTab[nDestPos]->DeleteArea( 0,0, MAXCOL,MAXROW, IDF_ALL );
-/*N*/ //			ClearDrawPage(nDestPos);
-/*N*/ 		}
-/*N*/ 		else
-/*N*/ 			bValid = FALSE;
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	if (bValid)
-/*N*/ 	{
-/*N*/ 		BOOL bOldAutoCalcSrc = FALSE;
-/*N*/ 		BOOL bOldAutoCalc = GetAutoCalc();
-/*N*/ 		SetAutoCalc( FALSE );	// Mehrfachberechnungen vermeiden
-/*N*/ 		SetNoListening( TRUE );
-/*N*/ 		if ( bResultsOnly )
-/*N*/ 		{
-/*N*/ 			bOldAutoCalcSrc = pSrcDoc->GetAutoCalc();
-/*N*/ 			pSrcDoc->SetAutoCalc( TRUE );	// falls was berechnet werden muss
-/*N*/ 		}
-/*N*/ 		SvNumberFormatter* pThisFormatter = xPoolHelper->GetFormTable();
-/*N*/ 		SvNumberFormatter* pOtherFormatter = pSrcDoc->xPoolHelper->GetFormTable();
-/*N*/ 		if (pOtherFormatter && pOtherFormatter != pThisFormatter)
-/*N*/ 		{
-/*N*/ 			SvNumberFormatterIndexTable* pExchangeList =
-/*N*/ 					 pThisFormatter->MergeFormatter(*(pOtherFormatter));
-/*N*/ 			if (pExchangeList->Count() > 0)
-/*N*/ 				pFormatExchangeList = pExchangeList;
-/*N*/ 		}
-/*N*/ 		nDestPos = Min(nDestPos, (USHORT)(GetTableCount() - 1));
-/*N*/ 		pSrcDoc->pTab[nSrcPos]->CopyToTable(0, 0, MAXCOL, MAXROW,
-/*N*/ 			( bResultsOnly ? IDF_ALL & ~IDF_FORMULA : IDF_ALL),
-/*N*/ 			FALSE, pTab[nDestPos] );
-/*N*/ 		pFormatExchangeList = NULL;
-/*N*/ 		pTab[nDestPos]->SetTabNo(nDestPos);
-/*N*/ 
-/*N*/ 		if ( !bResultsOnly )
-/*N*/ 		{
-/*N*/ 			USHORT nSrcRangeNames = pSrcDoc->pRangeName->GetCount();
-/*N*/ 			// array containing range names which might need update of indices
-/*N*/ 			ScRangeData** pSrcRangeNames = nSrcRangeNames ? new ScRangeData* [nSrcRangeNames] : NULL;
-/*N*/ 			// the index mapping thereof
-/*N*/ 			ScIndexMap aSrcRangeMap( nSrcRangeNames );
-/*N*/ 			BOOL bRangeNameReplace = FALSE;
-/*N*/ 
-/*N*/ 			for (USHORT i = 0; i < nSrcRangeNames; i++)		//! DB-Bereiche Pivot-Bereiche auch !!!
-/*N*/ 			{
-/*?*/ 				ScRangeData* pSrcData = (*pSrcDoc->pRangeName)[i];
-/*?*/ 				/*USHORT nOldIndex =*/ pSrcData->GetIndex();
-/*?*/ 				BOOL bInUse = FALSE;
-/*?*/ 				for (USHORT j = 0; !bInUse && (j <= MAXTAB); j++)
-/*?*/ 				{
-/*?*/ 					if (pSrcDoc->pTab[j])
-DBG_BF_ASSERT(0, "STRIP");
-/*?*/ 				}
-/*?*/ 				if (bInUse)
-/*?*/ 				{
-/*?*/ 				DBG_BF_ASSERT(0, "STRIP");
-/*?*/ 				}
-/*?*/ 				else
-/*?*/ 				{
-/*?*/ 					pSrcRangeNames[i] = NULL;
-/*?*/ 					//aSrcRangeMap.SetPair( i, 0, 0 );		// not needed, defaulted
-/*?*/ 				}
-/*N*/ 			}
-/*N*/ 			if ( bRangeNameReplace )
-/*N*/ 			{
-/*?*/ 				// first update all inserted named formulas if they contain other
-/*?*/ 				// range names and used indices changed
-DBG_BF_ASSERT(0, "STRIP");
-/*N*/ 			}
-/*N*/ 			if ( pSrcRangeNames )
-/*?*/ 				delete [] pSrcRangeNames;
-/*N*/ 
-/*N*/ 			short nDz = ((short)nDestPos) - (short)nSrcPos;
-/*N*/ 			pTab[nDestPos]->UpdateReference(URM_COPY, 0, 0, nDestPos,
-/*N*/ 													 MAXCOL, MAXROW, nDestPos,
-/*N*/ 													 0, 0, nDz, NULL);
-/*N*/             // Test for outside absolute references for info box
-/*N*/             BOOL bIsAbsRef = pSrcDoc->pTab[nSrcPos]->TestTabRefAbs(nSrcPos);
-/*N*/             // Readjust self-contained absolute references to this sheet
-/*N*/             pTab[nDestPos]->TestTabRefAbs(nSrcPos);
-/*N*/ 			if (bIsAbsRef)
-/*N*/ 			{
-/*N*/ 				nRetVal += 1;
-/*N*/ 					// InfoBox AbsoluteRefs sind möglicherweise nicht mehr korrekt!!
-/*N*/ 			}
-/*N*/ 			pTab[nDestPos]->CompileAll();
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		SetNoListening( FALSE );
-/*N*/ 		if ( !bResultsOnly )
-/*N*/ 			pTab[nDestPos]->StartAllListeners();
-/*N*/ 		SetDirty();		// ist das wirklich dokumentweit noetig?!?
-/*N*/ 		if ( bResultsOnly )
-/*N*/ 			pSrcDoc->SetAutoCalc( bOldAutoCalcSrc );
-/*N*/ 		SetAutoCalc( bOldAutoCalc );
-/*N*/ 
-/*N*/ 		//	Drawing kopieren
-/*N*/ 
-/*N*/ 		if (bInsertNew)
-/*?*/ 			TransferDrawPage( pSrcDoc, nSrcPos, nDestPos );
-/*N*/ 	}
-/*N*/ 	if (!bValid)
-/*N*/ 		nRetVal = 0;
-/*N*/ 	return nRetVal;
-/*N*/ }
-
-//	----------------------------------------------------------------------------
-
-/*N*/ void ScDocument::SetError( USHORT nCol, USHORT nRow, USHORT nTab, const USHORT nError)
-/*N*/ {
-/*N*/ 	if (VALIDTAB(nTab))
-/*N*/ 		if (pTab[nTab])
-/*N*/ 			pTab[nTab]->SetError( nCol, nRow, nError );
-/*N*/ }
-
-
-//	----------------------------------------------------------------------------
-
-/*N*/ void ScDocument::SetConsolidateDlgData( const ScConsolidateParam* pData )
-/*N*/ {
-/*N*/ 	delete pConsolidateDlgData;
-/*N*/ 
-/*N*/ 	if ( pData )
-/*N*/ 		pConsolidateDlgData = new ScConsolidateParam( *pData );
-/*N*/ 	else
-/*N*/ 		pConsolidateDlgData = NULL;
-/*N*/ }
-
-/*N*/ void ScDocument::SetChangeViewSettings(const ScChangeViewSettings& rNew)
-/*N*/ {
-        // #i49161# this is needed to save documents with change tracking
-        if (pChangeViewSettings==NULL)
-            pChangeViewSettings = new ScChangeViewSettings;
-
-        DBG_ASSERT( pChangeViewSettings, "Oops. No ChangeViewSettings :-( by!" );
-
-        *pChangeViewSettings=rNew;
-/*N*/ }
-
-//	----------------------------------------------------------------------------
-
-/*N*/ ScFieldEditEngine* ScDocument::CreateFieldEditEngine()
-/*N*/ {
-/*N*/ 	ScFieldEditEngine* pLclEditEngine = NULL;
-/*N*/ 	if (!pCacheFieldEditEngine)
-/*N*/ 	{
-/*N*/ 		pLclEditEngine = new ScFieldEditEngine( GetEnginePool(),
-/*N*/ 			GetEditPool(), FALSE );
-/*N*/ 	}
-/*N*/ 	else
-/*N*/ 	{
-/*N*/ 		pLclEditEngine = pCacheFieldEditEngine;
-/*N*/ 		pCacheFieldEditEngine = NULL;
-/*N*/ 	}
-/*N*/ 	return pLclEditEngine;
-/*N*/ }
-
-/*N*/ void ScDocument::DisposeFieldEditEngine(ScFieldEditEngine*& rpEditEngine)
-/*N*/ {
-/*N*/ 	if (!pCacheFieldEditEngine && rpEditEngine)
-/*N*/ 	{
-/*N*/ 		pCacheFieldEditEngine = rpEditEngine;
-/*N*/ 		pCacheFieldEditEngine->Clear();
-/*N*/ 	}
-/*N*/ 	else
-/*N*/ 		delete rpEditEngine;
-/*N*/ 	rpEditEngine = NULL;
-/*N*/ }
+}
+
+
+ IMPL_LINK( ScDocument, TrackTimeHdl, Timer*, EMPTYARG )
+ {
+        DBG_BF_ASSERT(0, "STRIP");
+        return 0;
+}
+
+
+ScDocument::~ScDocument()
+{
+        DBG_ASSERT( !bInLinkUpdate, "bInLinkUpdate in dtor" );
+
+        bInDtorClear = TRUE;
+
+        // first of all disable all refresh timers by deleting the control
+        if ( pRefreshTimerControl )
+        {       // To be sure there isn't anything running do it with a protector,
+                // this ensures also that nothing needs the control anymore.
+            ScRefreshTimerProtector aProt( GetRefreshTimerControlAddress() );
+            delete pRefreshTimerControl, pRefreshTimerControl = NULL;
+        }
+
+        // Links aufrauemen
+
+        if ( pLinkManager )
+        {
+            // BaseLinks freigeben
+            for ( USHORT n = pLinkManager->GetServers().Count(); n; )
+                pLinkManager->GetServers()[ --n ]->Closed();
+
+            if ( pLinkManager->GetLinks().Count() )
+                pLinkManager->Remove( 0, pLinkManager->GetLinks().Count() );
+        }
+
+        ScAddInAsync::RemoveDocument( this );
+        ScAddInListener::RemoveDocument( this );
+        delete pChartListenerCollection;        // vor pBASM wg. evtl. Listener!
+        pChartListenerCollection = NULL;
+        // BroadcastAreas vor allen Zellen zerstoeren um unnoetige
+        // Einzel-EndListenings der Formelzellen zu vermeiden
+        delete pBASM;           // BroadcastAreaSlotMachine
+        pBASM = NULL;
+
+        if (pUnoBroadcaster)
+        {
+            delete pUnoBroadcaster;         // broadcasted nochmal SFX_HINT_DYING
+            pUnoBroadcaster = NULL;
+        }
+
+        Clear();
+
+        if (pCondFormList)
+        {
+            pCondFormList->DeleteAndDestroy( 0, pCondFormList->Count() );
+            DELETEZ(pCondFormList);
+        }
+        if (pValidationList)
+        {
+            pValidationList->DeleteAndDestroy( 0, pValidationList->Count() );
+            DELETEZ(pValidationList);
+        }
+        delete pRangeName;
+        delete pDBCollection;
+        delete pPivotCollection;
+        delete pSelectionAttr;
+        delete pChartCollection;
+        DeleteDrawLayer();
+        delete pFormatExchangeList;
+        delete pPrinter;
+        ImplDeleteOptions();
+        delete pConsolidateDlgData;
+        delete pLinkManager;
+        delete pClipData;
+        delete pDetOpList;                              // loescht auch die Eintraege
+        delete pChangeTrack;
+        delete pEditEngine;
+        delete pChangeViewSettings;                     // und weg damit
+
+        delete pDPCollection;
+
+        // delete the EditEngine before destroying the xPoolHelper
+        delete pCacheFieldEditEngine;
+
+        if ( xPoolHelper.is() && !bIsClip )
+            xPoolHelper->SourceDocumentGone();
+        xPoolHelper.clear();
+
+        DeleteColorTable();
+        delete pScriptTypeData;
+        delete pOtherObjects;
+
+}
+
+
+SvNumberFormatter* ScDocument::GetFormatTable() const
+{
+        return xPoolHelper->GetFormTable();
+}
+
+SfxItemPool* ScDocument::GetEditPool() const
+{
+        return xPoolHelper->GetEditPool();
+}
+
+SfxItemPool* ScDocument::GetEnginePool() const
+{
+        return xPoolHelper->GetEnginePool();
+}
+
+ScFieldEditEngine& ScDocument::GetEditEngine()
+{
+        if ( !pEditEngine )
+        {
+            pEditEngine = new ScFieldEditEngine( GetEnginePool(), GetEditPool() );
+            pEditEngine->SetUpdateMode( FALSE );
+            pEditEngine->EnableUndo( FALSE );
+            pEditEngine->SetRefMapMode( MAP_100TH_MM );
+            pEditEngine->SetForbiddenCharsTable( xForbiddenCharacters );
+        }
+        return *pEditEngine;
+}
+
+void lcl_RefreshPivotData( ScPivotCollection* pColl )
+{
+        USHORT nCount = pColl->GetCount();
+        for (USHORT i=0; i<nCount; i++)
+        {
+            ScPivot* pPivot = (*pColl)[i];
+            if (pPivot->CreateData(TRUE))
+                pPivot->ReleaseData();
+        }
+}
+
+
+BOOL ScDocument::SymbolStringCellsPending() const
+{
+    return pLoadedSymbolStringCellList && pLoadedSymbolStringCellList->Count();
+}
+
+
+List& ScDocument::GetLoadedSymbolStringCellsList()
+{
+    if ( !pLoadedSymbolStringCellList )
+        pLoadedSymbolStringCellList = new List;
+    return *pLoadedSymbolStringCellList;
+}
+
+
+BOOL ScDocument::Load( SvStream& rStream, ScProgress* pProgress )
+{
+    bLoadingDone = FALSE;
+
+    //----------------------------------------------------
+
+    Clear();
+    USHORT nOldBufSize = rStream.GetBufferSize();
+    rStream.SetBufferSize( 32768 );
+
+
+    BOOL bError = FALSE;
+    USHORT nVersion = 0;
+    USHORT nVerMaxRow = MAXROW_30;          // 8191, wenn in der Datei nichts steht
+    USHORT nTab = 0;
+    USHORT nEnumDummy;
+    String aEmptyName;
+    String aPageStyle;
+    CharSet eOldSet = rStream.GetStreamCharSet();
+
+    USHORT nID;
+    rStream >> nID;
+    if (nID == SCID_DOCUMENT || nID == SCID_NEWDOCUMENT )
+    {
+        ScReadHeader aHdr( rStream );
+        while (aHdr.BytesLeft() && !bError )
+            {
+                USHORT nSubID;
+                rStream >> nSubID;
+                switch (nSubID)
+                    {
+                    case SCID_DOCFLAGS:
+                        {
+                            ScReadHeader aFlagsHdr( rStream );
+
+                            rStream >> nVersion;                            // 312 abwaerts
+                            rStream.ReadByteString( aPageStyle, rStream.GetStreamCharSet() );
+                            rStream >> bProtected;                          // Dokument geschuetzt
+                            String aPass;
+                            rStream.ReadByteString( aPass, rStream.GetStreamCharSet() );
+                            if (aPass.Len())
+                                SvPasswordHelper::GetHashPassword(aProtectPass, aPass);
+                            if ( aFlagsHdr.BytesLeft() )
+                                {
+                                    rStream >> nEnumDummy;
+                                    eLanguage = LanguageType( nEnumDummy );
+                                }
+                            if ( aFlagsHdr.BytesLeft() )
+                                rStream >> bAutoCalc;
+                            if ( aFlagsHdr.BytesLeft() )
+                                rStream >> nVisibleTab;
+                            if ( aFlagsHdr.BytesLeft() )
+                                rStream >> nVersion;                    // echte Version
+                            if ( aFlagsHdr.BytesLeft() )
+                                rStream >> nVerMaxRow;                  // sonst auf 8191 lassen
+
+                            nSrcVer         = nVersion;                             // Member
+                            nSrcMaxRow      = nVerMaxRow;                   // Member
+
+                            // Fuer Debugging bis hin zur SC 3.0a:
+                            if( nVersion > 0x0002 && nVersion < SC_NUMFMT )
+                                {
+                                    bError = TRUE;
+                                    rStream.SetError( SVSTREAM_WRONGVERSION );
+                                }
+
+                            // Das obere Byte muss kleiner oder gleich sein
+                            //      (3.1 Dateien mit 8192 Zeilen koennen noch gelesen werden)
+
+                            if( ( nSrcVer & 0xFF00 ) > ( SC_CURRENT_VERSION & 0xFF00 ) )
+                                {
+                                    bError = TRUE;
+                                    rStream.SetError( SVSTREAM_WRONGVERSION );
+                                }
+                        }
+                        break;
+                    case SCID_CHARSET:
+                        {
+                            ScReadHeader aSetHdr( rStream );
+                            BYTE cSet, cGUI;        // cGUI is dummy, old GUIType
+                            rStream >> cGUI >> cSet;
+                            eSrcSet = (CharSet) cSet;
+                            rStream.SetStreamCharSet( ::GetSOLoadTextEncoding(
+                                                                              eSrcSet, (USHORT)rStream.GetVersion() ) );
+                        }
+                        break;
+                    case SCID_LINKUPMODE: //        Link Update Mode
+                        {
+                            ScReadHeader aSetHdr( rStream );
+                            BYTE cSet;
+                            rStream >> cSet;
+                            eLinkMode=(ScLkUpdMode) cSet;
+                        }
+                        break;
+                    case SCID_TABLE:
+                        pTab[nTab] = new ScTable(this, nTab, aEmptyName);
+                        pTab[nTab]->SetPageStyle( aPageStyle );
+                        pTab[nTab]->Load(rStream,nVersion,pProgress);
+                        ++nTab;
+                        break;
+                    case SCID_DRAWING:
+                        LoadDrawLayer(rStream);
+                        break;
+                    case SCID_DDELINKS:
+                        LoadDdeLinks(rStream);
+                        break;
+                    case SCID_AREALINKS:
+                        LoadAreaLinks(rStream);
+                        break;
+                    case SCID_RANGENAME:
+                        pRangeName->Load(rStream, nVersion );
+                        break;
+                    case SCID_DBAREAS:
+                        pDBCollection->Load( rStream );
+                        break;
+                    case SCID_DATAPILOT:
+                        GetDPCollection()->LoadNew( rStream );
+                        break;
+                    case SCID_PIVOT:
+                        pPivotCollection->Load( rStream );
+                        break;
+                    case SCID_CHARTS:
+                        pChartCollection->Load( this, rStream );
+                        break;
+                    case SCID_COLNAMERANGES:
+                        xColNameRanges->Load( rStream, nVersion );
+                        break;
+                    case SCID_ROWNAMERANGES:
+                        xRowNameRanges->Load( rStream, nVersion );
+                        break;
+                    case SCID_CONDFORMATS:
+                        if (!pCondFormList)
+                            pCondFormList = new ScConditionalFormatList;
+                        pCondFormList->Load( rStream, this );
+                        break;
+                    case SCID_VALIDATION:
+                        if (!pValidationList)
+                            pValidationList = new ScValidationDataList;
+                        pValidationList->Load( rStream, this );
+                        break;
+                    case SCID_DETOPLIST:
+                        if (!pDetOpList)
+                            pDetOpList = new ScDetOpList;
+                        pDetOpList->Load( rStream );
+                        break;
+                    case SCID_NUMFORMAT:
+                        {
+                            ScReadHeader aNumHeader(rStream);
+                            xPoolHelper->GetFormTable()->Load(rStream);
+                        }
+                        break;
+                    case SCID_DOCOPTIONS:
+                        ImplLoadDocOptions(rStream);
+                        break;
+                    case SCID_VIEWOPTIONS:
+                        ImplLoadViewOptions(rStream);
+                        break;
+                    case SCID_PRINTSETUP:
+                        {
+                            ScReadHeader aJobHeader(rStream);
+                            SfxItemSet* pSet = new SfxItemSet( *xPoolHelper->GetDocPool(),
+                                                               SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN,
+                                                               SID_PRINTER_CHANGESTODOC,  SID_PRINTER_CHANGESTODOC,
+                                                               SID_SCPRINTOPTIONS,        SID_SCPRINTOPTIONS,
+                                                               NULL );
+                            SetPrinter( SfxPrinter::Create( rStream, pSet ) );
+                        }
+                        break;
+                    case SCID_CONSOLIDATA:
+                        if (!pConsolidateDlgData)
+                            pConsolidateDlgData = new ScConsolidateParam;
+                        pConsolidateDlgData->Load( rStream );
+                        break;
+                    case SCID_CHANGETRACK:
+                        if ( pChangeTrack ) // Changetracking.sdc
+                            pChangeTrack->Clear();  // es kann nur einen geben
+                        else
+                            StartChangeTracking();
+                        pChangeTrack->Load( rStream, nVersion );
+                        break;
+                    case SCID_CHGVIEWSET:
+                        if (!pChangeViewSettings)
+                            pChangeViewSettings = new ScChangeViewSettings;
+                        pChangeViewSettings->Load( rStream, nVersion );
+                        break;
+                    default:
+                        {
+                            DBG_ERROR("unbekannter Sub-Record in ScDocument::Load");
+                            ScReadHeader aDummyHdr( rStream );
+                        }
+                    }
+
+                if (rStream.GetError() != SVSTREAM_OK)
+                    bError = TRUE;
+            }
+    }
+    else
+        {
+            //      Assertion nur, wenn kein Passwort gesetzt ist
+            DBG_ASSERT( rStream.GetKey().Len(), "Load: SCID_DOCUMENT nicht gefunden" );
+            bError = TRUE;
+        }
+
+    rStream.SetStreamCharSet( eOldSet );
+    rStream.SetBufferSize( nOldBufSize );
+
+    if (!bError)                                                                    // Neuberechnungen
+        {
+            xPoolHelper->GetStylePool()->UpdateStdNames();  // falls mit Version in anderer Sprache gespeichert
+
+                //      Zahlformat-Sprache
+                //      (kann nicht in LoadPool passieren, weil der Numberformatter geladen sein muss)
+
+            ScDocumentPool* pPool = xPoolHelper->GetDocPool();
+            if ( pPool->GetLoadingVersion() == 0 )                          // 0 = Pool-Version bis 3.1
+                {
+                        //      in 3.1-Dokumenten gibt es ATTR_LANGUAGE_FORMAT noch nicht
+                        //      darum bei Bedarf zu ATTR_VALUE_FORMAT noch die Sprache dazutun
+                        //      (Bug #37441#)
+
+                        //      harte Attribute:
+
+                    SvNumberFormatter* pFormatter = xPoolHelper->GetFormTable();
+                    USHORT nCount = pPool->GetItemCount(ATTR_PATTERN);
+                    ScPatternAttr* pPattern;
+                    for (USHORT i=0; i<nCount; i++)
+                        {
+                            pPattern = (ScPatternAttr*)pPool->GetItem(ATTR_PATTERN, i);
+                            if (pPattern)
+                                ScGlobal::AddLanguage( pPattern->GetItemSet(), *pFormatter );
+                        }
+
+                        //      Vorlagen:
+
+                    SfxStyleSheetIterator aIter( xPoolHelper->GetStylePool(), SFX_STYLE_FAMILY_PARA );
+                    for ( SfxStyleSheetBase* pStyle = aIter.First(); pStyle; pStyle = aIter.Next() )
+                        ScGlobal::AddLanguage( pStyle->GetItemSet(), *pFormatter );
+                }
+
+            // change FontItems in styles
+            xPoolHelper->GetStylePool()->ConvertFontsAfterLoad();
+
+                //      Druckbereiche etc.
+
+            SfxStyleSheetIterator   aIter( xPoolHelper->GetStylePool(), SFX_STYLE_FAMILY_PAGE );
+            ScStyleSheet*                   pStyleSheet = NULL;
+
+            nMaxTableNumber = 0;
+            for (USHORT i=0; i<=MAXTAB; i++)
+                if (pTab[i])
+                    {
+                        // MaxTableNumber ermitteln
+
+                        nMaxTableNumber = i+1;
+
+                        // Druckbereiche aus <= 3.00.2 Dokumenten
+                        // aus den PageStyles holen und jetzt an
+                        // der Tabelle speichern.
+
+                        pStyleSheet = (ScStyleSheet*)aIter.Find( pTab[i]->GetPageStyle() );
+
+                        if ( pStyleSheet )
+                            {
+                                SfxItemSet&                     rSet                    = pStyleSheet->GetItemSet();
+                                const ScRangeItem*      pPrintAreaItem  = NULL;
+                                const ScRangeItem*      pRepeatColItem  = NULL;
+                                const ScRangeItem*      pRepeatRowItem  = NULL;
+
+                                rSet.GetItemState( ATTR_PAGE_PRINTAREA, TRUE,
+                                                   (const SfxPoolItem**)&pPrintAreaItem );
+                                rSet.GetItemState( ATTR_PAGE_REPEATCOL, TRUE,
+                                                   (const SfxPoolItem**)&pRepeatColItem );
+                                rSet.GetItemState( ATTR_PAGE_REPEATROW, TRUE,
+                                                   (const SfxPoolItem**)&pRepeatRowItem );
+
+                                if ( pPrintAreaItem ) // Druckbereiche
+                                    {
+                                        if ( !pPrintAreaItem->GetFlags() )
+                                            {
+                                                SetPrintRangeCount( i, 1 );
+                                                SetPrintRange( i, 0, pPrintAreaItem->GetRange() );
+                                            }
+                                        rSet.ClearItem( ATTR_PAGE_PRINTAREA );
+                                    }
+
+                                if ( pRepeatColItem ) // Wiederholungsspalte
+                                    {
+                                        SetRepeatColRange( i, !pRepeatColItem->GetFlags()
+                                                           ? &pRepeatColItem->GetRange()
+                                                           : (const ScRange *)NULL );
+                                        rSet.ClearItem( ATTR_PAGE_REPEATCOL );
+                                    }
+
+                                if ( pRepeatRowItem ) // Wiederholungszeile
+                                    {
+                                        SetRepeatRowRange( i, !pRepeatRowItem->GetFlags()
+                                                           ? &pRepeatRowItem->GetRange()
+                                                           : (const ScRange *)NULL );
+                                        rSet.ClearItem( ATTR_PAGE_REPEATROW );
+                                    }
+                            }
+                    }
+
+
+            if ( pDPCollection && pDPCollection->GetCount() )
+                pPivotCollection->FreeAll();
+            else
+                {
+                    lcl_RefreshPivotData( pPivotCollection );
+                    GetDPCollection()->ConvertOldTables( *pPivotCollection );
+                }
+            if ( pDPCollection )
+                pDPCollection->EnsureNames();   // make sure every table has a name
+
+            SetAutoFilterFlags();
+            if (pDrawLayer)
+                UpdateAllCharts();
+            UpdateChartListenerCollection();
+            if (pDrawLayer)
+                RefreshNoteFlags();
+            CalcAfterLoad();
+        }
+
+    if ( pLoadedSymbolStringCellList )
+    {   // we had symbol string cells, list was cleared by columns, delete it
+        delete pLoadedSymbolStringCellList;
+        pLoadedSymbolStringCellList = NULL;
+    }
+
+        //----------------------------------------------------
+
+    bLoadingDone = TRUE;
+
+    return !bError;
+}
+
+BOOL ScDocument::Save( SvStream& rStream, ScProgress* pProgress ) const
+{
+    ((ScDocument*)this)->bLoadingDone = FALSE;              // nicht zwischendrin reinpfuschen lassen
+
+    ((ScDocument*)this)->bLostData = FALSE;                 // wird beim Speichern gesetzt
+
+    ((ScDocument*)this)->nSrcVer = SC_CURRENT_VERSION;
+    ((ScDocument*)this)->nSrcMaxRow = MAXROW;
+    if ( rStream.GetVersion() <= SOFFICE_FILEFORMAT_31 )
+        {
+                //      3.1 Export -> nur 8192 Zeilen schreiben, und kompatible Versionsnummer
+
+            ((ScDocument*)this)->nSrcVer = SC_31_EXPORT_VER;
+            ((ScDocument*)this)->nSrcMaxRow = MAXROW_30;
+        }
+    else if ( rStream.GetVersion() <= SOFFICE_FILEFORMAT_40 )
+        {       //      4.0 Export -> kompatible Versionsnummer
+            ((ScDocument*)this)->nSrcVer = SC_40_EXPORT_VER;
+        }
+
+    USHORT i;
+    USHORT nOldBufSize = rStream.GetBufferSize();
+    rStream.SetBufferSize( 32768 );
+
+    CharSet eOldSet = rStream.GetStreamCharSet();
+    CharSet eStoreCharSet = ::GetSOStoreTextEncoding(
+        gsl_getSystemTextEncoding(), (USHORT)rStream.GetVersion() );
+    rStream.SetStreamCharSet( eStoreCharSet );
+
+
+
+    long nSavedDocCells = 0;
+
+
+    {
+        rStream << (USHORT) SCID_NEWDOCUMENT;
+        ScWriteHeader aHdr( rStream );
+
+        //      Flags
+
+        {
+            rStream << (USHORT) SCID_DOCFLAGS;
+            ScWriteHeader aFlagsHdr( rStream, 18 );                 //! ausprobieren
+
+            // wg. Bug in 312 ScToken::RelToRelAbs mit DoubleRefs bekommt
+            // die 312er immer vorgegaukelt, dass es keine RelRefs gaebe,
+            // was auch ok ist, da immer absolut gespeichert wird und
+            // SR_RELATIVE nie zur Verwendung kam und nicht kommen darf.
+            if ( nSrcVer & 0xFF00 )
+                rStream << (USHORT) nSrcVer;
+            // hoehere Major-Version darf von 312 nicht geladen werden
+            else
+                rStream << (USHORT) (SC_RELATIVE_REFS - 1);
+
+            // dummy page style (for compatibility)
+            rStream.WriteByteString(
+                                    String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM(STRING_STANDARD)),
+                                    rStream.GetStreamCharSet() );
+            rStream << bProtected;                                  // Dokument geschuetzt
+            String aPass;
+
+            rStream.WriteByteString( aPass, rStream.GetStreamCharSet() );
+            rStream << (USHORT)     eLanguage;
+            rStream << bAutoCalc;
+
+            rStream << nVisibleTab;
+
+            // und hier jetzt die echte Versionsnummer
+            rStream << (USHORT) nSrcVer;
+
+            rStream << nSrcMaxRow;                                  // Zeilenanzahl
+        }
+
+        //      Zeichensatz
+
+        {
+            rStream << (USHORT) SCID_CHARSET;
+            ScWriteHeader aSetHdr( rStream, 2 );
+            rStream << (BYTE) 0             // dummy, old System::GetGUIType()
+                    << (BYTE) eStoreCharSet;
+        }
+
+        //      Link Update Mode
+
+        if(eLinkMode!=LM_UNKNOWN)
+            {
+                rStream << (USHORT) SCID_LINKUPMODE;
+                ScWriteHeader aSetHdr( rStream, 1 );
+                rStream << (BYTE) eLinkMode;
+            }
+
+        rStream << (USHORT) SCID_RANGENAME;
+        pRangeName->Store( rStream );
+
+        rStream << (USHORT) SCID_DBAREAS;
+        pDBCollection->Store( rStream );
+
+        rStream << (USHORT) SCID_DDELINKS;
+        SaveDdeLinks( rStream );
+
+        rStream << (USHORT) SCID_AREALINKS;
+        SaveAreaLinks( rStream );
+
+        {
+            rStream << (USHORT) SCID_NUMFORMAT;
+            ScWriteHeader aNumHeader(rStream);
+            xPoolHelper->GetFormTable()->Save(rStream);
+        }
+
+        if ( xColNameRanges->Count() )
+            {
+                rStream << (USHORT) SCID_COLNAMERANGES;
+                xColNameRanges->Store( rStream );
+            }
+        if ( xRowNameRanges->Count() )
+            {
+                rStream << (USHORT) SCID_ROWNAMERANGES;
+                xRowNameRanges->Store( rStream );
+            }
+
+        if (pCondFormList)
+            pCondFormList->ResetUsed();             // wird beim Speichern der Tabellen gesetzt
+        if (pValidationList)
+            pValidationList->ResetUsed();   // wird beim Speichern der Tabellen gesetzt
+
+        //      Tabellen (Daten)
+
+        for (i=0; i<=MAXTAB; i++)
+            {
+                if (pTab[i])
+                    {
+                        rStream << (USHORT) SCID_TABLE;
+                        pTab[i]->Save(rStream, nSavedDocCells, pProgress);
+                    }
+            }
+
+        //      bedingte Formate / Gueltigkeit
+        //      beim Speichern der Tabellen ist eingetragen worden,
+        //      welche Eintraege benutzt werden
+
+        if (pCondFormList)
+            {
+                rStream << (USHORT) SCID_CONDFORMATS;
+                pCondFormList->Store(rStream);
+            }
+        if (pValidationList)
+            {
+                rStream << (USHORT) SCID_VALIDATION;
+                pValidationList->Store(rStream);
+            }
+
+        //      Liste der Detektiv-Operationen (zum Aktualisieren)
+        if (pDetOpList)
+            {
+                rStream << (USHORT) SCID_DETOPLIST;
+                pDetOpList->Store(rStream);
+            }
+
+        //      Drawing
+
+
+        if (pDrawLayer)
+            {
+                rStream << (USHORT) SCID_DRAWING;
+                StoreDrawLayer(rStream);
+            }
+
+        //      Collections
+
+        //      (new) DataPilot collection must be saved before old Pivot collection
+        //      so old data can be skipped by new office
+        //      not in 3.0 or 4.0 export to avoid warning messages
+
+        if ( nSrcVer > SC_40_EXPORT_VER && pDPCollection && pDPCollection->GetCount() )
+            {
+                rStream << (USHORT) SCID_DATAPILOT;                 // new data
+                pDPCollection->StoreNew( rStream );
+            }
+
+        rStream << (USHORT) SCID_PIVOT;                             // old data
+        if ( pDPCollection && pDPCollection->GetCount() )
+            pDPCollection->StoreOld( rStream );
+        else
+            pPivotCollection->Store( rStream );                     // not converted or all empty
+
+        //      Charts werden hier nicht mehr gespeichert, weil
+        //      jedes Chart seine Daten selber speichert
+
+        DBG_ASSERT(!pChartCollection || !pChartCollection->GetCount(),
+                   "wer hat da ein Chart eingetragen?");
+
+        rStream << (USHORT) SCID_DOCOPTIONS;
+        ImplSaveDocOptions(rStream);
+
+        rStream << (USHORT) SCID_VIEWOPTIONS;
+        ImplSaveViewOptions(rStream);
+
+        //      Job-Setup vom Printer
+
+        if (pPrinter)
+            {
+                rStream << (USHORT) SCID_PRINTSETUP;
+                ScWriteHeader aJobHeader(rStream);
+
+                ((ScDocument*)this)->GetPrinter()->Store( rStream );
+            }
+
+        if ( nSrcVer > SC_40_EXPORT_VER )       //      Das folgende nicht bei 3.0 oder 4.0 Export...
+            {
+                if (pConsolidateDlgData)                //      Einstellungen fuer den Konsolidieren-Dialog
+                    {
+                        rStream << (USHORT) SCID_CONSOLIDATA;
+                        pConsolidateDlgData->Store( rStream );
+                    }
+                if ( pChangeTrack )
+                    {
+                        rStream << (USHORT) SCID_CHANGETRACK;
+                        pChangeTrack->Store( rStream );
+                    }
+                if ( pChangeViewSettings )
+                    {
+                        rStream << (USHORT) SCID_CHGVIEWSET;
+                        pChangeViewSettings->Store( rStream );
+                    }
+            }
+    }
+
+    rStream.SetStreamCharSet( eOldSet );
+    rStream.SetBufferSize( nOldBufSize );
+
+    ((ScDocument*)this)->bLoadingDone = TRUE;
+
+    return ( rStream.GetError() == SVSTREAM_OK );
+}
+
+void ScDocument::SetLostData()
+{
+    bLostData = TRUE;
+}
+
+
+void ScDocument::PutCell( USHORT nCol, USHORT nRow, USHORT nTab,
+                          ScBaseCell* pCell, ULONG nFormatIndex, BOOL bForceTab )
+{
+    if (VALIDTAB(nTab))
+        {
+            if ( bForceTab && !pTab[nTab] )
+                {
+                    BOOL bExtras = !bIsUndo;                // Spaltenbreiten, Zeilenhoehen, Flags
+
+                    pTab[nTab] = new ScTable(this, nTab,
+                                             String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("temp")),
+                                             bExtras, bExtras);
+                }
+
+            if (pTab[nTab])
+                pTab[nTab]->PutCell( nCol, nRow, nFormatIndex, pCell );
+        }
+}
+
+
+BOOL ScDocument::GetPrintArea( USHORT nTab, USHORT& rEndCol, USHORT& rEndRow,
+                               BOOL bNotes ) const
+{
+    if (nTab<=MAXTAB && pTab[nTab])
+        {
+            BOOL bAny = pTab[nTab]->GetPrintArea( rEndCol, rEndRow, bNotes );
+            if (pDrawLayer)
+                {
+                    ScRange aDrawRange(0,0,nTab, MAXCOL,MAXROW,nTab);
+                    if (DrawGetPrintArea( aDrawRange, TRUE, TRUE ))
+                        {
+                            if (aDrawRange.aEnd.Col()>rEndCol) rEndCol=aDrawRange.aEnd.Col();
+                            if (aDrawRange.aEnd.Row()>rEndRow) rEndRow=aDrawRange.aEnd.Row();
+                            bAny = TRUE;
+                        }
+                }
+            return bAny;
+        }
+
+    rEndCol = 0;
+    rEndRow = 0;
+    return FALSE;
+}
+
+
+
+BOOL ScDocument::GetDataStart( USHORT nTab, USHORT& rStartCol, USHORT& rStartRow ) const
+{
+    if (nTab<=MAXTAB && pTab[nTab])
+        {
+            BOOL bAny = pTab[nTab]->GetDataStart( rStartCol, rStartRow );
+            if (pDrawLayer)
+                {
+                    ScRange aDrawRange(0,0,nTab, MAXCOL,MAXROW,nTab);
+                    if (DrawGetPrintArea( aDrawRange, TRUE, TRUE ))
+                        {
+                            if (aDrawRange.aStart.Col()<rStartCol) rStartCol=aDrawRange.aStart.Col();
+                            if (aDrawRange.aStart.Row()<rStartRow) rStartRow=aDrawRange.aStart.Row();
+                            bAny = TRUE;
+                        }
+                }
+            return bAny;
+        }
+
+    rStartCol = 0;
+    rStartRow = 0;
+    return FALSE;
+}
+
+
+
+ULONG ScDocument::TransferTab( ScDocument* pSrcDoc, USHORT nSrcPos,
+                               USHORT nDestPos, BOOL bInsertNew,
+                               BOOL bResultsOnly )
+{
+    ULONG nRetVal = 1;                  // 0 => Fehler 1 = ok
+                                        // 2 => RefBox, 3 => NameBox
+                                        // 4 => beides
+    BOOL bValid = TRUE;
+    if (bInsertNew)                     // neu einfuegen
+        {
+            String aName;
+            pSrcDoc->GetName(nSrcPos, aName);
+            CreateValidTabName(aName);
+            bValid = InsertTab(nDestPos, aName);
+        }
+    else                                            // bestehende Tabelle ersetzen
+        {
+            if (VALIDTAB(nDestPos) && pTab[nDestPos])
+                pTab[nDestPos]->DeleteArea( 0,0, MAXCOL,MAXROW, IDF_ALL );
+            else
+                bValid = FALSE;
+        }
+
+    if (bValid)
+        {
+            BOOL bOldAutoCalcSrc = FALSE;
+            BOOL bOldAutoCalc = GetAutoCalc();
+            SetAutoCalc( FALSE );   // Mehrfachberechnungen vermeiden
+            SetNoListening( TRUE );
+            if ( bResultsOnly )
+                {
+                    bOldAutoCalcSrc = pSrcDoc->GetAutoCalc();
+                    pSrcDoc->SetAutoCalc( TRUE );   // falls was berechnet werden muss
+                }
+            SvNumberFormatter* pThisFormatter = xPoolHelper->GetFormTable();
+            SvNumberFormatter* pOtherFormatter = pSrcDoc->xPoolHelper->GetFormTable();
+            if (pOtherFormatter && pOtherFormatter != pThisFormatter)
+                {
+                    SvNumberFormatterIndexTable* pExchangeList =
+                        pThisFormatter->MergeFormatter(*(pOtherFormatter));
+                    if (pExchangeList->Count() > 0)
+                        pFormatExchangeList = pExchangeList;
+                }
+            nDestPos = Min(nDestPos, (USHORT)(GetTableCount() - 1));
+            pSrcDoc->pTab[nSrcPos]->CopyToTable(0, 0, MAXCOL, MAXROW,
+                        ( bResultsOnly ? IDF_ALL & ~IDF_FORMULA : IDF_ALL),
+                        FALSE, pTab[nDestPos] );
+            pFormatExchangeList = NULL;
+            pTab[nDestPos]->SetTabNo(nDestPos);
+
+            if ( !bResultsOnly )
+                {
+                    USHORT nSrcRangeNames = pSrcDoc->pRangeName->GetCount();
+                    // array containing range names which might need update of indices
+                    ScRangeData** pSrcRangeNames = nSrcRangeNames ? new ScRangeData* [nSrcRangeNames] : NULL;
+                    // the index mapping thereof
+                    ScIndexMap aSrcRangeMap( nSrcRangeNames );
+                    BOOL bRangeNameReplace = FALSE;
+
+                    for (USHORT i = 0; i < nSrcRangeNames; i++)             //! DB-Bereiche Pivot-Bereiche auch !!!
+                        {
+                            ScRangeData* pSrcData = (*pSrcDoc->pRangeName)[i];
+                            pSrcData->GetIndex();
+                            BOOL bInUse = FALSE;
+                            for (USHORT j = 0; !bInUse && (j <= MAXTAB); j++)
+                                {
+                                    if (pSrcDoc->pTab[j])
+                                        DBG_BF_ASSERT(0, "STRIP");
+                                }
+                            if (bInUse)
+                                {
+                                    DBG_BF_ASSERT(0, "STRIP");
+                                }
+                            else
+                                {
+                                    pSrcRangeNames[i] = NULL;
+                                }
+                        }
+                        if ( bRangeNameReplace )
+                            {
+                                // first update all inserted named formulas if they contain other
+                                // range names and used indices changed
+                                DBG_BF_ASSERT(0, "STRIP");
+                            }
+                        if ( pSrcRangeNames )
+                            delete [] pSrcRangeNames;
+
+                        short nDz = ((short)nDestPos) - (short)nSrcPos;
+                        pTab[nDestPos]->UpdateReference(URM_COPY, 0, 0, nDestPos,
+                                                        MAXCOL, MAXROW, nDestPos,
+                                                        0, 0, nDz, NULL);
+                        // Test for outside absolute references for info box
+                        BOOL bIsAbsRef = pSrcDoc->pTab[nSrcPos]->TestTabRefAbs(nSrcPos);
+                        // Readjust self-contained absolute references to this sheet
+                        pTab[nDestPos]->TestTabRefAbs(nSrcPos);
+                        if (bIsAbsRef)
+                            {
+                                nRetVal += 1;
+                                // InfoBox AbsoluteRefs sind möglicherweise nicht mehr korrekt!!
+                            }
+                        pTab[nDestPos]->CompileAll();
+                }
+
+            SetNoListening( FALSE );
+            if ( !bResultsOnly )
+                pTab[nDestPos]->StartAllListeners();
+            SetDirty();             // ist das wirklich dokumentweit noetig?!?
+            if ( bResultsOnly )
+                pSrcDoc->SetAutoCalc( bOldAutoCalcSrc );
+            SetAutoCalc( bOldAutoCalc );
+
+            //      Drawing kopieren
+            if (bInsertNew)
+                TransferDrawPage( pSrcDoc, nSrcPos, nDestPos );
+        }
+    if (!bValid)
+        nRetVal = 0;
+    return nRetVal;
+}
+
+//----------------------------------------------------------------------------
+
+void ScDocument::SetError( USHORT nCol, USHORT nRow, USHORT nTab, const USHORT nError)
+{
+    if (VALIDTAB(nTab))
+        if (pTab[nTab])
+            pTab[nTab]->SetError( nCol, nRow, nError );
+}
+
+
+//----------------------------------------------------------------------------
+
+void ScDocument::SetConsolidateDlgData( const ScConsolidateParam* pData )
+{
+    delete pConsolidateDlgData;
+
+    if ( pData )
+        pConsolidateDlgData = new ScConsolidateParam( *pData );
+    else
+        pConsolidateDlgData = NULL;
+}
+
+void ScDocument::SetChangeViewSettings(const ScChangeViewSettings& rNew)
+{
+    // #i49161# this is needed to save documents with change tracking
+    if (pChangeViewSettings==NULL)
+        pChangeViewSettings = new ScChangeViewSettings;
+
+    DBG_ASSERT( pChangeViewSettings, "Oops. No ChangeViewSettings :-( by!" );
+
+    *pChangeViewSettings=rNew;
+}
+
+//----------------------------------------------------------------------------
+
+ScFieldEditEngine* ScDocument::CreateFieldEditEngine()
+{
+    ScFieldEditEngine* pLclEditEngine = NULL;
+    if (!pCacheFieldEditEngine)
+        {
+            pLclEditEngine = new ScFieldEditEngine( GetEnginePool(),
+                                                    GetEditPool(), FALSE );
+        }
+    else
+        {
+            pLclEditEngine = pCacheFieldEditEngine;
+            pCacheFieldEditEngine = NULL;
+        }
+    return pLclEditEngine;
+}
+
+void ScDocument::DisposeFieldEditEngine(ScFieldEditEngine*& rpEditEngine)
+{
+    if (!pCacheFieldEditEngine && rpEditEngine)
+        {
+            pCacheFieldEditEngine = rpEditEngine;
+            pCacheFieldEditEngine->Clear();
+        }
+    else
+        delete rpEditEngine;
+    rpEditEngine = NULL;
+}
 
 } //namespace binfilter
 
-- 
1.7.0.4


--------------020503050509070209090105--


More information about the LibreOffice mailing list