xref: /aoo41x/main/sw/source/core/doc/docnew.cxx (revision f8c074b1)
1efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3efeef26fSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4efeef26fSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5efeef26fSAndrew Rist  * distributed with this work for additional information
6efeef26fSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7efeef26fSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8efeef26fSAndrew Rist  * "License"); you may not use this file except in compliance
9efeef26fSAndrew Rist  * with the License.  You may obtain a copy of the License at
10efeef26fSAndrew Rist  *
11efeef26fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12efeef26fSAndrew Rist  *
13efeef26fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14efeef26fSAndrew Rist  * software distributed under the License is distributed on an
15efeef26fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16efeef26fSAndrew Rist  * KIND, either express or implied.  See the License for the
17efeef26fSAndrew Rist  * specific language governing permissions and limitations
18efeef26fSAndrew Rist  * under the License.
19efeef26fSAndrew Rist  *
20efeef26fSAndrew Rist  *************************************************************/
21efeef26fSAndrew Rist 
22efeef26fSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir #define ROLBCK_HISTORY_ONLY 	// Der Kampf gegen die CLOOK's
27cdf0e10cSrcweir #include <doc.hxx>
28cdf0e10cSrcweir #include <dcontact.hxx>
29cdf0e10cSrcweir #include <com/sun/star/document/PrinterIndependentLayout.hpp>
30cdf0e10cSrcweir #include <com/sun/star/document/UpdateDocMode.hpp>
31cdf0e10cSrcweir #include <com/sun/star/text/XTextDocument.hpp>
32cdf0e10cSrcweir #include <com/sun/star/linguistic2/XProofreadingIterator.hpp>
33cdf0e10cSrcweir #include <com/sun/star/text/XFlatParagraphIteratorProvider.hpp>
34cdf0e10cSrcweir 
35cdf0e10cSrcweir #include <unotools/processfactory.hxx>
36cdf0e10cSrcweir #include <vcl/svapp.hxx>
37cdf0e10cSrcweir #include <vcl/virdev.hxx>
38cdf0e10cSrcweir #include <rtl/logfile.hxx>
39cdf0e10cSrcweir #include <sfx2/printer.hxx>
40cdf0e10cSrcweir #include <sfx2/docfile.hxx>
41cdf0e10cSrcweir #include <sfx2/frame.hxx>
42cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
43cdf0e10cSrcweir 
44cdf0e10cSrcweir #include <svl/macitem.hxx>
45cdf0e10cSrcweir #include <svx/svxids.hrc>
46cdf0e10cSrcweir #include <svx/svdogrp.hxx>
47cdf0e10cSrcweir #include <sfx2/linkmgr.hxx>
48cdf0e10cSrcweir #include <editeng/forbiddencharacterstable.hxx>
49cdf0e10cSrcweir #include <svl/zforlist.hxx>
50cdf0e10cSrcweir #include <unotools/compatibility.hxx>
51cdf0e10cSrcweir #include <unotools/lingucfg.hxx>
52cdf0e10cSrcweir #include <svx/svdpage.hxx>
53cdf0e10cSrcweir #include <paratr.hxx>
54cdf0e10cSrcweir #include <fchrfmt.hxx>
55cdf0e10cSrcweir #include <fmtcntnt.hxx>
56cdf0e10cSrcweir #include <fmtanchr.hxx>
57cdf0e10cSrcweir #include <fmtfsize.hxx>
58cdf0e10cSrcweir #include <fmtfordr.hxx>
59cdf0e10cSrcweir #include <fmtpdsc.hxx>
60cdf0e10cSrcweir #include <pvprtdat.hxx>
61cdf0e10cSrcweir #include <rootfrm.hxx>  //Damit der RootDtor gerufen wird.
62cdf0e10cSrcweir #include <layouter.hxx>
63cdf0e10cSrcweir #include <pagedesc.hxx> //Damit die PageDescs zerstoert werden koennen.
64cdf0e10cSrcweir #include <ndtxt.hxx>
65cdf0e10cSrcweir #include <printdata.hxx>
66cdf0e10cSrcweir #include <docfld.hxx>
67cdf0e10cSrcweir #include <ftninfo.hxx>
68cdf0e10cSrcweir #include <ftnidx.hxx>
69cdf0e10cSrcweir #include <docstat.hxx>
70cdf0e10cSrcweir #include <charfmt.hxx>
71cdf0e10cSrcweir #include <frmfmt.hxx>
72cdf0e10cSrcweir #include <rolbck.hxx>           // Undo-Attr, SwHistory
73cdf0e10cSrcweir #include <poolfmt.hxx>          // fuer die Pool-Vorlage
74cdf0e10cSrcweir #include <dbmgr.hxx>
75cdf0e10cSrcweir #include <docsh.hxx>
76cdf0e10cSrcweir #include <acorrect.hxx>			// fuer die autom. Aufnahme von Ausnahmen
77cdf0e10cSrcweir #include <visiturl.hxx>			// fuer die URL-Change Benachrichtigung
78cdf0e10cSrcweir #include <docary.hxx>
79cdf0e10cSrcweir #include <lineinfo.hxx>
80cdf0e10cSrcweir #include <drawdoc.hxx>
81cdf0e10cSrcweir #include <linkenum.hxx>
82cdf0e10cSrcweir #include <fldupde.hxx>
83cdf0e10cSrcweir #include <extinput.hxx>
84cdf0e10cSrcweir #include <viewsh.hxx>
85cdf0e10cSrcweir #include <doctxm.hxx>
86cdf0e10cSrcweir #include <shellres.hxx>
87cdf0e10cSrcweir #include <breakit.hxx>
88cdf0e10cSrcweir #include <laycache.hxx>
89cdf0e10cSrcweir #include <mvsave.hxx>
90cdf0e10cSrcweir #include <istyleaccess.hxx>
91cdf0e10cSrcweir #include <swstylemanager.hxx>
92cdf0e10cSrcweir #include <IGrammarContact.hxx>
93cdf0e10cSrcweir #include <tblsel.hxx>
94cdf0e10cSrcweir #include <MarkManager.hxx>
95cdf0e10cSrcweir #include <UndoManager.hxx>
96cdf0e10cSrcweir #include <unochart.hxx>
97cdf0e10cSrcweir 
98cdf0e10cSrcweir #include <cmdid.h>              // fuer den dflt - Printer in SetJob
99cdf0e10cSrcweir 
100cdf0e10cSrcweir 
101cdf0e10cSrcweir // --> OD 2006-04-19 #b6375613#
102cdf0e10cSrcweir #include <com/sun/star/document/XDocumentInfoSupplier.hpp>
103cdf0e10cSrcweir #include <com/sun/star/beans/XPropertyContainer.hpp>
104cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp>
105cdf0e10cSrcweir 
106cdf0e10cSrcweir // <--
107cdf0e10cSrcweir 
108cdf0e10cSrcweir // --> OD 2007-03-16 #i73788#
109cdf0e10cSrcweir #include <pausethreadstarting.hxx>
110cdf0e10cSrcweir // <--
111cdf0e10cSrcweir #include <numrule.hxx>
112cdf0e10cSrcweir // --> OD 2008-03-13 #refactorlists#
113cdf0e10cSrcweir #include <list.hxx>
114cdf0e10cSrcweir #include <listfunc.hxx>
115cdf0e10cSrcweir // <--
116cdf0e10cSrcweir 
117cdf0e10cSrcweir #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
118cdf0e10cSrcweir 
119cdf0e10cSrcweir #include <sfx2/Metadatable.hxx>
120cdf0e10cSrcweir #include <fmtmeta.hxx> // MetaFieldManager
12165fffafdSAndrea Pescetti #include <unotools/securityoptions.hxx>
122cdf0e10cSrcweir 
123cdf0e10cSrcweir 
124cdf0e10cSrcweir using namespace ::com::sun::star;
125cdf0e10cSrcweir using namespace ::com::sun::star::document;
126cdf0e10cSrcweir 
127cdf0e10cSrcweir const sal_Char __FAR_DATA sFrmFmtStr[] = "Frameformat";
128cdf0e10cSrcweir const sal_Char __FAR_DATA sEmptyPageStr[] = "Empty Page";
129cdf0e10cSrcweir const sal_Char __FAR_DATA sColumnCntStr[] = "Columncontainer";
130cdf0e10cSrcweir const sal_Char __FAR_DATA sCharFmtStr[] = "Zeichenformat";
131cdf0e10cSrcweir const sal_Char __FAR_DATA sTxtCollStr[] = "Textformatvorlage";
132cdf0e10cSrcweir const sal_Char __FAR_DATA sGrfCollStr[] = "Graphikformatvorlage";
133cdf0e10cSrcweir 
SV_IMPL_PTRARR(SwNumRuleTbl,SwNumRulePtr)134cdf0e10cSrcweir SV_IMPL_PTRARR( SwNumRuleTbl, SwNumRulePtr)
135cdf0e10cSrcweir SV_IMPL_PTRARR( SwTxtFmtColls, SwTxtFmtCollPtr)
136cdf0e10cSrcweir SV_IMPL_PTRARR( SwGrfFmtColls, SwGrfFmtCollPtr)
137cdf0e10cSrcweir 
138cdf0e10cSrcweir /*
139cdf0e10cSrcweir  * global functions...
140cdf0e10cSrcweir  */
141cdf0e10cSrcweir 
142cdf0e10cSrcweir  uno::Reference< linguistic2::XProofreadingIterator > SwDoc::GetGCIterator() const
143cdf0e10cSrcweir {
144cdf0e10cSrcweir     if (!m_xGCIterator.is() && SvtLinguConfig().HasGrammarChecker())
145cdf0e10cSrcweir     {
146cdf0e10cSrcweir         uno::Reference< lang::XMultiServiceFactory >  xMgr( utl::getProcessServiceFactory() );
147cdf0e10cSrcweir         if (xMgr.is())
148cdf0e10cSrcweir         {
149cdf0e10cSrcweir             try
150cdf0e10cSrcweir             {
151cdf0e10cSrcweir                 rtl::OUString aServiceName( rtl::OUString::createFromAscii("com.sun.star.linguistic2.ProofreadingIterator") );
152cdf0e10cSrcweir                 m_xGCIterator = uno::Reference< linguistic2::XProofreadingIterator >
153cdf0e10cSrcweir                     ( xMgr->createInstance( aServiceName ), uno::UNO_QUERY_THROW );
154cdf0e10cSrcweir             }
155cdf0e10cSrcweir             catch (uno::Exception &)
156cdf0e10cSrcweir             {
157cdf0e10cSrcweir                 DBG_ERROR( "No GCIterator" );
158cdf0e10cSrcweir             }
159cdf0e10cSrcweir         }
160cdf0e10cSrcweir     }
161cdf0e10cSrcweir 
162cdf0e10cSrcweir     return m_xGCIterator;
163cdf0e10cSrcweir }
164cdf0e10cSrcweir 
StartGrammarChecking(SwDoc & rDoc)165cdf0e10cSrcweir void StartGrammarChecking( SwDoc &rDoc )
166cdf0e10cSrcweir {
167cdf0e10cSrcweir     // check for a visible view
168cdf0e10cSrcweir     bool bVisible = false;
169cdf0e10cSrcweir     const SwDocShell *pDocShell = rDoc.GetDocShell();
170cdf0e10cSrcweir     SfxViewFrame    *pFrame = SfxViewFrame::GetFirst( pDocShell, sal_False );
171cdf0e10cSrcweir     while (pFrame && !bVisible)
172cdf0e10cSrcweir     {
173cdf0e10cSrcweir         if (pFrame->IsVisible())
174cdf0e10cSrcweir             bVisible = true;
175cdf0e10cSrcweir         pFrame = SfxViewFrame::GetNext( *pFrame, pDocShell, sal_False );
176cdf0e10cSrcweir     }
177cdf0e10cSrcweir 
178cdf0e10cSrcweir     //!! only documents with visible views need to be checked
179cdf0e10cSrcweir     //!! (E.g. don't check temporary documents created for printing, see printing of notes and selections.
180cdf0e10cSrcweir     //!! Those get created on the fly and get hard deleted a bit later as well, and no one should have
181cdf0e10cSrcweir     //!! a uno reference to them)
182cdf0e10cSrcweir     if (bVisible)
183cdf0e10cSrcweir     {
184cdf0e10cSrcweir         uno::Reference< linguistic2::XProofreadingIterator > xGCIterator( rDoc.GetGCIterator() );
185cdf0e10cSrcweir         if ( xGCIterator.is() )
186cdf0e10cSrcweir         {
187cdf0e10cSrcweir             uno::Reference< lang::XComponent >  xDoc( rDoc.GetDocShell()->GetBaseModel(), uno::UNO_QUERY );
188cdf0e10cSrcweir             uno::Reference< text::XFlatParagraphIteratorProvider >  xFPIP( xDoc, uno::UNO_QUERY );
189cdf0e10cSrcweir 
190cdf0e10cSrcweir             // start automatic background checking if not active already
191cdf0e10cSrcweir             if ( xFPIP.is() && !xGCIterator->isProofreading( xDoc ) )
192cdf0e10cSrcweir                 xGCIterator->startProofreading( xDoc, xFPIP );
193cdf0e10cSrcweir         }
194cdf0e10cSrcweir     }
195cdf0e10cSrcweir }
196cdf0e10cSrcweir 
197cdf0e10cSrcweir /*
198cdf0e10cSrcweir  * interne Funktionen
199cdf0e10cSrcweir  */
200cdf0e10cSrcweir 
201cdf0e10cSrcweir 
202cdf0e10cSrcweir 
lcl_DelFmtIndizes(const SwFrmFmtPtr & rpFmt,void *)203cdf0e10cSrcweir sal_Bool lcl_DelFmtIndizes( const SwFrmFmtPtr& rpFmt, void* )
204cdf0e10cSrcweir {
205cdf0e10cSrcweir 	SwFmtCntnt &rFmtCntnt = (SwFmtCntnt&)rpFmt->GetCntnt();
206cdf0e10cSrcweir 	if ( rFmtCntnt.GetCntntIdx() )
207cdf0e10cSrcweir 		rFmtCntnt.SetNewCntntIdx( 0 );
208cdf0e10cSrcweir 	SwFmtAnchor &rFmtAnchor = (SwFmtAnchor&)rpFmt->GetAnchor();
209cdf0e10cSrcweir 	if ( rFmtAnchor.GetCntntAnchor() )
210cdf0e10cSrcweir 		rFmtAnchor.SetAnchor( 0 );
211cdf0e10cSrcweir 	return sal_True;
212cdf0e10cSrcweir }
213cdf0e10cSrcweir 
214cdf0e10cSrcweir /*
215cdf0e10cSrcweir  * exportierte Methoden
216cdf0e10cSrcweir  */
217cdf0e10cSrcweir 
SwDoc()218cdf0e10cSrcweir SwDoc::SwDoc()
219cdf0e10cSrcweir     : m_pNodes( new SwNodes(this) )
220cdf0e10cSrcweir     ,
221cdf0e10cSrcweir 	mpAttrPool(new SwAttrPool(this)),
222cdf0e10cSrcweir     pMarkManager(new ::sw::mark::MarkManager(*this)),
223cdf0e10cSrcweir     m_pMetaFieldManager(new ::sw::MetaFieldManager()),
224cdf0e10cSrcweir     m_pUndoManager(new ::sw::UndoManager(
225cdf0e10cSrcweir             ::std::auto_ptr<SwNodes>(new SwNodes(this)), *this, *this, *this)),
226cdf0e10cSrcweir 	pDfltFrmFmt( new SwFrmFmt( GetAttrPool(), sFrmFmtStr, 0 ) ),
227cdf0e10cSrcweir 	pEmptyPageFmt( new SwFrmFmt( GetAttrPool(), sEmptyPageStr, pDfltFrmFmt ) ),
228cdf0e10cSrcweir 	pColumnContFmt( new SwFrmFmt( GetAttrPool(), sColumnCntStr, pDfltFrmFmt ) ),
229cdf0e10cSrcweir 	pDfltCharFmt( new SwCharFmt( GetAttrPool(), sCharFmtStr, 0 ) ),
230cdf0e10cSrcweir 	pDfltTxtFmtColl( new SwTxtFmtColl( GetAttrPool(), sTxtCollStr ) ),
231cdf0e10cSrcweir 	pDfltGrfFmtColl( new SwGrfFmtColl( GetAttrPool(), sGrfCollStr ) ),
232cdf0e10cSrcweir 	pFrmFmtTbl( new SwFrmFmts() ),
233cdf0e10cSrcweir 	pCharFmtTbl( new SwCharFmts() ),
234cdf0e10cSrcweir 	pSpzFrmFmtTbl( new SwSpzFrmFmts() ),
235cdf0e10cSrcweir 	pSectionFmtTbl( new SwSectionFmts() ),
236cdf0e10cSrcweir 	pTblFrmFmtTbl( new SwFrmFmts() ),
237cdf0e10cSrcweir 	pTxtFmtCollTbl( new SwTxtFmtColls() ),
238cdf0e10cSrcweir 	pGrfFmtCollTbl( new SwGrfFmtColls() ),
239cdf0e10cSrcweir 	pTOXTypes( new SwTOXTypes() ),
240cdf0e10cSrcweir 	pDefTOXBases( new SwDefTOXBase_Impl() ),
241cdf0e10cSrcweir 	pCurrentView( 0 ),	//swmod 071225
242cdf0e10cSrcweir 	pDrawModel( 0 ),
243cdf0e10cSrcweir 	pUpdtFlds( new SwDocUpdtFld() ),
244cdf0e10cSrcweir 	pFldTypes( new SwFldTypes() ),
245cdf0e10cSrcweir     pVirDev( 0 ),
246cdf0e10cSrcweir 	pPrt( 0 ),
247cdf0e10cSrcweir     pPrtData( 0 ),
248cdf0e10cSrcweir 	pGlossaryDoc( 0 ),
249cdf0e10cSrcweir 	pOutlineRule( 0 ),
250cdf0e10cSrcweir 	pFtnInfo( new SwFtnInfo ),
251cdf0e10cSrcweir 	pEndNoteInfo( new SwEndNoteInfo ),
252cdf0e10cSrcweir 	pLineNumberInfo( new SwLineNumberInfo ),
253cdf0e10cSrcweir 	pFtnIdxs( new SwFtnIdxs ),
254cdf0e10cSrcweir 	pDocStat( new SwDocStat ),
255cdf0e10cSrcweir 	pDocShell( 0 ),
256cdf0e10cSrcweir 	pLinkMgr( new sfx2::LinkManager( 0 ) ),
257cdf0e10cSrcweir 	pACEWord( 0 ),
258cdf0e10cSrcweir 	pURLStateChgd( 0 ),
259cdf0e10cSrcweir 	pNumberFormatter( 0 ),
260cdf0e10cSrcweir 	pNumRuleTbl( new SwNumRuleTbl ),
261cdf0e10cSrcweir     // --> OD 2008-03-26 #refactorlists#
262cdf0e10cSrcweir     maLists(),
263cdf0e10cSrcweir     maListStyleLists(),
264cdf0e10cSrcweir     // <--
265cdf0e10cSrcweir     pRedlineTbl( new SwRedlineTbl ),
266cdf0e10cSrcweir 	pAutoFmtRedlnComment( 0 ),
267cdf0e10cSrcweir 	pUnoCrsrTbl( new SwUnoCrsrTbl( 0, 16 ) ),
268cdf0e10cSrcweir 	pPgPViewPrtData( 0 ),
269cdf0e10cSrcweir 	pExtInputRing( 0 ),
270cdf0e10cSrcweir 	pLayouter( 0 ),
271cdf0e10cSrcweir     // --> OD 2008-03-07 #refactorlists#
272cdf0e10cSrcweir     pStyleAccess( 0 ),
273cdf0e10cSrcweir     // <--
274cdf0e10cSrcweir     pLayoutCache( 0 ),
275cdf0e10cSrcweir     pUnoCallBack(new SwModify(0)),
276cdf0e10cSrcweir     mpGrammarContact( 0 ),
277cdf0e10cSrcweir     aChartDataProviderImplRef(),
278cdf0e10cSrcweir     pChartControllerHelper( 0 ),
279cdf0e10cSrcweir     // --> OD 2007-10-31 #i83479#
280cdf0e10cSrcweir     mpListItemsList( new tImplSortedNodeNumList() ),
281cdf0e10cSrcweir     // <--
282cdf0e10cSrcweir     m_pXmlIdRegistry(),
283cdf0e10cSrcweir 	nAutoFmtRedlnCommentNo( 0 ),
284cdf0e10cSrcweir 	nLinkUpdMode( GLOBALSETTING ),
285cdf0e10cSrcweir  	eFldUpdMode( AUTOUPD_GLOBALSETTING ),
286cdf0e10cSrcweir 	eRedlineMode((RedlineMode_t)(nsRedlineMode_t::REDLINE_SHOW_INSERT | nsRedlineMode_t::REDLINE_SHOW_DELETE)),
287cdf0e10cSrcweir 	eChrCmprType( CHARCOMPRESS_NONE ),
288cdf0e10cSrcweir     mReferenceCount(0),
289cdf0e10cSrcweir     mIdleBlockCount(0),
290cdf0e10cSrcweir     nLockExpFld( 0 ),
291cdf0e10cSrcweir 	mbReadlineChecked(false),
292cdf0e10cSrcweir     // --> OD 2005-02-11 #i38810#
293cdf0e10cSrcweir     mbLinksUpdated( sal_False ),
294cdf0e10cSrcweir     mbClipBoard( false ),
295cdf0e10cSrcweir     mbColumnSelection( false ),
2966fddd742SOliver-Rainer Wittmann     mbContainsAtPageObjWithContentAnchor( false ),
297cdf0e10cSrcweir     // i#78591#
298cdf0e10cSrcweir 	mbProtectForm(false),
299cdf0e10cSrcweir     mbLastBrowseMode( false ),
300cdf0e10cSrcweir     n32DummyCompatabilityOptions1(0),
301cdf0e10cSrcweir     n32DummyCompatabilityOptions2(0),
302cdf0e10cSrcweir     mbStartIdleTimer(sal_False),
303ecbf1e4aSPavel Janík     meDocType( DOCTYPE_NATIVE )
304cdf0e10cSrcweir {
305cdf0e10cSrcweir 	RTL_LOGFILE_CONTEXT_AUTHOR( aLog, "SW", "JP93722",  "SwDoc::SwDoc" );
306cdf0e10cSrcweir 
307cdf0e10cSrcweir 	mbGlossDoc =
308cdf0e10cSrcweir 	mbModified =
309cdf0e10cSrcweir 	mbDtor =
310cdf0e10cSrcweir 	mbPageNums =
311cdf0e10cSrcweir 	mbLoaded =
312cdf0e10cSrcweir 	mbUpdateExpFld =
313cdf0e10cSrcweir 	mbNewDoc =
314cdf0e10cSrcweir 	mbCopyIsMove =
315cdf0e10cSrcweir 	mbInReading =
316cdf0e10cSrcweir     mbInXMLImport =
317cdf0e10cSrcweir 	mbUpdateTOX =
318cdf0e10cSrcweir 	mbInLoadAsynchron =
319cdf0e10cSrcweir 	mbHTMLMode =
320cdf0e10cSrcweir 	mbInCallModified =
321cdf0e10cSrcweir 	mbIsGlobalDoc =
322cdf0e10cSrcweir 	mbGlblDocSaveLinks =
323cdf0e10cSrcweir 	mbIsLabelDoc =
324cdf0e10cSrcweir 	mbIsAutoFmtRedline =
325cdf0e10cSrcweir 	mbOLEPrtNotifyPending =
326cdf0e10cSrcweir 	mbAllOLENotify =
327cdf0e10cSrcweir 	mbIsRedlineMove =
328cdf0e10cSrcweir 	mbInsOnlyTxtGlssry =
329cdf0e10cSrcweir 	mbContains_MSVBasic =
330cdf0e10cSrcweir 	mbKernAsianPunctuation =
331cdf0e10cSrcweir #ifdef DBG_UTIL
332cdf0e10cSrcweir 	mbXMLExport =
333cdf0e10cSrcweir #endif
334cdf0e10cSrcweir     // --> OD 2006-03-21 #b6375613#
335cdf0e10cSrcweir     mbApplyWorkaroundForB6375613 =
336cdf0e10cSrcweir     // <--
337cdf0e10cSrcweir                             false;
338cdf0e10cSrcweir 
339cdf0e10cSrcweir 	mbNewFldLst =
340cdf0e10cSrcweir 	mbVisibleLinks =
341cdf0e10cSrcweir     mbPurgeOLE =
342cdf0e10cSrcweir                             true;
343cdf0e10cSrcweir 
344*f8c074b1SArrigo Marchiori     pLinkMgr->SetAutoAskUpdateAllLinks();
345cdf0e10cSrcweir     //
346cdf0e10cSrcweir     // COMPATIBILITY FLAGS START
347cdf0e10cSrcweir     //
348cdf0e10cSrcweir 
349cdf0e10cSrcweir     // Note: Any non-hidden compatibility flag should obtain its default
350cdf0e10cSrcweir     // by asking SvtCompatibilityOptions, see below.
351cdf0e10cSrcweir     //
352cdf0e10cSrcweir     const SvtCompatibilityOptions aOptions;
353cdf0e10cSrcweir     mbParaSpaceMax                      = aOptions.IsAddSpacing();
354cdf0e10cSrcweir     mbParaSpaceMaxAtPages               = aOptions.IsAddSpacingAtPages();
355cdf0e10cSrcweir     mbTabCompat                         = !aOptions.IsUseOurTabStops();
356cdf0e10cSrcweir     mbUseVirtualDevice                  = !aOptions.IsUsePrtDevice();
357cdf0e10cSrcweir     mbAddExternalLeading                = !aOptions.IsNoExtLeading();
358cdf0e10cSrcweir     mbOldLineSpacing                    = aOptions.IsUseLineSpacing();
359cdf0e10cSrcweir     mbAddParaSpacingToTableCells        = aOptions.IsAddTableSpacing();
360cdf0e10cSrcweir     mbUseFormerObjectPos                = aOptions.IsUseObjectPositioning();
361cdf0e10cSrcweir     mbUseFormerTextWrapping             = aOptions.IsUseOurTextWrapping();
362cdf0e10cSrcweir     mbConsiderWrapOnObjPos              = aOptions.IsConsiderWrappingStyle();
363cdf0e10cSrcweir     mbMathBaselineAlignment                 = false;        // default for *old* documents is 'off'
364cdf0e10cSrcweir     mbAddFlyOffsets                         = false;        // hidden
365cdf0e10cSrcweir     mbOldNumbering                          = false;        // hidden
366cdf0e10cSrcweir     mbUseHiResolutionVirtualDevice          = true;         // hidden
367cdf0e10cSrcweir     mbIgnoreFirstLineIndentInNumbering      = false;        // hidden
368cdf0e10cSrcweir     mbDoNotJustifyLinesWithManualBreak      = !aOptions.IsExpandWordSpace();
369cdf0e10cSrcweir     mbDoNotResetParaAttrsForNumFont         = false;        // hidden
370cdf0e10cSrcweir     mbOutlineLevelYieldsOutlineRule         = false;        // hidden
371cdf0e10cSrcweir     mbTableRowKeep                          = false;        // hidden
372cdf0e10cSrcweir     mbIgnoreTabsAndBlanksForLineCalculation = false;        // hidden
373cdf0e10cSrcweir     mbDoNotCaptureDrawObjsOnPage            = false;        // hidden
374cdf0e10cSrcweir     mbClipAsCharacterAnchoredWriterFlyFrames= false;        // hidden
375cdf0e10cSrcweir     mbUnixForceZeroExtLeading               = false;        // hidden
376cdf0e10cSrcweir     mbOldPrinterMetrics                     = false;        // hidden
377cdf0e10cSrcweir     mbTabRelativeToIndent                   = true;         // hidden
378cdf0e10cSrcweir     // --> OD 2008-06-05 #i89181#
379cdf0e10cSrcweir     mbTabAtLeftIndentForParagraphsInList    = false;        // hidden
380cdf0e10cSrcweir     // <--
381cdf0e10cSrcweir 
382cdf0e10cSrcweir     //
383cdf0e10cSrcweir     // COMPATIBILITY FLAGS END
384cdf0e10cSrcweir     //
385cdf0e10cSrcweir 
386cdf0e10cSrcweir 	pMacroTable = new SvxMacroTableDtor;
387cdf0e10cSrcweir 
388cdf0e10cSrcweir     mpGrammarContact = ::createGrammarContact();
389cdf0e10cSrcweir 
390cdf0e10cSrcweir 	/*
391cdf0e10cSrcweir 	 * Defaultformate und DefaultFormatsammlungen (FmtColl)
392cdf0e10cSrcweir 	 * werden an der Position 0 in das jeweilige Array eingetragen.
393cdf0e10cSrcweir 	 * Die Formate der FmtColls sind von den Defaultformaten
394cdf0e10cSrcweir 	 * abgeleitet und stehen auch in der Liste.
395cdf0e10cSrcweir 	 */
396cdf0e10cSrcweir 	/* Formate */
397cdf0e10cSrcweir 	pFrmFmtTbl->Insert(pDfltFrmFmt, 0 );
398cdf0e10cSrcweir 	pCharFmtTbl->Insert(pDfltCharFmt, 0 );
399cdf0e10cSrcweir 
400cdf0e10cSrcweir 	/* FmtColls */
401cdf0e10cSrcweir 	// TXT
402cdf0e10cSrcweir 	pTxtFmtCollTbl->Insert(pDfltTxtFmtColl, 0 );
403cdf0e10cSrcweir     // GRF
404cdf0e10cSrcweir 	pGrfFmtCollTbl->Insert(pDfltGrfFmtColl, 0 );
405cdf0e10cSrcweir 
406cdf0e10cSrcweir 	// PageDesc, EmptyPageFmt und ColumnFmt anlegen
407cdf0e10cSrcweir 	if ( !aPageDescs.Count() )
408cdf0e10cSrcweir 		GetPageDescFromPool( RES_POOLPAGE_STANDARD );
409cdf0e10cSrcweir 
410cdf0e10cSrcweir 		//Leere Seite Einstellen.
411cdf0e10cSrcweir     pEmptyPageFmt->SetFmtAttr( SwFmtFrmSize( ATT_FIX_SIZE ) );
412cdf0e10cSrcweir 		//BodyFmt fuer Spalten Einstellen.
413cdf0e10cSrcweir     pColumnContFmt->SetFmtAttr( SwFmtFillOrder( ATT_LEFT_TO_RIGHT ) );
414cdf0e10cSrcweir 
415cdf0e10cSrcweir 	_InitFieldTypes();
416cdf0e10cSrcweir 
417cdf0e10cSrcweir     // lege (fuer die Filter) eine Default-OutlineNumRule an
418cdf0e10cSrcweir     // --> OD 2008-02-11 #newlistlevelattrs#
419cdf0e10cSrcweir     pOutlineRule = new SwNumRule( String::CreateFromAscii( SwNumRule::GetOutlineRuleName() ),
420cdf0e10cSrcweir                                   // --> OD 2008-06-06 #i89178#
421cdf0e10cSrcweir                                   numfunc::GetDefaultPositionAndSpaceMode(),
422cdf0e10cSrcweir                                   // <--
423cdf0e10cSrcweir                                   OUTLINE_RULE );
424cdf0e10cSrcweir     // <--
425cdf0e10cSrcweir     // #115901#
426cdf0e10cSrcweir     AddNumRule(pOutlineRule);
427cdf0e10cSrcweir     // --> OD 2005-10-21 - counting of phantoms depends on <IsOldNumbering()>
428cdf0e10cSrcweir     pOutlineRule->SetCountPhantoms( !get(IDocumentSettingAccess::OLD_NUMBERING) );
429cdf0e10cSrcweir     // <--
430cdf0e10cSrcweir 
431cdf0e10cSrcweir     new SwTxtNode(
432cdf0e10cSrcweir             SwNodeIndex(GetUndoManager().GetUndoNodes().GetEndOfContent()),
433cdf0e10cSrcweir             pDfltTxtFmtColl );
434cdf0e10cSrcweir     new SwTxtNode( SwNodeIndex( GetNodes().GetEndOfContent() ),
435cdf0e10cSrcweir 					GetTxtCollFromPool( RES_POOLCOLL_STANDARD ));
436cdf0e10cSrcweir 
437cdf0e10cSrcweir 	// den eigenen IdleTimer setzen
438cdf0e10cSrcweir 	aIdleTimer.SetTimeout( 600 );
439cdf0e10cSrcweir 	aIdleTimer.SetTimeoutHdl( LINK(this, SwDoc, DoIdleJobs) );
440cdf0e10cSrcweir 
441cdf0e10cSrcweir 	aOLEModifiedTimer.SetTimeout( 1000 );
442cdf0e10cSrcweir 	aOLEModifiedTimer.SetTimeoutHdl( LINK( this, SwDoc, DoUpdateModifiedOLE ));
443cdf0e10cSrcweir 
444cdf0e10cSrcweir 	// DBMgr anlegen
445cdf0e10cSrcweir 	pNewDBMgr = new SwNewDBMgr;
446cdf0e10cSrcweir 
447cdf0e10cSrcweir 	// create TOXTypes
448cdf0e10cSrcweir     InitTOXTypes();
449cdf0e10cSrcweir 
450cdf0e10cSrcweir     // --> OD 2008-03-07 #refactorlists#
451cdf0e10cSrcweir     // pass empty item set containing the paragraph's list attributes
452cdf0e10cSrcweir     // as ignorable items to the stype manager.
453cdf0e10cSrcweir     {
454cdf0e10cSrcweir         SfxItemSet aIgnorableParagraphItems( GetAttrPool(),
455cdf0e10cSrcweir                                              RES_PARATR_LIST_BEGIN, RES_PARATR_LIST_END-1,
456cdf0e10cSrcweir                                              0 );
457cdf0e10cSrcweir         pStyleAccess = createStyleManager( &aIgnorableParagraphItems );
458cdf0e10cSrcweir     }
459cdf0e10cSrcweir     // <--
460cdf0e10cSrcweir 
461cdf0e10cSrcweir     ResetModified();
462cdf0e10cSrcweir }
463cdf0e10cSrcweir 
464cdf0e10cSrcweir /*
465cdf0e10cSrcweir  * Besonderheiten: an der Position 0 des Arrays der Formate und
466cdf0e10cSrcweir  * der GDI-Objekte befindet sich ein Member der Klasse SwDoc.
467cdf0e10cSrcweir  * Dieser darf also keinesfalls durch delete geloescht
468cdf0e10cSrcweir  * werden!!!!!!!!!!
469cdf0e10cSrcweir  */
470cdf0e10cSrcweir 
471cdf0e10cSrcweir 
~SwDoc()472cdf0e10cSrcweir SwDoc::~SwDoc()
473cdf0e10cSrcweir {
474cdf0e10cSrcweir     // nothing here should create Undo actions!
475cdf0e10cSrcweir     GetIDocumentUndoRedo().DoUndo(false);
476cdf0e10cSrcweir 
477cdf0e10cSrcweir     if (pDocShell)
478cdf0e10cSrcweir     {
479cdf0e10cSrcweir         pDocShell->SetUndoManager(0);
480cdf0e10cSrcweir     }
481cdf0e10cSrcweir 
482cdf0e10cSrcweir     // --> OD 2007-03-16 #i73788#
483cdf0e10cSrcweir     SwPauseThreadStarting aPauseThreadStarting;
484cdf0e10cSrcweir     // <--
485cdf0e10cSrcweir 
486cdf0e10cSrcweir     // --> OD 2007-11-01 #i83479#
487cdf0e10cSrcweir     delete mpListItemsList;
488cdf0e10cSrcweir     mpListItemsList = 0;
489cdf0e10cSrcweir     // <--
490cdf0e10cSrcweir 
491cdf0e10cSrcweir     // clean up chart related structures...
492cdf0e10cSrcweir     // Note: the chart data provider gets already diposed in ~SwDocShell
493cdf0e10cSrcweir     // since all UNO API related functionality requires an existing SwDocShell
494cdf0e10cSrcweir     // this assures that dipose gets called if there is need for it.
495cdf0e10cSrcweir     aChartDataProviderImplRef.reset();
496cdf0e10cSrcweir     delete pChartControllerHelper;
497cdf0e10cSrcweir 
498cdf0e10cSrcweir     delete mpGrammarContact;
499cdf0e10cSrcweir     mpGrammarContact = 0;
500cdf0e10cSrcweir 
501cdf0e10cSrcweir     //!! needs to be done to destroy a possible SwFmtDrop format that may
502cdf0e10cSrcweir     //!! be connected to a char format which may not otherwise be removed
503cdf0e10cSrcweir     //!! and thus would leave a unremoved SwFmt object. (TL)
504cdf0e10cSrcweir     //!! (this is case is not possible via UI but via API...)
505cdf0e10cSrcweir     SwFmtDrop aDrop;
506cdf0e10cSrcweir     SetDefault(aDrop);
507cdf0e10cSrcweir     //!! same for SwFmtCharFmt
508cdf0e10cSrcweir     SwFmtCharFmt aCharFmt(NULL);
509cdf0e10cSrcweir     SetDefault(aCharFmt);
510cdf0e10cSrcweir 
511cdf0e10cSrcweir 	StopIdling();	// stop idle timer
512cdf0e10cSrcweir 
513cdf0e10cSrcweir 	delete pUnoCallBack, pUnoCallBack = 0;
514cdf0e10cSrcweir 	delete pURLStateChgd;
515cdf0e10cSrcweir 
516cdf0e10cSrcweir 	delete pLayouter;
517cdf0e10cSrcweir     // --> OD 2005-09-05 #125370#
518cdf0e10cSrcweir     pLayouter = 0L;
519cdf0e10cSrcweir     // <--
520cdf0e10cSrcweir 
521cdf0e10cSrcweir 	// Undo-Benachrichtigung vom Draw abschalten
522cdf0e10cSrcweir 	if( pDrawModel )
523cdf0e10cSrcweir 	{
524cdf0e10cSrcweir 		DrawNotifyUndoHdl();
525cdf0e10cSrcweir 		ClrContourCache();
526cdf0e10cSrcweir 	}
527cdf0e10cSrcweir 
528cdf0e10cSrcweir 	delete pPgPViewPrtData;
529cdf0e10cSrcweir 
530cdf0e10cSrcweir 	mbDtor = sal_True;
5318bfab1dfSMathias Bauer 	pLayoutPtr.reset();
532cdf0e10cSrcweir 
533cdf0e10cSrcweir 	delete pRedlineTbl;
534cdf0e10cSrcweir 	delete pUnoCrsrTbl;
535cdf0e10cSrcweir 	delete pAutoFmtRedlnComment;
536cdf0e10cSrcweir 
537cdf0e10cSrcweir 	if( pUpdtFlds )
538cdf0e10cSrcweir 		delete pUpdtFlds;
539cdf0e10cSrcweir 
540cdf0e10cSrcweir 	if( pACEWord )
541cdf0e10cSrcweir 		delete pACEWord;
542cdf0e10cSrcweir 
543cdf0e10cSrcweir 	// die BaseLinks freigeben.
544cdf0e10cSrcweir 	{
545cdf0e10cSrcweir 		for( sal_uInt16 n = pLinkMgr->GetServers().Count(); n; )
546cdf0e10cSrcweir 			pLinkMgr->GetServers()[ --n ]->Closed();
547cdf0e10cSrcweir 
548cdf0e10cSrcweir 		if( pLinkMgr->GetLinks().Count() )
549cdf0e10cSrcweir 			pLinkMgr->Remove( 0, pLinkMgr->GetLinks().Count() );
550cdf0e10cSrcweir 	}
551cdf0e10cSrcweir 
552cdf0e10cSrcweir 	// die KapitelNummern / Nummern muessen vor den Vorlage geloescht werden
553cdf0e10cSrcweir 	// ansonsten wird noch staendig geupdatet !!!
554cdf0e10cSrcweir     m_pNodes->pOutlineNds->Remove(sal_uInt16(0), m_pNodes->pOutlineNds->Count());
555cdf0e10cSrcweir     SwNodes & rUndoNodes( GetUndoManager().GetUndoNodes() );
556cdf0e10cSrcweir     rUndoNodes.pOutlineNds->Remove(sal_uInt16(0), rUndoNodes.pOutlineNds->Count());
557cdf0e10cSrcweir 
558cdf0e10cSrcweir 	pFtnIdxs->Remove( sal_uInt16(0), pFtnIdxs->Count() );
559cdf0e10cSrcweir 
560cdf0e10cSrcweir     // indices could be registered in attributes
561cdf0e10cSrcweir     m_pUndoManager->DelAllUndoObj();
562cdf0e10cSrcweir 
563cdf0e10cSrcweir 	// in den BookMarks sind Indizies auf den Content. Diese muessen vorm
564cdf0e10cSrcweir 	// loesche der Nodes geloescht werden.
565cdf0e10cSrcweir     pMarkManager->clearAllMarks();
566cdf0e10cSrcweir 	DELETEZ( pMacroTable );
567cdf0e10cSrcweir 
568cdf0e10cSrcweir 	if( pExtInputRing )
569cdf0e10cSrcweir 	{
570cdf0e10cSrcweir 		Ring* pTmp = pExtInputRing;
571cdf0e10cSrcweir 		pExtInputRing = 0;
572cdf0e10cSrcweir 		while( pTmp->GetNext() != pTmp )
573cdf0e10cSrcweir 			delete pTmp->GetNext();
574cdf0e10cSrcweir 		delete pTmp;
575cdf0e10cSrcweir 	}
576cdf0e10cSrcweir 
577cdf0e10cSrcweir //JP: alt - loeschen ohne Flag ist teuer; Modify wird verschickt!
578cdf0e10cSrcweir //	aTOXTypes.DeleteAndDestroy( 0, aTOXTypes.Count() );
579cdf0e10cSrcweir 	{
580cdf0e10cSrcweir 		for( sal_uInt16 n = pTOXTypes->Count(); n; )
581cdf0e10cSrcweir 		{
582cdf0e10cSrcweir 			(*pTOXTypes)[ --n ]->SetInDocDTOR();
583cdf0e10cSrcweir 			delete (*pTOXTypes)[ n ];
584cdf0e10cSrcweir 		}
585cdf0e10cSrcweir 		pTOXTypes->Remove( 0, pTOXTypes->Count() );
586cdf0e10cSrcweir 	}
587cdf0e10cSrcweir 	delete pDefTOXBases;
588cdf0e10cSrcweir 
589cdf0e10cSrcweir 	//Im einen oder anderen FrmFormat koennen noch Indizes angemeldet sein,
590cdf0e10cSrcweir 	//Diese muessen spaetestens jetzt zerstoert werden.
591cdf0e10cSrcweir 	pFrmFmtTbl->ForEach( &lcl_DelFmtIndizes, this );
592cdf0e10cSrcweir 	pSpzFrmFmtTbl->ForEach( &lcl_DelFmtIndizes, this );
593cdf0e10cSrcweir 	((SwFrmFmts&)*pSectionFmtTbl).ForEach( &lcl_DelFmtIndizes, this );
594cdf0e10cSrcweir 
595cdf0e10cSrcweir 	//Die Formate, die hier hinter stehen sind von den DefaultFormaten
596cdf0e10cSrcweir 	//abhaengig. Erst nach dem Loeschen der FmtIndizes weil der Inhalt von
597cdf0e10cSrcweir 	//Kopf-/Fussbereichen geloescht wird. Wenn dort noch Indizes von Flys
598cdf0e10cSrcweir 	//angemeldet sind gibts was an die Ohren.
599cdf0e10cSrcweir 	aPageDescs.DeleteAndDestroy( 0, aPageDescs.Count() );
600cdf0e10cSrcweir 
601cdf0e10cSrcweir 	// Inhaltssections loeschen
602cdf0e10cSrcweir 	// nicht erst durch den SwNodes-DTOR, damit Formate
603cdf0e10cSrcweir 	// keine Abhaengigen mehr haben.
604cdf0e10cSrcweir     m_pNodes->DelNodes( SwNodeIndex(*m_pNodes), m_pNodes->Count() );
605cdf0e10cSrcweir     rUndoNodes.DelNodes( SwNodeIndex( rUndoNodes ), rUndoNodes.Count() );
606cdf0e10cSrcweir 
607cdf0e10cSrcweir 	// Formate loeschen, spaeter mal permanent machen.
608cdf0e10cSrcweir 
609cdf0e10cSrcweir 	// Delete fuer Collections
610cdf0e10cSrcweir 	// damit die Abhaengigen wech sind
611cdf0e10cSrcweir     pFtnInfo->ReleaseCollection();
612cdf0e10cSrcweir     pEndNoteInfo->ReleaseCollection();
613cdf0e10cSrcweir 
614cdf0e10cSrcweir 	ASSERT( pDfltTxtFmtColl == (*pTxtFmtCollTbl)[0],
615cdf0e10cSrcweir 			"Default-Text-Collection muss immer am Anfang stehen" );
616cdf0e10cSrcweir 
617cdf0e10cSrcweir 	// JP 27.01.98: opt.: ausgehend davon, das Standard als 2. im Array
618cdf0e10cSrcweir 	// 				steht, sollte das als letztes geloescht werden, damit
619cdf0e10cSrcweir 	//				die ganze Umhaengerei der Formate vermieden wird!
620cdf0e10cSrcweir 	if( 2 < pTxtFmtCollTbl->Count() )
621cdf0e10cSrcweir 		pTxtFmtCollTbl->DeleteAndDestroy( 2, pTxtFmtCollTbl->Count()-2 );
622cdf0e10cSrcweir 	pTxtFmtCollTbl->DeleteAndDestroy( 1, pTxtFmtCollTbl->Count()-1 );
623cdf0e10cSrcweir 	delete pTxtFmtCollTbl;
624cdf0e10cSrcweir 
625cdf0e10cSrcweir 	ASSERT( pDfltGrfFmtColl == (*pGrfFmtCollTbl)[0],
626cdf0e10cSrcweir 			"Default-Grf-Collection muss immer am Anfang stehen" );
627cdf0e10cSrcweir 
628cdf0e10cSrcweir 	pGrfFmtCollTbl->DeleteAndDestroy( 1, pGrfFmtCollTbl->Count()-1 );
629cdf0e10cSrcweir // ergibt sich automatisch - kein _DEL Array!
630cdf0e10cSrcweir //	pGrfFmtCollTbl->Remove( 0, n );
631cdf0e10cSrcweir 	delete pGrfFmtCollTbl;
632cdf0e10cSrcweir 
633cdf0e10cSrcweir 	/*
634cdf0e10cSrcweir 	 * Defaultformate und DefaultFormatsammlungen (FmtColl)
635cdf0e10cSrcweir 	 * sind an der Position 0 der jeweiligen Arrays eingetragen.
636cdf0e10cSrcweir 	 * Damit sie nicht vom DTOR der Array's zum 2.mal geloescht werden,
637cdf0e10cSrcweir 	 * nehme sie aus dem Array.
638cdf0e10cSrcweir 	 */
639cdf0e10cSrcweir 	pFrmFmtTbl->Remove( 0 );
640cdf0e10cSrcweir 	pCharFmtTbl->Remove( 0 );
641cdf0e10cSrcweir 
642cdf0e10cSrcweir 	// Delete fuer pPrt
643cdf0e10cSrcweir 	DELETEZ( pPrt );
644cdf0e10cSrcweir 	DELETEZ( pNewDBMgr );
645cdf0e10cSrcweir 
646cdf0e10cSrcweir 	// Alle Flys muessen vor dem Drawing Model zerstoert werden,
647cdf0e10cSrcweir 	// da Flys noch DrawContacts enthalten koennen, wenn wegen
648cdf0e10cSrcweir 	// eines Lesefehlers kein Layout aufgebaut wurde.
649cdf0e10cSrcweir 	pSpzFrmFmtTbl->DeleteAndDestroy( 0, pSpzFrmFmtTbl->Count() );
650cdf0e10cSrcweir 
651cdf0e10cSrcweir 	//Erst jetzt das Model zerstoeren, die Zeichenobjekte - die ja auch
652cdf0e10cSrcweir 	//im Undo herumlungern - wollen noch ihre Attribute beim Model entfernen.
653cdf0e10cSrcweir 	//Ausserdem koennen vorher noch DrawContacts existieren.
654cdf0e10cSrcweir 	ReleaseDrawModel();
655cdf0e10cSrcweir 	//JP 28.01.99: DrawModel vorm LinkManager zerstoeren, da am DrawModel
656cdf0e10cSrcweir 	// 			dieser immer gesetzt ist.
657cdf0e10cSrcweir 	DELETEZ( pLinkMgr );
658cdf0e10cSrcweir 
659cdf0e10cSrcweir 	//Tables vor dem loeschen der Defaults leeren, sonst GPF wegen Def-Abhaengigen.
660cdf0e10cSrcweir 	//Die Arrays sollten (wegen includes) bei Gelegenheit auch zu Pointern werden.
661cdf0e10cSrcweir 	delete pFrmFmtTbl;
662cdf0e10cSrcweir 	delete pSpzFrmFmtTbl;
663cdf0e10cSrcweir 
664cdf0e10cSrcweir     delete pStyleAccess;
665cdf0e10cSrcweir 
666cdf0e10cSrcweir 	delete pCharFmtTbl;
667cdf0e10cSrcweir 	delete pSectionFmtTbl;
668cdf0e10cSrcweir 	delete pTblFrmFmtTbl;
669cdf0e10cSrcweir 	delete pDfltTxtFmtColl;
670cdf0e10cSrcweir 	delete pDfltGrfFmtColl;
671cdf0e10cSrcweir 	delete pNumRuleTbl;
672cdf0e10cSrcweir 
673cdf0e10cSrcweir     // --> OD 2008-03-26 #refactorlists#
674cdf0e10cSrcweir     {
675cdf0e10cSrcweir         for ( std::hash_map< String, SwList*, StringHash >::iterator
676cdf0e10cSrcweir                                                     aListIter = maLists.begin();
677cdf0e10cSrcweir               aListIter != maLists.end();
678cdf0e10cSrcweir               ++aListIter )
679cdf0e10cSrcweir         {
680cdf0e10cSrcweir             delete (*aListIter).second;
681cdf0e10cSrcweir         }
682cdf0e10cSrcweir         maLists.clear();
683cdf0e10cSrcweir     }
684cdf0e10cSrcweir     maListStyleLists.clear();
685cdf0e10cSrcweir     // <--
686cdf0e10cSrcweir 
6871c582a35SJian Fang Zhang 	disposeXForms(); // #i113606#, dispose the XForms objects
6881c582a35SJian Fang Zhang 
689cdf0e10cSrcweir 	delete pPrtData;
690cdf0e10cSrcweir 	delete pNumberFormatter;
691cdf0e10cSrcweir 	delete pFtnInfo;
692cdf0e10cSrcweir 	delete pEndNoteInfo;
693cdf0e10cSrcweir 	delete pLineNumberInfo;
694cdf0e10cSrcweir 	delete pFtnIdxs;
695cdf0e10cSrcweir 	delete pFldTypes;
696cdf0e10cSrcweir 	delete pTOXTypes;
697cdf0e10cSrcweir 	delete pDocStat;
698cdf0e10cSrcweir 	delete pEmptyPageFmt;
699cdf0e10cSrcweir 	delete pColumnContFmt;
700cdf0e10cSrcweir 	delete pDfltCharFmt;
701cdf0e10cSrcweir 	delete pDfltFrmFmt;
702cdf0e10cSrcweir     delete pLayoutCache;
703cdf0e10cSrcweir     delete pVirDev;
704cdf0e10cSrcweir 
705cdf0e10cSrcweir     SfxItemPool::Free(mpAttrPool);
706cdf0e10cSrcweir }
707cdf0e10cSrcweir 
708cdf0e10cSrcweir //---------------------------------------------------
709cdf0e10cSrcweir 
CreateVirtualDevice_() const710cdf0e10cSrcweir VirtualDevice& SwDoc::CreateVirtualDevice_() const
711cdf0e10cSrcweir {
712cdf0e10cSrcweir     VirtualDevice* pNewVir = new VirtualDevice( 1 );
713cdf0e10cSrcweir 
714cdf0e10cSrcweir     // <--
715cdf0e10cSrcweir     pNewVir->SetReferenceDevice( VirtualDevice::REFDEV_MODE_MSO1 );
716cdf0e10cSrcweir 
717cdf0e10cSrcweir     // --> FME 2006-10-09 #i60945# External leading compatibility for unix systems.
718cdf0e10cSrcweir     if ( get(IDocumentSettingAccess::UNIX_FORCE_ZERO_EXT_LEADING ) )
719cdf0e10cSrcweir         pNewVir->Compat_ZeroExtleadBug();
720cdf0e10cSrcweir     // <--
721cdf0e10cSrcweir 
722cdf0e10cSrcweir     MapMode aMapMode( pNewVir->GetMapMode() );
723cdf0e10cSrcweir     aMapMode.SetMapUnit( MAP_TWIP );
724cdf0e10cSrcweir     pNewVir->SetMapMode( aMapMode );
725cdf0e10cSrcweir 
726cdf0e10cSrcweir     const_cast<SwDoc*>(this)->setVirtualDevice( pNewVir, true, true );
727cdf0e10cSrcweir     return *pVirDev;
728cdf0e10cSrcweir }
729cdf0e10cSrcweir 
730cdf0e10cSrcweir //---------------------------------------------------
731cdf0e10cSrcweir 
CreatePrinter_() const732cdf0e10cSrcweir SfxPrinter& SwDoc::CreatePrinter_() const
733cdf0e10cSrcweir {
734cdf0e10cSrcweir     ASSERT( ! pPrt, "Do not call CreatePrinter_(), call getPrinter() instead" )
735cdf0e10cSrcweir 
736cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1
737ed97b663SMathias Bauer     OSL_TRACE( "Printer will be created!" );
738cdf0e10cSrcweir #endif
739cdf0e10cSrcweir 
740cdf0e10cSrcweir     // wir erzeugen einen default SfxPrinter.
741cdf0e10cSrcweir 	// Das ItemSet wird vom Sfx geloescht!
742cdf0e10cSrcweir 	SfxItemSet *pSet = new SfxItemSet( ((SwDoc*)this)->GetAttrPool(),
743cdf0e10cSrcweir 					FN_PARAM_ADDPRINTER, FN_PARAM_ADDPRINTER,
744cdf0e10cSrcweir 					SID_HTML_MODE,	SID_HTML_MODE,
745cdf0e10cSrcweir 					SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN,
746cdf0e10cSrcweir 					SID_PRINTER_CHANGESTODOC, SID_PRINTER_CHANGESTODOC,
747cdf0e10cSrcweir 					0 );
748cdf0e10cSrcweir 
749cdf0e10cSrcweir     SfxPrinter* pNewPrt = new SfxPrinter( pSet );
750cdf0e10cSrcweir     const_cast<SwDoc*>(this)->setPrinter( pNewPrt, true, true );
751cdf0e10cSrcweir     return *pPrt;
752cdf0e10cSrcweir }
753cdf0e10cSrcweir //---------------------------------------------------
754cdf0e10cSrcweir 
SetDocShell(SwDocShell * pDSh)755cdf0e10cSrcweir void SwDoc::SetDocShell( SwDocShell* pDSh )
756cdf0e10cSrcweir {
757cdf0e10cSrcweir 	if( pDocShell != pDSh )
758cdf0e10cSrcweir 	{
759cdf0e10cSrcweir         if (pDocShell)
760cdf0e10cSrcweir         {
761cdf0e10cSrcweir             pDocShell->SetUndoManager(0);
762cdf0e10cSrcweir         }
763cdf0e10cSrcweir 		pDocShell = pDSh;
764cdf0e10cSrcweir         if (pDocShell)
765cdf0e10cSrcweir         {
766cdf0e10cSrcweir             pDocShell->SetUndoManager(& GetUndoManager());
767cdf0e10cSrcweir         }
768cdf0e10cSrcweir 
769cdf0e10cSrcweir 		pLinkMgr->SetPersist( pDocShell );
770cdf0e10cSrcweir 		//JP 27.08.98: Bug 55570 - DocShell Pointer auch am DrawModel setzen
771cdf0e10cSrcweir 		if( pDrawModel )
772cdf0e10cSrcweir 		{
773cdf0e10cSrcweir 			((SwDrawDocument*)pDrawModel)->SetObjectShell( pDocShell );
774cdf0e10cSrcweir 			pDrawModel->SetPersist( pDocShell );
775cdf0e10cSrcweir 			ASSERT( pDrawModel->GetPersist() == GetPersist(),
776cdf0e10cSrcweir 					"draw model's persist is out of sync" );
777cdf0e10cSrcweir 		}
778cdf0e10cSrcweir 	}
779cdf0e10cSrcweir }
780cdf0e10cSrcweir 
781cdf0e10cSrcweir 
782cdf0e10cSrcweir // Convenience-Methode, um uebermaessige Includes von docsh.hxx
783cdf0e10cSrcweir // zu vermeiden
784cdf0e10cSrcweir 
785cdf0e10cSrcweir 
786cdf0e10cSrcweir 
GetDocStorage()787cdf0e10cSrcweir uno::Reference < embed::XStorage > SwDoc::GetDocStorage()
788cdf0e10cSrcweir {
789cdf0e10cSrcweir 	if( pDocShell )
790cdf0e10cSrcweir 		return pDocShell->GetStorage();
791cdf0e10cSrcweir 	if( pLinkMgr->GetPersist() )
792cdf0e10cSrcweir 		return pLinkMgr->GetPersist()->GetStorage();
793cdf0e10cSrcweir 	return NULL;
794cdf0e10cSrcweir }
795cdf0e10cSrcweir 
796cdf0e10cSrcweir 
797cdf0e10cSrcweir 
GetPersist() const798cdf0e10cSrcweir SfxObjectShell* SwDoc::GetPersist() const
799cdf0e10cSrcweir {
800cdf0e10cSrcweir 	return pDocShell ? pDocShell : pLinkMgr->GetPersist();
801cdf0e10cSrcweir }
802cdf0e10cSrcweir 
803cdf0e10cSrcweir 
ClearDoc()804cdf0e10cSrcweir void SwDoc::ClearDoc()
805cdf0e10cSrcweir {
806cdf0e10cSrcweir     GetIDocumentUndoRedo().DelAllUndoObj();
807cdf0e10cSrcweir     ::sw::UndoGuard const undoGuard(GetIDocumentUndoRedo());
808cdf0e10cSrcweir 
809cdf0e10cSrcweir 	// Undo-Benachrichtigung vom Draw abschalten
810cdf0e10cSrcweir 	if( pDrawModel )
811cdf0e10cSrcweir 	{
812cdf0e10cSrcweir 		DrawNotifyUndoHdl();
813cdf0e10cSrcweir 		ClrContourCache();
814cdf0e10cSrcweir 	}
815cdf0e10cSrcweir 
816cdf0e10cSrcweir 	// stehen noch FlyFrames rum, loesche auch diese
817cdf0e10cSrcweir 	sal_uInt16 n;
818cdf0e10cSrcweir 	while ( 0 != (n = GetSpzFrmFmts()->Count()) )
819cdf0e10cSrcweir 		DelLayoutFmt((*pSpzFrmFmtTbl)[n-1]);
820cdf0e10cSrcweir 	ASSERT( !pDrawModel || !pDrawModel->GetPage(0)->GetObjCount(),
821cdf0e10cSrcweir 				"not all DrawObjects removed from the page" );
822cdf0e10cSrcweir 
823cdf0e10cSrcweir 	pRedlineTbl->DeleteAndDestroy( 0, pRedlineTbl->Count() );
824cdf0e10cSrcweir 
825cdf0e10cSrcweir 	if( pACEWord )
826cdf0e10cSrcweir 		delete pACEWord;
827cdf0e10cSrcweir 
828cdf0e10cSrcweir 	// in den BookMarks sind Indizies auf den Content. Diese muessen vorm
829cdf0e10cSrcweir 	// loesche der Nodes geloescht werden.
830cdf0e10cSrcweir     pMarkManager->clearAllMarks();
831cdf0e10cSrcweir     InitTOXTypes();
832cdf0e10cSrcweir 
833cdf0e10cSrcweir 	// create a dummy pagedesc for the layout
834cdf0e10cSrcweir 	sal_uInt16 nDummyPgDsc = MakePageDesc( String::CreateFromAscii( "?DUMMY?" ));
835cdf0e10cSrcweir 	SwPageDesc* pDummyPgDsc = aPageDescs[ nDummyPgDsc ];
836cdf0e10cSrcweir 
837cdf0e10cSrcweir 	SwNodeIndex aSttIdx( *GetNodes().GetEndOfContent().StartOfSectionNode(), 1 );
838cdf0e10cSrcweir 	// den ersten immer wieder neu anlegen (ohne Attribute/Vorlagen/...)
839cdf0e10cSrcweir 	SwTxtNode* pFirstNd = GetNodes().MakeTxtNode( aSttIdx, pDfltTxtFmtColl );
840cdf0e10cSrcweir 
841cdf0e10cSrcweir 	if( pCurrentView )	//swmod 071029//swmod 071225
842cdf0e10cSrcweir 	{
843cdf0e10cSrcweir 		// set the layout to the dummy pagedesc
844cdf0e10cSrcweir         pFirstNd->SetAttr( SwFmtPageDesc( pDummyPgDsc ));
845cdf0e10cSrcweir 
846cdf0e10cSrcweir 		SwPosition aPos( *pFirstNd, SwIndex( pFirstNd ));
847cdf0e10cSrcweir         SwPaM const tmpPaM(aSttIdx, SwNodeIndex(GetNodes().GetEndOfContent()));
848cdf0e10cSrcweir         ::PaMCorrAbs(tmpPaM, aPos);
849cdf0e10cSrcweir 	}
850cdf0e10cSrcweir 
851cdf0e10cSrcweir 	GetNodes().Delete( aSttIdx,
852cdf0e10cSrcweir 			GetNodes().GetEndOfContent().GetIndex() - aSttIdx.GetIndex() );
853cdf0e10cSrcweir 
854cdf0e10cSrcweir     // --> OD 2006-02-28 #i62440#
855cdf0e10cSrcweir     // destruction of numbering rules and creation of new outline rule
856cdf0e10cSrcweir     // *after* the document nodes are deleted.
857cdf0e10cSrcweir     pOutlineRule = NULL;
858cdf0e10cSrcweir     pNumRuleTbl->DeleteAndDestroy( 0, pNumRuleTbl->Count() );
859f2b0fa29SMichael Stahl     // --> OD #i114725#,#i115828#
860f2b0fa29SMichael Stahl     {
861f2b0fa29SMichael Stahl         for ( std::hash_map< String, SwList*, StringHash >::iterator
862f2b0fa29SMichael Stahl                                                     aListIter = maLists.begin();
863f2b0fa29SMichael Stahl               aListIter != maLists.end();
864f2b0fa29SMichael Stahl               ++aListIter )
865f2b0fa29SMichael Stahl         {
866f2b0fa29SMichael Stahl             delete (*aListIter).second;
867f2b0fa29SMichael Stahl         }
868f2b0fa29SMichael Stahl         maLists.clear();
869f2b0fa29SMichael Stahl     }
870f2b0fa29SMichael Stahl     maListStyleLists.clear();
871f2b0fa29SMichael Stahl     // <--
872cdf0e10cSrcweir     // creation of new outline numbering rule
873cdf0e10cSrcweir     // --> OD 2008-02-11 #newlistlevelattrs#
874cdf0e10cSrcweir     pOutlineRule = new SwNumRule( String::CreateFromAscii( SwNumRule::GetOutlineRuleName() ),
875cdf0e10cSrcweir                                   // --> OD 2008-06-06 #i89178#
876cdf0e10cSrcweir                                   numfunc::GetDefaultPositionAndSpaceMode(),
877cdf0e10cSrcweir                                   // <--
878cdf0e10cSrcweir                                   OUTLINE_RULE );
879cdf0e10cSrcweir     // <--
880cdf0e10cSrcweir     AddNumRule(pOutlineRule);
881cdf0e10cSrcweir     // --> OD 2005-10-21 - counting of phantoms depends on <IsOldNumbering()>
882cdf0e10cSrcweir     pOutlineRule->SetCountPhantoms( !get(IDocumentSettingAccess::OLD_NUMBERING) );
883cdf0e10cSrcweir     // <--
884cdf0e10cSrcweir     // <--
885cdf0e10cSrcweir 
886cdf0e10cSrcweir 	//remove the dummy pagedec from the array and delete all the old ones
887cdf0e10cSrcweir 	aPageDescs.Remove( nDummyPgDsc );
888cdf0e10cSrcweir 	aPageDescs.DeleteAndDestroy( 0, aPageDescs.Count() );
889cdf0e10cSrcweir 
890cdf0e10cSrcweir 	// Delete fuer Collections
891cdf0e10cSrcweir 	// damit die Abhaengigen wech sind
892cdf0e10cSrcweir     pFtnInfo->ReleaseCollection();
893cdf0e10cSrcweir     pEndNoteInfo->ReleaseCollection();
894cdf0e10cSrcweir 
895cdf0e10cSrcweir 	// JP 27.01.98: opt.: ausgehend davon, das Standard als 2. im Array
896cdf0e10cSrcweir 	// 				steht, sollte das als letztes geloescht werden, damit
897cdf0e10cSrcweir 	//				die ganze Umhaengerei der Formate vermieden wird!
898cdf0e10cSrcweir 	if( 2 < pTxtFmtCollTbl->Count() )
899cdf0e10cSrcweir 		pTxtFmtCollTbl->DeleteAndDestroy( 2, pTxtFmtCollTbl->Count()-2 );
900cdf0e10cSrcweir 	pTxtFmtCollTbl->DeleteAndDestroy( 1, pTxtFmtCollTbl->Count()-1 );
901cdf0e10cSrcweir 	pGrfFmtCollTbl->DeleteAndDestroy( 1, pGrfFmtCollTbl->Count()-1 );
902cdf0e10cSrcweir 	pCharFmtTbl->DeleteAndDestroy( 1, pCharFmtTbl->Count()-1 );
903cdf0e10cSrcweir 
904cdf0e10cSrcweir 	if( pCurrentView )
905cdf0e10cSrcweir 	{
906cdf0e10cSrcweir 		// search the FrameFormat of the root frm. This is not allowed to delete
907cdf0e10cSrcweir 		pFrmFmtTbl->Remove( pFrmFmtTbl->GetPos( pCurrentView->GetLayout()->GetFmt() ) );
908cdf0e10cSrcweir 		pFrmFmtTbl->DeleteAndDestroy( 1, pFrmFmtTbl->Count()-1 );
909cdf0e10cSrcweir 		pFrmFmtTbl->Insert( pCurrentView->GetLayout()->GetFmt(), pFrmFmtTbl->Count() );
910cdf0e10cSrcweir 	}
911cdf0e10cSrcweir 	else	//swmod 071029//swmod 071225
912cdf0e10cSrcweir 		pFrmFmtTbl->DeleteAndDestroy( 1, pFrmFmtTbl->Count()-1 );
913cdf0e10cSrcweir 
914cdf0e10cSrcweir 	xForbiddenCharsTable.unbind();
915cdf0e10cSrcweir 
916cdf0e10cSrcweir 	pFldTypes->DeleteAndDestroy( INIT_FLDTYPES,
917cdf0e10cSrcweir 								pFldTypes->Count() - INIT_FLDTYPES );
918cdf0e10cSrcweir 
919cdf0e10cSrcweir 	delete pNumberFormatter, pNumberFormatter = 0;
920cdf0e10cSrcweir 
921cdf0e10cSrcweir 	GetPageDescFromPool( RES_POOLPAGE_STANDARD );
922cdf0e10cSrcweir 	pFirstNd->ChgFmtColl( GetTxtCollFromPool( RES_POOLCOLL_STANDARD ));
923cdf0e10cSrcweir 	nDummyPgDsc = aPageDescs.Count();
924cdf0e10cSrcweir 	aPageDescs.Insert( pDummyPgDsc, nDummyPgDsc );
925cdf0e10cSrcweir 	// set the layout back to the new standard pagedesc
926cdf0e10cSrcweir 	pFirstNd->ResetAllAttr();
927cdf0e10cSrcweir 	// delete now the dummy pagedesc
928cdf0e10cSrcweir 	DelPageDesc( nDummyPgDsc );
929cdf0e10cSrcweir }
930cdf0e10cSrcweir 
SetPreViewPrtData(const SwPagePreViewPrtData * pNew)931cdf0e10cSrcweir void SwDoc::SetPreViewPrtData( const SwPagePreViewPrtData* pNew )
932cdf0e10cSrcweir {
933cdf0e10cSrcweir 	if( pNew )
934cdf0e10cSrcweir 	{
935cdf0e10cSrcweir 		if( pPgPViewPrtData )
936cdf0e10cSrcweir 			*pPgPViewPrtData = *pNew;
937cdf0e10cSrcweir 		else
938cdf0e10cSrcweir 			pPgPViewPrtData = new SwPagePreViewPrtData( *pNew );
939cdf0e10cSrcweir 	}
940cdf0e10cSrcweir 	else if( pPgPViewPrtData )
941cdf0e10cSrcweir 		DELETEZ( pPgPViewPrtData );
942cdf0e10cSrcweir 	SetModified();
943cdf0e10cSrcweir }
944cdf0e10cSrcweir /* -----------------------------06.01.00 14:03--------------------------------
945cdf0e10cSrcweir 
946cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
GetUnoCallBack() const947cdf0e10cSrcweir SwModify*	SwDoc::GetUnoCallBack() const
948cdf0e10cSrcweir {
949cdf0e10cSrcweir 	return pUnoCallBack;
950cdf0e10cSrcweir }
951cdf0e10cSrcweir 
952cdf0e10cSrcweir /*-----------------28.5.2001 10:06------------------
953cdf0e10cSrcweir  * SwDoc:
954cdf0e10cSrcweir  *  Reading and writing of the layout cache.
955cdf0e10cSrcweir  *--------------------------------------------------*/
956cdf0e10cSrcweir 
ReadLayoutCache(SvStream & rStream)957cdf0e10cSrcweir void SwDoc::ReadLayoutCache( SvStream& rStream )
958cdf0e10cSrcweir {
959cdf0e10cSrcweir     if( !pLayoutCache )
960cdf0e10cSrcweir         pLayoutCache = new SwLayoutCache();
961cdf0e10cSrcweir     if( !pLayoutCache->IsLocked() )
962cdf0e10cSrcweir     {
963cdf0e10cSrcweir         pLayoutCache->GetLockCount() |= 0x8000;
964cdf0e10cSrcweir         pLayoutCache->Read( rStream );
965cdf0e10cSrcweir         pLayoutCache->GetLockCount() &= 0x7fff;
966cdf0e10cSrcweir     }
967cdf0e10cSrcweir }
968cdf0e10cSrcweir 
WriteLayoutCache(SvStream & rStream)969cdf0e10cSrcweir void SwDoc::WriteLayoutCache( SvStream& rStream )
970cdf0e10cSrcweir {
971cdf0e10cSrcweir     pLayoutCache->Write( rStream, *this );
972cdf0e10cSrcweir }
973cdf0e10cSrcweir 
getGrammarContact(const SwTxtNode & rTxtNode)974cdf0e10cSrcweir IGrammarContact* getGrammarContact( const SwTxtNode& rTxtNode )
975cdf0e10cSrcweir {
976cdf0e10cSrcweir     const SwDoc* pDoc = rTxtNode.GetDoc();
977cdf0e10cSrcweir     if( !pDoc || pDoc->IsInDtor() )
978cdf0e10cSrcweir         return 0;
979cdf0e10cSrcweir     return pDoc->getGrammarContact();
980cdf0e10cSrcweir }
981cdf0e10cSrcweir 
982cdf0e10cSrcweir // --> FME 2005-02-25 #i42634# Moved common code of SwReader::Read() and
983cdf0e10cSrcweir // SwDocShell::UpdateLinks() to new SwDoc::UpdateLinks():
UpdateLinks(sal_Bool bUI)984cdf0e10cSrcweir void SwDoc::UpdateLinks( sal_Bool bUI )
985cdf0e10cSrcweir {
986cdf0e10cSrcweir     SfxObjectCreateMode eMode;
987cdf0e10cSrcweir     sal_uInt16 nLinkMode = getLinkUpdateMode( true );
988cdf0e10cSrcweir     sal_uInt16 nUpdateDocMode = GetDocShell()->GetUpdateDocMode();
989cdf0e10cSrcweir     if( GetDocShell() &&
990cdf0e10cSrcweir             (nLinkMode != NEVER ||  document::UpdateDocMode::FULL_UPDATE == nUpdateDocMode) &&
991cdf0e10cSrcweir         GetLinkManager().GetLinks().Count() &&
992cdf0e10cSrcweir         SFX_CREATE_MODE_INTERNAL !=
993cdf0e10cSrcweir                     ( eMode = GetDocShell()->GetCreateMode()) &&
994cdf0e10cSrcweir         SFX_CREATE_MODE_ORGANIZER != eMode &&
995cdf0e10cSrcweir         SFX_CREATE_MODE_PREVIEW != eMode &&
996cdf0e10cSrcweir         !GetDocShell()->IsPreview() )
997cdf0e10cSrcweir     {
998cdf0e10cSrcweir         ViewShell* pVSh = 0;
999cdf0e10cSrcweir         sal_Bool bAskUpdate = nLinkMode == MANUAL;
1000cdf0e10cSrcweir         sal_Bool bUpdate = sal_True;
1001cdf0e10cSrcweir         switch(nUpdateDocMode)
1002cdf0e10cSrcweir         {
1003cdf0e10cSrcweir             case document::UpdateDocMode::NO_UPDATE:   bUpdate = sal_False;break;
1004cdf0e10cSrcweir             case document::UpdateDocMode::QUIET_UPDATE:bAskUpdate = sal_False; break;
1005cdf0e10cSrcweir             case document::UpdateDocMode::FULL_UPDATE: bAskUpdate = sal_True; break;
1006cdf0e10cSrcweir         }
100765fffafdSAndrea Pescetti         if (nLinkMode == AUTOMATIC && !bAskUpdate)
100865fffafdSAndrea Pescetti         {
100965fffafdSAndrea Pescetti             if (!(SvtSecurityOptions().GetMacroSecurityLevel() == 0))
101065fffafdSAndrea Pescetti             {
101165fffafdSAndrea Pescetti                 bAskUpdate = true;
101265fffafdSAndrea Pescetti             }
101365fffafdSAndrea Pescetti         }
1014cdf0e10cSrcweir         if( bUpdate && (bUI || !bAskUpdate) )
1015cdf0e10cSrcweir         {
1016cdf0e10cSrcweir             SfxMedium* pMedium = GetDocShell()->GetMedium();
1017cdf0e10cSrcweir             SfxFrame* pFrm = pMedium ? pMedium->GetLoadTargetFrame() : 0;
1018cdf0e10cSrcweir             Window* pDlgParent = pFrm ? &pFrm->GetWindow() : 0;
1019cdf0e10cSrcweir             if( GetCurrentViewShell() && !GetEditShell( &pVSh ) && !pVSh )	//swmod 071108//swmod 071225
1020cdf0e10cSrcweir             {
1021cdf0e10cSrcweir                 ViewShell aVSh( *this, 0, 0 );
1022cdf0e10cSrcweir 
1023cdf0e10cSrcweir                 SET_CURR_SHELL( &aVSh );
1024cdf0e10cSrcweir                 GetLinkManager().UpdateAllLinks( bAskUpdate , sal_True, sal_False, pDlgParent );
1025cdf0e10cSrcweir             }
1026cdf0e10cSrcweir             else
1027cdf0e10cSrcweir                 GetLinkManager().UpdateAllLinks( bAskUpdate, sal_True, sal_False, pDlgParent );
1028cdf0e10cSrcweir         }
1029cdf0e10cSrcweir     }
1030cdf0e10cSrcweir 
1031cdf0e10cSrcweir }
1032cdf0e10cSrcweir // <--
1033cdf0e10cSrcweir // --> OD 2006-04-19 #b6375613#
SetApplyWorkaroundForB6375613(bool p_bApplyWorkaroundForB6375613)1034cdf0e10cSrcweir void SwDoc::SetApplyWorkaroundForB6375613( bool p_bApplyWorkaroundForB6375613 )
1035cdf0e10cSrcweir {
1036cdf0e10cSrcweir     if ( mbApplyWorkaroundForB6375613 != p_bApplyWorkaroundForB6375613 )
1037cdf0e10cSrcweir     {
1038cdf0e10cSrcweir         mbApplyWorkaroundForB6375613 = p_bApplyWorkaroundForB6375613;
1039cdf0e10cSrcweir 
1040cdf0e10cSrcweir         uno::Reference< document::XDocumentInfoSupplier > xDoc(
1041cdf0e10cSrcweir                                                 GetDocShell()->GetBaseModel(),
1042cdf0e10cSrcweir                                                 uno::UNO_QUERY);
1043cdf0e10cSrcweir         if ( xDoc.is() )
1044cdf0e10cSrcweir         {
1045cdf0e10cSrcweir             uno::Reference< beans::XPropertyContainer > xDocInfo(
1046cdf0e10cSrcweir                                                         xDoc->getDocumentInfo(),
1047cdf0e10cSrcweir                                                         uno::UNO_QUERY );
1048cdf0e10cSrcweir             if ( xDocInfo.is() )
1049cdf0e10cSrcweir             {
1050cdf0e10cSrcweir                 try
1051cdf0e10cSrcweir                 {
1052cdf0e10cSrcweir                     if ( mbApplyWorkaroundForB6375613 )
1053cdf0e10cSrcweir                     {
1054cdf0e10cSrcweir                         xDocInfo->addProperty(
1055cdf0e10cSrcweir                             rtl::OUString::createFromAscii("WorkaroundForB6375613Applied"),
1056cdf0e10cSrcweir                             beans::PropertyAttribute::TRANSIENT | beans::PropertyAttribute::REMOVABLE,
1057cdf0e10cSrcweir                             uno::makeAny( false ) );
1058cdf0e10cSrcweir                     }
1059cdf0e10cSrcweir                     else
1060cdf0e10cSrcweir                     {
1061cdf0e10cSrcweir                         xDocInfo->removeProperty( rtl::OUString::createFromAscii("WorkaroundForB6375613Applied") );
1062cdf0e10cSrcweir                     }
1063cdf0e10cSrcweir                 }
1064cdf0e10cSrcweir                 catch( uno::Exception& )
1065cdf0e10cSrcweir                 {
1066cdf0e10cSrcweir                 }
1067cdf0e10cSrcweir             }
1068cdf0e10cSrcweir         }
1069cdf0e10cSrcweir     }
1070cdf0e10cSrcweir }
1071cdf0e10cSrcweir // <--
1072cdf0e10cSrcweir 
1073cdf0e10cSrcweir ::sfx2::IXmlIdRegistry&
GetXmlIdRegistry()1074cdf0e10cSrcweir SwDoc::GetXmlIdRegistry()
1075cdf0e10cSrcweir {
1076cdf0e10cSrcweir     // UGLY: this relies on SetClipBoard being called before GetXmlIdRegistry!
1077cdf0e10cSrcweir     if (!m_pXmlIdRegistry.get())
1078cdf0e10cSrcweir     {
1079cdf0e10cSrcweir         m_pXmlIdRegistry.reset( ::sfx2::createXmlIdRegistry( IsClipBoard() ) );
1080cdf0e10cSrcweir     }
1081cdf0e10cSrcweir     return *m_pXmlIdRegistry;
1082cdf0e10cSrcweir }
1083cdf0e10cSrcweir 
1084cdf0e10cSrcweir ::sw::MetaFieldManager &
GetMetaFieldManager()1085cdf0e10cSrcweir SwDoc::GetMetaFieldManager()
1086cdf0e10cSrcweir {
1087cdf0e10cSrcweir     return *m_pMetaFieldManager;
1088cdf0e10cSrcweir }
1089cdf0e10cSrcweir 
1090cdf0e10cSrcweir ::sw::UndoManager &
GetUndoManager()1091cdf0e10cSrcweir SwDoc::GetUndoManager()
1092cdf0e10cSrcweir {
1093cdf0e10cSrcweir     return *m_pUndoManager;
1094cdf0e10cSrcweir }
1095cdf0e10cSrcweir 
1096cdf0e10cSrcweir ::sw::UndoManager const&
GetUndoManager() const1097cdf0e10cSrcweir SwDoc::GetUndoManager() const
1098cdf0e10cSrcweir {
1099cdf0e10cSrcweir     return *m_pUndoManager;
1100cdf0e10cSrcweir }
1101cdf0e10cSrcweir 
1102cdf0e10cSrcweir IDocumentUndoRedo &
GetIDocumentUndoRedo()1103cdf0e10cSrcweir SwDoc::GetIDocumentUndoRedo()
1104cdf0e10cSrcweir {
1105cdf0e10cSrcweir     return *m_pUndoManager;
1106cdf0e10cSrcweir }
1107cdf0e10cSrcweir 
1108cdf0e10cSrcweir IDocumentUndoRedo const&
GetIDocumentUndoRedo() const1109cdf0e10cSrcweir SwDoc::GetIDocumentUndoRedo() const
1110cdf0e10cSrcweir {
1111cdf0e10cSrcweir     return *m_pUndoManager;
1112cdf0e10cSrcweir }
1113cdf0e10cSrcweir 
InitTOXTypes()1114cdf0e10cSrcweir void SwDoc::InitTOXTypes()
1115cdf0e10cSrcweir {
1116cdf0e10cSrcweir    ShellResource* pShellRes = ViewShell::GetShellRes();
1117cdf0e10cSrcweir    SwTOXType * pNew = new SwTOXType(TOX_CONTENT,   pShellRes->aTOXContentName        );
1118cdf0e10cSrcweir    pTOXTypes->Insert( pNew, pTOXTypes->Count() );
1119cdf0e10cSrcweir    pNew = new SwTOXType(TOX_INDEX,                 pShellRes->aTOXIndexName  );
1120cdf0e10cSrcweir    pTOXTypes->Insert( pNew, pTOXTypes->Count() );
1121cdf0e10cSrcweir    pNew = new SwTOXType(TOX_USER,                  pShellRes->aTOXUserName  );
1122cdf0e10cSrcweir    pTOXTypes->Insert( pNew, pTOXTypes->Count() );
1123cdf0e10cSrcweir    pNew = new SwTOXType(TOX_ILLUSTRATIONS,         pShellRes->aTOXIllustrationsName );
1124cdf0e10cSrcweir    pTOXTypes->Insert( pNew, pTOXTypes->Count() );
1125cdf0e10cSrcweir    pNew = new SwTOXType(TOX_OBJECTS,               pShellRes->aTOXObjectsName       );
1126cdf0e10cSrcweir    pTOXTypes->Insert( pNew, pTOXTypes->Count() );
1127cdf0e10cSrcweir    pNew = new SwTOXType(TOX_TABLES,                pShellRes->aTOXTablesName        );
1128cdf0e10cSrcweir    pTOXTypes->Insert( pNew, pTOXTypes->Count() );
1129cdf0e10cSrcweir    pNew = new SwTOXType(TOX_AUTHORITIES,           pShellRes->aTOXAuthoritiesName   );
1130cdf0e10cSrcweir    pTOXTypes->Insert( pNew, pTOXTypes->Count() );
1131cdf0e10cSrcweir }
1132cdf0e10cSrcweir 
1133cdf0e10cSrcweir /*-- 08.05.2009 10:07:57---------------------------------------------------
1134cdf0e10cSrcweir 
1135cdf0e10cSrcweir   -----------------------------------------------------------------------*/
CreateCopy(bool bCallInitNew) const1136cdf0e10cSrcweir SfxObjectShell* SwDoc::CreateCopy(bool bCallInitNew ) const
1137cdf0e10cSrcweir {
1138cdf0e10cSrcweir     SwDoc* pRet = new SwDoc;
1139cdf0e10cSrcweir     //copy settings
1140cdf0e10cSrcweir     sal_uInt16 __FAR_DATA aRangeOfDefaults[] = {
1141cdf0e10cSrcweir         RES_FRMATR_BEGIN, RES_FRMATR_END-1,
1142cdf0e10cSrcweir         RES_CHRATR_BEGIN, RES_CHRATR_END-1,
1143cdf0e10cSrcweir         RES_PARATR_BEGIN, RES_PARATR_END-1,
1144cdf0e10cSrcweir         // --> OD 2008-02-25 #refactorlists##
1145cdf0e10cSrcweir         RES_PARATR_LIST_BEGIN, RES_PARATR_LIST_END-1,
1146cdf0e10cSrcweir         // <--
1147cdf0e10cSrcweir         RES_UNKNOWNATR_BEGIN, RES_UNKNOWNATR_END-1,
1148cdf0e10cSrcweir         0
1149cdf0e10cSrcweir     };
1150cdf0e10cSrcweir 
1151cdf0e10cSrcweir     SfxItemSet aNewDefaults( pRet->GetAttrPool(), aRangeOfDefaults );
1152cdf0e10cSrcweir 
1153cdf0e10cSrcweir     sal_uInt16 nWhich;
1154cdf0e10cSrcweir     sal_uInt16 nRange = 0;
1155cdf0e10cSrcweir     while( aRangeOfDefaults[nRange] != 0)
1156cdf0e10cSrcweir     {
1157cdf0e10cSrcweir         for( nWhich = aRangeOfDefaults[nRange]; nWhich < aRangeOfDefaults[nRange + 1]; ++nWhich )
1158cdf0e10cSrcweir         {
1159cdf0e10cSrcweir             const SfxPoolItem& rSourceAttr = mpAttrPool->GetDefaultItem( nWhich );
1160cdf0e10cSrcweir             if( rSourceAttr != pRet->mpAttrPool->GetDefaultItem( nWhich ) )
1161cdf0e10cSrcweir                 aNewDefaults.Put( rSourceAttr );
1162cdf0e10cSrcweir         }
1163cdf0e10cSrcweir         nRange += 2;
1164cdf0e10cSrcweir     }
1165cdf0e10cSrcweir     if( aNewDefaults.Count() )
1166cdf0e10cSrcweir         pRet->SetDefault( aNewDefaults );
1167cdf0e10cSrcweir 
1168cdf0e10cSrcweir     pRet->n32DummyCompatabilityOptions1 = n32DummyCompatabilityOptions1;
1169cdf0e10cSrcweir     pRet->n32DummyCompatabilityOptions2 = n32DummyCompatabilityOptions2;
1170cdf0e10cSrcweir     pRet->mbParaSpaceMax                          = mbParaSpaceMax                          ;
1171cdf0e10cSrcweir     pRet->mbParaSpaceMaxAtPages                   = mbParaSpaceMaxAtPages                   ;
1172cdf0e10cSrcweir     pRet->mbTabCompat                             = mbTabCompat                             ;
1173cdf0e10cSrcweir     pRet->mbUseVirtualDevice                      = mbUseVirtualDevice                      ;
1174cdf0e10cSrcweir     pRet->mbAddExternalLeading                    = mbAddExternalLeading                    ;
1175cdf0e10cSrcweir     pRet->mbOldLineSpacing                        = mbOldLineSpacing                        ;
1176cdf0e10cSrcweir     pRet->mbAddParaSpacingToTableCells            = mbAddParaSpacingToTableCells            ;
1177cdf0e10cSrcweir     pRet->mbUseFormerObjectPos                    = mbUseFormerObjectPos                    ;
1178cdf0e10cSrcweir     pRet->mbUseFormerTextWrapping                 = mbUseFormerTextWrapping                 ;
1179cdf0e10cSrcweir     pRet->mbConsiderWrapOnObjPos                  = mbConsiderWrapOnObjPos                  ;
1180cdf0e10cSrcweir     pRet->mbAddFlyOffsets                         = mbAddFlyOffsets                         ;
1181cdf0e10cSrcweir     pRet->mbOldNumbering                          = mbOldNumbering                          ;
1182cdf0e10cSrcweir     pRet->mbUseHiResolutionVirtualDevice          = mbUseHiResolutionVirtualDevice          ;
1183cdf0e10cSrcweir     pRet->mbIgnoreFirstLineIndentInNumbering      = mbIgnoreFirstLineIndentInNumbering      ;
1184cdf0e10cSrcweir     pRet->mbDoNotJustifyLinesWithManualBreak      = mbDoNotJustifyLinesWithManualBreak      ;
1185cdf0e10cSrcweir     pRet->mbDoNotResetParaAttrsForNumFont         = mbDoNotResetParaAttrsForNumFont         ;
1186cdf0e10cSrcweir     pRet->mbOutlineLevelYieldsOutlineRule         = mbOutlineLevelYieldsOutlineRule         ;
1187cdf0e10cSrcweir     pRet->mbTableRowKeep                          = mbTableRowKeep                          ;
1188cdf0e10cSrcweir     pRet->mbIgnoreTabsAndBlanksForLineCalculation = mbIgnoreTabsAndBlanksForLineCalculation ;
1189cdf0e10cSrcweir     pRet->mbDoNotCaptureDrawObjsOnPage            = mbDoNotCaptureDrawObjsOnPage            ;
1190cdf0e10cSrcweir     pRet->mbClipAsCharacterAnchoredWriterFlyFrames= mbClipAsCharacterAnchoredWriterFlyFrames;
1191cdf0e10cSrcweir     pRet->mbUnixForceZeroExtLeading               = mbUnixForceZeroExtLeading               ;
1192cdf0e10cSrcweir     pRet->mbOldPrinterMetrics                     = mbOldPrinterMetrics                     ;
1193cdf0e10cSrcweir     pRet->mbTabRelativeToIndent                   = mbTabRelativeToIndent                   ;
1194cdf0e10cSrcweir     pRet->mbTabAtLeftIndentForParagraphsInList    = mbTabAtLeftIndentForParagraphsInList    ;
1195cdf0e10cSrcweir 
1196cdf0e10cSrcweir     //
1197cdf0e10cSrcweir     // COMPATIBILITY FLAGS END
1198cdf0e10cSrcweir     //
1199cdf0e10cSrcweir     pRet->ReplaceStyles( * const_cast< SwDoc*>( this ));
1200cdf0e10cSrcweir 
1201cdf0e10cSrcweir     // we have to use pointer here, since the callee has to decide whether SfxObjectShellLock or SfxObjectShellRef should be used
1202cdf0e10cSrcweir     // sometimes the object will be returned with refcount set to 0 ( if no DoInitNew is done )
1203cdf0e10cSrcweir     SfxObjectShell* pRetShell = new SwDocShell( pRet, SFX_CREATE_MODE_STANDARD );
1204cdf0e10cSrcweir     if( bCallInitNew )
1205cdf0e10cSrcweir     {
1206cdf0e10cSrcweir         // it could happen that DoInitNew creates model, that increases the refcount of the object
1207cdf0e10cSrcweir         pRetShell->DoInitNew();
1208cdf0e10cSrcweir     }
1209cdf0e10cSrcweir 
1210cdf0e10cSrcweir     //copy content
1211cdf0e10cSrcweir     pRet->Paste( *this );
1212cdf0e10cSrcweir 
1213cdf0e10cSrcweir     // remove the temporary shell if it is there as it was done before
12140a0f730bSArmin Le Grand     if(pRet->GetTmpDocShell())
12150a0f730bSArmin Le Grand     {
12160a0f730bSArmin Le Grand         // #123914# If we get here, SwOLENode::MakeCopy had to create a temporary
12170a0f730bSArmin Le Grand         // SwDocShell to have a SvPersist as a target for the OLE data to be copied.
12180a0f730bSArmin Le Grand         // It is reset by a call to SetTmpDocShell(NULL), but in this case here
12190a0f730bSArmin Le Grand         // there is no other ref holder to the just cloned SwDoc. Thus - to prevent
12200a0f730bSArmin Le Grand         // it's immediate deletion - it is required to hold a fercunt to it during
12210a0f730bSArmin Le Grand         // the SetTmpDocShell call. This can be done with an instance of a class
12220a0f730bSArmin Le Grand         // holding a SwDoc, but most simple using acquire/release on the SwDoc
12230a0f730bSArmin Le Grand         // (as long as these are public, I was surprised. Also probably not
12240a0f730bSArmin Le Grand         // guaranteed for the future is that the release call does not delete the
12250a0f730bSArmin Le Grand         // SwDoc it gets called at, but currently works like this).
12260a0f730bSArmin Le Grand         pRet->acquire();
12270a0f730bSArmin Le Grand         pRet->SetTmpDocShell((SfxObjectShell*)NULL);
12280a0f730bSArmin Le Grand         pRet->release();
12290a0f730bSArmin Le Grand     }
12300a0f730bSArmin Le Grand 
12310a0f730bSArmin Le Grand     // remove the temporary shell if it is there as it was done before
12320a0f730bSArmin Le Grand     // pRet->SetTmpDocShell( (SfxObjectShell*)NULL );
1233cdf0e10cSrcweir 
1234cdf0e10cSrcweir     return pRetShell;
1235cdf0e10cSrcweir }
1236cdf0e10cSrcweir /*-- 08.05.2009 10:52:40---------------------------------------------------
1237cdf0e10cSrcweir     copy document content - code from SwFEShell::Paste( SwDoc* , sal_Bool  )
1238cdf0e10cSrcweir   -----------------------------------------------------------------------*/
Paste(const SwDoc & rSource)1239cdf0e10cSrcweir void SwDoc::Paste( const SwDoc& rSource )
1240cdf0e10cSrcweir {
1241cdf0e10cSrcweir //  this has to be empty const sal_uInt16 nStartPageNumber = GetPhyPageNum();
1242cdf0e10cSrcweir     // until the end of the NodesArray
1243cdf0e10cSrcweir     SwNodeIndex aSourceIdx( rSource.GetNodes().GetEndOfExtras(), 2 );
1244cdf0e10cSrcweir     SwPaM aCpyPam( aSourceIdx ); //DocStart
1245cdf0e10cSrcweir     SwNodeIndex aTargetIdx( GetNodes().GetEndOfExtras(), 2 );
1246cdf0e10cSrcweir     SwPaM aInsertPam( aTargetIdx ); //replaces PCURCRSR from SwFEShell::Paste()
1247cdf0e10cSrcweir 
1248cdf0e10cSrcweir 
1249cdf0e10cSrcweir     aCpyPam.SetMark();
1250cdf0e10cSrcweir     aCpyPam.Move( fnMoveForward, fnGoDoc );
1251cdf0e10cSrcweir 
1252cdf0e10cSrcweir     this->GetIDocumentUndoRedo().StartUndo( UNDO_INSGLOSSARY, NULL );
1253cdf0e10cSrcweir     this->LockExpFlds();
1254cdf0e10cSrcweir 
1255cdf0e10cSrcweir     {
1256cdf0e10cSrcweir         SwPosition& rInsPos = *aInsertPam.GetPoint();
1257cdf0e10cSrcweir         //find out if the clipboard document starts with a table
1258cdf0e10cSrcweir         bool bStartWithTable = 0 != aCpyPam.Start()->nNode.GetNode().FindTableNode();
1259cdf0e10cSrcweir         SwPosition aInsertPosition( rInsPos );
1260cdf0e10cSrcweir 
1261cdf0e10cSrcweir         {
1262cdf0e10cSrcweir             SwNodeIndex aIndexBefore(rInsPos.nNode);
1263cdf0e10cSrcweir 
1264cdf0e10cSrcweir             aIndexBefore--;
1265cdf0e10cSrcweir 
1266cdf0e10cSrcweir             rSource.CopyRange( aCpyPam, rInsPos, true );
1267cdf0e10cSrcweir 
1268cdf0e10cSrcweir             {
1269cdf0e10cSrcweir                 aIndexBefore++;
1270cdf0e10cSrcweir                 SwPaM aPaM(SwPosition(aIndexBefore),
1271cdf0e10cSrcweir                            SwPosition(rInsPos.nNode));
1272cdf0e10cSrcweir 
1273cdf0e10cSrcweir                 MakeUniqueNumRules(aPaM);
1274cdf0e10cSrcweir             }
1275cdf0e10cSrcweir         }
1276cdf0e10cSrcweir 
1277cdf0e10cSrcweir         //TODO: Is this necessary here? SaveTblBoxCntnt( &rInsPos );
1278cdf0e10cSrcweir         if(/*bIncludingPageFrames && */bStartWithTable)
1279cdf0e10cSrcweir         {
1280cdf0e10cSrcweir             //remove the paragraph in front of the table
1281cdf0e10cSrcweir             SwPaM aPara(aInsertPosition);
1282cdf0e10cSrcweir             this->DelFullPara(aPara);
1283cdf0e10cSrcweir         }
1284cdf0e10cSrcweir         //additionally copy page bound frames
1285cdf0e10cSrcweir         if( /*bIncludingPageFrames && */rSource.GetSpzFrmFmts()->Count() )
1286cdf0e10cSrcweir         {
1287cdf0e10cSrcweir             for ( sal_uInt16 i = 0; i < rSource.GetSpzFrmFmts()->Count(); ++i )
1288cdf0e10cSrcweir             {
1289cdf0e10cSrcweir                 sal_Bool bInsWithFmt = sal_True;
1290cdf0e10cSrcweir                 const SwFrmFmt& rCpyFmt = *(*rSource.GetSpzFrmFmts())[i];
1291cdf0e10cSrcweir                 if( bInsWithFmt  )
1292cdf0e10cSrcweir                 {
1293cdf0e10cSrcweir                     SwFmtAnchor aAnchor( rCpyFmt.GetAnchor() );
1294cdf0e10cSrcweir                     if (FLY_AT_PAGE == aAnchor.GetAnchorId())
1295cdf0e10cSrcweir                     {
1296cdf0e10cSrcweir                         aAnchor.SetPageNum( aAnchor.GetPageNum() /*+ nStartPageNumber - */);
1297cdf0e10cSrcweir                     }
1298cdf0e10cSrcweir                     else
1299cdf0e10cSrcweir                         continue;
1300cdf0e10cSrcweir                     this->CopyLayoutFmt( rCpyFmt, aAnchor, true, true );
1301cdf0e10cSrcweir                 }
1302cdf0e10cSrcweir             }
1303cdf0e10cSrcweir         }
1304cdf0e10cSrcweir     }
1305cdf0e10cSrcweir 
1306cdf0e10cSrcweir     this->GetIDocumentUndoRedo().EndUndo( UNDO_INSGLOSSARY, NULL );
1307cdf0e10cSrcweir 
1308cdf0e10cSrcweir     UnlockExpFlds();
1309cdf0e10cSrcweir     UpdateFlds(NULL, false);
1310cdf0e10cSrcweir }
1311