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