diff options
Diffstat (limited to 'sw/source/core/doc/docnew.cxx')
-rw-r--r-- | sw/source/core/doc/docnew.cxx | 1450 |
1 files changed, 1450 insertions, 0 deletions
diff --git a/sw/source/core/doc/docnew.cxx b/sw/source/core/doc/docnew.cxx new file mode 100644 index 000000000000..fe4044dd58ac --- /dev/null +++ b/sw/source/core/doc/docnew.cxx @@ -0,0 +1,1450 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sw.hxx" +#define ROLBCK_HISTORY_ONLY // Der Kampf gegen die CLOOK's +#include <doc.hxx> +#include <dcontact.hxx> +#include <com/sun/star/document/PrinterIndependentLayout.hpp> +#include <com/sun/star/document/UpdateDocMode.hpp> +#include <com/sun/star/text/XTextDocument.hpp> +#include <com/sun/star/linguistic2/XProofreadingIterator.hpp> +#include <com/sun/star/text/XFlatParagraphIteratorProvider.hpp> + +#include <unotools/processfactory.hxx> +#include <vcl/svapp.hxx> +#include <vcl/virdev.hxx> +#include <rtl/logfile.hxx> +#include <sfx2/printer.hxx> +#include <sfx2/docfile.hxx> +#include <sfx2/frame.hxx> +#include <sfx2/viewfrm.hxx> + +#include <svl/macitem.hxx> +#include <svx/svxids.hrc> +#include <svx/svdogrp.hxx> +#include <sfx2/linkmgr.hxx> +#include <editeng/forbiddencharacterstable.hxx> +#include <svl/zforlist.hxx> +#include <unotools/compatibility.hxx> +#include <unotools/lingucfg.hxx> +#include <svx/svdpage.hxx> +#include <paratr.hxx> +#include <fchrfmt.hxx> +#include <fmtcntnt.hxx> +#include <fmtanchr.hxx> +#include <fmtfsize.hxx> +#include <fmtfordr.hxx> +#include <fmtpdsc.hxx> +#include <pvprtdat.hxx> +#include <rootfrm.hxx> //Damit der RootDtor gerufen wird. +#include <layouter.hxx> +#include <pagedesc.hxx> //Damit die PageDescs zerstoert werden koennen. +#include <ndtxt.hxx> +#include <printdata.hxx> +#include <docfld.hxx> +#include <ftninfo.hxx> +#include <ftnidx.hxx> +#include <docstat.hxx> +#include <charfmt.hxx> +#include <frmfmt.hxx> +#include <rolbck.hxx> // Undo-Attr, SwHistory +#include <poolfmt.hxx> // fuer die Pool-Vorlage +#include <dbmgr.hxx> +#include <docsh.hxx> +#include <acorrect.hxx> // fuer die autom. Aufnahme von Ausnahmen +#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 <breakit.hxx> +#include <laycache.hxx> +#include <mvsave.hxx> +#include <istyleaccess.hxx> +#include <swstylemanager.hxx> +#include <IGrammarContact.hxx> +#include <tblsel.hxx> +#include <MarkManager.hxx> +#include <unochart.hxx> + +#include <cmdid.h> // fuer den dflt - Printer in SetJob + + +// --> OD 2006-04-19 #b6375613# +#include <com/sun/star/document/XDocumentInfoSupplier.hpp> +#include <com/sun/star/beans/XPropertyContainer.hpp> +#include <com/sun/star/beans/PropertyAttribute.hpp> + +// <-- + +// --> OD 2007-03-16 #i73788# +#include <pausethreadstarting.hxx> +// <-- +#include <numrule.hxx> +// --> OD 2008-03-13 #refactorlists# +#include <list.hxx> +#include <listfunc.hxx> +// <-- + +#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp> + +#include <sfx2/Metadatable.hxx> +#include <fmtmeta.hxx> // MetaFieldManager + + +using namespace ::com::sun::star; +using namespace ::com::sun::star::document; + +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"; + +SV_IMPL_PTRARR( SwNumRuleTbl, SwNumRulePtr) +SV_IMPL_PTRARR( SwTxtFmtColls, SwTxtFmtCollPtr) +SV_IMPL_PTRARR( SwGrfFmtColls, SwGrfFmtCollPtr) + +/* + * global functions... + */ + + uno::Reference< linguistic2::XProofreadingIterator > SwDoc::GetGCIterator() const +{ + if (!m_xGCIterator.is() && SvtLinguConfig().HasGrammarChecker()) + { + uno::Reference< lang::XMultiServiceFactory > xMgr( utl::getProcessServiceFactory() ); + if (xMgr.is()) + { + try + { + rtl::OUString aServiceName( rtl::OUString::createFromAscii("com.sun.star.linguistic2.ProofreadingIterator") ); + m_xGCIterator = uno::Reference< linguistic2::XProofreadingIterator > + ( xMgr->createInstance( aServiceName ), uno::UNO_QUERY_THROW ); + } + catch (uno::Exception &) + { + DBG_ERROR( "No GCIterator" ); + } + } + } + + return m_xGCIterator; +} + +void StartGrammarChecking( SwDoc &rDoc ) +{ + // check for a visible view + bool bVisible = false; + const SwDocShell *pDocShell = rDoc.GetDocShell(); + SfxViewFrame *pFrame = SfxViewFrame::GetFirst( pDocShell, sal_False ); + while (pFrame && !bVisible) + { + if (pFrame->IsVisible()) + bVisible = true; + pFrame = SfxViewFrame::GetNext( *pFrame, pDocShell, sal_False ); + } + + //!! only documents with visible views need to be checked + //!! (E.g. don't check temporary documents created for printing, see printing of notes and selections. + //!! Those get created on the fly and get hard deleted a bit later as well, and no one should have + //!! a uno reference to them) + if (bVisible) + { + uno::Reference< linguistic2::XProofreadingIterator > xGCIterator( rDoc.GetGCIterator() ); + if ( xGCIterator.is() ) + { + uno::Reference< lang::XComponent > xDoc( rDoc.GetDocShell()->GetBaseModel(), uno::UNO_QUERY ); + uno::Reference< text::XFlatParagraphIteratorProvider > xFPIP( xDoc, uno::UNO_QUERY ); + + // start automatic background checking if not active already + if ( xFPIP.is() && !xGCIterator->isProofreading( xDoc ) ) + xGCIterator->startProofreading( xDoc, xFPIP ); + } + } +} + +/* + * interne Funktionen + */ + + + +BOOL lcl_DelFmtIndizes( const SwFrmFmtPtr& rpFmt, void* ) +{ + SwFmtCntnt &rFmtCntnt = (SwFmtCntnt&)rpFmt->GetCntnt(); + if ( rFmtCntnt.GetCntntIdx() ) + rFmtCntnt.SetNewCntntIdx( 0 ); + SwFmtAnchor &rFmtAnchor = (SwFmtAnchor&)rpFmt->GetAnchor(); + if ( rFmtAnchor.GetCntntAnchor() ) + rFmtAnchor.SetAnchor( 0 ); + return TRUE; +} + +/* + * exportierte Methoden + */ + +SwDoc::SwDoc() : + aNodes( this ), + aUndoNodes( this ), + mpAttrPool(new SwAttrPool(this)), + pMarkManager(new ::sw::mark::MarkManager(*this)), + m_pMetaFieldManager(new ::sw::MetaFieldManager()), + pDfltFrmFmt( new SwFrmFmt( GetAttrPool(), sFrmFmtStr, 0 ) ), + pEmptyPageFmt( new SwFrmFmt( GetAttrPool(), sEmptyPageStr, pDfltFrmFmt ) ), + pColumnContFmt( new SwFrmFmt( GetAttrPool(), sColumnCntStr, pDfltFrmFmt ) ), + pDfltCharFmt( new SwCharFmt( GetAttrPool(), sCharFmtStr, 0 ) ), + pDfltTxtFmtColl( new SwTxtFmtColl( GetAttrPool(), sTxtCollStr ) ), + pDfltGrfFmtColl( new SwGrfFmtColl( GetAttrPool(), sGrfCollStr ) ), + pFrmFmtTbl( new SwFrmFmts() ), + pCharFmtTbl( new SwCharFmts() ), + pSpzFrmFmtTbl( new SwSpzFrmFmts() ), + pSectionFmtTbl( new SwSectionFmts() ), + pTblFrmFmtTbl( new SwFrmFmts() ), + pTxtFmtCollTbl( new SwTxtFmtColls() ), + pGrfFmtCollTbl( new SwGrfFmtColls() ), + pTOXTypes( new SwTOXTypes() ), + pDefTOXBases( new SwDefTOXBase_Impl() ), + pLayout( 0 ), // Rootframe des spezifischen Layouts. + pDrawModel( 0 ), + pUndos( new SwUndos( 0, 20 ) ), + pUpdtFlds( new SwDocUpdtFld() ), + pFldTypes( new SwFldTypes() ), + pVirDev( 0 ), + pPrt( 0 ), + pPrtData( 0 ), + pGlossaryDoc( 0 ), + pOutlineRule( 0 ), + pFtnInfo( new SwFtnInfo ), + pEndNoteInfo( new SwEndNoteInfo ), + pLineNumberInfo( new SwLineNumberInfo ), + pFtnIdxs( new SwFtnIdxs ), + pDocStat( new SwDocStat ), + pDocShell( 0 ), + pDocShRef( 0 ), + pLinkMgr( new sfx2::LinkManager( 0 ) ), + pACEWord( 0 ), + pURLStateChgd( 0 ), + pNumberFormatter( 0 ), + pNumRuleTbl( new SwNumRuleTbl ), + // --> OD 2008-03-26 #refactorlists# + maLists(), + maListStyleLists(), + // <-- + pRedlineTbl( new SwRedlineTbl ), + pAutoFmtRedlnComment( 0 ), + pUnoCrsrTbl( new SwUnoCrsrTbl( 0, 16 ) ), + pPgPViewPrtData( 0 ), + pExtInputRing( 0 ), + pLayouter( 0 ), + // --> OD 2008-03-07 #refactorlists# + pStyleAccess( 0 ), + // <-- + pLayoutCache( 0 ), + pUnoCallBack(new SwModify(0)), + mpGrammarContact( 0 ), + aChartDataProviderImplRef(), + pChartControllerHelper( 0 ), + // --> OD 2007-10-31 #i83479# + mpListItemsList( new tImplSortedNodeNumList() ), + // <-- + m_pXmlIdRegistry(), + nUndoPos( 0 ), + nUndoSavePos( 0 ), + nUndoCnt( 0 ), + nUndoSttEnd( 0 ), + nAutoFmtRedlnCommentNo( 0 ), + nLinkUpdMode( GLOBALSETTING ), + eFldUpdMode( AUTOUPD_GLOBALSETTING ), + eRedlineMode((RedlineMode_t)(nsRedlineMode_t::REDLINE_SHOW_INSERT | nsRedlineMode_t::REDLINE_SHOW_DELETE)), + eChrCmprType( CHARCOMPRESS_NONE ), + mReferenceCount(0), + mIdleBlockCount(0), + nLockExpFld( 0 ), + mbReadlineChecked(false), + // --> OD 2005-02-11 #i38810# + mbLinksUpdated( sal_False ), + mbClipBoard( false ), + mbColumnSelection( false ), + // i#78591# + mbProtectForm(false), + n32DummyCompatabilityOptions1(0), + n32DummyCompatabilityOptions2(0), + mbStartIdleTimer(sal_False) +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLog, "SW", "JP93722", "SwDoc::SwDoc" ); + + mbGlossDoc = + mbModified = + mbDtor = + mbUndo = + mbPageNums = + mbLoaded = + mbUpdateExpFld = + mbNewDoc = + mbCopyIsMove = + mbNoDrawUndoObj = + mbBrowseMode = + mbInReading = + mbInXMLImport = + mbUpdateTOX = + mbInLoadAsynchron = + mbHTMLMode = + mbInCallModified = + mbIsGlobalDoc = + mbGlblDocSaveLinks = + mbIsLabelDoc = + mbIsAutoFmtRedline = + mbOLEPrtNotifyPending = + mbAllOLENotify = + mbIsRedlineMove = + mbInsOnlyTxtGlssry = + mbContains_MSVBasic = + mbKernAsianPunctuation = +#ifdef DBG_UTIL + mbXMLExport = +#endif + // --> OD 2006-03-21 #b6375613# + mbApplyWorkaroundForB6375613 = + // <-- + false; + + mbGroupUndo = + mbNewFldLst = + mbVisibleLinks = + mbPurgeOLE = + true; + + // + // COMPATIBILITY FLAGS START + // + + // Note: Any non-hidden compatibility flag should obtain its default + // by asking SvtCompatibilityOptions, see below. + // + const SvtCompatibilityOptions aOptions; + mbParaSpaceMax = aOptions.IsAddSpacing(); + mbParaSpaceMaxAtPages = aOptions.IsAddSpacingAtPages(); + mbTabCompat = !aOptions.IsUseOurTabStops(); + mbUseVirtualDevice = !aOptions.IsUsePrtDevice(); + mbAddExternalLeading = !aOptions.IsNoExtLeading(); + mbOldLineSpacing = aOptions.IsUseLineSpacing(); + mbAddParaSpacingToTableCells = aOptions.IsAddTableSpacing(); + mbUseFormerObjectPos = aOptions.IsUseObjectPositioning(); + mbUseFormerTextWrapping = aOptions.IsUseOurTextWrapping(); + mbConsiderWrapOnObjPos = aOptions.IsConsiderWrappingStyle(); + mbAddFlyOffsets = false; // hidden + mbOldNumbering = false; // hidden + mbUseHiResolutionVirtualDevice = true; // hidden + mbIgnoreFirstLineIndentInNumbering = false; // hidden + mbDoNotJustifyLinesWithManualBreak = !aOptions.IsExpandWordSpace(); + mbDoNotResetParaAttrsForNumFont = false; // hidden + mbOutlineLevelYieldsOutlineRule = false; // hidden + mbTableRowKeep = false; // hidden + mbIgnoreTabsAndBlanksForLineCalculation = false; // hidden + mbDoNotCaptureDrawObjsOnPage = false; // hidden + mbClipAsCharacterAnchoredWriterFlyFrames= false; // hidden + mbUnixForceZeroExtLeading = false; // hidden + mbOldPrinterMetrics = false; // hidden + mbTabRelativeToIndent = true; // hidden + // --> OD 2008-06-05 #i89181# + mbTabAtLeftIndentForParagraphsInList = false; // hidden + // <-- + + // + // COMPATIBILITY FLAGS END + // + + pMacroTable = new SvxMacroTableDtor; + + mpGrammarContact = ::createGrammarContact(); + + /* + * 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. + */ + /* Formate */ + pFrmFmtTbl->Insert(pDfltFrmFmt, 0 ); + pCharFmtTbl->Insert(pDfltCharFmt, 0 ); + + /* FmtColls */ + // TXT + pTxtFmtCollTbl->Insert(pDfltTxtFmtColl, 0 ); + // GRF + pGrfFmtCollTbl->Insert(pDfltGrfFmtColl, 0 ); + + // PageDesc, EmptyPageFmt und ColumnFmt anlegen + if ( !aPageDescs.Count() ) + GetPageDescFromPool( RES_POOLPAGE_STANDARD ); + + //Leere Seite Einstellen. + pEmptyPageFmt->SetFmtAttr( SwFmtFrmSize( ATT_FIX_SIZE ) ); + //BodyFmt fuer Spalten Einstellen. + pColumnContFmt->SetFmtAttr( SwFmtFillOrder( ATT_LEFT_TO_RIGHT ) ); + + _InitFieldTypes(); + + // lege (fuer die Filter) eine Default-OutlineNumRule an + // --> OD 2008-02-11 #newlistlevelattrs# + pOutlineRule = new SwNumRule( String::CreateFromAscii( SwNumRule::GetOutlineRuleName() ), + // --> OD 2008-06-06 #i89178# + numfunc::GetDefaultPositionAndSpaceMode(), + // <-- + OUTLINE_RULE ); + // <-- + // #115901# + AddNumRule(pOutlineRule); + // --> OD 2005-10-21 - counting of phantoms depends on <IsOldNumbering()> + pOutlineRule->SetCountPhantoms( !get(IDocumentSettingAccess::OLD_NUMBERING) ); + // <-- + + new SwTxtNode( SwNodeIndex( aUndoNodes.GetEndOfContent() ), pDfltTxtFmtColl ); + new SwTxtNode( SwNodeIndex( aNodes.GetEndOfContent() ), + GetTxtCollFromPool( RES_POOLCOLL_STANDARD )); + + // den eigenen IdleTimer setzen + aIdleTimer.SetTimeout( 600 ); + aIdleTimer.SetTimeoutHdl( LINK(this, SwDoc, DoIdleJobs) ); + + aOLEModifiedTimer.SetTimeout( 1000 ); + aOLEModifiedTimer.SetTimeoutHdl( LINK( this, SwDoc, DoUpdateModifiedOLE )); + + // DBMgr anlegen + pNewDBMgr = new SwNewDBMgr; + + // create TOXTypes + InitTOXTypes(); + + // --> OD 2008-03-07 #refactorlists# + // pass empty item set containing the paragraph's list attributes + // as ignorable items to the stype manager. + { + SfxItemSet aIgnorableParagraphItems( GetAttrPool(), + RES_PARATR_LIST_BEGIN, RES_PARATR_LIST_END-1, + 0 ); + pStyleAccess = createStyleManager( &aIgnorableParagraphItems ); + } + // <-- + + ResetModified(); +} + +/* + * 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!!!!!!!!!! + */ + + +SwDoc::~SwDoc() +{ + // --> OD 2007-03-16 #i73788# + SwPauseThreadStarting aPauseThreadStarting; + // <-- + + // --> OD 2007-11-01 #i83479# + delete mpListItemsList; + mpListItemsList = 0; + // <-- + + // clean up chart related structures... + // Note: the chart data provider gets already diposed in ~SwDocShell + // since all UNO API related functionality requires an existing SwDocShell + // this assures that dipose gets called if there is need for it. + aChartDataProviderImplRef.reset(); + delete pChartControllerHelper; + + delete mpGrammarContact; + mpGrammarContact = 0; + + //!! needs to be done to destroy a possible SwFmtDrop format that may + //!! be connected to a char format which may not otherwise be removed + //!! and thus would leave a unremoved SwFmt object. (TL) + //!! (this is case is not possible via UI but via API...) + SwFmtDrop aDrop; + SetDefault(aDrop); + //!! same for SwFmtCharFmt + SwFmtCharFmt aCharFmt(NULL); + SetDefault(aCharFmt); + + StopIdling(); // stop idle timer + + delete pUnoCallBack, pUnoCallBack = 0; + delete pURLStateChgd; + + delete pLayouter; + // --> OD 2005-09-05 #125370# + pLayouter = 0L; + // <-- + + // Undo-Benachrichtigung vom Draw abschalten + if( pDrawModel ) + { + DrawNotifyUndoHdl(); + ClrContourCache(); + } + + delete pPgPViewPrtData; + + mbUndo = FALSE; // immer das Undo abschalten !! + // damit die Fussnotenattribute die Fussnotennodes in Frieden lassen. + mbDtor = TRUE; + + DELETEZ( pLayout ); + + delete pRedlineTbl; + delete pUnoCrsrTbl; + delete pAutoFmtRedlnComment; + + if( pUpdtFlds ) + delete pUpdtFlds; + + if( pACEWord ) + delete pACEWord; + + // die BaseLinks freigeben. + { + for( USHORT n = pLinkMgr->GetServers().Count(); n; ) + pLinkMgr->GetServers()[ --n ]->Closed(); + + if( pLinkMgr->GetLinks().Count() ) + pLinkMgr->Remove( 0, pLinkMgr->GetLinks().Count() ); + } + + // die KapitelNummern / Nummern muessen vor den Vorlage geloescht werden + // ansonsten wird noch staendig geupdatet !!! + aNodes.pOutlineNds->Remove( USHORT(0), aNodes.pOutlineNds->Count() ); + aUndoNodes.pOutlineNds->Remove( USHORT(0), aUndoNodes.pOutlineNds->Count() ); + + pFtnIdxs->Remove( USHORT(0), pFtnIdxs->Count() ); + + pUndos->DeleteAndDestroy( 0, pUndos->Count() ); //Es koennen in den Attributen noch + //noch indizes angemeldet sein. + + // in den BookMarks sind Indizies auf den Content. Diese muessen vorm + // loesche der Nodes geloescht werden. + pMarkManager->clearAllMarks(); + DELETEZ( pMacroTable ); + + if( pExtInputRing ) + { + Ring* pTmp = pExtInputRing; + pExtInputRing = 0; + while( pTmp->GetNext() != pTmp ) + delete pTmp->GetNext(); + delete pTmp; + } + +//JP: alt - loeschen ohne Flag ist teuer; Modify wird verschickt! +// aTOXTypes.DeleteAndDestroy( 0, aTOXTypes.Count() ); + { + for( USHORT n = pTOXTypes->Count(); n; ) + { + (*pTOXTypes)[ --n ]->SetInDocDTOR(); + delete (*pTOXTypes)[ n ]; + } + pTOXTypes->Remove( 0, pTOXTypes->Count() ); + } + delete pDefTOXBases; + + //Im einen oder anderen FrmFormat koennen noch Indizes angemeldet sein, + //Diese muessen spaetestens jetzt zerstoert werden. + pFrmFmtTbl->ForEach( &lcl_DelFmtIndizes, this ); + pSpzFrmFmtTbl->ForEach( &lcl_DelFmtIndizes, this ); + ((SwFrmFmts&)*pSectionFmtTbl).ForEach( &lcl_DelFmtIndizes, this ); + + //Die Formate, die hier hinter stehen sind von den DefaultFormaten + //abhaengig. Erst nach dem Loeschen der FmtIndizes weil der Inhalt von + //Kopf-/Fussbereichen geloescht wird. Wenn dort noch Indizes von Flys + //angemeldet sind gibts was an die Ohren. + aPageDescs.DeleteAndDestroy( 0, aPageDescs.Count() ); + + // Inhaltssections loeschen + // nicht erst durch den SwNodes-DTOR, damit Formate + // keine Abhaengigen mehr haben. + aNodes.DelNodes( SwNodeIndex( aNodes ), aNodes.Count() ); + aUndoNodes.DelNodes( SwNodeIndex( aUndoNodes ), aUndoNodes.Count() ); + + // Formate loeschen, spaeter mal permanent machen. + + // Delete fuer Collections + // damit die Abhaengigen wech sind + SwTxtFmtColl *pFtnColl = pFtnInfo->GetFtnTxtColl(); + if ( pFtnColl ) pFtnColl->Remove(pFtnInfo); + pFtnColl = pEndNoteInfo->GetFtnTxtColl(); + if ( pFtnColl ) pFtnColl->Remove(pEndNoteInfo); + + ASSERT( pDfltTxtFmtColl == (*pTxtFmtCollTbl)[0], + "Default-Text-Collection muss immer am Anfang stehen" ); + + // JP 27.01.98: opt.: ausgehend davon, das Standard als 2. im Array + // steht, sollte das als letztes geloescht werden, damit + // die ganze Umhaengerei der Formate vermieden wird! + if( 2 < pTxtFmtCollTbl->Count() ) + pTxtFmtCollTbl->DeleteAndDestroy( 2, pTxtFmtCollTbl->Count()-2 ); + pTxtFmtCollTbl->DeleteAndDestroy( 1, pTxtFmtCollTbl->Count()-1 ); + delete pTxtFmtCollTbl; + + ASSERT( pDfltGrfFmtColl == (*pGrfFmtCollTbl)[0], + "Default-Grf-Collection muss immer am Anfang stehen" ); + + pGrfFmtCollTbl->DeleteAndDestroy( 1, pGrfFmtCollTbl->Count()-1 ); +// ergibt sich automatisch - kein _DEL Array! +// pGrfFmtCollTbl->Remove( 0, n ); + delete pGrfFmtCollTbl; + + /* + * 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. + */ + pFrmFmtTbl->Remove( 0 ); + pCharFmtTbl->Remove( 0 ); + + // Delete fuer pPrt + DELETEZ( pPrt ); + DELETEZ( pNewDBMgr ); + + // Alle Flys muessen vor dem Drawing Model zerstoert werden, + // da Flys noch DrawContacts enthalten koennen, wenn wegen + // eines Lesefehlers kein Layout aufgebaut wurde. + pSpzFrmFmtTbl->DeleteAndDestroy( 0, pSpzFrmFmtTbl->Count() ); + + //Erst jetzt das Model zerstoeren, die Zeichenobjekte - die ja auch + //im Undo herumlungern - wollen noch ihre Attribute beim Model entfernen. + //Ausserdem koennen vorher noch DrawContacts existieren. + ReleaseDrawModel(); + //JP 28.01.99: DrawModel vorm LinkManager zerstoeren, da am DrawModel + // dieser immer gesetzt ist. + DELETEZ( pLinkMgr ); + + //Tables vor dem loeschen der Defaults leeren, sonst GPF wegen Def-Abhaengigen. + //Die Arrays sollten (wegen includes) bei Gelegenheit auch zu Pointern werden. + delete pFrmFmtTbl; + delete pSpzFrmFmtTbl; + + delete pStyleAccess; + + delete pCharFmtTbl; + delete pSectionFmtTbl; + delete pTblFrmFmtTbl; + delete pDfltTxtFmtColl; + delete pDfltGrfFmtColl; + delete pNumRuleTbl; + + // --> OD 2008-03-26 #refactorlists# + { + for ( std::hash_map< String, SwList*, StringHash >::iterator + aListIter = maLists.begin(); + aListIter != maLists.end(); + ++aListIter ) + { + delete (*aListIter).second; + } + maLists.clear(); + } + maListStyleLists.clear(); + // <-- + + delete pPrtData; + delete pNumberFormatter; + delete pFtnInfo; + delete pEndNoteInfo; + delete pLineNumberInfo; + delete pFtnIdxs; + delete pFldTypes; + delete pTOXTypes; + delete pUndos; + delete pDocStat; + delete pEmptyPageFmt; + delete pColumnContFmt; + delete pDfltCharFmt; + delete pDfltFrmFmt; + delete pLayoutCache; + delete pVirDev; + + SfxItemPool::Free(mpAttrPool); +} + +//--------------------------------------------------- + +VirtualDevice& SwDoc::CreateVirtualDevice_() const +{ + VirtualDevice* pNewVir = new VirtualDevice( 1 ); + + // <-- + pNewVir->SetReferenceDevice( VirtualDevice::REFDEV_MODE_MSO1 ); + + // --> FME 2006-10-09 #i60945# External leading compatibility for unix systems. + if ( get(IDocumentSettingAccess::UNIX_FORCE_ZERO_EXT_LEADING ) ) + pNewVir->Compat_ZeroExtleadBug(); + // <-- + + MapMode aMapMode( pNewVir->GetMapMode() ); + aMapMode.SetMapUnit( MAP_TWIP ); + pNewVir->SetMapMode( aMapMode ); + + const_cast<SwDoc*>(this)->setVirtualDevice( pNewVir, true, true ); + return *pVirDev; +} + +//--------------------------------------------------- + +SfxPrinter& SwDoc::CreatePrinter_() const +{ + ASSERT( ! pPrt, "Do not call CreatePrinter_(), call getPrinter() instead" ) + +#if OSL_DEBUG_LEVEL > 1 + ASSERT( false, "Printer will be created!" ) +#endif + + // wir erzeugen einen default SfxPrinter. + // Das ItemSet wird vom Sfx geloescht! + SfxItemSet *pSet = new SfxItemSet( ((SwDoc*)this)->GetAttrPool(), + 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* pNewPrt = new SfxPrinter( pSet ); + const_cast<SwDoc*>(this)->setPrinter( pNewPrt, true, true ); + return *pPrt; +} +//--------------------------------------------------- + +void SwDoc::SetDocShell( SwDocShell* pDSh ) +{ + if( pDocShell != pDSh ) + { + pDocShell = pDSh; + + pLinkMgr->SetPersist( pDocShell ); + //JP 27.08.98: Bug 55570 - DocShell Pointer auch am DrawModel setzen + if( pDrawModel ) + { + ((SwDrawDocument*)pDrawModel)->SetObjectShell( pDocShell ); + pDrawModel->SetPersist( pDocShell ); + ASSERT( pDrawModel->GetPersist() == GetPersist(), + "draw model's persist is out of sync" ); + } + } +} + + +// Convenience-Methode, um uebermaessige Includes von docsh.hxx +// zu vermeiden + + + +uno::Reference < embed::XStorage > SwDoc::GetDocStorage() +{ + if( pDocShell ) + return pDocShell->GetStorage(); + if( pLinkMgr->GetPersist() ) + return pLinkMgr->GetPersist()->GetStorage(); + return NULL; +} + + + +SfxObjectShell* SwDoc::GetPersist() const +{ + return pDocShell ? pDocShell : pLinkMgr->GetPersist(); +} + + +void SwDoc::ClearDoc() +{ + BOOL bOldUndo = mbUndo; + DelAllUndoObj(); + mbUndo = FALSE; // immer das Undo abschalten !! + + // Undo-Benachrichtigung vom Draw abschalten + if( pDrawModel ) + { + DrawNotifyUndoHdl(); + ClrContourCache(); + } + + // stehen noch FlyFrames rum, loesche auch diese + USHORT n; + while ( 0 != (n = GetSpzFrmFmts()->Count()) ) + DelLayoutFmt((*pSpzFrmFmtTbl)[n-1]); + ASSERT( !pDrawModel || !pDrawModel->GetPage(0)->GetObjCount(), + "not all DrawObjects removed from the page" ); + + pRedlineTbl->DeleteAndDestroy( 0, pRedlineTbl->Count() ); + + if( pACEWord ) + delete pACEWord; + + // in den BookMarks sind Indizies auf den Content. Diese muessen vorm + // loesche der Nodes geloescht werden. + pMarkManager->clearAllMarks(); + InitTOXTypes(); + + // create a dummy pagedesc for the layout + sal_uInt16 nDummyPgDsc = MakePageDesc( String::CreateFromAscii( "?DUMMY?" )); + SwPageDesc* pDummyPgDsc = aPageDescs[ nDummyPgDsc ]; + + SwNodeIndex aSttIdx( *GetNodes().GetEndOfContent().StartOfSectionNode(), 1 ); + // den ersten immer wieder neu anlegen (ohne Attribute/Vorlagen/...) + SwTxtNode* pFirstNd = GetNodes().MakeTxtNode( aSttIdx, pDfltTxtFmtColl ); + + if( pLayout ) + { + // set the layout to the dummy pagedesc + pFirstNd->SetAttr( SwFmtPageDesc( pDummyPgDsc )); + + SwPosition aPos( *pFirstNd, SwIndex( pFirstNd )); + ::PaMCorrAbs( aSttIdx, SwNodeIndex( GetNodes().GetEndOfContent() ), + aPos ); + } + + GetNodes().Delete( aSttIdx, + GetNodes().GetEndOfContent().GetIndex() - aSttIdx.GetIndex() ); + + // --> OD 2006-02-28 #i62440# + // destruction of numbering rules and creation of new outline rule + // *after* the document nodes are deleted. + pOutlineRule = NULL; + pNumRuleTbl->DeleteAndDestroy( 0, pNumRuleTbl->Count() ); + // creation of new outline numbering rule + // --> OD 2008-02-11 #newlistlevelattrs# + pOutlineRule = new SwNumRule( String::CreateFromAscii( SwNumRule::GetOutlineRuleName() ), + // --> OD 2008-06-06 #i89178# + numfunc::GetDefaultPositionAndSpaceMode(), + // <-- + OUTLINE_RULE ); + // <-- + AddNumRule(pOutlineRule); + // --> OD 2005-10-21 - counting of phantoms depends on <IsOldNumbering()> + pOutlineRule->SetCountPhantoms( !get(IDocumentSettingAccess::OLD_NUMBERING) ); + // <-- + // <-- + + //remove the dummy pagedec from the array and delete all the old ones + aPageDescs.Remove( nDummyPgDsc ); + aPageDescs.DeleteAndDestroy( 0, aPageDescs.Count() ); + + // Delete fuer Collections + // damit die Abhaengigen wech sind + SwTxtFmtColl* pFtnColl = pFtnInfo->GetFtnTxtColl(); + if( pFtnColl ) pFtnColl->Remove( pFtnInfo ); + pFtnColl = pEndNoteInfo->GetFtnTxtColl(); + if( pFtnColl ) pFtnColl->Remove( pEndNoteInfo ); + + // JP 27.01.98: opt.: ausgehend davon, das Standard als 2. im Array + // steht, sollte das als letztes geloescht werden, damit + // die ganze Umhaengerei der Formate vermieden wird! + if( 2 < pTxtFmtCollTbl->Count() ) + pTxtFmtCollTbl->DeleteAndDestroy( 2, pTxtFmtCollTbl->Count()-2 ); + pTxtFmtCollTbl->DeleteAndDestroy( 1, pTxtFmtCollTbl->Count()-1 ); + pGrfFmtCollTbl->DeleteAndDestroy( 1, pGrfFmtCollTbl->Count()-1 ); + pCharFmtTbl->DeleteAndDestroy( 1, pCharFmtTbl->Count()-1 ); + + if( pLayout ) + { + // search the FrameFormat of the root frm. This is not allowed to delete + pFrmFmtTbl->Remove( pFrmFmtTbl->GetPos( pLayout->GetFmt() ) ); + pFrmFmtTbl->DeleteAndDestroy( 1, pFrmFmtTbl->Count()-1 ); + pFrmFmtTbl->Insert( pLayout->GetFmt(), pFrmFmtTbl->Count() ); + } + else + pFrmFmtTbl->DeleteAndDestroy( 1, pFrmFmtTbl->Count()-1 ); + + xForbiddenCharsTable.unbind(); + + pFldTypes->DeleteAndDestroy( INIT_FLDTYPES, + pFldTypes->Count() - INIT_FLDTYPES ); + + delete pNumberFormatter, pNumberFormatter = 0; + + GetPageDescFromPool( RES_POOLPAGE_STANDARD ); + pFirstNd->ChgFmtColl( GetTxtCollFromPool( RES_POOLCOLL_STANDARD )); + nDummyPgDsc = aPageDescs.Count(); + aPageDescs.Insert( pDummyPgDsc, nDummyPgDsc ); + // set the layout back to the new standard pagedesc + pFirstNd->ResetAllAttr(); + // delete now the dummy pagedesc + DelPageDesc( nDummyPgDsc ); + + mbUndo = bOldUndo; +} + +void SwDoc::SetPreViewPrtData( const SwPagePreViewPrtData* pNew ) +{ + if( pNew ) + { + if( pPgPViewPrtData ) + *pPgPViewPrtData = *pNew; + else + pPgPViewPrtData = new SwPagePreViewPrtData( *pNew ); + } + else if( pPgPViewPrtData ) + DELETEZ( pPgPViewPrtData ); + SetModified(); +} +/* -----------------------------06.01.00 14:03-------------------------------- + + ---------------------------------------------------------------------------*/ +SwModify* SwDoc::GetUnoCallBack() const +{ + return pUnoCallBack; +} + +/*-----------------28.5.2001 10:06------------------ + * SwDoc: + * Reading and writing of the layout cache. + *--------------------------------------------------*/ + +void SwDoc::ReadLayoutCache( SvStream& rStream ) +{ + if( !pLayoutCache ) + pLayoutCache = new SwLayoutCache(); + if( !pLayoutCache->IsLocked() ) + { + pLayoutCache->GetLockCount() |= 0x8000; + pLayoutCache->Read( rStream ); + pLayoutCache->GetLockCount() &= 0x7fff; + } +} + +void SwDoc::WriteLayoutCache( SvStream& rStream ) +{ + pLayoutCache->Write( rStream, *this ); +} + +IGrammarContact* getGrammarContact( const SwTxtNode& rTxtNode ) +{ + const SwDoc* pDoc = rTxtNode.GetDoc(); + if( !pDoc || pDoc->IsInDtor() ) + return 0; + return pDoc->getGrammarContact(); +} + +// --> FME 2005-02-25 #i42634# Moved common code of SwReader::Read() and +// SwDocShell::UpdateLinks() to new SwDoc::UpdateLinks(): +void SwDoc::UpdateLinks( BOOL bUI ) +{ + SfxObjectCreateMode eMode; + USHORT nLinkMode = getLinkUpdateMode( true ); + USHORT nUpdateDocMode = GetDocShell()->GetUpdateDocMode(); + if( GetDocShell() && + (nLinkMode != NEVER || document::UpdateDocMode::FULL_UPDATE == nUpdateDocMode) && + GetLinkManager().GetLinks().Count() && + SFX_CREATE_MODE_INTERNAL != + ( eMode = GetDocShell()->GetCreateMode()) && + SFX_CREATE_MODE_ORGANIZER != eMode && + SFX_CREATE_MODE_PREVIEW != eMode && + !GetDocShell()->IsPreview() ) + { + ViewShell* pVSh = 0; + BOOL bAskUpdate = nLinkMode == MANUAL; + BOOL bUpdate = TRUE; + switch(nUpdateDocMode) + { + case document::UpdateDocMode::NO_UPDATE: bUpdate = FALSE;break; + case document::UpdateDocMode::QUIET_UPDATE:bAskUpdate = FALSE; break; + case document::UpdateDocMode::FULL_UPDATE: bAskUpdate = TRUE; break; + } + if( bUpdate && (bUI || !bAskUpdate) ) + { + SfxMedium* pMedium = GetDocShell()->GetMedium(); + SfxFrame* pFrm = pMedium ? pMedium->GetLoadTargetFrame() : 0; + Window* pDlgParent = pFrm ? &pFrm->GetWindow() : 0; + if( GetRootFrm() && !GetEditShell( &pVSh ) && !pVSh ) + { + ViewShell aVSh( *this, 0, 0 ); + + SET_CURR_SHELL( &aVSh ); + GetLinkManager().UpdateAllLinks( bAskUpdate , TRUE, FALSE, pDlgParent ); + } + else + GetLinkManager().UpdateAllLinks( bAskUpdate, TRUE, FALSE, pDlgParent ); + } + } + +} +// <-- +// --> OD 2006-04-19 #b6375613# +void SwDoc::SetApplyWorkaroundForB6375613( bool p_bApplyWorkaroundForB6375613 ) +{ + if ( mbApplyWorkaroundForB6375613 != p_bApplyWorkaroundForB6375613 ) + { + mbApplyWorkaroundForB6375613 = p_bApplyWorkaroundForB6375613; + + uno::Reference< document::XDocumentInfoSupplier > xDoc( + GetDocShell()->GetBaseModel(), + uno::UNO_QUERY); + if ( xDoc.is() ) + { + uno::Reference< beans::XPropertyContainer > xDocInfo( + xDoc->getDocumentInfo(), + uno::UNO_QUERY ); + if ( xDocInfo.is() ) + { + try + { + if ( mbApplyWorkaroundForB6375613 ) + { + xDocInfo->addProperty( + rtl::OUString::createFromAscii("WorkaroundForB6375613Applied"), + beans::PropertyAttribute::TRANSIENT | beans::PropertyAttribute::REMOVABLE, + uno::makeAny( false ) ); + } + else + { + xDocInfo->removeProperty( rtl::OUString::createFromAscii("WorkaroundForB6375613Applied") ); + } + } + catch( uno::Exception& ) + { + } + } + } + } +} +// <-- + +::sfx2::IXmlIdRegistry& +SwDoc::GetXmlIdRegistry() +{ + // UGLY: this relies on SetClipBoard being called before GetXmlIdRegistry! + if (!m_pXmlIdRegistry.get()) + { + m_pXmlIdRegistry.reset( ::sfx2::createXmlIdRegistry( IsClipBoard() ) ); + } + return *m_pXmlIdRegistry; +} + +::sw::MetaFieldManager & +SwDoc::GetMetaFieldManager() +{ + return *m_pMetaFieldManager; +} + +void SwDoc::InitTOXTypes() +{ + ShellResource* pShellRes = ViewShell::GetShellRes(); + SwTOXType * pNew = new SwTOXType(TOX_CONTENT, pShellRes->aTOXContentName ); + pTOXTypes->Insert( pNew, pTOXTypes->Count() ); + pNew = new SwTOXType(TOX_INDEX, pShellRes->aTOXIndexName ); + pTOXTypes->Insert( pNew, pTOXTypes->Count() ); + pNew = new SwTOXType(TOX_USER, pShellRes->aTOXUserName ); + pTOXTypes->Insert( pNew, pTOXTypes->Count() ); + pNew = new SwTOXType(TOX_ILLUSTRATIONS, pShellRes->aTOXIllustrationsName ); + pTOXTypes->Insert( pNew, pTOXTypes->Count() ); + pNew = new SwTOXType(TOX_OBJECTS, pShellRes->aTOXObjectsName ); + pTOXTypes->Insert( pNew, pTOXTypes->Count() ); + pNew = new SwTOXType(TOX_TABLES, pShellRes->aTOXTablesName ); + pTOXTypes->Insert( pNew, pTOXTypes->Count() ); + pNew = new SwTOXType(TOX_AUTHORITIES, pShellRes->aTOXAuthoritiesName ); + pTOXTypes->Insert( pNew, pTOXTypes->Count() ); +} + +/*-- 08.05.2009 10:07:57--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwDoc* SwDoc::CreateCopy() const +{ + SwDoc* pRet = new SwDoc; + //copy settings +/* + //aNodes( this ), + //aUndoNodes( this ), + mpAttrPool(new SwAttrPool(this)),*/ + USHORT __FAR_DATA aRangeOfDefaults[] = { + RES_FRMATR_BEGIN, RES_FRMATR_END-1, + RES_CHRATR_BEGIN, RES_CHRATR_END-1, + RES_PARATR_BEGIN, RES_PARATR_END-1, + // --> OD 2008-02-25 #refactorlists## + RES_PARATR_LIST_BEGIN, RES_PARATR_LIST_END-1, + // <-- + RES_UNKNOWNATR_BEGIN, RES_UNKNOWNATR_END-1, + 0 + }; + + SfxItemSet aNewDefaults( pRet->GetAttrPool(), aRangeOfDefaults ); + + USHORT nWhich; + USHORT nRange = 0; + while( aRangeOfDefaults[nRange] != 0) + { + for( nWhich = aRangeOfDefaults[nRange]; nWhich < aRangeOfDefaults[nRange + 1]; ++nWhich ) + { + const SfxPoolItem& rSourceAttr = mpAttrPool->GetDefaultItem( nWhich ); + if( rSourceAttr != pRet->mpAttrPool->GetDefaultItem( nWhich ) ) + aNewDefaults.Put( rSourceAttr ); + } + nRange += 2; + } + if( aNewDefaults.Count() ) + pRet->SetDefault( aNewDefaults ); + + /* + pDfltFrmFmt( new SwFrmFmt( GetAttrPool(), sFrmFmtStr, 0 ) ), + pEmptyPageFmt( new SwFrmFmt( GetAttrPool(), sEmptyPageStr, pDfltFrmFmt ) ), + pColumnContFmt( new SwFrmFmt( GetAttrPool(), sColumnCntStr, pDfltFrmFmt ) ), + pDfltCharFmt( new SwCharFmt( GetAttrPool(), sCharFmtStr, 0 ) ), + pDfltTxtFmtColl( new SwTxtFmtColl( GetAttrPool(), sTxtCollStr ) ), + pDfltGrfFmtColl( new SwGrfFmtColl( GetAttrPool(), sGrfCollStr ) ), + pFrmFmtTbl( new SwFrmFmts() ), + pCharFmtTbl( new SwCharFmts() ), + pSpzFrmFmtTbl( new SwSpzFrmFmts() ), + pSectionFmtTbl( new SwSectionFmts() ), + pTblFrmFmtTbl( new SwFrmFmts() ), + pTxtFmtCollTbl( new SwTxtFmtColls() ), + pGrfFmtCollTbl( new SwGrfFmtColls() ), + pBookmarkTbl( new SwBookmarks( 0, 16 ) ), + pTOXTypes( new SwTOXTypes() ), + pDefTOXBases( new SwDefTOXBase_Impl() ), + pLayout( 0 ), // Rootframe des spezifischen Layouts. + pDrawModel( 0 ), + pUndos( new SwUndos( 0, 20 ) ), + pUpdtFlds( new SwDocUpdtFld() ), + pFldTypes( new SwFldTypes() ), + pVirDev( 0 ), + pPrt( 0 ), + pPrtData( 0 ), + pGlossaryDoc( 0 ), + pOutlineRule( 0 ), + pFtnInfo( new SwFtnInfo ), + pEndNoteInfo( new SwEndNoteInfo ), + pLineNumberInfo( new SwLineNumberInfo ), + pFtnIdxs( new SwFtnIdxs ), + pDocStat( new SwDocStat ), + pDocShell( 0 ), + pDocShRef( 0 ), + pLinkMgr( new sfx2::LinkManager( 0 ) ), + pACEWord( 0 ), + pURLStateChgd( 0 ), + pNumberFormatter( 0 ), + pNumRuleTbl( new SwNumRuleTbl ), + // --> OD 2008-03-26 #refactorlists# + maLists(), + maListStyleLists(), + // <-- + pRedlineTbl( new SwRedlineTbl ), + pAutoFmtRedlnComment( 0 ), + pUnoCrsrTbl( new SwUnoCrsrTbl( 0, 16 ) ), + pPgPViewPrtData( 0 ), + pExtInputRing( 0 ), + pLayouter( 0 ), + // --> OD 2008-03-07 #refactorlists# + pStyleAccess( 0 ), + // <-- + pLayoutCache( 0 ), + pUnoCallBack(new SwUnoCallBack(0)), + mpGrammarContact( 0 ), + aChartDataProviderImplRef(), + pChartControllerHelper( 0 ), + // --> OD 2007-10-31 #i83479# + mpListItemsList( new tImplSortedNodeNumList() ), + // <-- + nUndoPos( 0 ), + nUndoSavePos( 0 ), + nUndoCnt( 0 ), + nUndoSttEnd( 0 ), + nAutoFmtRedlnCommentNo( 0 ), + nLinkUpdMode( GLOBALSETTING ), + eFldUpdMode( AUTOUPD_GLOBALSETTING ), + eRedlineMode((RedlineMode_t)(nsRedlineMode_t::REDLINE_SHOW_INSERT | nsRedlineMode_t::REDLINE_SHOW_DELETE)), + eChrCmprType( CHARCOMPRESS_NONE ), + mReferenceCount(0), + mIdleBlockCount(0), + nLockExpFld( 0 ), + mbReadlineChecked(false), + mbWinEncryption(sal_False), + // --> OD 2005-02-11 #i38810# + mbLinksUpdated( sal_False ), + mbClipBoard( false ), + mbColumnSelection( false ), + // i#78591# + mbProtectForm(false),*/ + pRet->n32DummyCompatabilityOptions1 = n32DummyCompatabilityOptions1; + pRet->n32DummyCompatabilityOptions2 = n32DummyCompatabilityOptions2; + /* + mbStartIdleTimer(sal_False) +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLog, "SW", "JP93722", "SwDoc::SwDoc" ); + + mbGlossDoc = + mbModified = + mbDtor = + mbUndo = + mbPageNums = + mbLoaded = + mbUpdateExpFld = + mbNewDoc = + mbCopyIsMove = + mbNoDrawUndoObj = + mbBrowseMode = + mbInReading = + mbInXMLImport = + mbUpdateTOX = + mbInLoadAsynchron = + mbHTMLMode = + mbInCallModified = + mbIsGlobalDoc = + mbGlblDocSaveLinks = + mbIsLabelDoc = + mbIsAutoFmtRedline = + mbOLEPrtNotifyPending = + mbAllOLENotify = + mbIsRedlineMove = + mbInsOnlyTxtGlssry = + mbContains_MSVBasic = + mbKernAsianPunctuation = +#ifndef PRODUCT + mbXMLExport = +#endif + // --> OD 2006-03-21 #b6375613# + mbApplyWorkaroundForB6375613 = + // <-- + false; + + mbGroupUndo = + mbNewFldLst = + mbVisibleLinks = + mbPurgeOLE = + true; + + // + // COMPATIBILITY FLAGS START + // + + // Note: Any non-hidden compatibility flag should obtain its default + // by asking SvtCompatibilityOptions, see below. + // + const SvtCompatibilityOptions aOptions; + */ + pRet->mbParaSpaceMax = mbParaSpaceMax ; + pRet->mbParaSpaceMaxAtPages = mbParaSpaceMaxAtPages ; + pRet->mbTabCompat = mbTabCompat ; + pRet->mbUseVirtualDevice = mbUseVirtualDevice ; + pRet->mbAddExternalLeading = mbAddExternalLeading ; + pRet->mbOldLineSpacing = mbOldLineSpacing ; + pRet->mbAddParaSpacingToTableCells = mbAddParaSpacingToTableCells ; + pRet->mbUseFormerObjectPos = mbUseFormerObjectPos ; + pRet->mbUseFormerTextWrapping = mbUseFormerTextWrapping ; + pRet->mbConsiderWrapOnObjPos = mbConsiderWrapOnObjPos ; + pRet->mbAddFlyOffsets = mbAddFlyOffsets ; + pRet->mbOldNumbering = mbOldNumbering ; + pRet->mbUseHiResolutionVirtualDevice = mbUseHiResolutionVirtualDevice ; + pRet->mbIgnoreFirstLineIndentInNumbering = mbIgnoreFirstLineIndentInNumbering ; + pRet->mbDoNotJustifyLinesWithManualBreak = mbDoNotJustifyLinesWithManualBreak ; + pRet->mbDoNotResetParaAttrsForNumFont = mbDoNotResetParaAttrsForNumFont ; + pRet->mbOutlineLevelYieldsOutlineRule = mbOutlineLevelYieldsOutlineRule ; + pRet->mbTableRowKeep = mbTableRowKeep ; + pRet->mbIgnoreTabsAndBlanksForLineCalculation = mbIgnoreTabsAndBlanksForLineCalculation ; + pRet->mbDoNotCaptureDrawObjsOnPage = mbDoNotCaptureDrawObjsOnPage ; + pRet->mbClipAsCharacterAnchoredWriterFlyFrames= mbClipAsCharacterAnchoredWriterFlyFrames; + pRet->mbUnixForceZeroExtLeading = mbUnixForceZeroExtLeading ; + pRet->mbOldPrinterMetrics = mbOldPrinterMetrics ; + pRet->mbTabRelativeToIndent = mbTabRelativeToIndent ; + pRet->mbTabAtLeftIndentForParagraphsInList = mbTabAtLeftIndentForParagraphsInList ; + + // + // COMPATIBILITY FLAGS END + // + /* + pMacroTable = new SvxMacroTableDtor; + + mpGrammarContact = ::createGrammarContact(); + + // Formate + pFrmFmtTbl->Insert(pDfltFrmFmt, 0 ); + pCharFmtTbl->Insert(pDfltCharFmt, 0 ); + + // FmtColls + // TXT + pTxtFmtCollTbl->Insert(pDfltTxtFmtColl, 0 ); + // GRF + pGrfFmtCollTbl->Insert(pDfltGrfFmtColl, 0 ); + + // PageDesc, EmptyPageFmt und ColumnFmt anlegen + if ( !aPageDescs.Count() ) + GetPageDescFromPool( RES_POOLPAGE_STANDARD ); + + //Leere Seite Einstellen. + pEmptyPageFmt->SetFmtAttr( SwFmtFrmSize( ATT_FIX_SIZE ) ); + //BodyFmt fuer Spalten Einstellen. + pColumnContFmt->SetFmtAttr( SwFmtFillOrder( ATT_LEFT_TO_RIGHT ) ); + + _InitFieldTypes(); + + // lege (fuer die Filter) eine Default-OutlineNumRule an + // --> OD 2008-02-11 #newlistlevelattrs# + pOutlineRule = new SwNumRule( String::CreateFromAscii( SwNumRule::GetOutlineRuleName() ), + // --> OD 2008-06-06 #i89178# + numfunc::GetDefaultPositionAndSpaceMode(), + // <-- + OUTLINE_RULE ); + // <-- + // #115901# + AddNumRule(pOutlineRule); + // --> OD 2005-10-21 - counting of phantoms depends on <IsOldNumbering()> + pOutlineRule->SetCountPhantoms( !get(IDocumentSettingAccess::OLD_NUMBERING) ); + // <-- + + new SwTxtNode( SwNodeIndex( aUndoNodes.GetEndOfContent() ), pDfltTxtFmtColl ); + new SwTxtNode( SwNodeIndex( aNodes.GetEndOfContent() ), + GetTxtCollFromPool( RES_POOLCOLL_STANDARD )); + + // den eigenen IdleTimer setzen + aIdleTimer.SetTimeout( 600 ); + aIdleTimer.SetTimeoutHdl( LINK(this, SwDoc, DoIdleJobs) ); + + aOLEModifiedTimer.SetTimeout( 1000 ); + aOLEModifiedTimer.SetTimeoutHdl( LINK( this, SwDoc, DoUpdateModifiedOLE )); + + // DBMgr anlegen + pNewDBMgr = new SwNewDBMgr; + + // create TOXTypes + ShellResource* pShellRes = ViewShell::GetShellRes(); + + SwTOXType * pNew = new SwTOXType(TOX_CONTENT, pShellRes->aTOXContentName ); + pTOXTypes->Insert( pNew, pTOXTypes->Count() ); + pNew = new SwTOXType(TOX_INDEX, pShellRes->aTOXIndexName ); + pTOXTypes->Insert( pNew, pTOXTypes->Count() ); + pNew = new SwTOXType(TOX_USER, pShellRes->aTOXUserName ); + pTOXTypes->Insert( pNew, pTOXTypes->Count() ); + pNew = new SwTOXType(TOX_ILLUSTRATIONS, pShellRes->aTOXIllustrationsName ); + pTOXTypes->Insert( pNew, pTOXTypes->Count() ); + pNew = new SwTOXType(TOX_OBJECTS, pShellRes->aTOXObjectsName ); + pTOXTypes->Insert( pNew, pTOXTypes->Count() ); + pNew = new SwTOXType(TOX_TABLES, pShellRes->aTOXTablesName ); + pTOXTypes->Insert( pNew, pTOXTypes->Count() ); + pNew = new SwTOXType(TOX_AUTHORITIES, pShellRes->aTOXAuthoritiesName ); + pTOXTypes->Insert( pNew, pTOXTypes->Count() ); + + { + SfxItemSet aIgnorableParagraphItems( GetAttrPool(), + RES_PARATR_LIST_BEGIN, RES_PARATR_LIST_END-1, + 0 ); + pStyleAccess = createStyleManager( &aIgnorableParagraphItems ); + } + + ResetModified(); + +*/ + pRet->ReplaceStyles( *(SwDoc*)this ); + //copy content + pRet->Paste( *this ); + return pRet; +} +/*-- 08.05.2009 10:52:40--------------------------------------------------- + copy document content - code from SwFEShell::Paste( SwDoc* , BOOL ) + -----------------------------------------------------------------------*/ +void SwDoc::Paste( const SwDoc& rSource ) +{ +// this has to be empty const USHORT nStartPageNumber = GetPhyPageNum(); + // until the end of the NodesArray + SwNodeIndex aSourceIdx( rSource.GetNodes().GetEndOfExtras(), 2 ); + SwPaM aCpyPam( aSourceIdx ); //DocStart + SwNodeIndex aTargetIdx( GetNodes().GetEndOfExtras(), 2 ); + SwPaM aInsertPam( aTargetIdx ); //replaces PCURCRSR from SwFEShell::Paste() + + + aCpyPam.SetMark(); + aCpyPam.Move( fnMoveForward, fnGoDoc ); + + this->StartUndo( UNDO_INSGLOSSARY, NULL ); + this->LockExpFlds(); + + { + SwPosition& rInsPos = *aInsertPam.GetPoint(); + //find out if the clipboard document starts with a table + bool bStartWithTable = 0 != aCpyPam.Start()->nNode.GetNode().FindTableNode(); + SwPosition aInsertPosition( rInsPos ); + + { + SwNodeIndex aIndexBefore(rInsPos.nNode); + + aIndexBefore--; + + rSource.CopyRange( aCpyPam, rInsPos, true ); + + { + aIndexBefore++; + SwPaM aPaM(SwPosition(aIndexBefore), + SwPosition(rInsPos.nNode)); + + MakeUniqueNumRules(aPaM); + } + } + + //TODO: Is this necessary here? SaveTblBoxCntnt( &rInsPos ); + if(/*bIncludingPageFrames && */bStartWithTable) + { + //remove the paragraph in front of the table + SwPaM aPara(aInsertPosition); + this->DelFullPara(aPara); + } + //additionally copy page bound frames + if( /*bIncludingPageFrames && */rSource.GetSpzFrmFmts()->Count() ) + { + for ( USHORT i = 0; i < rSource.GetSpzFrmFmts()->Count(); ++i ) + { + BOOL bInsWithFmt = TRUE; + const SwFrmFmt& rCpyFmt = *(*rSource.GetSpzFrmFmts())[i]; + if( bInsWithFmt ) + { + SwFmtAnchor aAnchor( rCpyFmt.GetAnchor() ); + if (FLY_AT_PAGE == aAnchor.GetAnchorId()) + { + aAnchor.SetPageNum( aAnchor.GetPageNum() /*+ nStartPageNumber - */); + } + else + continue; + this->CopyLayoutFmt( rCpyFmt, aAnchor, true, true ); + } + } + } + } + + this->EndUndo( UNDO_INSGLOSSARY, NULL ); + + UnlockExpFlds(); + UpdateFlds(NULL, false); +} |