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