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