summaryrefslogtreecommitdiff
path: root/binfilter/bf_sw/source/core/doc/sw_docnew.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'binfilter/bf_sw/source/core/doc/sw_docnew.cxx')
-rw-r--r--binfilter/bf_sw/source/core/doc/sw_docnew.cxx746
1 files changed, 746 insertions, 0 deletions
diff --git a/binfilter/bf_sw/source/core/doc/sw_docnew.cxx b/binfilter/bf_sw/source/core/doc/sw_docnew.cxx
new file mode 100644
index 000000000000..d8123242c09d
--- /dev/null
+++ b/binfilter/bf_sw/source/core/doc/sw_docnew.cxx
@@ -0,0 +1,746 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * 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
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+#define ROLBCK_HISTORY_ONLY // Der Kampf gegen die CLOOK's
+
+#include <com/sun/star/i18n/ForbiddenCharacters.hdl>
+
+#include <vcl/virdev.hxx>
+#include <rtl/logfile.hxx>
+#include <bf_sfx2/printer.hxx>
+#include <bf_sfx2/docinf.hxx>
+#include <bf_svtools/macitem.hxx>
+#include <bf_svx/svxids.hrc>
+#include <bf_svx/linkmgr.hxx>
+#include <bf_svtools/zforlist.hxx>
+#include <bf_svx/forbiddencharacterstable.hxx>
+
+#include <paratr.hxx>
+#include <fchrfmt.hxx>
+#include <fmtcntnt.hxx>
+#include <fmtanchr.hxx>
+#include <fmtfsize.hxx>
+#include <fmtfordr.hxx>
+#include <pvprtdat.hxx>
+
+#include <horiornt.hxx>
+
+#include <rootfrm.hxx> //Damit der RootDtor gerufen wird.
+#include <layouter.hxx>
+#include <ndtxt.hxx>
+#include <printdata.hxx>
+#include <docfld.hxx>
+#include <ftninfo.hxx>
+#include <ftnidx.hxx>
+#include <docstat.hxx>
+#include <charfmt.hxx>
+#include <poolfmt.hxx> // fuer die Pool-Vorlage
+#include <dbmgr.hxx>
+#include <docsh.hxx>
+#include <visiturl.hxx> // fuer die URL-Change Benachrichtigung
+#include <docary.hxx>
+#include <lineinfo.hxx>
+#include <drawdoc.hxx>
+#include <linkenum.hxx>
+#include <fldupde.hxx>
+#include <extinput.hxx>
+#include <viewsh.hxx>
+#include <doctxm.hxx>
+#include <shellres.hxx>
+#include <unoclbck.hxx>
+#include <breakit.hxx>
+#include <laycache.hxx>
+
+#include <cmdid.h> // fuer den dflt - Printer in SetJob
+
+#include <legacysmgr/legacy_binfilters_smgr.hxx> //STRIP002
+
+namespace binfilter {
+const sal_Char __FAR_DATA sFrmFmtStr[] = "Frameformat";
+const sal_Char __FAR_DATA sEmptyPageStr[] = "Empty Page";
+const sal_Char __FAR_DATA sColumnCntStr[] = "Columncontainer";
+const sal_Char __FAR_DATA sCharFmtStr[] = "Zeichenformat";
+const sal_Char __FAR_DATA sTxtCollStr[] = "Textformatvorlage";
+const sal_Char __FAR_DATA sGrfCollStr[] = "Graphikformatvorlage";
+
+/*N*/ SV_IMPL_PTRARR( SwNumRuleTbl, SwNumRulePtr)
+/*N*/ SV_IMPL_PTRARR( SwTxtFmtColls, SwTxtFmtCollPtr)
+/*N*/ SV_IMPL_PTRARR( SwGrfFmtColls, SwGrfFmtCollPtr)
+
+
+/*
+ * interne Funktionen
+ */
+
+/*N*/ BOOL lcl_DelFmtIndizes( const SwFrmFmtPtr& rpFmt, void* )
+/*N*/ {
+/*N*/ SwFmtCntnt &rFmtCntnt = (SwFmtCntnt&)rpFmt->GetCntnt();
+/*N*/ if ( rFmtCntnt.GetCntntIdx() )
+/*N*/ rFmtCntnt.SetNewCntntIdx( 0 );
+/*N*/ SwFmtAnchor &rFmtAnchor = (SwFmtAnchor&)rpFmt->GetAnchor();
+/*N*/ if ( rFmtAnchor.GetCntntAnchor() )
+/*N*/ rFmtAnchor.SetAnchor( 0 );
+/*N*/ return TRUE;
+/*N*/ }
+
+/*
+ * exportierte Methoden
+ */
+
+/*N*/ SwDoc::SwDoc() :
+/*N*/ aAttrPool( this ),
+/*N*/ aNodes( this ),
+/*N*/ pFrmFmtTbl( new SwFrmFmts() ),
+/*N*/ pCharFmtTbl( new SwCharFmts() ),
+/*N*/ pSpzFrmFmtTbl( new SwSpzFrmFmts() ),
+/*N*/ pTblFrmFmtTbl( new SwFrmFmts() ),
+/*N*/ pDfltFrmFmt( new SwFrmFmt( aAttrPool, sFrmFmtStr, 0 ) ),
+/*N*/ pEmptyPageFmt( new SwFrmFmt( aAttrPool, sEmptyPageStr, pDfltFrmFmt ) ),
+/*N*/ pColumnContFmt( new SwFrmFmt( aAttrPool, sColumnCntStr, pDfltFrmFmt ) ),
+/*N*/ pDfltCharFmt( new SwCharFmt( aAttrPool, sCharFmtStr, 0 ) ),
+/*N*/ pDfltTxtFmtColl( new SwTxtFmtColl( aAttrPool, sTxtCollStr ) ),
+/*N*/ pTxtFmtCollTbl( new SwTxtFmtColls() ),
+/*N*/ pDfltGrfFmtColl( new SwGrfFmtColl( aAttrPool, sGrfCollStr ) ),
+/*N*/ pGrfFmtCollTbl( new SwGrfFmtColls() ),
+/*N*/ pSectionFmtTbl( new SwSectionFmts() ),
+/*N*/ pFldTypes( new SwFldTypes() ),
+/*N*/ pBookmarkTbl( new SwBookmarks( 0, 16 ) ),
+/*N*/ pTOXTypes( new SwTOXTypes() ),
+/*N*/ pDefTOXBases( new SwDefTOXBase_Impl() ),
+/*N*/ nLinkCt( 0 ),
+/*N*/ pGlossaryDoc( 0 ),
+/*N*/ pOutlineRule( 0 ),
+/*N*/ pLayout( 0 ), // Rootframe des spezifischen Layouts.
+/*N*/ pPrt( 0 ),
+/*N*/ pPrtData( 0 ),
+/*N*/ pExtInputRing( 0 ),
+/*N*/ pLayouter( 0 ),
+/*N*/ pLayoutCache( 0 ),
+/*N*/ nLockExpFld( 0 ),
+/*N*/ pDocShell( 0 ),
+/*N*/ pDrawModel( 0 ),
+/*N*/ pUpdtFlds( new SwDocUpdtFld() ),
+/*N*/ pLinkMgr( new SvxLinkManager( 0 ) ),
+/*N*/ pSwgInfo( 0 ),
+/*N*/ pDocShRef( 0 ),
+/*N*/ pACEWord( 0 ),
+/*N*/ pURLStateChgd( 0 ),
+/*N*/ pNumberFormatter( 0 ),
+/*N*/ pFtnInfo( new SwFtnInfo ),
+/*N*/ pEndNoteInfo( new SwEndNoteInfo ),
+/*N*/ pLineNumberInfo( new SwLineNumberInfo ),
+/*N*/ pFtnIdxs( new SwFtnIdxs ),
+/*N*/ pDocStat( new SwDocStat ),
+/*N*/ pNumRuleTbl( new SwNumRuleTbl ),
+/*N*/ eRedlineMode( SwRedlineMode(REDLINE_SHOW_INSERT | REDLINE_SHOW_DELETE) ),
+/*N*/ pRedlineTbl( new SwRedlineTbl ),
+/*N*/ pUnoCrsrTbl( new SwUnoCrsrTbl( 0, 16 ) ),
+/*N*/ pPgPViewPrtData( 0 ),
+/*N*/ pAutoFmtRedlnComment( 0 ),
+/*N*/ pUnoCallBack(new SwUnoCallBack(0)),
+/*N*/ nAutoFmtRedlnCommentNo( 0 ),
+/*N*/ eChrCmprType( CHARCOMPRESS_NONE ),
+/*N*/ n32Dummy1( 0 ), n32Dummy2( 0 ), n8Dummy1( 0x80 ), n8Dummy2( 0 ),
+/*N*/ nLinkUpdMode( GLOBALSETTING ),
+/*N*/ nFldUpdMode( AUTOUPD_GLOBALSETTING ),
+/*N*/ bReadlineChecked(sal_False)
+/*N*/ {
+/*N*/ RTL_LOGFILE_CONTEXT_AUTHOR( aLog, "SW", "JP93722", "SwDoc::SwDoc" );
+/*N*/
+/*N*/ bGlossDoc =
+/*N*/ bModified =
+/*N*/ bDtor =
+/*N*/ bPageNums =
+/*N*/ bLoaded =
+/*N*/ bUpdateExpFld =
+/*N*/ bNewDoc =
+/*N*/ bCopyIsMove =
+/*N*/ bBrowseMode =
+/*N*/ bInReading =
+/*N*/ bUpdateTOX =
+/*N*/ bInLoadAsynchron =
+/*N*/ bHTMLMode =
+/*N*/ bHeadInBrowse =
+/*N*/ bFootInBrowse =
+/*N*/ bInCallModified =
+/*N*/ bIsGlobalDoc =
+/*N*/ bGlblDocSaveLinks =
+/*N*/ bIsLabelDoc =
+/*N*/ bIsAutoFmtRedline =
+/*N*/ bOLEPrtNotifyPending =
+/*N*/ bAllOLENotify =
+/*N*/ bIsRedlineMove =
+/*N*/ bInsOnlyTxtGlssry =
+/*N*/ bContains_MSVBasic =
+/*N*/ bKernAsianPunctuation =
+/*N*/ #ifdef DBG_UTIL
+/*N*/ bXMLExport =
+/*N*/ #endif
+/*N*/ FALSE;
+/*N*/
+/*N*/ bNewFldLst =
+/*N*/ bVisibleLinks =
+/*N*/ bFrmBeepEnabled =
+/*N*/ bPurgeOLE =
+/*N*/ TRUE;
+/*N*/
+/*N*/ pMacroTable = new SvxMacroTableDtor;
+/*N*/
+ /*
+ * Builds and sets the virtual device
+ */
+/*N*/ pVirDev = new VirtualDevice( 1 );
+/*N*/ pVirDev->SetReferenceDevice(VirtualDevice::REFDEV_MODE_MSO1);
+/*N*/ MapMode aMapMode( pVirDev->GetMapMode() );
+/*N*/ aMapMode.SetMapUnit( MAP_TWIP );
+/*N*/ pVirDev->SetMapMode( aMapMode );
+
+ /*
+ * Defaultformate und DefaultFormatsammlungen (FmtColl)
+ * werden an der Position 0 in das jeweilige Array eingetragen.
+ * Die Formate der FmtColls sind von den Defaultformaten
+ * abgeleitet und stehen auch in der Liste.
+ */
+/*N*/ /* Formate */
+/*N*/ pFrmFmtTbl->Insert(pDfltFrmFmt, 0 );
+/*N*/ pCharFmtTbl->Insert(pDfltCharFmt, 0 );
+/*N*/
+/*N*/ /* FmtColls */
+/*N*/ // TXT
+/*N*/ pTxtFmtCollTbl->Insert(pDfltTxtFmtColl, 0 );
+/*N*/ // aFtnInfo.SetFtnTxtColl(aDfltTxtFmtColl); // jetzt oben in der Liste
+/*N*/ // GRF
+/*N*/ pGrfFmtCollTbl->Insert(pDfltGrfFmtColl, 0 );
+/*N*/
+/*N*/ // PageDesc, EmptyPageFmt und ColumnFmt anlegen
+/*N*/ if ( !aPageDescs.Count() )
+/*N*/ GetPageDescFromPool( RES_POOLPAGE_STANDARD );
+/*N*/
+/*N*/ //Leere Seite Einstellen.
+/*N*/ pEmptyPageFmt->SetAttr( SwFmtFrmSize( ATT_FIX_SIZE ) );
+/*N*/ //BodyFmt fuer Spalten Einstellen.
+/*N*/ pColumnContFmt->SetAttr( SwFmtFillOrder( ATT_LEFT_TO_RIGHT ) );
+/*N*/
+/*N*/ _InitFieldTypes();
+/*N*/
+/*N*/ // lege (fuer die Filter) eine Default-OullineNumRule an
+/*N*/ pOutlineRule = new SwNumRule( String::CreateFromAscii(
+/*N*/ SwNumRule::GetOutlineRuleName() ),
+/*N*/ OUTLINE_RULE );
+/*N*/
+/*N*/ // new SwTxtNode( SwNodeIndex( aUndoNodes.GetEndOfContent() ), pDfltTxtFmtColl );
+/*N*/ new SwTxtNode( SwNodeIndex( aNodes.GetEndOfContent() ),
+/*N*/ GetTxtCollFromPool( RES_POOLCOLL_STANDARD ));
+/*N*/
+/*N*/ // den eigenen IdleTimer setzen
+/*N*/ aIdleTimer.SetTimeout( 600 );
+/*N*/ aIdleTimer.SetTimeoutHdl( LINK(this, SwDoc, DoIdleJobs) );
+/*N*/ aIdleTimer.Start();
+/*N*/
+/*N*/ // den CharTimer setzen
+/*N*/ aChartTimer.SetTimeout( 2000 );
+/*N*/ aChartTimer.SetTimeoutHdl( LINK( this, SwDoc, DoUpdateAllCharts ));
+/*N*/
+/*N*/ aOLEModifiedTimer.SetTimeout( 1000 );
+/*N*/ aOLEModifiedTimer.SetTimeoutHdl( LINK( this, SwDoc, DoUpdateModifiedOLE ));
+/*N*/
+/*N*/ // DBMgr anlegen
+/*N*/ pNewDBMgr = new SwNewDBMgr;
+/*N*/
+/*N*/ // create TOXTypes
+/*N*/ ShellResource* pShellRes = ViewShell::GetShellRes();
+/*N*/
+/*N*/ SwTOXType * pNew = new SwTOXType(TOX_CONTENT, pShellRes->aTOXContentName );
+/*N*/ pTOXTypes->Insert( pNew, pTOXTypes->Count() );
+/*N*/ pNew = new SwTOXType(TOX_INDEX, pShellRes->aTOXIndexName );
+/*N*/ pTOXTypes->Insert( pNew, pTOXTypes->Count() );
+/*N*/ pNew = new SwTOXType(TOX_USER, pShellRes->aTOXUserName );
+/*N*/ pTOXTypes->Insert( pNew, pTOXTypes->Count() );
+/*N*/ pNew = new SwTOXType(TOX_ILLUSTRATIONS, pShellRes->aTOXIllustrationsName );
+/*N*/ pTOXTypes->Insert( pNew, pTOXTypes->Count() );
+/*N*/ pNew = new SwTOXType(TOX_OBJECTS, pShellRes->aTOXObjectsName );
+/*N*/ pTOXTypes->Insert( pNew, pTOXTypes->Count() );
+/*N*/ pNew = new SwTOXType(TOX_TABLES, pShellRes->aTOXTablesName );
+/*N*/ pTOXTypes->Insert( pNew, pTOXTypes->Count() );
+/*N*/ pNew = new SwTOXType(TOX_AUTHORITIES, pShellRes->aTOXAuthoritiesName );
+/*N*/ pTOXTypes->Insert( pNew, pTOXTypes->Count() );
+/*N*/
+/*N*/ ResetModified();
+/*N*/ }
+
+/*
+ * Besonderheiten: an der Position 0 des Arrays der Formate und
+ * der GDI-Objekte befindet sich ein Member der Klasse SwDoc.
+ * Dieser darf also keinesfalls durch delete geloescht
+ * werden!!!!!!!!!!
+ */
+
+
+/*N*/ SwDoc::~SwDoc()
+/*N*/ {
+/*N*/ //!! needs to be done to destroy a possible SwFmtDrop format that may
+/*N*/ //!! be connected to a char format which may not otherwise be removed
+/*N*/ //!! and thus would leave a unremoved SwFmt object. (TL)
+/*N*/ //!! (this is case is not possible via UI but via API...)
+/*N*/ SwFmtDrop aDrop;
+/*N*/ SetDefault(aDrop);
+/*N*/ //!! same for SwFmtCharFmt
+/*N*/ SwFmtCharFmt aCharFmt(NULL);
+/*N*/ SetDefault(aCharFmt);
+/*N*/
+/*N*/ aIdleTimer.Stop(); // den Idltimer abschalten
+/*N*/
+/*N*/ delete pUnoCallBack, pUnoCallBack = 0;
+/*N*/ delete pURLStateChgd;
+/*N*/
+/*N*/ delete pLayouter;
+/*N*/
+/*N*/ // Undo-Benachrichtigung vom Draw abschalten
+/*N*/ if( pDrawModel )
+/*N*/ {
+/*N*/ ClrContourCache();
+/*N*/ }
+/*N*/
+/*N*/ delete pPgPViewPrtData;
+/*N*/
+/*N*/ // damit die Fussnotenattribute die Fussnotennodes in Frieden lassen.
+/*N*/ bDtor = TRUE;
+/*N*/
+/*N*/ DELETEZ( pLayout );
+/*N*/ DELETEZ( pOutlineRule );
+/*N*/
+/*N*/ delete pRedlineTbl;
+/*N*/ delete pUnoCrsrTbl;
+/*N*/ delete pAutoFmtRedlnComment;
+/*N*/
+/*N*/ if( pUpdtFlds )
+/*N*/ delete pUpdtFlds;
+/*N*/
+/*N*/ // die BaseLinks freigeben.
+/*N*/ {
+/*N*/ for( USHORT n = pLinkMgr->GetServers().Count(); n; )
+/*N*/ pLinkMgr->GetServers()[ --n ]->Closed();
+/*N*/
+/*N*/ if( pLinkMgr->GetLinks().Count() )
+/*N*/ pLinkMgr->Remove( 0, pLinkMgr->GetLinks().Count() );
+/*N*/ }
+/*N*/
+/*N*/ // die KapitelNummern / Nummern muessen vor den Vorlage geloescht werden
+/*N*/ // ansonsten wird noch staendig geupdatet !!!
+/*N*/ aNodes.pOutlineNds->Remove( USHORT(0), aNodes.pOutlineNds->Count() );
+/*N*/ // aUndoNodes.pOutlineNds->Remove( USHORT(0), aUndoNodes.pOutlineNds->Count() );
+/*N*/
+/*N*/ pFtnIdxs->Remove( USHORT(0), pFtnIdxs->Count() );
+/*N*/
+/*N*/ // in den BookMarks sind Indizies auf den Content. Diese muessen vorm
+/*N*/ // loesche der Nodes geloescht werden.
+/*N*/ pBookmarkTbl->DeleteAndDestroy( 0, pBookmarkTbl->Count() );
+/*N*/ DELETEZ( pMacroTable );
+/*N*/
+/*N*/ if( pExtInputRing )
+/*N*/ {
+/*?*/ Ring* pTmp = pExtInputRing;
+/*?*/ pExtInputRing = 0;
+/*?*/ while( pTmp->GetNext() != pTmp )
+/*?*/ delete pTmp->GetNext();
+/*?*/ delete pTmp;
+/*N*/ }
+
+//JP: alt - loeschen ohne Flag ist teuer; Modify wird verschickt!
+// aTOXTypes.DeleteAndDestroy( 0, aTOXTypes.Count() );
+ {
+/*N*/ for( USHORT n = pTOXTypes->Count(); n; )
+/*N*/ {
+/*N*/ (*pTOXTypes)[ --n ]->SetInDocDTOR();
+/*N*/ delete (*pTOXTypes)[ n ];
+/*N*/ }
+/*N*/ pTOXTypes->Remove( 0, pTOXTypes->Count() );
+/*N*/ }
+/*N*/ delete pDefTOXBases;
+
+ //Im einen oder anderen FrmFormat koennen noch Indizes angemeldet sein,
+ //Diese muessen spaetestens jetzt zerstoert werden.
+/*N*/ pFrmFmtTbl->ForEach( &lcl_DelFmtIndizes, this );
+/*N*/ pSpzFrmFmtTbl->ForEach( &lcl_DelFmtIndizes, this );
+/*N*/ ((SwFrmFmts&)*pSectionFmtTbl).ForEach( &lcl_DelFmtIndizes, this );
+/*N*/
+/*N*/ //Die Formate, die hier hinter stehen sind von den DefaultFormaten
+/*N*/ //abhaengig. Erst nach dem Loeschen der FmtIndizes weil der Inhalt von
+/*N*/ //Kopf-/Fussbereichen geloescht wird. Wenn dort noch Indizes von Flys
+/*N*/ //angemeldet sind gibts was an die Ohren.
+/*N*/ aPageDescs.DeleteAndDestroy( 0, aPageDescs.Count() );
+/*N*/
+/*N*/ // Inhaltssections loeschen
+/*N*/ // nicht erst durch den SwNodes-DTOR, damit Formate
+/*N*/ // keine Abhaengigen mehr haben.
+/*N*/ aNodes.DelNodes( SwNodeIndex( aNodes ), aNodes.Count() );
+/*N*/ // aUndoNodes.DelNodes( SwNodeIndex( aUndoNodes ), aUndoNodes.Count() );
+/*N*/
+/*N*/ // Formate loeschen, spaeter mal permanent machen.
+/*N*/
+/*N*/ // Delete fuer Collections
+/*N*/ // damit die Abhaengigen wech sind
+/*N*/ SwTxtFmtColl *pFtnColl = pFtnInfo->GetFtnTxtColl();
+/*N*/ if ( pFtnColl ) pFtnColl->Remove(pFtnInfo);
+/*N*/ pFtnColl = pEndNoteInfo->GetFtnTxtColl();
+/*N*/ if ( pFtnColl ) pFtnColl->Remove(pEndNoteInfo);
+/*N*/
+/*N*/ ASSERT( pDfltTxtFmtColl == (*pTxtFmtCollTbl)[0],
+/*N*/ "Default-Text-Collection muss immer am Anfang stehen" );
+/*N*/
+/*N*/ // JP 27.01.98: opt.: ausgehend davon, das Standard als 2. im Array
+/*N*/ // steht, sollte das als letztes geloescht werden, damit
+/*N*/ // die ganze Umhaengerei der Formate vermieden wird!
+/*N*/ if( 2 < pTxtFmtCollTbl->Count() )
+/*N*/ pTxtFmtCollTbl->DeleteAndDestroy( 2, pTxtFmtCollTbl->Count()-2 );
+/*N*/ pTxtFmtCollTbl->DeleteAndDestroy( 1, pTxtFmtCollTbl->Count()-1 );
+/*N*/ delete pTxtFmtCollTbl;
+/*N*/
+/*N*/ ASSERT( pDfltGrfFmtColl == (*pGrfFmtCollTbl)[0],
+/*N*/ "Default-Grf-Collection muss immer am Anfang stehen" );
+/*N*/
+/*N*/ pGrfFmtCollTbl->DeleteAndDestroy( 1, pGrfFmtCollTbl->Count()-1 );
+/*N*/ // ergibt sich automatisch - kein _DEL Array!
+/*N*/ // pGrfFmtCollTbl->Remove( 0, n );
+/*N*/ delete pGrfFmtCollTbl;
+/*N*/
+ /*
+ * Defaultformate und DefaultFormatsammlungen (FmtColl)
+ * sind an der Position 0 der jeweiligen Arrays eingetragen.
+ * Damit sie nicht vom DTOR der Array's zum 2.mal geloescht werden,
+ * nehme sie aus dem Array.
+ */
+/*N*/ pFrmFmtTbl->Remove( 0 );
+/*N*/ pCharFmtTbl->Remove( 0 );
+/*N*/
+/*N*/ // Delete fuer pPrt
+/*N*/ DELETEZ( pPrt );
+/*N*/ DELETEZ( pSwgInfo );
+/*N*/ DELETEZ( pNewDBMgr );
+/*N*/
+/*N*/ // Alle Flys muessen vor dem Drawing Model zerstoert werden,
+/*N*/ // da Flys noch DrawContacts enthalten koennen, wenn wegen
+/*N*/ // eines Lesefehlers kein Layout aufgebaut wurde.
+/*N*/ pSpzFrmFmtTbl->DeleteAndDestroy( 0, pSpzFrmFmtTbl->Count() );
+/*N*/
+/*N*/ //Erst jetzt das Model zerstoeren, die Zeichenobjekte - die ja auch
+/*N*/ //im Undo herumlungern - wollen noch ihre Attribute beim Model entfernen.
+/*N*/ //Ausserdem koennen vorher noch DrawContacts existieren.
+/*N*/ ReleaseDrawModel();
+/*N*/ //JP 28.01.99: DrawModel vorm LinkManager zerstoeren, da am DrawModel
+/*N*/ // dieser immer gesetzt ist.
+/*N*/ DELETEZ( pLinkMgr );
+/*N*/
+/*N*/ //Tables vor dem loeschen der Defaults leeren, sonst GPF wegen Def-Abhaengigen.
+/*N*/ //Die Arrays sollten (wegen includes) bei Gelegenheit auch zu Pointern werden.
+/*N*/ delete pFrmFmtTbl;
+/*N*/ delete pSpzFrmFmtTbl;
+/*N*/ delete pCharFmtTbl;
+/*N*/ delete pSectionFmtTbl;
+/*N*/ delete pTblFrmFmtTbl;
+/*N*/ delete pDfltTxtFmtColl;
+/*N*/ delete pDfltGrfFmtColl;
+/*N*/ delete pNumRuleTbl;
+/*N*/
+/*N*/ delete pPrtData;
+/*N*/ delete pBookmarkTbl;
+/*N*/ delete pNumberFormatter;
+/*N*/ delete pFtnInfo;
+/*N*/ delete pEndNoteInfo;
+/*N*/ delete pLineNumberInfo;
+/*N*/ delete pFtnIdxs;
+/*N*/ delete pFldTypes;
+/*N*/ delete pTOXTypes;
+/*N*/ delete pDocStat;
+/*N*/ delete pEmptyPageFmt;
+/*N*/ delete pColumnContFmt;
+/*N*/ delete pDfltCharFmt;
+/*N*/ delete pDfltFrmFmt;
+/*N*/ delete pLayoutCache;
+/*N*/ delete pVirDev;
+/*N*/ }
+
+
+//---------------------------------------------------
+
+
+/*N*/ void SwDoc::SetJobsetup( const JobSetup &rJobSetup )
+/*N*/ {
+/*N*/ BOOL bCheckPageDescs = 0 == pPrt;
+/*N*/ BOOL bDataChanged = FALSE;
+/*N*/
+/*N*/ if ( pPrt )
+/*N*/ {
+/*N*/ if ( pPrt->GetName() == rJobSetup.GetPrinterName() )
+/*N*/ {
+/*N*/ if ( pPrt->GetJobSetup() != rJobSetup )
+/*N*/ {
+/*?*/ pPrt->SetJobSetup( rJobSetup );
+/*?*/ bDataChanged = TRUE;
+/*N*/ }
+/*N*/ }
+/*N*/ else
+/*?*/ delete pPrt, pPrt = 0;
+/*N*/ }
+/*N*/
+/*N*/ if( !pPrt )
+/*N*/ {
+/*N*/ //Das ItemSet wird vom Sfx geloescht!
+/*?*/ SfxItemSet *pSet = new SfxItemSet( aAttrPool,
+/*?*/ FN_PARAM_ADDPRINTER, FN_PARAM_ADDPRINTER,
+/*?*/ SID_HTML_MODE, SID_HTML_MODE,
+/*?*/ SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN,
+/*?*/ SID_PRINTER_CHANGESTODOC, SID_PRINTER_CHANGESTODOC,
+/*?*/ 0 );
+/*?*/ SfxPrinter *p = new SfxPrinter( pSet, rJobSetup );
+/*?*/ if ( bCheckPageDescs )
+/*?*/ SetPrt( p );
+/*?*/ else
+/*?*/ {
+/*?*/ pPrt = p;
+/*?*/ bDataChanged = TRUE;
+/*?*/ }
+/*N*/ }
+/*N*/ if ( !IsUseVirtualDevice() && bDataChanged )
+/*?*/ PrtDataChanged();
+/*N*/ }
+
+//---------------------------------------------------
+
+/*N*/ OutputDevice& SwDoc::GetRefDev() const
+/*N*/ {
+/*N*/ if ( ! IsUseVirtualDevice() )
+/*N*/ {
+/*N*/ SfxPrinter& rPrt = *GetPrt( sal_True );
+/*N*/ if ( rPrt.IsValid() )
+/*N*/ return rPrt;
+/*N*/ }
+/*N*/
+/*N*/ return *GetVirDev( sal_True );
+/*N*/ }
+
+//---------------------------------------------------
+
+/*N*/ OutputDevice* SwDoc::_GetRefDev() const
+/*N*/ {
+/*N*/ if ( IsUseVirtualDevice() )
+/*N*/ return pVirDev;
+/*N*/ return pPrt;
+/*N*/ }
+
+//---------------------------------------------------
+
+/*N*/ VirtualDevice& SwDoc::_GetVirDev() const
+/*N*/ {
+/*?*/ VirtualDevice* pNewVir = new VirtualDevice( 1 );
+/*?*/ pNewVir->SetReferenceDevice(VirtualDevice::REFDEV_MODE_MSO1);
+/*?*/ MapMode aMapMode( pNewVir->GetMapMode() );
+/*?*/ aMapMode.SetMapUnit( MAP_TWIP );
+/*?*/ pNewVir->SetMapMode( aMapMode );
+/*?*/
+/*?*/ ((SwDoc*)this)->SetVirDev( pNewVir, sal_True );
+/*?*/ return *pVirDev;
+/*N*/ }
+
+//---------------------------------------------------
+
+/*N*/ SfxPrinter& SwDoc::_GetPrt() const
+/*N*/ {
+/*N*/ ASSERT( ! pPrt, "Do not call _GetPrt(), call GetPrt() instead" )
+/*N*/
+/*N*/ // wir erzeugen einen default SfxPrinter.
+/*N*/ // Das ItemSet wird vom Sfx geloescht!
+/*N*/ SfxItemSet *pSet = new SfxItemSet( ((SwDoc*)this)->GetAttrPool(),
+/*N*/ FN_PARAM_ADDPRINTER, FN_PARAM_ADDPRINTER,
+/*N*/ SID_HTML_MODE, SID_HTML_MODE,
+/*N*/ SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN,
+/*N*/ SID_PRINTER_CHANGESTODOC, SID_PRINTER_CHANGESTODOC,
+/*N*/ 0 );
+/*N*/ SfxPrinter* pNewPrt = new SfxPrinter( pSet );
+/*N*/ ((SwDoc*)this)->SetPrt( pNewPrt, sal_True );
+/*N*/ return *pPrt;
+/*N*/ }
+//---------------------------------------------------
+
+/*N*/ SwPrintData* SwDoc::GetPrintData() const
+/*N*/ {
+/*N*/ return pPrtData;
+/*N*/ }
+//---------------------------------------------------
+/*N*/ void SwDoc::SetPrintData(SwPrintData& rPrtData)
+/*N*/ {
+/*N*/ if(!pPrtData)
+/*N*/ pPrtData = new SwPrintData;
+/*N*/ *pPrtData = rPrtData;
+/*N*/ }
+//---------------------------------------------------
+
+
+/*N*/ void SwDoc::SetDocShell( SwDocShell* pDSh )
+/*N*/ {
+/*N*/ if( pDocShell != pDSh )
+/*N*/ {
+/*N*/ pDocShell = pDSh;
+/*N*/ pLinkMgr->SetPersist( pDocShell );
+/*N*/ //JP 27.08.98: Bug 55570 - DocShell Pointer auch am DrawModel setzen
+/*N*/ if( pDrawModel )
+/*N*/ {
+/*N*/ ((SwDrawDocument*)pDrawModel)->SetObjectShell( pDocShell );
+/*N*/ pDrawModel->SetPersist( pDocShell );
+/*N*/ ASSERT( pDrawModel->GetPersist() == GetPersist(),
+/*N*/ "draw model's persist is out of sync" );
+/*N*/ }
+/*N*/ }
+/*N*/ }
+
+
+// Convenience-Methode, um uebermaessige Includes von docsh.hxx
+// zu vermeiden
+
+
+/*N*/ SvStorage* SwDoc::GetDocStorage()
+/*N*/ {
+/*N*/ if( pDocShell )
+/*N*/ return pDocShell->GetStorage();
+/*?*/ if( pLinkMgr->GetPersist() )
+/*?*/ return pLinkMgr->GetPersist()->GetStorage();
+/*?*/ return NULL;
+/*N*/ }
+
+
+
+/*N*/ SvPersist* SwDoc::GetPersist() const
+/*N*/ {
+/*N*/ return pDocShell ? pDocShell : pLinkMgr->GetPersist();
+/*N*/ }
+
+
+/*N*/ const SfxDocumentInfo* SwDoc::GetInfo()
+/*N*/ {
+/*N*/ if( !pSwgInfo )
+/*N*/ // Pointer-Members initialisieren
+/*N*/ pSwgInfo = new SfxDocumentInfo;
+/*N*/ return pSwgInfo;
+/*N*/ }
+
+
+/*N*/ void SwDoc::SetPreViewPrtData( const SwPagePreViewPrtData* pNew )
+/*N*/ {
+/*N*/ if( pNew )
+/*N*/ {
+/*N*/ if( pPgPViewPrtData )
+/*N*/ *pPgPViewPrtData = *pNew;
+/*N*/ else
+/*N*/ pPgPViewPrtData = new SwPagePreViewPrtData( *pNew );
+/*N*/ }
+/*N*/ else if( pPgPViewPrtData )
+/*N*/ DELETEZ( pPgPViewPrtData );
+/*N*/ SetModified();
+/*N*/ }
+/* -----------------------------06.01.00 14:03--------------------------------
+
+ ---------------------------------------------------------------------------*/
+/*N*/ SwModify* SwDoc::GetUnoCallBack() const
+/*N*/ {
+/*N*/ return pUnoCallBack;
+/*N*/ }
+
+/*N*/ rtl::Reference < SvxForbiddenCharactersTable > & SwDoc::GetForbiddenCharacterTbl()
+/*N*/ {
+/*N*/ if( !xForbiddenCharsTable.is() )
+/*N*/ {
+/*N*/ ::com::sun::star::uno::Reference<
+/*N*/ ::com::sun::star::lang::XMultiServiceFactory > xMSF =
+/*N*/ ::legacy_binfilters::getLegacyProcessServiceFactory();
+/*N*/ xForbiddenCharsTable = new SvxForbiddenCharactersTable( xMSF );
+/*N*/ }
+/*N*/ return xForbiddenCharsTable;
+/*N*/ }
+/* ------------------------------------------------------------------------*/
+
+/*N*/ const ::com::sun::star::i18n::
+/*N*/ ForbiddenCharacters* SwDoc::GetForbiddenCharacters( USHORT nLang,
+/*N*/ BOOL bLocaleData ) const
+/*N*/ {
+/*N*/ const ::com::sun::star::i18n::ForbiddenCharacters* pRet = 0;
+/*N*/ if( xForbiddenCharsTable.is() )
+/*N*/ pRet = xForbiddenCharsTable->GetForbiddenCharacters( nLang, FALSE );
+/*N*/ if( bLocaleData && !pRet && pBreakIt )
+/*N*/ pRet = &pBreakIt->GetForbidden( (LanguageType)nLang );
+/*N*/ return pRet;
+/*N*/ }
+
+
+
+/*N*/ void SwDoc::SetCharCompressType( SwCharCompressType n )
+/*N*/ {
+/*N*/ if( eChrCmprType != n )
+/*N*/ {
+/*N*/ eChrCmprType = n;
+/*N*/ if( pDrawModel )
+/*N*/ {
+/*N*/ pDrawModel->SetCharCompressType( n );
+/*N*/ if( !bInReading )
+/*N*/ pDrawModel->ReformatAllTextObjects();
+/*N*/ }
+/*N*/
+/*N*/ if( pLayout && !bInReading )
+/*N*/ {
+/*N*/ pLayout->StartAllAction();
+/*N*/ pLayout->InvalidateAllCntnt();
+/*N*/ pLayout->EndAllAction();
+/*N*/ }
+/*N*/ }
+/*N*/ }
+
+/*-----------------28.5.2001 10:06------------------
+ * SwDoc:
+ * Reading and writing of the layout cache.
+ *--------------------------------------------------*/
+
+/*N*/ void SwDoc::ReadLayoutCache( SvStream& rStream )
+/*N*/ {
+/*N*/ if( !pLayoutCache )
+/*N*/ pLayoutCache = new SwLayoutCache();
+/*N*/ if( !pLayoutCache->IsLocked() )
+/*N*/ {
+/*N*/ pLayoutCache->GetLockCount() |= 0x8000;
+/*N*/ pLayoutCache->Read( rStream );
+/*N*/ pLayoutCache->GetLockCount() &= 0x7fff;
+/*N*/ }
+/*N*/ }
+
+/*N*/ void SwDoc::WriteLayoutCache( SvStream& rStream )
+/*N*/ {
+/*N*/ pLayoutCache->Write( rStream, *this );
+/*N*/ }
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */