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