diff options
Diffstat (limited to 'binfilter/bf_sw/source/core/doc/sw_docnew.cxx')
-rw-r--r-- | binfilter/bf_sw/source/core/doc/sw_docnew.cxx | 746 |
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: */ |