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