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