xref: /trunk/main/sw/inc/doc.hxx (revision 8bfab1df)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 #ifndef SW_DOC_HXX
28 #define SW_DOC_HXX
29 
30 /** SwDoc interfaces */
31 
32 #include <IInterface.hxx>
33 #include <IDocumentSettingAccess.hxx>
34 #include <IDocumentDeviceAccess.hxx>
35 #include <IDocumentMarkAccess.hxx>
36 #include <IDocumentRedlineAccess.hxx>
37 #include <IDocumentLinksAdministration.hxx>
38 #include <IDocumentFieldsAccess.hxx>
39 #include <IDocumentContentOperations.hxx>
40 #include <IDocumentStylePoolAccess.hxx>
41 #include <IDocumentLineNumberAccess.hxx>
42 #include <IDocumentStatistics.hxx>
43 #include <IDocumentState.hxx>
44 #include <IDocumentDrawModelAccess.hxx>
45 #include <IDocumentLayoutAccess.hxx>
46 #include <IDocumentTimerAccess.hxx>
47 #include <IDocumentChartDataProviderAccess.hxx>
48 // --> OD 2007-10-26 #i83479#
49 #include <IDocumentOutlineNodes.hxx>
50 #include <IDocumentListItems.hxx>
51 #include <set>
52 // <--
53 // --> OD 2008-03-12 #refactorlists#
54 #include <IDocumentListsAccess.hxx>
55 class SwList;
56 // <--
57 #include <IDocumentExternalData.hxx>
58 #define _SVSTDARR_STRINGSDTOR
59 #include <svl/svstdarr.hxx>
60 #include <com/sun/star/embed/XEmbeddedObject.hpp>
61 #include <com/sun/star/embed/XStorage.hpp>
62 #include <vcl/timer.hxx>
63 #include "swdllapi.h"
64 #include <swtypes.hxx>
65 #include <swatrset.hxx>
66 #include <toxe.hxx>   	  		// enums
67 #include <flyenum.hxx>
68 #include <itabenum.hxx>
69 #include <swdbdata.hxx>
70 #include <chcmprse.hxx>
71 #include <com/sun/star/linguistic2/XSpellChecker1.hpp>
72 #include <com/sun/star/linguistic2/XHyphenatedWord.hpp>
73 #include <vos/ref.hxx>
74 #include <svx/svdtypes.hxx>
75 #include <sfx2/objsh.hxx>
76 #include <svl/style.hxx>
77 #include <editeng/numitem.hxx>
78 #include "comphelper/implementationreference.hxx"
79 #include <com/sun/star/chart2/data/XDataProvider.hpp>
80 #include <com/sun/star/linguistic2/XProofreadingIterator.hpp>
81 #ifdef FUTURE_VBA
82 #include <com/sun/star/script/vba/XVBAEventProcessor.hpp>
83 #endif
84 
85 #include <hash_map>
86 #include <stringhash.hxx>
87 
88 #include <svtools/embedhlp.hxx>
89 #include <vector>
90 #include <set>
91 #include <map>
92 #include <memory>
93 
94 #include <boost/scoped_ptr.hpp>
95 #include <boost/shared_ptr.hpp>
96 
97 class SvxForbiddenCharactersTable;
98 class SwExtTextInput;
99 class DateTime;
100 class EditFieldInfo;
101 class JobSetup;
102 class Color;
103 class KeyCode;
104 class Outliner;
105 class OutputDevice;
106 class Point;
107 class SbxArray;
108 class SdrModel;
109 class SdrObject;
110 class SdrUndoAction;
111 class VirtualDevice;
112 class SfxPrinter;
113 class SvNumberFormatter;
114 class SvStringsSort;
115 class SvUShorts;
116 class SvUShortsSort;
117 class SvxMacro;
118 class SvxMacroTableDtor;
119 class SvxBorderLine;
120 class SwAutoCompleteWord;
121 class SwAutoCorrExceptWord;
122 class SwCalc;
123 class SwCellFrm;
124 class SwCharFmt;
125 class SwCharFmts;
126 class SwConditionTxtFmtColl;
127 class SwCrsrShell;
128 class SwCursor;
129 class SwDBNameInfField;
130 class SwDocShell;
131 class SwDocUpdtFld;
132 class SwDrawFrmFmt;
133 class SwDrawView;
134 class SwEditShell;
135 class SwFieldType;
136 class SwField;
137 class SwTxtFld;
138 class SwFldTypes;
139 class SwFlyFrmFmt;
140 class SwFmt;
141 class SwFmtINetFmt;
142 class SwFmtRefMark;
143 class SwFrmFmt;
144 class SwFrmFmts;
145 class SwFtnIdxs;
146 class SwFtnInfo;
147 class SwEndNoteInfo;
148 class GraphicObject;
149 class SwGrfFmtColl;
150 class SwGrfFmtColls;
151 class SwLineNumberInfo;
152 class SwNewDBMgr;
153 class SwNoTxtNode;
154 class SwNodeIndex;
155 class SwNodeRange;
156 class SwNodes;
157 class SwNumRule;
158 class SwNumRuleTbl;
159 class SwPageDesc;
160 class SwPosFlyFrms;
161 class SwPagePreViewPrtData;
162 class SwRedline;
163 class SwRedlineTbl;
164 class SwRootFrm;
165 class SwRubyList;
166 class SwRubyListEntry;
167 class SwSectionFmt;
168 class SwSectionFmts;
169 class SwSectionData;
170 class SwSelBoxes;
171 class SwSpzFrmFmts;
172 class SwTOXBase;
173 class SwTOXBaseSection;
174 class SwTOXMark;
175 class SwTOXMarks;
176 class SwTOXType;
177 class SwTOXTypes;
178 class SwTabCols;
179 class SwTable;
180 class SwTableAutoFmt;
181 class SwTableBox;
182 class SwTableBoxFmt;
183 class SwTableFmt;
184 class SwTableLineFmt;
185 class SwTableNode;
186 class SwTextBlocks;
187 class SwTxtFmtColl;
188 class SwTxtFmtColls;
189 class SwURLStateChanged;
190 class SwUnoCrsr;
191 class SwUnoCrsrTbl;
192 class ViewShell;
193 class _SetGetExpFld;
194 class SwDrawContact;
195 class SwLayouter;
196 class SdrView;
197 class SdrMarkList;
198 class SwAuthEntry;
199 class SwLayoutCache;
200 class IStyleAccess;
201 struct SwCallMouseEvent;
202 struct SwDocStat;
203 struct SwHash;
204 struct SwSortOptions;
205 struct SwDefTOXBase_Impl;
206 class SwPrintData;
207 class SwPrintUIOptions;
208 class SdrPageView;
209 struct SwConversionArgs;
210 class SwRewriter;
211 class SwMsgPoolItem;
212 class SwChartDataProvider;
213 class SwChartLockController_Helper;
214 class IGrammarContact;
215 class SwPrintData;
216 class SwRenderData;
217 class SwPageFrm;
218 class SwViewOption;
219 class IDocumentUndoRedo;
220 
221 namespace sw { namespace mark {
222     class MarkManager;
223 }}
224 namespace sw {
225     class MetaFieldManager;
226     class UndoManager;
227     class IShellCursorSupplier;
228 }
229 
230 namespace com { namespace sun { namespace star {
231 namespace i18n {
232 	struct ForbiddenCharacters;    // comes from the I18N UNO interface
233 }
234 namespace uno {
235 	template < class > class Sequence;
236 }
237 namespace container {
238 	class XNameContainer; // for getXForms()/isXForms()/initXForms() methods
239 }
240 }}}
241 
242 namespace sfx2 {
243 	class SvLinkSource;
244     class IXmlIdRegistry;
245     class LinkManager;
246 }
247 
248 //PageDescriptor-Schnittstelle, Array hier wegen inlines.
249 typedef SwPageDesc* SwPageDescPtr;
250 SV_DECL_PTRARR_DEL( SwPageDescs, SwPageDescPtr, 4, 4 )
251 
252 // forward declartion
253 void SetAllScriptItem( SfxItemSet& rSet, const SfxPoolItem& rItem );
254 
255 // global function to start grammar checking in the document
256 void StartGrammarChecking( SwDoc &rDoc );
257 
258 class SW_DLLPUBLIC SwDoc :
259     public IInterface,
260     public IDocumentSettingAccess,
261     public IDocumentDeviceAccess,
262     public IDocumentRedlineAccess,
263     public IDocumentLinksAdministration,
264     public IDocumentFieldsAccess,
265     public IDocumentContentOperations,
266     public IDocumentStylePoolAccess,
267     public IDocumentLineNumberAccess,
268     public IDocumentStatistics,
269     public IDocumentState,
270     public IDocumentDrawModelAccess,
271     public IDocumentLayoutAccess,
272     public IDocumentTimerAccess,
273     public IDocumentChartDataProviderAccess,
274     // --> OD 2007-10-26 #i83479#
275     public IDocumentListItems,
276     public IDocumentOutlineNodes,
277     // <--
278     // --> OD 2008-03-12 #refactorlists#
279     public IDocumentListsAccess,
280     // <--
281     public IDocumentExternalData
282 {
283 
284 	friend void _InitCore();
285 	friend void _FinitCore();
286 
287     //---------------- private Member --------------------------------
288 
289 	// -------------------------------------------------------------------
290     ::boost::scoped_ptr<SwNodes> m_pNodes;  /// document content (Nodes Array)
291 	SwAttrPool*	mpAttrPool;				// der Attribut Pool
292 	SwPageDescs	aPageDescs;				// PageDescriptoren
293 	Link 		aOle2Link;				// OLE 2.0-Benachrichtigung
294     /* @@@MAINTAINABILITY-HORROR@@@
295        Timer should not be members of the model
296     */
297     Timer       aIdleTimer;             // der eigene IdleTimer
298 	Timer		aOLEModifiedTimer; 		// Timer for update modified OLE-Objecs
299 	SwDBData	aDBData;				// database descriptor
300 	::com::sun::star::uno::Sequence <sal_Int8 > aRedlinePasswd;
301 	String		sTOIAutoMarkURL; 		// ::com::sun::star::util::URL of table of index AutoMark file
302 	SvStringsDtor aPatternNms;			// Array fuer die Namen der Dokument-Vorlagen
303 	com::sun::star::uno::Reference<com::sun::star::container::XNameContainer>
304         xXForms;                        // container with XForms models
305     mutable com::sun::star::uno::Reference< com::sun::star::linguistic2::XProofreadingIterator > m_xGCIterator;
306 
307     const ::boost::scoped_ptr< ::sw::mark::MarkManager> pMarkManager;
308     const ::boost::scoped_ptr< ::sw::MetaFieldManager > m_pMetaFieldManager;
309     const ::boost::scoped_ptr< ::sw::UndoManager > m_pUndoManager;
310 
311 	// -------------------------------------------------------------------
312 	// die Pointer
313 								//Defaultformate
314 	SwFrmFmt		*pDfltFrmFmt;
315  	SwFrmFmt		*pEmptyPageFmt;		// Format fuer die Default-Leerseite.
316 	SwFrmFmt		*pColumnContFmt; 	// Format fuer Spaltencontainer
317 	SwCharFmt		*pDfltCharFmt;
318 	SwTxtFmtColl	*pDfltTxtFmtColl;	// Defaultformatcollections
319 	SwGrfFmtColl	*pDfltGrfFmtColl;
320 
321 	SwFrmFmts		*pFrmFmtTbl;		// Formattabellen
322 	SwCharFmts		*pCharFmtTbl;
323 	SwSpzFrmFmts	*pSpzFrmFmtTbl;
324 	SwSectionFmts	*pSectionFmtTbl;
325 	SwFrmFmts		*pTblFrmFmtTbl;		// spz. fuer Tabellen
326 	SwTxtFmtColls	*pTxtFmtCollTbl;	// FormatCollections
327 	SwGrfFmtColls	*pGrfFmtCollTbl;
328 
329 	SwTOXTypes		*pTOXTypes;			// Verzeichnisse
330 	SwDefTOXBase_Impl * pDefTOXBases;	// defaults of SwTOXBase's
331 
332 	ViewShell		*pCurrentView;	// SwDoc should get a new member pCurrentView//swmod 071225
333 	boost::shared_ptr<SwRootFrm> pLayoutPtr;
334 	SdrModel		*pDrawModel;		// StarView Drawing
335 
336 	SwDocUpdtFld 	*pUpdtFlds;			// Struktur zum Field-Update
337 	SwFldTypes		*pFldTypes;			// Feldtypen
338 	SwNewDBMgr 		*pNewDBMgr;			// Pointer auf den neuen DBMgr fuer
339 										// Evaluierung der DB-Fields
340 
341     VirtualDevice   *pVirDev;           // can be used for formatting
342     SfxPrinter      *pPrt;              // can be used for formatting
343     SwPrintData     *pPrtData;          // Print configuration
344 
345 	SwDoc			*pGlossaryDoc;		// Pointer auf das Glossary-Dokument. Dieses
346 
347 	SwNumRule		*pOutlineRule;
348 	SwFtnInfo		*pFtnInfo;
349 	SwEndNoteInfo 	*pEndNoteInfo;
350     SwLineNumberInfo*pLineNumberInfo;
351 	SwFtnIdxs		*pFtnIdxs;
352 	SwDocStat		*pDocStat;			// Statistic Informationen
353 	SvxMacroTableDtor *pMacroTable; 	// Tabelle der dokumentglobalen Macros
354 
355 	SwDocShell		*pDocShell;			// Ptr auf die SfxDocShell vom Doc
356     SfxObjectShellLock xTmpDocShell;    // A temporary shell that is used to copy OLE-Nodes
357 
358 	sfx2::LinkManager	*pLinkMgr;			// Liste von Verknuepften (Grafiken/DDE/OLE)
359 
360 	SwAutoCorrExceptWord *pACEWord;		// fuer die automatische Uebernahme von
361 										// autokorrigierten Woertern, die "zurueck"
362 										// verbessert werden
363 	SwURLStateChanged *pURLStateChgd;	// SfxClient fuer Aenderungen in der
364 										// INetHistory
365 	SvNumberFormatter *pNumberFormatter;	// NumFormatter fuer die Tabellen/Felder
366 
367     mutable SwNumRuleTbl    *pNumRuleTbl;           // Liste aller benannten NumRules
368 
369     // Hash map to find numrules by name
370     mutable std::hash_map<String, SwNumRule *, StringHash> maNumRuleMap;
371 
372     // --> OD 2008-03-12 #refactorlists#
373     typedef std::hash_map< String, SwList*, StringHash > tHashMapForLists;
374     // container to hold the lists of the text document
375     tHashMapForLists maLists;
376     // relation between list style and its default list
377     tHashMapForLists maListStyleLists;
378     // <--
379 
380 	SwRedlineTbl	*pRedlineTbl;			// Liste aller Redlines
381 	String			*pAutoFmtRedlnComment;	// Kommentar fuer Redlines, die
382 										// uebers Autoformat eingefuegt werden
383 	SwUnoCrsrTbl	*pUnoCrsrTbl;
384 
385 	SwPagePreViewPrtData *pPgPViewPrtData;		// Einzuege/Abstaende fuers
386 										// Drucken der Seitenansicht
387 	SwPaM			*pExtInputRing;
388 
389 	SwLayouter		*pLayouter;		// ::com::sun::star::frame::Controller for complex layout formatting
390 									// like footnote/endnote in sections
391     IStyleAccess    *pStyleAccess;  // handling of automatic styles
392     SwLayoutCache   *pLayoutCache;  // Layout cache to read and save with the
393                                     // document for a faster formatting
394 
395     SwModify *pUnoCallBack;
396     IGrammarContact *mpGrammarContact;   // for grammar checking in paragraphs during editing
397 
398     mutable  comphelper::ImplementationReference< SwChartDataProvider
399         , ::com::sun::star::chart2::data::XDataProvider >
400                                 aChartDataProviderImplRef;
401     SwChartLockController_Helper  *pChartControllerHelper;
402 
403 	// table of forbidden characters of this document
404 	vos::ORef<SvxForbiddenCharactersTable>	xForbiddenCharsTable;
405 #ifdef FUTURE_VBA
406     com::sun::star::uno::Reference< com::sun::star::script::vba::XVBAEventProcessor > mxVbaEvents;
407 #endif
408     // --> OD 2007-10-26 #i83479#
409 public:
410     struct lessThanNodeNum
411     {
412         bool operator()( const SwNodeNum* pNodeNumOne,
413                          const SwNodeNum* pNodeNumTwo ) const;
414     };
415 
416     typedef ::std::set< const SwNodeNum*, lessThanNodeNum > tImplSortedNodeNumList;
417 private:
418     tImplSortedNodeNumList* mpListItemsList;
419     // <--
420 
421     ::std::auto_ptr< ::sfx2::IXmlIdRegistry > m_pXmlIdRegistry;
422 
423 	// -------------------------------------------------------------------
424 	// sonstige
425 
426 	sal_uInt16 nAutoFmtRedlnCommentNo;	// SeqNo fuers UI-seitige zusammenfassen
427 									// von AutoFmt-Redlines. Wird vom SwAutoFmt
428 									// verwaltet!
429 	sal_uInt16	nLinkUpdMode;		// UpdateMode fuer Links
430     SwFldUpdateFlags    eFldUpdMode;        // Mode fuer Felder/Charts automatisch aktualisieren
431 	RedlineMode_t eRedlineMode;		// aktueller Redline Modus
432 	SwCharCompressType eChrCmprType;	// for ASIAN: compress punctuation/kana
433 
434     sal_Int32   mReferenceCount;
435     sal_Int32   mIdleBlockCount;
436 	sal_Int8	nLockExpFld;		// Wenn != 0 hat UpdateExpFlds() keine Wirkung
437 
438     /* Draw Model Layer IDs
439      * LayerIds, Heaven == ueber dem Dokument
440      * Hell   == unter dem Dokument
441      * Controls == ganz oben
442      */
443     SdrLayerID  nHeaven;
444     SdrLayerID  nHell;
445     SdrLayerID  nControls;
446     SdrLayerID  nInvisibleHeaven;
447     SdrLayerID  nInvisibleHell;
448     SdrLayerID  nInvisibleControls;
449 
450     bool mbGlossDoc              : 1;    //sal_True: ist ein Textbaustein Dokument
451     bool mbModified              : 1;    //sal_True: Dokument ist veraendert
452     bool mbDtor                  : 1;    //sal_True: ist im SwDoc DTOR
453                                          //      leider auch temporaer von
454                                          //      SwSwgReader::InLayout(), wenn fehlerhafte
455                                          //      Frames geloescht werden muessen
456     bool mbPageNums              : 1;    // TRUE: es gibt virtuelle Seitennummern
457     bool mbLoaded                : 1;    // TRUE: ein geladenes Doc
458     bool mbUpdateExpFld          : 1;    // TRUE: Expression-Felder updaten
459     bool mbNewDoc                : 1;    // TRUE: neues Doc
460     bool mbNewFldLst             : 1;    // TRUE: Felder-Liste neu aufbauen
461     bool mbCopyIsMove            : 1;    // TRUE: Copy ist ein verstecktes Move
462     bool mbVisibleLinks          : 1;    // TRUE: Links werden sichtbar eingefuegt
463     bool mbInReading             : 1;    // TRUE: Dokument wird gerade gelesen
464     bool mbInXMLImport           : 1;    // TRUE: During xml import, attribute portion building is not necessary
465     bool mbUpdateTOX             : 1;    // TRUE: nach Dokument laden die TOX Updaten
466     bool mbInLoadAsynchron       : 1;    // TRUE: Dokument wird gerade asynchron geladen
467     bool mbHTMLMode              : 1;    // TRUE: Dokument ist im HTMLMode
468     bool mbInCallModified        : 1;    // TRUE: im Set/Reset-Modified Link
469     bool mbIsGlobalDoc           : 1;    // TRUE: es ist ein GlobalDokument
470     bool mbGlblDocSaveLinks      : 1;    // TRUE: im GlobalDoc. gelinkte Sect. mit speichern
471     bool mbIsLabelDoc            : 1;    // TRUE: es ist ein Etiketten-Dokument
472     bool mbIsAutoFmtRedline      : 1;    // TRUE: die Redlines werden vom Autoformat aufgezeichnet
473     bool mbOLEPrtNotifyPending   : 1;    // TRUE: Printer  ist geaendert und beim
474                                          //       Erzeugen der ::com::sun::star::sdbcx::View ist eine Benachrichtigung
475                                          //       der OLE-Objekte PrtOLENotify() notwendig.
476     bool mbAllOLENotify          : 1;    // True: Benachrichtigung aller Objekte ist notwendig
477     bool mbIsRedlineMove         : 1;    // True: die Redlines werden in/aus der Section verschoben
478     bool mbInsOnlyTxtGlssry      : 1;    // True: insert 'only text' glossary into doc
479     bool mbContains_MSVBasic     : 1;    // True: MS-VBasic exist is in our storage
480     bool mbPurgeOLE              : 1;    // sal_True: Purge OLE-Objects
481     bool mbKernAsianPunctuation  : 1;    // sal_True: kerning also for ASIAN punctuation
482     bool mbReadlineChecked       : 1;    // sal_True: if the query was already shown
483     bool mbLinksUpdated          : 1;    // OD 2005-02-11 #i38810#
484                                          // flag indicating, that the links have been updated.
485     bool mbClipBoard             : 1;    // true: this document represents the clipboard
486     bool mbColumnSelection       : 1;    // true: this content has bee created by a column selection
487                                          //       (clipboard docs only)
488 
489 #ifdef DBG_UTIL
490     bool mbXMLExport : 1;                // sal_True: during XML export
491 #endif
492 
493     // --> OD 2006-03-21 #b6375613#
494     // Document flag to trigger conversion, which applys the workaround for documents,
495     // which uses a certain layout defect in OOo 1.x to layout the documents.
496     // This conversion is performed, when the frames for the layout are created.
497     // Thus, this document flag has to be set after load a document and before
498     // creating the document view.
499     bool mbApplyWorkaroundForB6375613 : 1;
500     // <--
501 
502     //
503     // COMPATIBILITY FLAGS START
504     //
505     //
506     // HISTORY OF THE COMPATIBILITY FLAGS:
507     //
508     // SO5:
509     // mbParaSpaceMax                        def = sal_False, sal_True since SO8
510     // mbParaSpaceMaxAtPages                 def = sal_False, sal_True since SO8
511     //
512     // SO6:
513     // mbTabCompat                           def = sal_False, sal_True since SO8
514     //
515     // SO7:
516     // mbUseVirtualDevice                    def = sal_True
517     // mbAddFlyOffsets                       def = sal_False, hidden
518     //
519     // SO7pp1:
520     // bOldNumbering                        def = sal_False, hidden
521     //
522     // SO8:
523     // mbAddExternalLeading                  def = sal_True
524     // mbUseHiResolutionVirtualDevice        def = sal_True, hidden
525     // mbOldLineSpacing                      def = sal_False
526     // mbAddParaSpacingToTableCells          def = sal_True
527     // mbUseFormerObjectPos                  def = sal_False
528     // mbUseFormerTextWrapping               def = sal_False
529     // mbConsiderWrapOnObjPos                def = sal_False
530     //
531     // SO8pp1:
532     // mbIgnoreFirstLineIndentInNumbering    def = sal_False, hidden
533     // mbDoNotJustifyLinesWithManualBreak    def = sal_False, hidden
534     // mbDoNotResetParaAttrsForNumFont       def = sal_False, hidden
535     //
536     // SO8pp3
537     // mbDoNotCaptureDrawObjsOnPage         def = sal_False, hidden
538     // - Relevant for drawing objects, which don't follow the text flow, but
539     //   whose position is outside the page area:
540     //   sal_False: Such drawing objects are captured on the page area of its anchor.
541     //   sal_True: Such drawing objects can leave the page area, they aren't captured.
542     // mbTableRowKeep                            def = sal_False, hidden
543     // mbIgnoreTabsAndBlanksForLineCalculation   def = sal_False, hidden
544     // mbClipAsCharacterAnchoredWriterFlyFrame   def = sal_False, hidden
545     // - Introduced in order to re-activate clipping of as-character anchored
546     //   Writer fly frames in method <SwFlyInCntFrm::MakeAll()> for documents,
547     //   which are created with version prior SO8/OOo 2.0
548     //
549     // SO8pp4
550     // mbUnixForceZeroExtLeading                def = sal_False, hidden
551     //
552     // SO8pu8
553     // mbOldPrinterMetrics                      def = sal_False, hidden
554     //
555     // SO9
556     // #i24363# tab stops relative to indent
557     // mbTabRelativeToIndent                    def = sal_True, hidden
558     // #i89181# suppress tab stop at left indent for paragraphs in lists, whose
559     // list level position and space mode equals LABEL_ALIGNMENT and whose list
560     // label is followed by a tab character.
561     // mbTabAtLeftIndentForParagraphsInList     def = sal_False, hidden
562 
563     bool mbParaSpaceMax                     : 1;
564     bool mbParaSpaceMaxAtPages              : 1;
565     bool mbTabCompat                        : 1;
566     bool mbUseVirtualDevice                 : 1;
567     bool mbAddFlyOffsets                    : 1;
568     bool mbAddExternalLeading               : 1;
569     bool mbUseHiResolutionVirtualDevice     : 1;
570     bool mbOldLineSpacing                   : 1;    // OD  2004-01-06 #i11859#
571     bool mbAddParaSpacingToTableCells       : 1;    // OD  2004-02-16 #106629#
572     bool mbUseFormerObjectPos               : 1;    // OD  2004-03-12 #i11860#
573     bool mbUseFormerTextWrapping            : 1;    // FME 2005-05-11 #108724#
574     bool mbConsiderWrapOnObjPos             : 1;    // OD  2004-05-05 #i28701#
575                                                     // sal_True: object positioning algorithm has consider the wrapping style of                                                    //       the floating screen objects as given by its attribute 'WrapInfluenceOnObjPos'
576     bool mbMathBaselineAlignment            : 1;    // TL  2010-10-29 #i972#
577 
578     // non-ui-compatibility flags:
579     bool mbOldNumbering                             : 1;   // HBRINKM #111955#
580     bool mbIgnoreFirstLineIndentInNumbering         : 1;   // FME 2005-05-30# i47448#
581     bool mbDoNotJustifyLinesWithManualBreak         : 1;   // FME 2005-06-08 #i49277#
582     bool mbDoNotResetParaAttrsForNumFont            : 1;   // FME 2005-08-11 #i53199#
583     bool mbTableRowKeep                             : 1;   // FME 2006-02-10 #131283#
584     bool mbIgnoreTabsAndBlanksForLineCalculation    : 1;   // FME 2006-03-01 #i3952#
585     bool mbDoNotCaptureDrawObjsOnPage               : 1;   // OD 2006-03-14 #i62875#
586     bool mbOutlineLevelYieldsOutlineRule            : 1;
587     bool mbClipAsCharacterAnchoredWriterFlyFrames   : 1;   // OD 2006-04-13 #b6402800#
588     bool mbUnixForceZeroExtLeading                  : 1;   // FME 2006-10-09 #i60945#
589     bool mbOldPrinterMetrics                        : 1;   // FME 2007-05-14 #147385#
590     bool mbTabRelativeToIndent                      : 1;   // #i24363# tab stops relative to indent
591     bool mbProtectForm                              : 1;
592     bool mbTabAtLeftIndentForParagraphsInList;             // OD 2008-06-05 #i89181# - see above
593 
594     bool mbLastBrowseMode                           : 1;
595 
596 	// #i78591#
597 	sal_uInt32  n32DummyCompatabilityOptions1;
598 	sal_uInt32  n32DummyCompatabilityOptions2;
599     //
600     // COMPATIBILITY FLAGS END
601     //
602 
603     sal_Bool    mbStartIdleTimer                 ;    // idle timer mode start/stop
604 
605 	bool		mbSetDrawDefaults				 ;	  // set draw pool defaults for freshly created documents
606 
607 	static SwAutoCompleteWord *pACmpltWords;	// Liste aller Worte fuers AutoComplete
608 
609 	//---------------- private Methoden ------------------------------
610 	void checkRedlining(RedlineMode_t& _rReadlineMode);
611 
612 	DECL_LINK( AddDrawUndo, SdrUndoAction * );
613 										// DrawModel
614 	void DrawNotifyUndoHdl();	// wegen CLOOKs
615 
616 		// nur fuer den internen Gebrauch deshalb privat.
617 		// Kopieren eines Bereiches im oder in ein anderes Dokument !
618 		// Die Position darf nicht im Bereich liegen !!
619     bool CopyImpl( SwPaM&, SwPosition&, const bool MakeNewFrms /*= true */,
620             const bool bCopyAll, SwPaM *const pCpyRng /*= 0*/ ) const;
621 
622 	SwFlyFrmFmt* _MakeFlySection( const SwPosition& rAnchPos,
623 								const SwCntntNode& rNode, RndStdIds eRequestId,
624 								const SfxItemSet* pFlyAttrSet,
625 								SwFrmFmt* = 0 );
626 
627 	SwFlyFrmFmt* _InsNoTxtNode( const SwPosition&rPos, SwNoTxtNode*,
628 								const SfxItemSet* pFlyAttrSet,
629 								const SfxItemSet* pGrfAttrSet,
630 								SwFrmFmt* = 0 );
631 
632     void CopyFlyInFlyImpl(  const SwNodeRange& rRg,
633                             const xub_StrLen nEndContentIndex,
634                             const SwNodeIndex& rStartIdx,
635                             const bool bCopyFlyAtFly = false ) const;
636     sal_Int8 SetFlyFrmAnchor( SwFrmFmt& rFlyFmt, SfxItemSet& rSet, sal_Bool bNewFrms );
637 
638     // --> OD 2005-01-13 #i40550#
639     typedef SwFmt* (SwDoc:: *FNCopyFmt)( const String&, SwFmt*, sal_Bool, sal_Bool );
640     // <--
641 	SwFmt* CopyFmt( const SwFmt& rFmt, const SvPtrarr& rFmtArr,
642 						FNCopyFmt fnCopyFmt, const SwFmt& rDfltFmt );
643 	void CopyFmtArr( const SvPtrarr& rSourceArr, SvPtrarr& rDestArr,
644 						FNCopyFmt fnCopyFmt, SwFmt& rDfltFmt );
645     void CopyPageDescHeaderFooterImpl( bool bCpyHeader,
646 								const SwFrmFmt& rSrcFmt, SwFrmFmt& rDestFmt );
647 	SwFmt* FindFmtByName( const SvPtrarr& rFmtArr,
648 									const String& rName ) const;
649 
650     VirtualDevice& CreateVirtualDevice_() const;
651     SfxPrinter& CreatePrinter_() const;
652 	void		PrtDataChanged();	//Printer oder JobSetup geandert, es muss
653 									//fuer entsprechende Invalidierungen und
654 									//Benachrichtigungen gesorgt werden.
655 
656 	// gcc: aFtnInfo::CopyCtor ist private, also muessen wir uns auch schuetzen
657 	SwDoc( const SwDoc &);
658 
659     // fuer Felder:
660 	void _InitFieldTypes(); 	// wird vom CTOR gerufen!!
661 	void _MakeFldList( int eMode );
662 
663 	// Datenbankfelder:
664 	void UpdateDBNumFlds( SwDBNameInfField& rDBFld, SwCalc& rCalc );
665 	void AddUsedDBToList( SvStringsDtor& rDBNameList,
666 						  const SvStringsDtor& rUsedDBNames );
667 	void AddUsedDBToList( SvStringsDtor& rDBNameList, const String& rDBName );
668 	sal_Bool IsNameInArray( const SvStringsDtor& rOldNames, const String& rName );
669 	void GetAllDBNames( SvStringsDtor& rAllDBNames );
670 	void ReplaceUsedDBs( const SvStringsDtor& rUsedDBNames,
671 						const String& rNewName, String& rFormel );
672 	SvStringsDtor& FindUsedDBs( const SvStringsDtor& rAllDBNames,
673 								const String& rFormel,
674 								SvStringsDtor& rUsedDBNames );
675 
676 	void InitDrawModel();
677 	void ReleaseDrawModel();
678 
679 	void _CreateNumberFormatter();
680 
681 	sal_Bool _UnProtectTblCells( SwTable& rTbl );
682 
683 	// erzeuge Anhand der vorgebenen Collection Teildokumente
684 	// falls keine angegeben ist, nehme die Kapitelvorlage der 1. Ebene
685 	sal_Bool SplitDoc( sal_uInt16 eDocType, const String& rPath,
686 						const SwTxtFmtColl* pSplitColl );
687 	sal_Bool SplitDoc( sal_uInt16 eDocType, const String& rPath, int nOutlineLevel = 0 ); //#outline level,add by zhaijianwei.
688 
689 
690 	// Charts der angegebenen Tabelle updaten
691 	void _UpdateCharts( const SwTable& rTbl, ViewShell& rVSh ) const;
692 
693 	sal_Bool _SelectNextRubyChars( SwPaM& rPam, SwRubyListEntry& rRubyEntry,
694 								sal_uInt16 nMode );
695 
696 	// unser eigener 'IdlTimer' ruft folgende Methode
697 	DECL_LINK( DoIdleJobs, Timer * );
698 	// der CharTimer ruft diese Methode
699 	DECL_LINK( DoUpdateAllCharts, Timer * );
700 	DECL_LINK( DoUpdateModifiedOLE, Timer * );
701 
702      SwFmt *_MakeCharFmt(const String &, SwFmt *, sal_Bool, sal_Bool );
703      SwFmt *_MakeFrmFmt(const String &, SwFmt *, sal_Bool, sal_Bool );
704      SwFmt *_MakeTxtFmtColl(const String &, SwFmt *, sal_Bool, sal_Bool );
705 
706      void InitTOXTypes();
707      void   Paste( const SwDoc& );
708      bool DeleteAndJoinImpl(SwPaM&, const bool);
709      bool DeleteAndJoinWithRedlineImpl(SwPaM&, const bool unused = false);
710      bool DeleteRangeImpl(SwPaM&, const bool unused = false);
711      bool DeleteRangeImplImpl(SwPaM &);
712      bool ReplaceRangeImpl(SwPaM&, String const&, const bool);
713 
714 public:
715 
716     /** Life cycle
717     */
718 	SwDoc();
719 	~SwDoc();
720 
721     inline bool IsInDtor() const { return mbDtor; }
722 
723     /* @@@MAINTAINABILITY-HORROR@@@
724 	   Implementation details made public.
725 	*/
726     SwNodes      & GetNodes()       { return *m_pNodes; }
727     SwNodes const& GetNodes() const { return *m_pNodes; }
728 
729     /** IInterface
730     */
731     virtual sal_Int32 acquire();
732     virtual sal_Int32 release();
733     virtual sal_Int32 getReferenceCount() const;
734 
735     /** IDocumentSettingAccess
736     */
737     virtual bool get(/*[in]*/ DocumentSettingId id) const;
738     virtual void set(/*[in]*/ DocumentSettingId id, /*[in]*/ bool value);
739     virtual const com::sun::star::i18n::ForbiddenCharacters* getForbiddenCharacters(/*[in]*/ sal_uInt16 nLang, /*[in]*/ bool bLocaleData ) const;
740     virtual void setForbiddenCharacters(/*[in]*/ sal_uInt16 nLang, /*[in]*/ const com::sun::star::i18n::ForbiddenCharacters& rForbiddenCharacters );
741     virtual vos::ORef<SvxForbiddenCharactersTable>& getForbiddenCharacterTable();
742     virtual const vos::ORef<SvxForbiddenCharactersTable>& getForbiddenCharacterTable() const;
743     virtual sal_uInt16 getLinkUpdateMode( /*[in]*/bool bGlobalSettings ) const;
744     virtual void setLinkUpdateMode( /*[in]*/ sal_uInt16 nMode );
745     virtual SwFldUpdateFlags getFieldUpdateFlags( /*[in]*/bool bGlobalSettings ) const;
746     virtual void setFieldUpdateFlags( /*[in]*/ SwFldUpdateFlags eMode );
747     virtual SwCharCompressType getCharacterCompressionType() const;
748     virtual void setCharacterCompressionType( /*[in]*/SwCharCompressType nType );
749 
750     /** IDocumentDeviceAccess
751     */
752     virtual SfxPrinter* getPrinter(/*[in]*/ bool bCreate ) const;
753     virtual void setPrinter(/*[in]*/ SfxPrinter* pP,/*[in]*/ bool bDeleteOld,/*[in]*/ bool bCallPrtDataChanged );
754     virtual VirtualDevice* getVirtualDevice(/*[in]*/ bool bCreate ) const;
755     virtual void setVirtualDevice(/*[in]*/ VirtualDevice* pVd,/*[in]*/ bool bDeleteOld, /*[in]*/ bool bCallVirDevDataChanged );
756     virtual OutputDevice* getReferenceDevice(/*[in]*/ bool bCreate ) const;
757     virtual void setReferenceDeviceType(/*[in]*/ bool bNewVirtual,/*[in]*/ bool bNewHiRes );
758     virtual const JobSetup* getJobsetup() const;
759     virtual void setJobsetup(/*[in]*/ const JobSetup& rJobSetup );
760     virtual const SwPrintData & getPrintData() const;
761     virtual void setPrintData(/*[in]*/ const SwPrintData& rPrtData);
762 
763     /** IDocumentMarkAccess
764     */
765     IDocumentMarkAccess* getIDocumentMarkAccess();
766     const IDocumentMarkAccess* getIDocumentMarkAccess() const;
767 
768     /** IDocumentRedlineAccess
769     */
770     virtual RedlineMode_t GetRedlineMode() const;
771 	virtual void SetRedlineMode_intern(/*[in]*/RedlineMode_t eMode);
772 	virtual void SetRedlineMode(/*[in]*/RedlineMode_t eMode);
773 	virtual bool IsRedlineOn() const;
774 	virtual bool IsIgnoreRedline() const;
775     virtual bool IsInRedlines(const SwNode& rNode) const;
776 	virtual const SwRedlineTbl& GetRedlineTbl() const;
777 	virtual bool AppendRedline(/*[in]*/SwRedline* pPtr, /*[in]*/bool bCallDelete);
778 	virtual bool SplitRedline(const SwPaM& rPam);
779 	virtual bool DeleteRedline(/*[in]*/const SwPaM& rPam, /*[in]*/bool bSaveInUndo, /*[in]*/sal_uInt16 nDelType);
780 	virtual bool DeleteRedline(/*[in]*/const SwStartNode& rSection, /*[in]*/bool bSaveInUndo, /*[in]*/sal_uInt16 nDelType);
781     virtual sal_uInt16 GetRedlinePos(/*[in]*/const SwNode& rNode, /*[in]*/sal_uInt16 nType) const;
782 	virtual void CompressRedlines();
783     virtual const SwRedline* GetRedline(/*[in]*/const SwPosition& rPos, /*[in]*/sal_uInt16* pFndPos) const;
784 	virtual bool IsRedlineMove() const;
785 	virtual void SetRedlineMove(/*[in]*/bool bFlag);
786 	virtual bool AcceptRedline(/*[in]*/sal_uInt16 nPos, /*[in]*/bool bCallDelete);
787     virtual bool AcceptRedline(/*[in]*/const SwPaM& rPam, /*[in]*/bool bCallDelete);
788 	virtual bool RejectRedline(/*[in]*/sal_uInt16 nPos, /*[in]*/bool bCallDelete);
789     virtual bool RejectRedline(/*[in]*/const SwPaM& rPam, /*[in]*/bool bCallDelete);
790     virtual const SwRedline* SelNextRedline(/*[in]*/SwPaM& rPam) const;
791 	virtual const SwRedline* SelPrevRedline(/*[in]*/SwPaM& rPam) const;
792 	virtual void UpdateRedlineAttr();
793     virtual sal_uInt16 GetRedlineAuthor();
794 	virtual sal_uInt16 InsertRedlineAuthor(const String& rAuthor);
795 	virtual bool SetRedlineComment(/*[in]*/const SwPaM& rPam, /*[in]*/const String& rComment);
796 	virtual const ::com::sun::star::uno::Sequence <sal_Int8>& GetRedlinePassword() const;
797 	virtual void SetRedlinePassword(/*[in]*/const ::com::sun::star::uno::Sequence <sal_Int8>& rNewPassword);
798 
799     /** IDocumentUndoRedo
800     */
801     IDocumentUndoRedo      & GetIDocumentUndoRedo();
802     IDocumentUndoRedo const& GetIDocumentUndoRedo() const;
803 
804     /** IDocumentLinksAdministration
805     */
806     virtual bool IsVisibleLinks() const;
807 	virtual void SetVisibleLinks(bool bFlag);
808     virtual sfx2::LinkManager& GetLinkManager();
809 	virtual const sfx2::LinkManager& GetLinkManager() const;
810     virtual void UpdateLinks(sal_Bool bUI);
811 	virtual bool GetData(const String& rItem, const String& rMimeType, ::com::sun::star::uno::Any& rValue) const;
812 	virtual bool SetData(const String& rItem, const String& rMimeType, const ::com::sun::star::uno::Any& rValue);
813     virtual ::sfx2::SvLinkSource* CreateLinkSource(const String& rItem);
814 	virtual bool EmbedAllLinks();
815     virtual void SetLinksUpdated(const bool bNewLinksUpdated);
816     virtual bool LinksUpdated() const;
817 
818     /** IDocumentFieldsAccess
819     */
820     virtual const SwFldTypes *GetFldTypes() const;
821 	virtual SwFieldType *InsertFldType(const SwFieldType &);
822 	virtual SwFieldType *GetSysFldType( const sal_uInt16 eWhich ) const;
823 	virtual SwFieldType* GetFldType(sal_uInt16 nResId, const String& rName, bool bDbFieldMatching) const;
824     virtual void RemoveFldType(sal_uInt16 nFld);
825     virtual void UpdateFlds( SfxPoolItem* pNewHt, bool bCloseDB);
826     virtual void InsDeletedFldType(SwFieldType &);
827     virtual bool PutValueToField(const SwPosition & rPos, const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich);
828     virtual bool UpdateFld(SwTxtFld * rDstFmtFld, SwField & rSrcFld, SwMsgPoolItem * pMsgHnt, bool bUpdateTblFlds);
829 	virtual void UpdateRefFlds(SfxPoolItem* pHt);
830     virtual void UpdateTblFlds(SfxPoolItem* pHt);
831     virtual void UpdateExpFlds(SwTxtFld* pFld, bool bUpdateRefFlds);
832     virtual void UpdateUsrFlds();
833     virtual void UpdatePageFlds(SfxPoolItem*);
834     virtual void LockExpFlds();
835     virtual void UnlockExpFlds();
836     virtual bool IsExpFldsLocked() const;
837     virtual SwDocUpdtFld& GetUpdtFlds() const;
838 	virtual bool SetFieldsDirty(bool b, const SwNode* pChk, sal_uLong nLen);
839 	virtual void SetFixFields(bool bOnlyTimeDate, const DateTime* pNewDateTime);
840 	virtual void FldsToCalc(SwCalc& rCalc, sal_uLong nLastNd, sal_uInt16 nLastCnt);
841 	virtual void FldsToCalc(SwCalc& rCalc, const _SetGetExpFld& rToThisFld);
842 	virtual void FldsToExpand(SwHash**& ppTbl, sal_uInt16& rTblSize, const _SetGetExpFld& rToThisFld);
843 	virtual bool IsNewFldLst() const;
844 	virtual void SetNewFldLst( bool bFlag);
845 	virtual void InsDelFldInFldLst(bool bIns, const SwTxtFld& rFld);
846 
847     /** Returns the field at a certain position.
848        @param rPos position to search at
849        @return pointer to field at the given position or NULL in case no field is found
850     */
851     static SwField* GetField(const SwPosition& rPos);
852 
853     /** Returns the field at a certain position.
854        @param rPos position to search at
855        @return pointer to field at the given position or NULL in case no field is found
856     */
857     static SwTxtFld* GetTxtFld(const SwPosition& rPos);
858 
859     /** IDocumentContentOperations
860     */
861     virtual bool CopyRange(SwPaM&, SwPosition&, const bool bCopyAll) const;
862 	virtual void DeleteSection(SwNode* pNode);
863     virtual bool DeleteRange(SwPaM&);
864 	virtual bool DelFullPara(SwPaM&);
865     // --> OD 2009-08-20 #i100466#
866     // Add optional parameter <bForceJoinNext>, default value <false>
867     // Needed for hiding of deletion redlines
868     virtual bool DeleteAndJoin( SwPaM&,
869                                 const bool bForceJoinNext = false );
870     // <--
871     virtual bool MoveRange(SwPaM&, SwPosition&, SwMoveFlags);
872     virtual bool MoveNodeRange(SwNodeRange&, SwNodeIndex&, SwMoveFlags);
873 	virtual bool MoveAndJoin(SwPaM&, SwPosition&, SwMoveFlags);
874 	virtual bool Overwrite(const SwPaM &rRg, const String& rStr);
875     virtual bool InsertString(const SwPaM &rRg, const String&,
876               const enum InsertFlags nInsertMode = INS_EMPTYEXPAND );
877 	virtual SwFlyFrmFmt* Insert(const SwPaM &rRg, const String& rGrfName, const String& rFltName, const Graphic* pGraphic,
878 						const SfxItemSet* pFlyAttrSet, const SfxItemSet* pGrfAttrSet, SwFrmFmt*);
879 	virtual SwFlyFrmFmt* Insert(const SwPaM& rRg, const GraphicObject& rGrfObj,	const SfxItemSet* pFlyAttrSet,
880 						const SfxItemSet* pGrfAttrSet, SwFrmFmt*);
881     virtual SwDrawFrmFmt* Insert(const SwPaM &rRg, SdrObject& rDrawObj, const SfxItemSet* pFlyAttrSet, SwFrmFmt*);
882     virtual SwFlyFrmFmt* Insert(const SwPaM &rRg, const svt::EmbeddedObjectRef& xObj, const SfxItemSet* pFlyAttrSet,
883 						const SfxItemSet* pGrfAttrSet, SwFrmFmt*);
884     virtual bool InsertPoolItem(const SwPaM &rRg, const SfxPoolItem&,
885                                 const SetAttrMode nFlags);
886     virtual bool InsertItemSet (const SwPaM &rRg, const SfxItemSet&,
887                                 const SetAttrMode nFlags);
888 	virtual void ReRead(SwPaM&, const String& rGrfName, const String& rFltName, const Graphic* pGraphic, const GraphicObject* pGrfObj);
889     virtual void TransliterateText(const SwPaM& rPaM, utl::TransliterationWrapper&);
890 	virtual SwFlyFrmFmt* InsertOLE(const SwPaM &rRg, const String& rObjName, sal_Int64 nAspect, const SfxItemSet* pFlyAttrSet,
891                            const SfxItemSet* pGrfAttrSet, SwFrmFmt*);
892 	virtual bool SplitNode(const SwPosition &rPos, bool bChkTableStart);
893 	virtual bool AppendTxtNode(SwPosition& rPos);
894         virtual void SetModified(SwPaM &rPaM);
895     virtual bool ReplaceRange(SwPaM& rPam, const String& rNewStr,
896                               const bool bRegExReplace);
897     virtual void RemoveLeadingWhiteSpace(const SwPosition & rPos );
898 
899     /** IDocumentStylePoolAccess
900     */
901     virtual SwTxtFmtColl* GetTxtCollFromPool( sal_uInt16 nId, bool bRegardLanguage = true );
902     virtual SwFmt* GetFmtFromPool( sal_uInt16 nId );
903     virtual SwFrmFmt* GetFrmFmtFromPool( sal_uInt16 nId );
904     virtual SwCharFmt* GetCharFmtFromPool( sal_uInt16 nId );
905     virtual SwPageDesc* GetPageDescFromPool( sal_uInt16 nId, bool bRegardLanguage = true );
906     virtual SwNumRule* GetNumRuleFromPool( sal_uInt16 nId );
907     virtual bool IsPoolTxtCollUsed( sal_uInt16 nId ) const;
908     virtual bool IsPoolFmtUsed( sal_uInt16 nId ) const;
909     virtual bool IsPoolPageDescUsed( sal_uInt16 nId ) const;
910 
911     /** IDocumentLineNumberAccess
912     */
913     virtual const SwLineNumberInfo& GetLineNumberInfo() const;
914     virtual void SetLineNumberInfo(const SwLineNumberInfo& rInfo);
915 
916 	/** IDocumentStatistics
917 	*/
918 	virtual void DocInfoChgd();
919 	virtual const SwDocStat	&GetDocStat() const;
920 	virtual void SetDocStat(const SwDocStat& rStat);
921 	virtual void UpdateDocStat(SwDocStat& rStat);
922 
923 	/** IDocumentState
924 	*/
925 	virtual void SetModified();
926 	virtual void ResetModified();
927 	virtual bool IsModified() const;
928 	virtual bool IsLoaded() const;
929     virtual bool IsUpdateExpFld() const;
930 	virtual bool IsNewDoc() const;
931     virtual bool IsPageNums() const;
932     virtual void SetPageNums(bool b);
933 	virtual void SetNewDoc(bool b);
934 	virtual void SetUpdateExpFldStat(bool b);
935 	virtual void SetLoaded(bool b);
936 
937     /** IDocumentDrawModelAccess
938     */
939     virtual const SdrModel* GetDrawModel() const;
940     virtual SdrModel* GetDrawModel();
941     virtual SdrLayerID GetHeavenId() const;
942     virtual SdrLayerID GetHellId() const;
943     virtual SdrLayerID GetControlsId() const;
944     virtual SdrLayerID GetInvisibleHeavenId() const;
945     virtual SdrLayerID GetInvisibleHellId() const;
946     virtual SdrLayerID GetInvisibleControlsId() const;
947     virtual void NotifyInvisibleLayers( SdrPageView& _rSdrPageView );
948     virtual bool IsVisibleLayerId( const SdrLayerID& _nLayerId ) const;
949     virtual SdrLayerID GetVisibleLayerIdByInvisibleOne( const SdrLayerID& _nInvisibleLayerId );
950     virtual SdrLayerID GetInvisibleLayerIdByVisibleOne( const SdrLayerID& _nVisibleLayerId );
951     virtual SdrModel* _MakeDrawModel();
952     virtual SdrModel* GetOrCreateDrawModel();
953 
954     /** IDocumentLayoutAccess
955     */
956 	virtual void SetCurrentViewShell( ViewShell* pNew );//swmod 071225
957     virtual SwLayouter* GetLayouter();
958     virtual const SwLayouter* GetLayouter() const;
959     virtual void SetLayouter( SwLayouter* pNew );
960     virtual SwFrmFmt* MakeLayoutFmt( RndStdIds eRequest, const SfxItemSet* pSet );
961     virtual void DelLayoutFmt( SwFrmFmt *pFmt );
962     virtual SwFrmFmt* CopyLayoutFmt( const SwFrmFmt& rSrc, const SwFmtAnchor& rNewAnchor, bool bSetTxtFlyAtt, bool bMakeFrms );
963 	virtual const ViewShell *GetCurrentViewShell() const;	//swmod 080219
964 	virtual ViewShell *GetCurrentViewShell();//swmod 080219 It must be able to communicate to a ViewShell.This is going to be removerd later.
965 	virtual const SwRootFrm *GetCurrentLayout() const;
966 	virtual SwRootFrm *GetCurrentLayout();//swmod 080219
967     virtual bool HasLayout() const;
968 
969     /** IDocumentTimerAccess
970     */
971 	virtual void StartIdling();
972 	virtual void StopIdling();
973 	virtual void BlockIdling();
974 	virtual void UnblockIdling();
975 
976     /** IDocumentChartDataProviderAccess
977     */
978     virtual SwChartDataProvider * GetChartDataProvider( bool bCreate = false ) const;
979     virtual void CreateChartInternalDataProviders( const SwTable *pTable );
980     virtual SwChartLockController_Helper & GetChartControllerHelper();
981 
982     /** IDocumentListItems
983 
984         OD 2007-10-26 #i83479#
985     */
986     virtual void addListItem( const SwNodeNum& rNodeNum );
987     virtual void removeListItem( const SwNodeNum& rNodeNum );
988     virtual String getListItemText( const SwNodeNum& rNodeNum,
989                                     const bool bWithNumber = true,
990                                     const bool bWithSpacesForLevel = false ) const;
991     virtual void getListItems( IDocumentListItems::tSortedNodeNumList& orNodeNumList ) const;
992     virtual void getNumItems( IDocumentListItems::tSortedNodeNumList& orNodeNumList ) const;
993 
994     /** IDocumentOutlineNodes
995 
996         OD 2007-11-15 #i83479#
997     */
998     virtual sal_Int32 getOutlineNodesCount() const;
999     virtual int getOutlineLevel( const sal_Int32 nIdx ) const;
1000     virtual String getOutlineText( const sal_Int32 nIdx,
1001                                    const bool bWithNumber,
1002                                    const bool bWithSpacesForLevel ) const;
1003     virtual SwTxtNode* getOutlineNode( const sal_Int32 nIdx ) const;
1004     virtual void getOutlineNodes( IDocumentOutlineNodes::tSortedOutlineNodeList& orOutlineNodeList ) const;
1005 
1006     /** IDocumentListsAccess
1007 
1008         OD 2008-03-26 #refactorlists#
1009     */
1010     virtual SwList* createList( String sListId,
1011                                 const String sDefaultListStyleName );
1012     virtual void deleteList( const String sListId );
1013     virtual SwList* getListByName( const String sListId ) const;
1014     virtual SwList* createListForListStyle( const String sListStyleName );
1015     virtual SwList* getListForListStyle( const String sListStyleName ) const;
1016     virtual void deleteListForListStyle( const String sListStyleName );
1017     // --> OD 2008-07-08 #i91400#
1018     virtual void trackChangeOfListStyleName( const String sListStyleName,
1019                                              const String sNewListStyleName );
1020     // <--
1021 
1022     /** IDocumentExternalData */
1023     virtual void setExternalData(::sw::tExternalDataType eType,
1024                                  ::sw::tExternalDataPointer pPayload);
1025     virtual ::sw::tExternalDataPointer getExternalData(::sw::tExternalDataType eType);
1026 
1027 
1028     /** INextInterface here
1029     */
1030 
1031     DECL_STATIC_LINK( SwDoc, BackgroundDone, SvxBrushItem *);
1032     DECL_LINK(CalcFieldValueHdl, EditFieldInfo*);
1033 
1034     /** OLE ???
1035     */
1036     bool IsOLEPrtNotifyPending() const  { return mbOLEPrtNotifyPending; }
1037     inline void SetOLEPrtNotifyPending( bool bSet = true );
1038 	void PrtOLENotify( sal_Bool bAll );	//Alle oder nur Markierte
1039 
1040 #ifdef DBG_UTIL
1041     bool InXMLExport() const            { return mbXMLExport; }
1042     void SetXMLExport( bool bFlag )     { mbXMLExport = bFlag; }
1043 #endif
1044 
1045 	// liefert zu allen fliegenden Rahmen die Position im Dokument.
1046 	// Wird ein Pam-Pointer uebergeben, muessen die absatzgebundenen
1047 	// FlyFrames von der ::com::sun::star::awt::Selection vollstaendig umschlossen sein
1048 	// ( Start < Pos < End ) !!!
1049 	// (wird fuer die Writer benoetigt)
1050 	void GetAllFlyFmts( SwPosFlyFrms& rPosFlyFmts, const SwPaM* = 0,
1051 						sal_Bool bDrawAlso = sal_False ) const;
1052 
1053     // wegen swrtf.cxx und define private public, jetzt hier
1054 	SwFlyFrmFmt  *MakeFlyFrmFmt (const String &rFmtName, SwFrmFmt *pDerivedFrom);
1055 	SwDrawFrmFmt *MakeDrawFrmFmt(const String &rFmtName, SwFrmFmt *pDerivedFrom);
1056 
1057     // JP 08.05.98: fuer Flys muss jetzt diese Schnittstelle benutzt
1058 	//				werden. pAnchorPos muss gesetzt sein, wenn keine
1059 	//				Seitenbindung vorliegt UND der ::com::sun::star::chaos::Anchor nicht schon
1060 	//				im FlySet/FrmFmt mit gueltiger CntntPos gesetzt ist
1061     /* #109161# new parameter bCalledFromShell
1062 
1063        sal_True: An existing adjust item at pAnchorPos is propagated to
1064        the content node of the new fly section. That propagation only
1065        takes place if there is no adjust item in the paragraph style
1066        for the new fly section.
1067 
1068        sal_False: no propagation
1069     */
1070 	SwFlyFrmFmt* MakeFlySection( RndStdIds eAnchorType,
1071                                  const SwPosition* pAnchorPos,
1072                                  const SfxItemSet* pSet = 0,
1073                                  SwFrmFmt *pParent = 0,
1074                                  sal_Bool bCalledFromShell = sal_False );
1075 	SwFlyFrmFmt* MakeFlyAndMove( const SwPaM& rPam, const SfxItemSet& rSet,
1076 								const SwSelBoxes* pSelBoxes = 0,
1077 								SwFrmFmt *pParent = 0 );
1078 
1079 	void CopyWithFlyInFly( const SwNodeRange& rRg,
1080                             const xub_StrLen nEndContentIndex,
1081 							const SwNodeIndex& rInsPos,
1082 							sal_Bool bMakeNewFrms = sal_True,
1083 							sal_Bool bDelRedlines = sal_True,
1084 							sal_Bool bCopyFlyAtFly = sal_False ) const;
1085 
1086     sal_Bool SetFlyFrmAttr( SwFrmFmt& rFlyFmt, SfxItemSet& rSet );
1087 
1088     sal_Bool SetFrmFmtToFly( SwFrmFmt& rFlyFmt, SwFrmFmt& rNewFmt,
1089 						SfxItemSet* pSet = 0, sal_Bool bKeepOrient = sal_False );
1090     // --> OD 2009-07-20 #i73249#
1091     void SetFlyFrmTitle( SwFlyFrmFmt& rFlyFrmFmt,
1092                          const String& sNewTitle );
1093     void SetFlyFrmDescription( SwFlyFrmFmt& rFlyFrmFmt,
1094                                const String& sNewDescription );
1095     // <--
1096 
1097     /** Footnotes
1098     */
1099 	// Fussnoten Informationen
1100 	const SwFtnInfo& GetFtnInfo() const			{ return *pFtnInfo; }
1101 	void SetFtnInfo(const SwFtnInfo& rInfo);
1102 	const SwEndNoteInfo& GetEndNoteInfo() const { return *pEndNoteInfo; }
1103 	void SetEndNoteInfo(const SwEndNoteInfo& rInfo);
1104 		  SwFtnIdxs& GetFtnIdxs() 		{ return *pFtnIdxs; }
1105 	const SwFtnIdxs& GetFtnIdxs() const { return *pFtnIdxs; }
1106     // change footnotes in area
1107     bool SetCurFtn( const SwPaM& rPam, const String& rNumStr,
1108                     sal_uInt16 nNumber, bool bIsEndNote );
1109 
1110     /** Operations on the content of the document e.g.
1111         spell-checking/hyphenating/word-counting
1112     */
1113     ::com::sun::star::uno::Any
1114 			Spell( SwPaM&, ::com::sun::star::uno::Reference<
1115 							::com::sun::star::linguistic2::XSpellChecker1 > &,
1116                    sal_uInt16* pPageCnt, sal_uInt16* pPageSt, bool bGrammarCheck,
1117                    SwConversionArgs *pConvArgs = 0 ) const;
1118 
1119 	::com::sun::star::uno::Reference<
1120 		::com::sun::star::linguistic2::XHyphenatedWord >
1121 			Hyphenate( SwPaM *pPam, const Point &rCrsrPos,
1122 			  		   sal_uInt16* pPageCnt, sal_uInt16* pPageSt );
1123 
1124     // count words in pam
1125     void CountWords( const SwPaM& rPaM, SwDocStat& rStat ) const;
1126 
1127 
1128     /** ???
1129     */
1130     // Textbaustein Dokument?
1131     void SetGlossDoc( bool bGlssDc = true ) { mbGlossDoc = bGlssDc; }
1132     bool IsInsOnlyTextGlossary() const      { return mbInsOnlyTxtGlssry; }
1133 
1134 	// Abstakt fuellen
1135 	void Summary( SwDoc* pExtDoc, sal_uInt8 nLevel, sal_uInt8 nPara, sal_Bool bImpress );
1136 
1137     void ChangeAuthorityData(const SwAuthEntry* pNewData);
1138 
1139     bool IsInCallModified() const      { return mbInCallModified; }
1140 	sal_Bool IsInHeaderFooter( const SwNodeIndex& rIdx ) const;
1141     short GetTextDirection( const SwPosition& rPos,
1142                             const Point* pPt = 0 ) const;
1143     sal_Bool IsInVerticalText( const SwPosition& rPos,
1144 							   const Point* pPt = 0 ) const;
1145     /** Database ???
1146     */
1147 
1148 	/*	Datenbank &&  DB-Manager */
1149 	void SetNewDBMgr( SwNewDBMgr* pNewMgr )		{ pNewDBMgr = pNewMgr; }
1150 	SwNewDBMgr* GetNewDBMgr() const 			{ return pNewDBMgr; }
1151 	void ChangeDBFields( const SvStringsDtor& rOldNames,
1152 						const String& rNewName );
1153 	void SetInitDBFields(sal_Bool b);
1154 	// Von Feldern verwendete Datenbanken herausfinden
1155 	void GetAllUsedDB( SvStringsDtor& rDBNameList,
1156 					   const SvStringsDtor* pAllDBNames = 0 );
1157 
1158 	void ChgDBData( const SwDBData& rNewData );
1159 	SwDBData GetDBData();
1160 	const SwDBData& GetDBDesc();
1161 	const SwDBData& _GetDBDesc() const { return aDBData; }
1162 
1163     /** Some helper functions
1164     */
1165     String GetUniqueGrfName() const;
1166     String GetUniqueOLEName() const;
1167 	String GetUniqueFrameName() const;
1168 
1169 	std::set<SwRootFrm*> GetAllLayouts();//swmod 080225
1170 
1171 	void SetFlyName( SwFlyFrmFmt& rFmt, const String& rName );
1172 	const SwFlyFrmFmt* FindFlyByName( const String& rName, sal_Int8 nNdTyp = 0 ) const;
1173 
1174 	void GetGrfNms( const SwFlyFrmFmt& rFmt, String* pGrfName,
1175 					String* pFltName ) const;
1176 
1177 	// setze bei allen Flys ohne Namen einen gueltigen (Wird von den Readern
1178 	// nach dem Einlesen gerufen )
1179 	void SetAllUniqueFlyNames();
1180 
1181 		//Zuruecksetzen der Attribute; es werden alle TxtHints und bei
1182 		//vollstaendiger Selektion harte Formatierung (AUTO-Formate) entfernt
1183     // --> OD 2008-11-28 #i96644#
1184     // introduce new optional parameter <bSendDataChangedEvents> in order to
1185     // control, if the side effect "send data changed events" is triggered or not.
1186     void ResetAttrs( const SwPaM &rRg,
1187                      sal_Bool bTxtAttr = sal_True,
1188                      const SvUShortsSort* = 0,
1189                      const bool bSendDataChangedEvents = true );
1190     // <--
1191     void RstTxtAttrs(const SwPaM &rRg, sal_Bool bInclRefToxMark = sal_False );
1192 
1193 		// Setze das Attribut im angegebenen Format. Ist Undo aktiv, wird
1194 		// das alte in die Undo-History aufgenommen
1195 	void SetAttr( const SfxPoolItem&, SwFmt& );
1196 	void SetAttr( const SfxItemSet&, SwFmt& );
1197 
1198     // --> OD 2008-02-12 #newlistlevelattrs#
1199     // method to reset a certain attribute at the given format
1200     void ResetAttrAtFormat( const sal_uInt16 nWhichId,
1201                             SwFmt& rChangedFormat );
1202     // <--
1203 
1204 		// Setze das Attribut als neues default Attribut in diesem Dokument.
1205 		// Ist Undo aktiv, wird das alte in die Undo-History aufgenommen
1206 	void SetDefault( const SfxPoolItem& );
1207 	void SetDefault( const SfxItemSet& );
1208 
1209 	// Erfrage das Default Attribut in diesem Dokument.
1210 	const SfxPoolItem& GetDefault( sal_uInt16 nFmtHint ) const;
1211 	// TextAttribute nicht mehr aufspannen lassen
1212 	sal_Bool DontExpandFmt( const SwPosition& rPos, sal_Bool bFlag = sal_True );
1213 
1214 	/* Formate */
1215 	const SwFrmFmts* GetFrmFmts() const 	{ return pFrmFmtTbl; }
1216 		  SwFrmFmts* GetFrmFmts()			{ return pFrmFmtTbl; }
1217 	const SwCharFmts* GetCharFmts() const	{ return pCharFmtTbl;}
1218 
1219 	/* LayoutFormate (Rahmen, DrawObjecte), mal const mal nicht */
1220 	const SwSpzFrmFmts* GetSpzFrmFmts() const	{ return pSpzFrmFmtTbl; }
1221 		  SwSpzFrmFmts* GetSpzFrmFmts() 		{ return pSpzFrmFmtTbl; }
1222 
1223 	const SwFrmFmt *GetDfltFrmFmt() const	{ return pDfltFrmFmt; }
1224 		  SwFrmFmt *GetDfltFrmFmt() 		{ return pDfltFrmFmt; }
1225 	const SwFrmFmt *GetEmptyPageFmt() const { return pEmptyPageFmt; }
1226 		  SwFrmFmt *GetEmptyPageFmt()		{ return pEmptyPageFmt; }
1227 	const SwFrmFmt *GetColumnContFmt() const{ return pColumnContFmt; }
1228 		  SwFrmFmt *GetColumnContFmt()		{ return pColumnContFmt; }
1229 	const SwCharFmt *GetDfltCharFmt() const { return pDfltCharFmt;}
1230 		  SwCharFmt *GetDfltCharFmt()		{ return pDfltCharFmt;}
1231 
1232     // Returns the interface of the management of (auto)styles
1233     IStyleAccess& GetIStyleAccess() { return *pStyleAccess; }
1234 
1235 	// Remove all language dependencies from all existing formats
1236 	void RemoveAllFmtLanguageDependencies();
1237 
1238 	SwFrmFmt  *MakeFrmFmt(const String &rFmtName, SwFrmFmt *pDerivedFrom,
1239                           sal_Bool bBroadcast = sal_False, sal_Bool bAuto = sal_True);
1240 	void	   DelFrmFmt( SwFrmFmt *pFmt, sal_Bool bBroadcast = sal_False );
1241 	SwFrmFmt* FindFrmFmtByName( const String& rName ) const
1242 		{	return (SwFrmFmt*)FindFmtByName( (SvPtrarr&)*pFrmFmtTbl, rName ); }
1243 
1244     // --> OD 2005-01-13 #i40550#
1245     SwCharFmt *MakeCharFmt(const String &rFmtName, SwCharFmt *pDerivedFrom,
1246                            sal_Bool bBroadcast = sal_False,
1247                            sal_Bool bAuto = sal_True );
1248     // <--
1249 	void	   DelCharFmt(sal_uInt16 nFmt, sal_Bool bBroadcast = sal_False);
1250 	void	   DelCharFmt(SwCharFmt* pFmt, sal_Bool bBroadcast = sal_False);
1251 	SwCharFmt* FindCharFmtByName( const String& rName ) const
1252 		{	return (SwCharFmt*)FindFmtByName( (SvPtrarr&)*pCharFmtTbl, rName ); }
1253 
1254 	/* Formatcollections (Vorlagen) */
1255 	// TXT
1256 	const SwTxtFmtColl* GetDfltTxtFmtColl() const { return pDfltTxtFmtColl; }
1257 	const SwTxtFmtColls *GetTxtFmtColls() const { return pTxtFmtCollTbl; }
1258     // --> OD 2005-01-13 #i40550#
1259     SwTxtFmtColl *MakeTxtFmtColl( const String &rFmtName,
1260 								  SwTxtFmtColl *pDerivedFrom,
1261                                   sal_Bool bBroadcast = sal_False,
1262                                   sal_Bool bAuto = sal_True );
1263     // <--
1264 	SwConditionTxtFmtColl* MakeCondTxtFmtColl( const String &rFmtName,
1265 											   SwTxtFmtColl *pDerivedFrom,
1266                                                sal_Bool bBroadcast = sal_False);
1267 	void DelTxtFmtColl(sal_uInt16 nFmt, sal_Bool bBroadcast = sal_False);
1268 	void DelTxtFmtColl( SwTxtFmtColl* pColl, sal_Bool bBroadcast = sal_False );
1269     // --> OD 2007-11-06 #i62675#
1270     // Add 4th optional parameter <bResetListAttrs>.
1271     // 'side effect' of <SetTxtFmtColl> with <bReset = true> is that the hard
1272     // attributes of the affected text nodes are cleared, except the break
1273     // attribute, the page description attribute and the list style attribute.
1274     // The new parameter <bResetListAttrs> indicates, if the list attributes
1275     // (list style, restart at and restart with) are cleared as well in case
1276     // that <bReset = true> and the paragraph style has a list style attribute set.
1277     sal_Bool SetTxtFmtColl( const SwPaM &rRg, SwTxtFmtColl *pFmt,
1278                             bool bReset = true,
1279                             bool bResetListAttrs = false );
1280     // <--
1281 	SwTxtFmtColl* FindTxtFmtCollByName( const String& rName ) const
1282 		{	return (SwTxtFmtColl*)FindFmtByName( (SvPtrarr&)*pTxtFmtCollTbl, rName ); }
1283 
1284     void ChkCondColls();
1285 
1286 		// GRF
1287 	const SwGrfFmtColl* GetDfltGrfFmtColl() const	{ return pDfltGrfFmtColl; }
1288 	const SwGrfFmtColls *GetGrfFmtColls() const		{ return pGrfFmtCollTbl; }
1289 	SwGrfFmtColl *MakeGrfFmtColl(const String &rFmtName,
1290 									SwGrfFmtColl *pDerivedFrom);
1291 	SwGrfFmtColl* FindGrfFmtCollByName( const String& rName ) const
1292 		{	return (SwGrfFmtColl*)FindFmtByName( (SvPtrarr&)*pGrfFmtCollTbl, rName ); }
1293 
1294 		// Tabellen-Formate
1295 	const SwFrmFmts* GetTblFrmFmts() const	{ return pTblFrmFmtTbl; }
1296 		  SwFrmFmts* GetTblFrmFmts()		{ return pTblFrmFmtTbl; }
1297 	sal_uInt16 GetTblFrmFmtCount( sal_Bool bUsed ) const;
1298 	SwFrmFmt& GetTblFrmFmt(sal_uInt16 nFmt, sal_Bool bUsed ) const;
1299 	SwTableFmt* MakeTblFrmFmt(const String &rFmtName, SwFrmFmt *pDerivedFrom);
1300 	void	    DelTblFrmFmt( SwTableFmt* pFmt );
1301 	SwTableFmt* FindTblFmtByName( const String& rName, sal_Bool bAll = sal_False ) const;
1302 
1303 	//Rahmenzugriff
1304 	//iterieren ueber Flys - fuer Basic-Collections
1305 	sal_uInt16 GetFlyCount( FlyCntType eType = FLYCNTTYPE_ALL) const;
1306 	SwFrmFmt* GetFlyNum(sal_uInt16 nIdx, FlyCntType eType = FLYCNTTYPE_ALL);
1307 
1308 
1309 	// kopiere die Formate in die eigenen Arrays und returne diese
1310 	SwFrmFmt  *CopyFrmFmt ( const SwFrmFmt& );
1311 	SwCharFmt *CopyCharFmt( const SwCharFmt& );
1312 	SwTxtFmtColl* CopyTxtColl( const SwTxtFmtColl& rColl );
1313 	SwGrfFmtColl* CopyGrfColl( const SwGrfFmtColl& rColl );
1314 
1315 		// ersetze alle Formate mit denen aus rSource
1316 	void ReplaceStyles( SwDoc& rSource );
1317 
1318 	// erfrage ob die Absatz-/Zeichen-/Rahmen-/Seiten - Vorlage benutzt wird
1319 	sal_Bool IsUsed( const SwModify& ) const;
1320 	sal_Bool IsUsed( const SwNumRule& ) const;
1321 
1322 		// setze den Namen der neu geladenen Dokument-Vorlage
1323 	sal_uInt16 SetDocPattern( const String& rPatternName );
1324         // gebe den Dok-VorlagenNamen zurueck. !!! Kann auch 0 sein !!!
1325 	String* GetDocPattern( sal_uInt16 nPos ) const { return aPatternNms[nPos]; }
1326 
1327 		// Loesche alle nicht referenzierten FeldTypen
1328 	void GCFieldTypes();				// impl. in docfld.cxx
1329 
1330 		// akt. Dokument mit Textbausteindokument verbinden/erfragen
1331 	void SetGlossaryDoc( SwDoc* pDoc ) { pGlossaryDoc = pDoc; }
1332 
1333 	// travel over PaM Ring
1334 	sal_Bool InsertGlossary( SwTextBlocks& rBlock, const String& rEntry,
1335 						SwPaM& rPaM, SwCrsrShell* pShell = 0);
1336 
1337     // get the set of printable pages for the XRenderable API by
1338     // evaluating the respective settings (see implementation)
1339     void CalculatePagesForPrinting( const SwRootFrm& rLayout, SwRenderData &rData, const SwPrintUIOptions &rOptions, bool bIsPDFExport,
1340             sal_Int32 nDocPageCount );
1341     void UpdatePagesForPrintingWithPostItData( SwRenderData &rData, const SwPrintUIOptions &rOptions, bool bIsPDFExport,
1342             sal_Int32 nDocPageCount );
1343     void CalculatePagePairsForProspectPrinting( const SwRootFrm& rLayout, SwRenderData &rData, const SwPrintUIOptions &rOptions,
1344             sal_Int32 nDocPageCount );
1345 
1346 		//PageDescriptor-Schnittstelle
1347 	sal_uInt16 GetPageDescCnt() const { return aPageDescs.Count(); }
1348 	const SwPageDesc& GetPageDesc( const sal_uInt16 i ) const { return *aPageDescs[i]; }
1349 	SwPageDesc* FindPageDescByName( const String& rName,
1350 									sal_uInt16* pPos = 0 ) const;
1351 
1352 		// kopiere den gesamten PageDesc - ueber Dokumentgrenzen und "tief"!
1353 		// optional kann das kopieren der PoolFmtId, -HlpId verhindert werden
1354 	void CopyPageDesc( const SwPageDesc& rSrcDesc, SwPageDesc& rDstDesc,
1355 						sal_Bool bCopyPoolIds = sal_True );
1356 
1357 		// kopiere die Kopzeile (mit dem Inhalt!) aus dem SrcFmt
1358 		// ins DestFmt ( auch ueber Doc grenzen hinaus!)
1359 	void CopyHeader( const SwFrmFmt& rSrcFmt, SwFrmFmt& rDestFmt )
1360         { CopyPageDescHeaderFooterImpl( true, rSrcFmt, rDestFmt ); }
1361 		// kopiere die Fusszeile (mit dem Inhalt!) aus dem SrcFmt
1362 		// ins DestFmt ( auch ueber Doc grenzen hinaus!)
1363 	void CopyFooter( const SwFrmFmt& rSrcFmt, SwFrmFmt& rDestFmt )
1364         { CopyPageDescHeaderFooterImpl( false, rSrcFmt, rDestFmt ); }
1365 
1366 		//fuer Reader
1367 
1368     SwPageDesc * GetPageDesc( const String & rName );
1369 	SwPageDesc& _GetPageDesc( sal_uInt16 i ) const { return *aPageDescs[i]; }
1370 	void ChgPageDesc( const String & rName, const SwPageDesc& );
1371 	void ChgPageDesc( sal_uInt16 i, const SwPageDesc& );
1372     sal_Bool FindPageDesc( const String & rName, sal_uInt16 * pFound );
1373     // -> #116530#
1374     void DelPageDesc( const String & rName, sal_Bool bBroadcast = sal_False);
1375 	void DelPageDesc( sal_uInt16 i, sal_Bool bBroadcast = sal_False );
1376     // <- #116530#
1377     void PreDelPageDesc(SwPageDesc * pDel); // #i7983#
1378     // -> #116530#
1379 	sal_uInt16 MakePageDesc( const String &rName, const SwPageDesc* pCpy = 0,
1380                              sal_Bool bRegardLanguage = sal_True,
1381                              sal_Bool bBroadcast = sal_False);
1382     void BroadcastStyleOperation(String rName, SfxStyleFamily eFamily,
1383                                  sal_uInt16 nOp);
1384     // <- #116530#
1385 
1386 
1387     // --> FME 2005-03-16 #i44963# The html import sometimes overwrites the
1388     // page sizes set in the page descriptions. This function is used to
1389     // correct this.
1390     void CheckDefaultPageFmt();
1391     // <--
1392 
1393 		// Methoden fuer die Verzeichnisse:
1394 		// - Verzeichnismarke einfuegen loeschen travel
1395 	sal_uInt16 GetCurTOXMark( const SwPosition& rPos, SwTOXMarks& ) const;
1396     void DeleteTOXMark( const SwTOXMark* pTOXMark );
1397 	const SwTOXMark& GotoTOXMark( const SwTOXMark& rCurTOXMark,
1398 								SwTOXSearch eDir, sal_Bool bInReadOnly );
1399 
1400 		// - Verzeichnis einfuegen, und bei Bedarf erneuern
1401 	const SwTOXBaseSection* InsertTableOf( const SwPosition& rPos,
1402 											const SwTOXBase& rTOX,
1403 											const SfxItemSet* pSet = 0,
1404 											sal_Bool bExpand = sal_False );
1405 	const SwTOXBaseSection* InsertTableOf( sal_uLong nSttNd, sal_uLong nEndNd,
1406 											const SwTOXBase& rTOX,
1407 											const SfxItemSet* pSet = 0											);
1408 	const SwTOXBase* GetCurTOX( const SwPosition& rPos ) const;
1409 	const SwAttrSet& GetTOXBaseAttrSet(const SwTOXBase& rTOX) const;
1410 
1411 	sal_Bool DeleteTOX( const SwTOXBase& rTOXBase, sal_Bool bDelNodes = sal_False );
1412 	String GetUniqueTOXBaseName( const SwTOXType& rType,
1413 								const String* pChkStr = 0 ) const;
1414 
1415 	sal_Bool SetTOXBaseName(const SwTOXBase& rTOXBase, const String& rName);
1416 	void SetTOXBaseProtection(const SwTOXBase& rTOXBase, sal_Bool bProtect);
1417 
1418 	// nach einlesen einer Datei alle Verzeichnisse updaten
1419     void SetUpdateTOX( bool bFlag = true )     { mbUpdateTOX = bFlag; }
1420     bool IsUpdateTOX() const                   { return mbUpdateTOX; }
1421 
1422 	const String&	GetTOIAutoMarkURL() const {return sTOIAutoMarkURL;}
1423 	void			SetTOIAutoMarkURL(const String& rSet)  {sTOIAutoMarkURL = rSet;}
1424 	void 			ApplyAutoMark();
1425 
1426     bool IsInReading() const                    { return mbInReading; }
1427     void SetInReading( bool bNew )              { mbInReading = bNew; }
1428 
1429     bool IsClipBoard() const                    { return mbClipBoard; }
1430     // N.B.: must be called right after constructor! (@see GetXmlIdRegistry)
1431     void SetClipBoard( bool bNew )              { mbClipBoard = bNew; }
1432 
1433     bool IsColumnSelection() const              { return mbColumnSelection; }
1434     void SetColumnSelection( bool bNew )        { mbColumnSelection = bNew; }
1435 
1436     bool IsInXMLImport() const { return mbInXMLImport; }
1437     void SetInXMLImport( bool bNew ) { mbInXMLImport = bNew; }
1438 
1439 	// - Verzeichnis-Typen verwalten
1440 	sal_uInt16 GetTOXTypeCount( TOXTypes eTyp ) const;
1441 	const SwTOXType* GetTOXType( TOXTypes eTyp, sal_uInt16 nId ) const;
1442 	sal_Bool DeleteTOXType( TOXTypes eTyp, sal_uInt16 nId );
1443 	const SwTOXType* InsertTOXType( const SwTOXType& rTyp );
1444 	const SwTOXTypes& GetTOXTypes() const { return *pTOXTypes; }
1445 
1446 	const SwTOXBase* 	GetDefaultTOXBase( TOXTypes eTyp, sal_Bool bCreate = sal_False );
1447 	void				SetDefaultTOXBase(const SwTOXBase& rBase);
1448 
1449 	// - Schluessel fuer die Indexverwaltung
1450 	sal_uInt16 GetTOIKeys( SwTOIKeyType eTyp, SvStringsSort& rArr ) const;
1451 
1452 	// Sortieren Tabellen Text
1453 	sal_Bool SortTbl(const SwSelBoxes& rBoxes, const SwSortOptions&);
1454 	sal_Bool SortText(const SwPaM&, const SwSortOptions&);
1455 
1456 		// korrigiere die im Dokument angemeldeten SwPosition-Objecte,
1457 		// wie z.B. die ::com::sun::star::text::Bookmarks oder die Verzeichnisse.
1458 		// JP 22.06.95: ist bMoveCrsr gesetzt, verschiebe auch die Crsr
1459 
1460 		// Setzt alles in rOldNode auf rNewPos + Offset
1461 	void CorrAbs( const SwNodeIndex& rOldNode, const SwPosition& rNewPos,
1462 					const xub_StrLen nOffset = 0, sal_Bool bMoveCrsr = sal_False );
1463 		// Setzt alles im Bereich von [rStartNode, rEndNode] nach rNewPos
1464 	void CorrAbs( const SwNodeIndex& rStartNode, const SwNodeIndex& rEndNode,
1465 					const SwPosition& rNewPos, sal_Bool bMoveCrsr = sal_False );
1466 		// Setzt alles im Bereich von rRange nach rNewPos
1467 	void CorrAbs( const SwPaM& rRange, const SwPosition& rNewPos,
1468 					sal_Bool bMoveCrsr = sal_False );
1469 		// Setzt alles in rOldNode auf relative Pos
1470 	void CorrRel( const SwNodeIndex& rOldNode, const SwPosition& rNewPos,
1471 					const xub_StrLen nOffset = 0, sal_Bool bMoveCrsr = sal_False );
1472 
1473 		// GliederungsRegeln erfragen / setzen
1474     // --> OD 2005-11-02 #i51089 - TUNING#
1475     inline SwNumRule* GetOutlineNumRule() const
1476     {
1477         return pOutlineRule;
1478     }
1479     // <--
1480 	void SetOutlineNumRule( const SwNumRule& rRule );
1481     void PropagateOutlineRule();
1482 
1483 	// Gliederung - hoch-/runterstufen
1484 	sal_Bool OutlineUpDown( const SwPaM& rPam, short nOffset = 1 );
1485 	// Gliederung - hoch-/runtermoven
1486 	sal_Bool MoveOutlinePara( const SwPaM& rPam, short nOffset = 1);
1487 		// zu diesem Gliederungspunkt
1488 	sal_Bool GotoOutline( SwPosition& rPos, const String& rName ) const;
1489 	// die Aenderungen an den Gliederungsvorlagen in die OutlineRule uebernehmen
1490 
1491 		// setzt, wenn noch keine Numerierung, sonst wird geaendert
1492 		// arbeitet mit alten und neuen Regeln, nur Differenzen aktualisieren
1493     // --> OD 2005-02-18 #i42921# - re-use unused 3rd parameter
1494     // --> OD 2008-02-08 #newlistlevelattrs#
1495     // Add optional parameter <bResetIndentAttrs> - default value sal_False.
1496     // If <bResetIndentAttrs> equals true, the indent attributes "before text"
1497     // and "first line indent" are additionally reset at the provided PaM, if
1498     // the list style makes use of the new list level attributes.
1499     // --> OD 2008-03-17 #refactorlists#
1500     // introduce parameters <bCreateNewList> and <sContinuedListId>
1501     // <bCreateNewList> indicates, if a new list is created by applying the
1502     // given list style.
1503     void SetNumRule( const SwPaM&,
1504                      const SwNumRule&,
1505                      const bool bCreateNewList,
1506                      const String sContinuedListId = String(),
1507                      sal_Bool bSetItem = sal_True,
1508                      const bool bResetIndentAttrs = false );
1509     // <--
1510     void SetCounted( const SwPaM&, bool bCounted);
1511 
1512     // --> OD 2009-08-25 #i86492#
1513     // no longer needed.
1514     // SwDoc::SetNumRule( rPaM, rNumRule, false, <ListId>, sal_True, true ) have to be used instead.
1515 //    /**
1516 //       Replace numbering rules in a PaM by another numbering rule.
1517 
1518 //       \param rPaM         PaM to replace the numbering rules in
1519 //       \param rNumRule     numbering rule to replace the present numbering rules
1520 //     */
1521 //    void ReplaceNumRule(const SwPaM & rPaM, const SwNumRule & rNumRule);
1522 
1523     void MakeUniqueNumRules(const SwPaM & rPaM);
1524 
1525 	void SetNumRuleStart( const SwPosition& rPos, sal_Bool bFlag = sal_True );
1526     void SetNodeNumStart( const SwPosition& rPos, sal_uInt16 nStt );
1527 
1528 	SwNumRule* GetCurrNumRule( const SwPosition& rPos ) const;
1529 
1530     const SwNumRuleTbl& GetNumRuleTbl() const { return *pNumRuleTbl; }
1531 
1532     // #i36749#
1533     /**
1534        Add numbering rule to document.
1535 
1536        @param pRule    rule to add
1537     */
1538     void AddNumRule(SwNumRule * pRule);
1539 
1540     // --> OD 2008-02-11 #newlistlevelattrs#
1541     // add optional parameter <eDefaultNumberFormatPositionAndSpaceMode>
1542     sal_uInt16 MakeNumRule( const String &rName,
1543         const SwNumRule* pCpy = 0,
1544         sal_Bool bBroadcast = sal_False,
1545         const SvxNumberFormat::SvxNumPositionAndSpaceMode eDefaultNumberFormatPositionAndSpaceMode =
1546             SvxNumberFormat::LABEL_WIDTH_AND_POSITION );
1547     // <--
1548 	sal_uInt16 FindNumRule( const String& rName ) const;
1549 	SwNumRule* FindNumRulePtr( const String& rName ) const;
1550 
1551 	// loeschen geht nur, wenn die ::com::sun::star::chaos::Rule niemand benutzt!
1552     // #106897#
1553     sal_Bool RenameNumRule(const String & aOldName, const String & aNewName,
1554                            sal_Bool bBroadcast = sal_False);
1555 	sal_Bool DelNumRule( const String& rName, sal_Bool bBroadCast = sal_False );
1556 	String GetUniqueNumRuleName( const String* pChkStr = 0, sal_Bool bAutoNum = sal_True ) const;
1557 
1558 	void UpdateNumRule();	// alle invaliden Updaten
1559     // #106897#
1560 	void ChgNumRuleFmts( const SwNumRule& rRule, const String * pOldName = 0 );
1561 	sal_Bool ReplaceNumRule( const SwPosition& rPos, const String& rOldRule,
1562 						const String& rNewRule );
1563 
1564 		// zum naechsten/vorhergehenden Punkt auf gleicher Ebene
1565 	sal_Bool GotoNextNum( SwPosition&, sal_Bool bOverUpper = sal_True,
1566 						sal_uInt8* pUpper = 0, sal_uInt8* pLower = 0 );
1567 	sal_Bool GotoPrevNum( SwPosition&, sal_Bool bOverUpper = sal_True,
1568 						sal_uInt8* pUpper = 0, sal_uInt8* pLower = 0 );
1569 
1570     // #i23731#
1571     /** Searches for a text node with a numbering rule.
1572 
1573        OD 2005-10-24 #i55391# - add optional parameter <bInvestigateStartNode>
1574        OD 2008-03-18 #refactorlists# - add output parameter <sListId>
1575 
1576        \param rPos         position to start search
1577        \param bForward     - sal_True:  search forward
1578                            - sal_False: search backward
1579 	   \param bNum		   - sal_True:  search for enumeration
1580 		                   - sal_False: search for itemize
1581        \param bOutline     - sal_True:  search for outline numbering rule
1582                            - sal_False: search for non-outline numbering rule
1583        \param nNonEmptyAllowed   number of non-empty paragraphs allowed between
1584                                  rPos and found paragraph
1585 
1586         @param sListId
1587         output parameter - in case a list style is found, <sListId> holds the
1588         list id, to which the text node belongs, which applies the found list style.
1589 
1590         @param bInvestigateStartNode
1591         input parameter - boolean, indicating, if start node, determined by given
1592         start position has to be investigated or not.
1593      */
1594     const SwNumRule * SearchNumRule(const SwPosition & rPos,
1595                                     const bool bForward,
1596                                     const bool bNum,
1597                                     const bool bOutline,
1598                                     int nNonEmptyAllowed,
1599                                     String& sListId,
1600                                     const bool bInvestigateStartNode = false );
1601 
1602 		// Absaetze ohne Numerierung, aber mit Einzuegen
1603 	sal_Bool NoNum( const SwPaM& );
1604 		// Loeschen, Splitten der Aufzaehlungsliste
1605     void DelNumRules( const SwPaM& );
1606 
1607     // Invalidates all numrules
1608     void InvalidateNumRules();
1609 
1610 		// Hoch-/Runterstufen
1611 	sal_Bool NumUpDown( const SwPaM&, sal_Bool bDown = sal_True );
1612 		// Bewegt selektierte Absaetze (nicht nur Numerierungen)
1613 		// entsprechend des Offsets. (negativ: zum Doc-Anf.)
1614 	sal_Bool MoveParagraph( const SwPaM&, long nOffset = 1, sal_Bool bIsOutlMv = sal_False );
1615 		// No-/Numerierung ueber Delete/Backspace ein/abschalten #115901#
1616 	sal_Bool NumOrNoNum( const SwNodeIndex& rIdx, sal_Bool bDel = sal_False);
1617 		// Animation der Grafiken stoppen
1618 	void StopNumRuleAnimations( OutputDevice* );
1619 
1620 		// fuege eine neue Tabelle auf der Position rPos ein. (es
1621 		// wird vor dem Node eingefuegt !!)
1622 		//JP 28.10.96:
1623 		// 	fuer AutoFormat bei der Eingabe: dann muessen die Spalten
1624 		//	auf die vordefinierten Breite gesetzt werden. Im Array stehen die
1625 		// 	Positionen der Spalten!! (nicht deren Breite!)
1626     /* #109161# new parameter bCalledFromShell:
1627 
1628        sal_True: called from shell -> propagate existing adjust item at
1629        rPos to every new cell. A existing adjust item in the table
1630        heading or table contents paragraph style prevent that
1631        propagation.
1632 
1633        sal_False: do not propagate
1634     */
1635     const SwTable* InsertTable( const SwInsertTableOptions& rInsTblOpts,  // HEADLINE_NO_BORDER
1636                                 const SwPosition& rPos, sal_uInt16 nRows,
1637                                 sal_uInt16 nCols, short eAdjust,
1638                                 const SwTableAutoFmt* pTAFmt = 0,
1639                                 const SvUShorts* pColArr = 0,
1640                                 sal_Bool bCalledFromShell = sal_False,
1641                                 sal_Bool bNewModel = sal_True );
1642 
1643     // steht der Index in einer Tabelle, dann returne den TableNode sonst 0
1644 				 SwTableNode* IsIdxInTbl( const SwNodeIndex& rIdx );
1645 	inline const SwTableNode* IsIdxInTbl( const SwNodeIndex& rIdx ) const;
1646 
1647 		// erzeuge aus dem makierten Bereich eine ausgeglichene Tabelle
1648     const SwTable* TextToTable( const SwInsertTableOptions& rInsTblOpts, // HEADLINE_NO_BORDER,
1649                                 const SwPaM& rRange, sal_Unicode cCh,
1650                                 short eAdjust,
1651                                 const SwTableAutoFmt* = 0 );
1652     // text to table conversion - API support
1653     const SwTable* TextToTable( const std::vector< std::vector<SwNodeRange> >& rTableNodes );
1654 		// erzeuge aus der Tabelle wieder normalen Text
1655 	sal_Bool TableToText( const SwTableNode* pTblNd, sal_Unicode cCh );
1656 		// einfuegen von Spalten/Zeilen in der Tabelle
1657 	sal_Bool InsertCol( const SwCursor& rCursor,
1658 					sal_uInt16 nCnt = 1, sal_Bool bBehind = sal_True );
1659 	sal_Bool InsertCol( const SwSelBoxes& rBoxes,
1660 					sal_uInt16 nCnt = 1, sal_Bool bBehind = sal_True );
1661 	sal_Bool InsertRow( const SwCursor& rCursor,
1662 					sal_uInt16 nCnt = 1, sal_Bool bBehind = sal_True );
1663 	sal_Bool InsertRow( const SwSelBoxes& rBoxes,
1664 					sal_uInt16 nCnt = 1, sal_Bool bBehind = sal_True );
1665 		// loeschen von Spalten/Zeilen in der Tabelle
1666 	sal_Bool DeleteRowCol( const SwSelBoxes& rBoxes, bool bColumn = false );
1667 	sal_Bool DeleteRow( const SwCursor& rCursor );
1668 	sal_Bool DeleteCol( const SwCursor& rCursor );
1669 		// teilen / zusammenfassen von Boxen in der Tabelle
1670     sal_Bool SplitTbl( const SwSelBoxes& rBoxes, sal_Bool bVert = sal_True,
1671                        sal_uInt16 nCnt = 1, sal_Bool bSameHeight = sal_False );
1672 		// returnt den enum TableMergeErr
1673 	sal_uInt16 MergeTbl( SwPaM& rPam );
1674 	String GetUniqueTblName() const;
1675 	sal_Bool IsInsTblFormatNum() const;
1676 	sal_Bool IsInsTblChangeNumFormat() const;
1677 	sal_Bool IsInsTblAlignNum() const;
1678 
1679 		// aus der FEShell wg.. Undo und bModified
1680     void GetTabCols( SwTabCols &rFill, const SwCursor* pCrsr,
1681 					const SwCellFrm* pBoxFrm = 0 ) const;
1682 	void SetTabCols( const SwTabCols &rNew, sal_Bool bCurRowOnly,
1683 					const SwCursor* pCrsr, const SwCellFrm* pBoxFrm = 0 );
1684     void GetTabRows( SwTabCols &rFill, const SwCursor* pCrsr,
1685                     const SwCellFrm* pBoxFrm = 0 ) const;
1686     void SetTabRows( const SwTabCols &rNew, sal_Bool bCurColOnly, const SwCursor* pCrsr,
1687                      const SwCellFrm* pBoxFrm = 0 );
1688 
1689 
1690 	// Direktzugriff fuer Uno
1691     void SetTabCols(SwTable& rTab, const SwTabCols &rNew, const SwTabCols &rOld,
1692 									const SwTableBox *pStart, sal_Bool bCurRowOnly);
1693 
1694     void SetRowsToRepeat( SwTable &rTable, sal_uInt16 nSet );
1695 
1696 		// AutoFormat fuer die Tabelle/TabellenSelection
1697 	sal_Bool SetTableAutoFmt( const SwSelBoxes& rBoxes, const SwTableAutoFmt& rNew );
1698 		// Erfrage wie attributiert ist
1699 	sal_Bool GetTableAutoFmt( const SwSelBoxes& rBoxes, SwTableAutoFmt& rGet );
1700 		// setze das InsertDB als Tabelle Undo auf:
1701 	void AppendUndoForInsertFromDB( const SwPaM& rPam, sal_Bool bIsTable );
1702 		// setze die Spalten/Zeilen/ZTellen Breite/Hoehe
1703 	sal_Bool SetColRowWidthHeight( SwTableBox& rAktBox, sal_uInt16 eType,
1704 								SwTwips nAbsDiff, SwTwips nRelDiff );
1705 	SwTableBoxFmt* MakeTableBoxFmt();
1706 	SwTableLineFmt* MakeTableLineFmt();
1707 	// teste ob die Box ein numerischen Wert darstellt und aender dann ggfs.
1708 	// das Format der Box
1709 	void ChkBoxNumFmt( SwTableBox& rAktBox, sal_Bool bCallUpdate );
1710 	void SetTblBoxFormulaAttrs( SwTableBox& rBox, const SfxItemSet& rSet );
1711 	void ClearBoxNumAttrs( const SwNodeIndex& rNode );
1712 
1713 	sal_Bool InsCopyOfTbl( SwPosition& rInsPos, const SwSelBoxes& rBoxes,
1714 						const SwTable* pCpyTbl = 0, sal_Bool bCpyName = sal_False,
1715 						sal_Bool bCorrPos = sal_False );
1716 
1717 	sal_Bool UnProtectCells( const String& rTblName );
1718 	sal_Bool UnProtectCells( const SwSelBoxes& rBoxes );
1719 	sal_Bool UnProtectTbls( const SwPaM& rPam );
1720 	sal_Bool HasTblAnyProtection( const SwPosition* pPos,
1721 							  const String* pTblName = 0,
1722 							  sal_Bool* pFullTblProtection = 0 );
1723 
1724 	// Tabelle an der Position in der GrundLine aufsplitten, sprich eine
1725 	// neue Tabelle erzeugen.
1726 	sal_Bool SplitTable( const SwPosition& rPos, sal_uInt16 eMode = 0,
1727 						sal_Bool bCalcNewSize = sal_False );
1728 	// und die Umkehrung davon. rPos muss in der Tabelle stehen, die bestehen
1729 	// bleibt. Das Flag besagt ob die aktuelle mit der davor oder dahinter
1730 	// stehenden vereint wird.
1731 	sal_Bool MergeTable( const SwPosition& rPos, sal_Bool bWithPrev = sal_True,
1732 						sal_uInt16 nMode = 0 );
1733 
1734 	// Charts der angegebenen Tabelle zum Update bewegen
1735 	void UpdateCharts( const String &rName ) const;
1736 	// update all charts, for that exists any table
1737     void UpdateAllCharts()          { DoUpdateAllCharts( 0 ); }
1738 	// Tabelle wird umbenannt und aktualisiert die Charts
1739 	void SetTableName( SwFrmFmt& rTblFmt, const String &rNewName );
1740 
1741 	// returne zum Namen die im Doc gesetzte Referenz
1742 	const SwFmtRefMark* GetRefMark( const String& rName ) const;
1743 	// returne die RefMark per Index - fuer Uno
1744 	const SwFmtRefMark* GetRefMark( sal_uInt16 nIndex ) const;
1745 	// returne die Namen aller im Doc gesetzten Referenzen.
1746 	// 	Ist der ArrayPointer 0 dann returne nur, ob im Doc. eine RefMark
1747 	//	gesetzt ist
1748 	sal_uInt16 GetRefMarks( SvStringsDtor* = 0 ) const;
1749 
1750 	//Einfuegen einer Beschriftung - falls ein FlyFormat erzeugt wird, so
1751 	// returne dieses.
1752     SwFlyFrmFmt* InsertLabel( const SwLabelType eType, const String &rTxt, const String& rSeparator,
1753                     const String& rNumberingSeparator,
1754 					const sal_Bool bBefore, const sal_uInt16 nId, const sal_uLong nIdx,
1755                     const String& rCharacterStyle,
1756 					const sal_Bool bCpyBrd = sal_True );
1757     SwFlyFrmFmt* InsertDrawLabel(
1758         const String &rTxt, const String& rSeparator, const String& rNumberSeparator,
1759         const sal_uInt16 nId, const String& rCharacterStyle, SdrObject& rObj );
1760 
1761 	// erfrage den Attribut Pool
1762 	const SwAttrPool& GetAttrPool() const	{ return *mpAttrPool; }
1763 		  SwAttrPool& GetAttrPool() 		{ return *mpAttrPool; }
1764 
1765 	// suche ueber das Layout eine EditShell und ggfs. eine ViewShell
1766 	SwEditShell* GetEditShell( ViewShell** ppSh = 0 ) const;
1767     ::sw::IShellCursorSupplier * GetIShellCursorSupplier();
1768 
1769 	// OLE 2.0-Benachrichtung
1770 	inline		 void  SetOle2Link(const Link& rLink) {aOle2Link = rLink;}
1771 	inline const Link& GetOle2Link() const {return aOle2Link;}
1772 
1773     // insert section (the ODF kind of section, not the nodesarray kind)
1774     SwSection * InsertSwSection(SwPaM const& rRange, SwSectionData &,
1775             SwTOXBase const*const pTOXBase = 0,
1776             SfxItemSet const*const pAttr = 0, bool const bUpdate = true);
1777 	sal_uInt16 IsInsRegionAvailable( const SwPaM& rRange,
1778 								const SwNode** ppSttNd = 0 ) const;
1779 	SwSection* GetCurrSection( const SwPosition& rPos ) const;
1780 	SwSectionFmts& GetSections() { return *pSectionFmtTbl; }
1781 	const SwSectionFmts& GetSections() const { return *pSectionFmtTbl; }
1782 	SwSectionFmt *MakeSectionFmt( SwSectionFmt *pDerivedFrom );
1783 	void DelSectionFmt( SwSectionFmt *pFmt, sal_Bool bDelNodes = sal_False );
1784     void UpdateSection(sal_uInt16 const nSect, SwSectionData &,
1785             SfxItemSet const*const = 0, bool const bPreventLinkUpdate = false);
1786 	String GetUniqueSectionName( const String* pChkStr = 0 ) const;
1787 
1788     /* @@@MAINTAINABILITY-HORROR@@@
1789        The model should not have anything to do with a shell.
1790        Unnecessary compile/link time dependency.
1791     */
1792 	// Pointer auf die SfxDocShell vom Doc, kann 0 sein !!!
1793 		  SwDocShell* GetDocShell() 		{ return pDocShell; }
1794 	const SwDocShell* GetDocShell() const	{ return pDocShell; }
1795 	void SetDocShell( SwDocShell* pDSh );
1796 
1797 	void ShareLayout( boost::shared_ptr<SwRootFrm>& rPtr);
1798 
1799 	// in case during copying of embedded object a new shell is created,
1800     // it should be set here and cleaned later
1801     void SetTmpDocShell( SfxObjectShellLock rLock )    { xTmpDocShell = rLock; }
1802     SfxObjectShellLock GetTmpDocShell()    { return xTmpDocShell; }
1803 
1804     // fuer die TextBausteine - diese habe nur ein SvPersist zur
1805     // Verfuegung
1806     SfxObjectShell* GetPersist() const;
1807 
1808 	// Pointer auf den Storage des SfxDocShells, kann 0 sein !!!
1809     ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > GetDocStorage();
1810 
1811 		// abfrage/setze Flag, ob das Dokument im asynchronen Laden ist
1812     bool IsInLoadAsynchron() const             { return mbInLoadAsynchron; }
1813     void SetInLoadAsynchron( bool bFlag )       { mbInLoadAsynchron = bFlag; }
1814 
1815 	// erzeuge um das zu Servende Object eine Selektion
1816 	sal_Bool SelectServerObj( const String& rStr, SwPaM*& rpPam,
1817 							SwNodeRange*& rpRange ) const;
1818 
1819 	// fuer Drag&Move: ( z.B. RefMarks "verschieben" erlauben )
1820     bool IsCopyIsMove() const              { return mbCopyIsMove; }
1821     void SetCopyIsMove( bool bFlag )        { mbCopyIsMove = bFlag; }
1822 
1823 	SwDrawContact* GroupSelection( SdrView& );
1824 	void UnGroupSelection( SdrView& );
1825 	sal_Bool DeleteSelection( SwDrawView& );
1826 
1827 	// Invalidiert OnlineSpell-WrongListen
1828 	void SpellItAgainSam( sal_Bool bInvalid, sal_Bool bOnlyWrong, sal_Bool bSmartTags );
1829 	void InvalidateAutoCompleteFlag();
1830 
1831     // <--
1832 	void SetCalcFieldValueHdl(Outliner* pOutliner);
1833 
1834 	// erfrage ob die ::com::sun::star::util::URL besucht war. Uebers Doc, falls nur ein ::com::sun::star::text::Bookmark
1835 	// angegeben ist. Dann muss der Doc. Name davor gesetzt werden!
1836 	sal_Bool IsVisitedURL( const String& rURL ) const;
1837 
1838 	// speicher die akt. Werte fuer die automatische Aufnahme von Ausnahmen
1839 	// in die Autokorrektur
1840 	void SetAutoCorrExceptWord( SwAutoCorrExceptWord* pNew );
1841 	SwAutoCorrExceptWord* GetAutoCorrExceptWord()		{ return pACEWord; }
1842 
1843 	const SwFmtINetFmt* FindINetAttr( const String& rName ) const;
1844 
1845 	// rufe ins dunkle Basic, mit evt. Return String
1846 	sal_Bool ExecMacro( const SvxMacro& rMacro, String* pRet = 0, SbxArray* pArgs = 0 );
1847 	// rufe ins dunkle Basic/JavaScript
1848 	sal_uInt16 CallEvent( sal_uInt16 nEvent, const SwCallMouseEvent& rCallEvent,
1849 						sal_Bool bChkPtr = sal_False, SbxArray* pArgs = 0,
1850 						const Link* pCallBack = 0 );
1851 
1852 	// linken Rand ueber Objectleiste einstellen (aenhlich dem Stufen von
1853 	// Numerierungen), optional kann man "um" den Offset stufen oder "auf"
1854 	// die Position gestuft werden (bModulus = sal_True)
1855 	void MoveLeftMargin( const SwPaM& rPam, sal_Bool bRight = sal_True,
1856 						sal_Bool bModulus = sal_True );
1857 
1858 	// Numberformatter erfragen
1859 	inline	  	 SvNumberFormatter* GetNumberFormatter( sal_Bool bCreate = sal_True );
1860 	inline const SvNumberFormatter* GetNumberFormatter( sal_Bool bCreate = sal_True ) const;
1861 
1862     bool HasInvisibleContent() const;
1863     /// delete invisible content, like hidden sections and paragraphs
1864     bool RemoveInvisibleContent();
1865     /// restore the invisible content if it's available on the undo stack
1866     bool RestoreInvisibleContent();
1867     // replace fields by text - mailmerge support
1868     sal_Bool ConvertFieldsToText();
1869 
1870 	// erzeuge Anhand der vorgebenen Collection Teildokumente
1871 	// falls keine angegeben ist, nehme die Kapitelvorlage der 1. Ebene
1872 	sal_Bool GenerateGlobalDoc( const String& rPath,
1873 								const SwTxtFmtColl* pSplitColl = 0 );
1874 	sal_Bool GenerateGlobalDoc( const String& rPath, int nOutlineLevel = 0 );	//#outline level,add by zhaojianwei
1875 	sal_Bool GenerateHTMLDoc( const String& rPath,
1876 								const SwTxtFmtColl* pSplitColl = 0 );
1877 	sal_Bool GenerateHTMLDoc( const String& rPath, int nOutlineLevel = 0 );	//#outline level,add by zhaojianwei
1878 
1879 	//  vergleiche zwei Dokument miteinander
1880 	long CompareDoc( const SwDoc& rDoc );
1881 	// merge zweier Dokumente
1882 	long MergeDoc( const SwDoc& rDoc );
1883 	// setze Kommentar-Text fuers Redline, das dann per AppendRedline
1884 	// hereinkommt. Wird vom Autoformat benutzt. 0-Pointer setzt den Modus
1885 	// wieder zurueck. Die SequenceNummer ist fuers UI-seitige zusammen-
1886 	// fassen von Redlines.
1887 	void SetAutoFmtRedlineComment( const String* pTxt, sal_uInt16 nSeqNo = 0 );
1888 
1889     bool IsAutoFmtRedline() const           { return mbIsAutoFmtRedline; }
1890     void SetAutoFmtRedline( bool bFlag )    { mbIsAutoFmtRedline = bFlag; }
1891 
1892 	// fuer AutoFormat: mit Undo/Redlining - Behandlung
1893 	void SetTxtFmtCollByAutoFmt( const SwPosition& rPos, sal_uInt16 nPoolId,
1894 								const SfxItemSet* pSet = 0 );
1895 	void SetFmtItemByAutoFmt( const SwPaM& rPam, const SfxItemSet& );
1896 
1897 	// !!!NUR fuer die SW-Textblocks!! beachtet kein LAYOUT!!!
1898 	void ClearDoc(); 		// loescht den gesamten Inhalt.
1899 
1900 	// erfrage / setze die Daten fuer die PagePreView
1901 	const SwPagePreViewPrtData* GetPreViewPrtData() const { return pPgPViewPrtData; }
1902 	// wenn der Pointer == 0 ist, dann wird im Doc der Pointer zerstoert,
1903 	// ansonsten wird das Object kopiert.
1904 	// Der Pointer geht NICHT in den Besitz des Doc's!!
1905 	void SetPreViewPrtData( const SwPagePreViewPrtData* pData );
1906 
1907 	// update all modified OLE-Objects. The modification is called over the
1908 	// StarOne - Interface				--> Bug 67026
1909 	void SetOLEObjModified()
1910 	{	if( GetCurrentViewShell() ) aOLEModifiedTimer.Start(); }	//swmod 071107//swmod 071225
1911 
1912 	// -------------------- Uno - Schnittstellen ---------------------------
1913 	const SwUnoCrsrTbl& GetUnoCrsrTbl() const 		{ return *pUnoCrsrTbl; }
1914 	SwUnoCrsr* CreateUnoCrsr( const SwPosition& rPos, sal_Bool bTblCrsr = sal_False );
1915 	// -------------------- Uno - Schnittstellen ---------------------------
1916 
1917 	// -------------------- FeShell - Schnittstellen -----------------------
1918 	// !!!!! diese gehen immer davon aus, das ein Layout existiert  !!!!
1919     sal_Bool ChgAnchor( const SdrMarkList& _rMrkList,
1920                         RndStdIds _eAnchorType,
1921                         const sal_Bool _bSameOnly,
1922                         const sal_Bool _bPosCorr );
1923 
1924 	void SetRowHeight( const SwCursor& rCursor, const SwFmtFrmSize &rNew );
1925 	void GetRowHeight( const SwCursor& rCursor, SwFmtFrmSize *& rpSz ) const;
1926     void SetRowSplit( const SwCursor& rCursor, const SwFmtRowSplit &rNew );
1927     void GetRowSplit( const SwCursor& rCursor, SwFmtRowSplit *& rpSz ) const;
1928 	sal_Bool BalanceRowHeight( const SwCursor& rCursor, sal_Bool bTstOnly = sal_True );
1929 	void SetRowBackground( const SwCursor& rCursor, const SvxBrushItem &rNew );
1930 	sal_Bool GetRowBackground( const SwCursor& rCursor, SvxBrushItem &rToFill ) const;
1931 	void SetTabBorders( const SwCursor& rCursor, const SfxItemSet& rSet );
1932 	void SetTabLineStyle( const SwCursor& rCursor,
1933 						  const Color* pColor, sal_Bool bSetLine,
1934 						  const SvxBorderLine* pBorderLine );
1935 	void GetTabBorders( const SwCursor& rCursor, SfxItemSet& rSet ) const;
1936 	void SetBoxAttr( const SwCursor& rCursor, const SfxPoolItem &rNew );
1937     sal_Bool GetBoxAttr( const SwCursor& rCursor, SfxPoolItem &rToFill ) const;
1938     void SetBoxAlign( const SwCursor& rCursor, sal_uInt16 nAlign );
1939 	sal_uInt16 GetBoxAlign( const SwCursor& rCursor ) const;
1940 	void AdjustCellWidth( const SwCursor& rCursor, sal_Bool bBalance = sal_False );
1941 
1942 	int Chainable( const SwFrmFmt &rSource, const SwFrmFmt &rDest );
1943 	int Chain( SwFrmFmt &rSource, const SwFrmFmt &rDest );
1944 	void Unchain( SwFrmFmt &rFmt );
1945 
1946 	// fuers Copy/Move aus der FrmShell
1947 	SdrObject* CloneSdrObj( const SdrObject&, sal_Bool bMoveWithinDoc = sal_False,
1948 							sal_Bool bInsInPage = sal_True );
1949 
1950 	//
1951 	// -------------------- FeShell - Schnittstellen Ende ------------------
1952 
1953 
1954 	// Schnittstelle fuer die TextInputDaten - ( fuer die Texteingabe
1955 	// von japanischen/chinesischen Zeichen)
1956 	SwExtTextInput* CreateExtTextInput( const SwPaM& rPam );
1957 	void DeleteExtTextInput( SwExtTextInput* pDel );
1958 	SwExtTextInput* GetExtTextInput( const SwNode& rNd,
1959 								xub_StrLen nCntntPos = STRING_NOTFOUND) const;
1960 	SwExtTextInput* GetExtTextInput() const;
1961 
1962 	// Schnistelle fuer den Zugriff auf die AutoComplete-Liste
1963 	static SwAutoCompleteWord& GetAutoCompleteWords() { return *pACmpltWords; }
1964 
1965     bool ContainsMSVBasic() const          { return mbContains_MSVBasic; }
1966     void SetContainsMSVBasic( bool bFlag )  { mbContains_MSVBasic = bFlag; }
1967 
1968     // Interface for the list of Ruby - texts/attributes
1969 	sal_uInt16 FillRubyList( const SwPaM& rPam, SwRubyList& rList,
1970 						sal_uInt16 nMode );
1971 	sal_uInt16 SetRubyList( const SwPaM& rPam, const SwRubyList& rList,
1972 						sal_uInt16 nMode );
1973 
1974     void ReadLayoutCache( SvStream& rStream );
1975     void WriteLayoutCache( SvStream& rStream );
1976     SwLayoutCache* GetLayoutCache() const { return pLayoutCache; }
1977 
1978     /** Checks if any of the text node contains hidden characters.
1979         Used for optimization. Changing the view option 'view hidden text'
1980         has to trigger a reformatting only if some of the text is hidden.
1981     */
1982     bool ContainsHiddenChars() const;
1983 
1984 	// call back for API wrapper
1985 	SwModify*	GetUnoCallBack() const;
1986 
1987     IGrammarContact* getGrammarContact() const { return mpGrammarContact; }
1988 
1989     // -> #i27615#
1990     /** Marks/Unmarks a list level of a certain list
1991 
1992         OD 2008-04-02 #refactorlists#
1993         levels of a certain lists are marked now
1994 
1995         @param sListId    list Id of the list whose level has to be marked/unmarked
1996         @param nListLevel level to mark
1997         @param bValue     - sal_True  mark the level
1998                           - sal_False unmark the level
1999     */
2000     void MarkListLevel( const String& sListId,
2001                         const int nListLevel,
2002                         const sal_Bool bValue );
2003 
2004     /** Marks/Unmarks a list level of a certain list
2005 
2006         OD 2008-04-02 #refactorlists#
2007         levels of a certain lists are marked now
2008 
2009         @param rList      list whose level has to be marked/unmarked
2010         @param nListLevel level to mark
2011         @param bValue     - sal_True  mark the level
2012                           - sal_False unmark the level
2013      */
2014     void MarkListLevel( SwList& rList,
2015                         const int nListLevel,
2016                         const sal_Bool bValue );
2017     // <- #i27615#
2018 
2019     // Change a format undoable.
2020     void ChgFmt(SwFmt & rFmt, const SfxItemSet & rSet);
2021 
2022     void RenameFmt(SwFmt & rFmt, const String & sNewName,
2023                    sal_Bool bBroadcast = sal_False);
2024 
2025     // Change a TOX undoable.
2026     void ChgTOX(SwTOXBase & rTOX, const SwTOXBase & rNew);
2027 
2028     // #111827#
2029     /**
2030        Returns a textual description of a PaM.
2031 
2032        @param rPaM     the PaM to describe
2033 
2034        If rPaM only spans one paragraph the result is:
2035 
2036             '<text in the PaM>'
2037 
2038        <text in the PaM> is shortened to nUndoStringLength characters.
2039 
2040        If rPaM spans more than one paragraph the result is:
2041 
2042             paragraphs                               (STR_PARAGRAPHS)
2043 
2044        @return the textual description of rPaM
2045      */
2046     String GetPaMDescr(const SwPaM & rPaM) const;
2047 
2048     // -> #i23726#
2049     sal_Bool IsFirstOfNumRule(SwPosition & rPos);
2050     // <- #i23726#
2051 
2052     // --> #i31958# access methods for XForms model(s)
2053 
2054     /// access container for XForms model; will be NULL if !isXForms()
2055 	com::sun::star::uno::Reference<com::sun::star::container::XNameContainer>
2056         getXForms() const;
2057 
2058     com::sun::star::uno::Reference< com::sun::star::linguistic2::XProofreadingIterator > GetGCIterator() const;
2059 
2060     /// is this an XForms document?
2061     bool isXForms() const;
2062 
2063     /// initialize XForms models; turn this into an XForms document
2064     void initXForms( bool bCreateDefaultModel );
2065     // <-- #i31958# access methods for XForms model(s)
2066 
2067     // --> OD 2006-03-21 #b6375613#
2068     inline bool ApplyWorkaroundForB6375613() const
2069     {
2070         return mbApplyWorkaroundForB6375613;
2071     }
2072     void SetApplyWorkaroundForB6375613( bool p_bApplyWorkaroundForB6375613 );
2073     // <--
2074 
2075     //Update all the page masters
2076     void SetDefaultPageMode(bool bSquaredPageMode);
2077     sal_Bool IsSquaredPageMode() const;
2078 
2079 	// i#78591#
2080 	void Setn32DummyCompatabilityOptions1( sal_uInt32 CompatabilityOptions1 )
2081 	{
2082 		n32DummyCompatabilityOptions1 = CompatabilityOptions1;
2083 	}
2084 	sal_uInt32 Getn32DummyCompatabilityOptions1( )
2085 	{
2086 		return n32DummyCompatabilityOptions1;
2087 	}
2088 	void Setn32DummyCompatabilityOptions2( sal_uInt32 CompatabilityOptions2 )
2089 	{
2090 		n32DummyCompatabilityOptions2 = CompatabilityOptions2;
2091 	}
2092 	sal_uInt32 Getn32DummyCompatabilityOptions2( )
2093 	{
2094 		return n32DummyCompatabilityOptions2;
2095 	}
2096 #ifdef FUTURE_VBA
2097     com::sun::star::uno::Reference< com::sun::star::script::vba::XVBAEventProcessor > GetVbaEventProcessor();
2098 #endif
2099     ::sfx2::IXmlIdRegistry& GetXmlIdRegistry();
2100     ::sw::MetaFieldManager & GetMetaFieldManager();
2101     ::sw::UndoManager      & GetUndoManager();
2102     ::sw::UndoManager const& GetUndoManager() const;
2103     SfxObjectShell* CreateCopy(bool bCallInitNew) const;
2104 
2105 	/// must be called only in SwDocShell::InitNew, causes UpdateDrawDefaults to be called when drawing layer is created
2106 	void SetDrawDefaults();
2107 
2108 private:
2109 	/// method to set new graphics pool defaults, must only be called by SetDrawDefaults!
2110 	void UpdateDrawDefaults();
2111 };
2112 
2113 
2114 // Diese Methode wird im Dtor vom SwDoc gerufen und loescht den Cache
2115 // der Konturobjekte
2116 void ClrContourCache();
2117 
2118 
2119 //------------------ inline impl. ---------------------------------
2120 
2121 inline const SwTableNode* SwDoc::IsIdxInTbl( const SwNodeIndex& rIdx ) const
2122 {
2123 	return ((SwDoc*)this)->IsIdxInTbl( rIdx );
2124 }
2125 
2126 inline SvNumberFormatter* SwDoc::GetNumberFormatter( sal_Bool bCreate )
2127 {
2128 	if( bCreate && !pNumberFormatter )
2129 		_CreateNumberFormatter();
2130 	return pNumberFormatter;
2131 }
2132 
2133 inline const SvNumberFormatter* SwDoc::GetNumberFormatter( sal_Bool bCreate ) const
2134 {
2135 	return ((SwDoc*)this)->GetNumberFormatter( bCreate );
2136 }
2137 
2138 inline void SwDoc::SetOLEPrtNotifyPending( bool bSet )
2139 {
2140 	mbOLEPrtNotifyPending = bSet;
2141 	if( !bSet )
2142 		mbAllOLENotify = sal_False;
2143 }
2144 
2145 // --> OD 2006-03-14 #i62875#
2146 // namespace <docfunc> for functions and procedures working on a Writer document.
2147 namespace docfunc
2148 {
2149     /** method to check, if given Writer document contains at least one drawing object
2150 
2151         OD 2006-03-17 #i62875#
2152 
2153         @author OD
2154 
2155         @param p_rDoc
2156         input parameter - reference to the Writer document, which is investigated.
2157     */
2158     bool ExistsDrawObjs( SwDoc& p_rDoc );
2159 
2160     /** method to check, if given Writer document contains only drawing objects,
2161         which are completely on its page.
2162 
2163         OD 2006-03-17 #i62875#
2164 
2165         @author OD
2166 
2167         @param p_rDoc
2168         input parameter - reference to the Writer document, which is investigated.
2169     */
2170     bool AllDrawObjsOnPage( SwDoc& p_rDoc );
2171 
2172     /** method to check, if the outline style has to written as a normal list style
2173 
2174         OD 2006-09-27 #i69627#
2175         The outline style has to written as a normal list style, if a parent
2176         paragraph style of one of the paragraph styles, which are assigned to
2177         the list levels of the outline style, has a list style set or inherits
2178         a list style from its parent paragraphs style.
2179         This information is needed for the OpenDocument file format export.
2180 
2181         @author OD
2182 
2183         @param rDoc
2184         input parameter - reference to the text document, which is investigated.
2185 
2186         @return boolean
2187         indicating, if the outline style has to written as a normal list style
2188     */
2189     bool HasOutlineStyleToBeWrittenAsNormalListStyle( SwDoc& rDoc );
2190 }
2191 // <--
2192 #endif	//_DOC_HXX
2193