diff options
Diffstat (limited to 'sw/inc/doc.hxx')
-rw-r--r-- | sw/inc/doc.hxx | 1770 |
1 files changed, 1770 insertions, 0 deletions
diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx new file mode 100644 index 000000000000..d26acabd17dc --- /dev/null +++ b/sw/inc/doc.hxx @@ -0,0 +1,1770 @@ +/************************************************************************* + * + * $RCSfile: doc.hxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 17:14:25 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _DOC_HXX +#define _DOC_HXX + +#define _SVSTDARR_STRINGSDTOR +#include <svtools/svstdarr.hxx> + +#ifndef _TIMER_HXX //autogen +#include <vcl/timer.hxx> +#endif +#ifndef _SWTYPES_HXX +#include <swtypes.hxx> +#endif +#ifndef _NDARR_HXX +#include <ndarr.hxx> +#endif +#ifndef _SWATRSET_HXX +#include <swatrset.hxx> +#endif +#ifndef _TOXE_HXX +#include <toxe.hxx> // enums +#endif +#ifndef _REDLENUM_HXX +#include <redlenum.hxx> // enums +#endif +#ifndef _BKMRKE_HXX +#include <bkmrke.hxx> +#endif +#ifndef _FLYENUM_HXX +#include <flyenum.hxx> +#endif +#ifndef _ITABENUM_HXX +#include <itabenum.hxx> +#endif + +#ifndef _COM_SUN_STAR_LINGUISTIC_XSPELLCHECKER1_HPP_ +#include <com/sun/star/linguistic/XSpellChecker1.hpp> +#endif +#ifndef _COM_SUN_STAR_LINGUISTIC_XHYPHENATEDWORD_HPP_ +#include <com/sun/star/linguistic/XHyphenatedWord.hpp> +#endif + +class SwExtTextInput; +class DateTime; +class EditFieldInfo; +class JobSetup; +class Color; +class KeyCode; +class Outliner; +class OutputDevice; +class Point; +class SbxArray; +class SdrModel; +class SdrObject; +class SdrUndoAction; +class SfxDocumentInfo; +class SfxPrinter; +class SvData; +class SvEmbeddedObjectRef; +class SvNumberFormatter; +class SvPersist; +class SvPseudoObject; +class SvStorage; +class SvStrings; +class SvStringsSort; +class SvUShorts; +class SvUShortsSort; +class SvxAutoCorrDoc; +class SvxLinkManager; +class SvxMacro; +class SvxMacroTableDtor; +class SvxBorderLine; +class SwAutoCompleteWord; +class SwAutoCorrExceptWord; +class SwBookmark; +class SwBookmarks; +class SwCalc; +class SwCellFrm; +class SwCharFmt; +class SwCharFmts; +class SwClient; +class SwConditionTxtFmtColl; +class SwCrsrShell; +class SwCursor; +class SwDBNameInfField; +class SwDocShell; +class SwDocUpdtFld; +class SwDrawFrmFmt; +class SwDrawView; +class SwEditShell; +class SwFieldType; +class SwFldTypes; +class SwFlyFrm; +class SwFlyFrmFmt; +class SwFmt; +class SwFmtCol; +class SwFmtINetFmt; +class SwFmtRefMark; +class SwFrmFmt; +class SwFrmFmts; +class SwFtnIdxs; +class SwFtnInfo; +class SwEndNoteInfo; +class SwGrfFmtColl; +class SwGrfFmtColls; +class SwLineNumberInfo; +class SwNewDBMgr; +class SwNoTxtNode; +class SwNodeIndex; +class SwNodeRange; +class SwNumRule; +class SwNumRuleTbl; +class SwPageDesc; +class SwPosFlyFrms; +class SwPagePreViewPrtData; +class SwRedline; +class SwRedlineTbl; +class SwRootFrm; +class SwSectionFmt; +class SwSectionFmts; +class SwSelBoxes; +class SwSpzFrmFmts; +class SwTOXBase; +class SwTOXBaseSection; +class SwTOXMark; +class SwTOXMarks; +class SwTOXType; +class SwTOXTypes; +class SwTabCols; +class SwTable; +class SwTableAutoFmt; +class SwTableBox; +class SwTableBoxFmt; +class SwTableFmt; +class SwTableLineFmt; +class SwTableNode; +class SwTextBlocks; +class SwTxtFld; +class SwTxtFmtColl; +class SwTxtFmtColls; +class SwURLStateChanged; +class SwUndo; +class SwUndoIds; +class SwUndoIter; +class SwUndos; +class SwUnoCrsr; +class SwUnoCrsrTbl; +class ViewShell; +class _SetGetExpFld; +class SwDrawContact; +class SwLayouter; +class SdrView; +class SdrMarkList; +class SwAuthEntry; +class SwUnoCallBack; +struct SwCallMouseEvent; +struct SwDocStat; +struct SwHash; +struct SwSortOptions; +struct SwDefTOXBase_Impl; + +//PageDescriptor-Schnittstelle, Array hier wegen inlines. +typedef SwPageDesc* SwPageDescPtr; +SV_DECL_PTRARR_DEL( SwPageDescs, SwPageDescPtr, 4, 4 ); + +enum SwMoveFlags +{ + DOC_MOVEDEFAULT = 0x00, + DOC_MOVEALLFLYS = 0x01, + DOC_CREATEUNDOOBJ = 0x02, + DOC_MOVEREDLINES = 0x04 +}; + +#define DUMMY_PARASPACEMAX 0x04 +#define DUMMY_PARASPACEMAX_AT_PAGES 0x20 + + +#define SW_HYPH_ERROR 0 +#define SW_HYPH_OK 1 +#define SW_HYPH_ABORTED 2 +#define SW_HYPH_CONTINUE 3 + +class SwDoc +{ + friend class SwReader; // fuers Undo von Insert(SwDoc) + friend class SwSwgReader; // Zugriff auf bDtor-Flag (wg. Loeschen v.Frames) + friend class Sw3IoImp; // Zugriff u.a. auf den Drawing Layer + friend class SwCompareData; // fuers Undo vom CompareDoc + + friend void _InitCore(); + friend void _FinitCore(); + + //Fuer das Loeschen der Header-/Footer-Formate + //Implementierung und Benutzung in frmatr.cxx + friend void DelHFFormat( SwClient *, SwFrmFmt * ); + +#if !( defined(PRODUCT) || defined(MAC) || defined(PM2) ) + friend class SwUndoWriter; // fuers Schreiben der Undo/Redo-History +#endif + + //---------------- private Member -------------------------------- + + // ------------------------------------------------------------------- + // die Objecte + SwNodes aNodes; // Inhalt des Dokumentes + SwNodes aUndoNodes; // Inhalt fuer das Undo + SwAttrPool aAttrPool; // der Attribut Pool + SwPageDescs aPageDescs; // PageDescriptoren + Link aOle2Link; // OLE 2.0-Benachrichtigung + AutoTimer aIdleTimer; // der eigene IdleTimer + Timer aChartTimer; // der Timer fuers Update aller Charts + Timer aOLEModifiedTimer; // Timer for update modified OLE-Objecs + String aDBName; // logischer Datenbankname + String sSectionPasswd; // Passwort fuer geschuetzte Bereiche + String sTOIAutoMarkURL; // ::com::sun::star::util::URL of table of index AutoMark file + SvStringsDtor aPatternNms; // Array fuer die Namen der Dokument-Vorlagen + + + // ------------------------------------------------------------------- + // die Pointer + //Defaultformate + SwFrmFmt *pDfltFrmFmt; + SwFrmFmt *pEmptyPageFmt; // Format fuer die Default-Leerseite. + SwFrmFmt *pColumnContFmt; // Format fuer Spaltencontainer + SwCharFmt *pDfltCharFmt; + SwTxtFmtColl *pDfltTxtFmtColl; // Defaultformatcollections + SwGrfFmtColl *pDfltGrfFmtColl; + + SwFrmFmts *pFrmFmtTbl; // Formattabellen + SwCharFmts *pCharFmtTbl; + SwSpzFrmFmts *pSpzFrmFmtTbl; + SwSectionFmts *pSectionFmtTbl; + SwFrmFmts *pTblFrmFmtTbl; // spz. fuer Tabellen + SwTxtFmtColls *pTxtFmtCollTbl; // FormatCollections + SwGrfFmtColls *pGrfFmtCollTbl; + + SwBookmarks *pBookmarkTbl; //Bookmarks + + SwTOXTypes *pTOXTypes; // Verzeichnisse + SwDefTOXBase_Impl * pDefTOXBases; // defaults of SwTOXBase's + + SwRootFrm *pLayout; // Rootframe des spezifischen Layouts. + SdrModel *pDrawModel; // StarView Drawing + + SwUndos *pUndos; // Undo/Redo History + + SwDocUpdtFld *pUpdtFlds; // Struktur zum Field-Update + SwFldTypes *pFldTypes; // Feldtypen + SwNewDBMgr *pNewDBMgr; // Pointer auf den neuen DBMgr fuer + // Evaluierung der DB-Fields + SfxPrinter *pPrt; + + SwDoc *pGlossaryDoc; // Pointer auf das Glossary-Dokument. Dieses + + SwNumRule *pOutlineRule; + SwFtnInfo *pFtnInfo; + SwEndNoteInfo *pEndNoteInfo; + SwLineNumberInfo *pLineNumberInfo; + SwFtnIdxs *pFtnIdxs; + SwDocStat *pDocStat; // Statistic Informationen + SfxDocumentInfo *pSwgInfo; // Dokumentinformationen + SvxMacroTableDtor *pMacroTable; // Tabelle der dokumentglobalen Macros + + SwDocShell *pDocShell; // Ptr auf die SfxDocShell vom Doc + SvEmbeddedObjectRef* pDocShRef; // fuers Kopieren von OLE-Nodes (wenn keine + // DocShell gesetzt ist, muss dieser + // Ref-Pointer gesetzt sein!!!!) + SvxLinkManager *pLinkMgr; // Liste von Verknuepften (Grafiken/DDE/OLE) + + SwAutoCorrExceptWord *pACEWord; // fuer die automatische Uebernahme von + // autokorrigierten Woertern, die "zurueck" + // verbessert werden + SwURLStateChanged *pURLStateChgd; // SfxClient fuer Aenderungen in der + // INetHistory + SvNumberFormatter *pNumberFormatter; // NumFormatter fuer die Tabellen/Felder + SwNumRuleTbl *pNumRuleTbl; // Liste aller benannten NumRules + SwRedlineTbl *pRedlineTbl; // Liste aller Redlines + String *pAutoFmtRedlnComment; // Kommentar fuer Redlines, die + // uebers Autoformat eingefuegt werden + SwUnoCrsrTbl *pUnoCrsrTbl; + + SwPagePreViewPrtData *pPgPViewPrtData; // Einzuege/Abstaende fuers + // Drucken der Seitenansicht + SwPaM *pExtInputRing; + + SwLayouter *pLayouter; // ::com::sun::star::frame::Controller for complex layout formatting + // like footnote/endnote in sections + + SwUnoCallBack *pUnoCallBack; + // ------------------------------------------------------------------- + // sonstige + sal_uInt16 nUndoPos; // akt. Undo-InsertPosition (fuers Redo!) + sal_uInt16 nUndoSavePos; // Position im Undo-Array, ab der das Doc + // nicht als modifiziert gilt + sal_uInt16 nUndoCnt; // Anzahl von Undo Aktionen + sal_uInt16 nUndoSttEnd; // != 0 -> innerhalb einer Klammerung + + sal_uInt16 nAutoFmtRedlnCommentNo; // SeqNo fuers UI-seitige zusammenfassen + // von AutoFmt-Redlines. Wird vom SwAutoFmt + // verwaltet! + sal_uInt16 nLinkUpdMode; // UpdateMode fuer Links + sal_uInt16 nFldUpdMode; // Mode fuer Felder/Charts automatisch aktualisieren + + SwRedlineMode eRedlineMode; // aktueller Redline Modus + + sal_Int8 nLinkCt; // wieviele kennen das Dokument + sal_Int8 nLockExpFld; // Wenn != 0 hat UpdateExpFlds() keine Wirkung + + sal_Int8 nHeaven; // LayerIds, Heaven == ueber dem Dokument + sal_Int8 nHell; // Hell == unter dem Dokument + sal_Int8 nControls; // Controls == ganz oben + + sal_Bool bGlossDoc : 1; //TRUE: ist ein Textbaustein Dokument + sal_Bool bModified : 1; //TRUE: Dokument ist veraendert + sal_Bool bDtor : 1; //TRUE: ist im SwDoc DTOR + // leider auch temporaer von + // SwSwgReader::InLayout(), wenn fehlerhafte + //Frames geloescht werden muessen + sal_Bool bUndo : 1; // TRUE: Undo eingeschaltet + sal_Bool bGroupUndo : 1; // TRUE: Undos werden gruppiert + sal_Bool bPageNums : 1; // TRUE: es gibt virtuelle Seitennummern + sal_Bool bLoaded : 1; // TRUE: ein geladenes Doc + sal_Bool bUpdateExpFld : 1; // TRUE: Expression-Felder updaten + sal_Bool bNewDoc : 1; // TRUE: neues Doc + sal_Bool bNewFldLst : 1; // TRUE: Felder-Liste neu aufbauen + sal_Bool bCopyIsMove : 1; // TRUE: Copy ist ein verstecktes Move + sal_Bool bNoDrawUndoObj : 1; // TRUE: keine DrawUndoObjecte speichern + sal_Bool bVisibleLinks : 1; // TRUE: Links werden sichtbar eingefuegt + sal_Bool bBrowseMode : 1; // TRUE: Dokument im BrowseModus anzeigen + sal_Bool bInReading : 1; // TRUE: Dokument wird gerade gelesen + sal_Bool bUpdateTOX : 1; // TRUE: nach Dokument laden die TOX Updaten + sal_Bool bInLoadAsynchron: 1; // TRUE: Dokument wird gerade asynchron geladen + sal_Bool bHTMLMode : 1; // TRUE: Dokument ist im HTMLMode + sal_Bool bHeadInBrowse : 1; // TRUE: Header sind im BrowseMode aktiviert + sal_Bool bFootInBrowse : 1; // TRUE: Footer sind im BrowseMode aktiviert + sal_Bool bFrmBeepEnabled : 1; // TRUE: Frames beepen wenn der Inhalt zu gross wird + sal_Bool bInCallModified : 1; // TRUE: im Set/Reset-Modified Link + sal_Bool bIsGlobalDoc : 1; // TRUE: es ist ein GlobalDokument + sal_Bool bGlblDocSaveLinks : 1; // TRUE: im GlobalDoc. gelinkte Sect. mit speichern + sal_Bool bIsLabelDoc : 1; // TRUE: es ist ein Etiketten-Dokument + sal_Bool bIsAutoFmtRedline : 1; // TRUE: die Redlines werden vom Autoformat aufgezeichnet + sal_Bool bOLEPrtNotifyPending:1; // TRUE: Printer ist geaendert und beim + // Erzeugen der ::com::sun::star::sdbcx::View ist eine Benachrichtigung + // der OLE-Objekte PrtOLENotify() notwendig. + sal_Bool bAllOLENotify :1; // True: Benachrichtigung aller Objekte ist notwendig + sal_Bool bIsRedlineMove : 1; // True: die Redlines werden in/aus der Section verschoben + sal_Bool bInsOnlyTxtGlssry : 1; // True: insert 'only text' glossary into doc + sal_Bool bContains_MSVBasic : 1; // True: MS-VBasic exist is in our storage + sal_Bool bPurgeOLE : 1; // TRUE: Purge OLE-Objects + + // ------------------------------------------------------------------- + // static - Members + static SvStringsDtor *pTextNmArray, // Array fuer alle + *pListsNmArray, // Pool-Vorlagen-Namen + *pExtraNmArray, + *pRegisterNmArray, + *pDocNmArray, + *pHTMLNmArray; + static SvStringsDtor *pFrmFmtNmArray, + *pChrFmtNmArray, + *pHTMLChrFmtNmArray; + static SvStringsDtor *pPageDescNmArray; + static SvStringsDtor *pNumRuleNmArray; + + static SwAutoCompleteWord *pACmpltWords; // Liste aller Worte fuers AutoComplete + static sal_uInt16 nUndoActions; // anzahl von Undo ::com::sun::star::chaos::Action + + // ------------------------------------------------------------------- + // Dummies Members fuers FileFormat + String sDummy1; // Dummy-Member. + String sDummy2; + sal_uInt32 n32Dummy1; + sal_uInt32 n32Dummy2; + sal_Int8 n8Dummy1; + sal_Int8 n8Dummy2; + + + //---------------- private Methoden ------------------------------ + + void AppendUndo(SwUndo*); // interne Verkuerzung fuer Insert am Ende + void ClearRedo(); // loescht alle UndoObjecte von nUndoPos + // bis zum Ende des Undo-Arrays + sal_Bool DelUndoObj( sal_uInt16 nEnde ); // loescht alle UndoObjecte vom Anfang + // bis zum angegebenen Ende + DECL_LINK( AddDrawUndo, SdrUndoAction * ); + // DrawModel + void DrawNotifyUndoHdl(); // wegen CLOOKs + void DrawSetRefDevice(); // wegen CLOOKs + + // nur fuer den internen Gebrauch deshalb privat. + // Kopieren eines Bereiches im oder in ein anderes Dokument ! + // Die Position darf nicht im Bereich liegen !! + sal_Bool _Copy( SwPaM&, SwPosition&, + sal_Bool MakeNewFrms = sal_True, SwPaM* pCpyRng = 0 ) const; // in ndcopy.cxx + + SwFlyFrmFmt* _MakeFlySection( const SwPosition& rAnchPos, + const SwCntntNode& rNode, RndStdIds eRequestId, + const SfxItemSet* pFlyAttrSet, + SwFrmFmt* = 0 ); + + SwFlyFrmFmt* _InsNoTxtNode( const SwPosition&rPos, SwNoTxtNode*, + const SfxItemSet* pFlyAttrSet, + const SfxItemSet* pGrfAttrSet, + SwFrmFmt* = 0 ); + + void _CopyFlyInFly( const SwNodeRange& rRg, const SwNodeIndex& rSttIdx, + sal_Bool bCopyFlyAtFly = sal_False ) const; // steht im ndcopy.cxx + sal_Bool SetFlyFrmAnchor( SwFrmFmt& rFlyFmt, SfxItemSet& rSet, sal_Bool bNewFrms ); + + typedef SwFmt* (SwDoc:: *FNCopyFmt)( const String&, SwFmt* ); + SwFmt* CopyFmt( const SwFmt& rFmt, const SvPtrarr& rFmtArr, + FNCopyFmt fnCopyFmt, const SwFmt& rDfltFmt ); + void CopyFmtArr( const SvPtrarr& rSourceArr, SvPtrarr& rDestArr, + FNCopyFmt fnCopyFmt, SwFmt& rDfltFmt ); + void _CopyPageDescHeaderFooter( sal_Bool bCpyHeader, + const SwFrmFmt& rSrcFmt, SwFrmFmt& rDestFmt ); + SwFmt* FindFmtByName( const SvPtrarr& rFmtArr, + const String& rName ) const; + SfxPrinter* _GetPrt() const; + void PrtDataChanged(); //Printer oder JobSetup geandert, es muss + //fuer entsprechende Invalidierungen und + //Benachrichtigungen gesorgt werden. + + static SvStringsDtor* NewNmArray( SvStringsDtor*&, sal_uInt16 nStt, sal_uInt16 nEnd ); + SvStringsDtor* NewTextNmArray() const; + SvStringsDtor* NewListsNmArray() const; + SvStringsDtor* NewExtraNmArray() const; + SvStringsDtor* NewRegisterNmArray() const; + SvStringsDtor* NewDocNmArray() const; + SvStringsDtor* NewHTMLNmArray() const; + SvStringsDtor* NewFrmFmtNmArray() const; + SvStringsDtor* NewChrFmtNmArray() const; + SvStringsDtor* NewHTMLChrFmtNmArray() const; + SvStringsDtor* NewPageDescNmArray() const; + SvStringsDtor* NewNumRuleNmArray() const; + + + // gcc: aFtnInfo::CopyCtor ist private, also muessen wir uns auch schuetzen + SwDoc( const SwDoc &); + + //wird nur von SwSwgReader::InlayoutFrames() verwendet! + inline void SetInDtor( sal_Bool b ) { bDtor = b; } + + // fuer Felder: + void _InitFieldTypes(); // wird vom CTOR gerufen!! + void _MakeFldList( int eMode ); + void RenameUserFld( const String& rOldName, const String& rNewName, + String& rFormel ); + // Datenbankfelder: + void UpdateDBNumFlds( SwDBNameInfField& rDBFld, SwCalc& rCalc ); + void AddUsedDBToList( SvStringsDtor& rDBNameList, + const SvStringsDtor& rUsedDBNames ); + void AddUsedDBToList( SvStringsDtor& rDBNameList, const String& rDBName ); + sal_Bool IsNameInArray( const SvStringsDtor& rOldNames, const String& rName ); + void GetAllDBNames( SvStringsDtor& rAllDBNames ); + void ReplaceUsedDBs( const SvStringsDtor& rUsedDBNames, + const String& rNewName, String& rFormel ); + SvStringsDtor& FindUsedDBs( const SvStringsDtor& rAllDBNames, + const String& rFormel, + SvStringsDtor& rUsedDBNames ); + + void InitDrawModel(); + void ReleaseDrawModel(); + + void _CreateNumberFormatter(); + + sal_Bool _UnProtectTblCells( SwTable& rTbl ); + + // erzeuge Anhand der vorgebenen Collection Teildokumente + // falls keine angegeben ist, nehme die Kapitelvorlage der 1. Ebene + sal_Bool SplitDoc( sal_uInt16 eDocType, const String& rPath, + const SwTxtFmtColl* pSplitColl ); + + // Charts der angegebenen Tabelle updaten + void _UpdateCharts( const SwTable& rTbl, ViewShell& rVSh ) const; + + // unser eigener 'IdlTimer' ruft folgende Methode + DECL_LINK( DoIdleJobs, Timer * ); + // der CharTimer ruft diese Methode + DECL_LINK( DoUpdateAllCharts, Timer * ); + DECL_LINK( DoUpdateModifiedOLE, Timer * ); + +public: + SwDoc(); + ~SwDoc(); + + SwNodes& GetNodes() { return aNodes; } + const SwNodes& GetNodes() const { return aNodes; } + + DECL_STATIC_LINK( SwDoc, BackgroundDone, SvxBrushItem *); + DECL_LINK(CalcFieldValueHdl, EditFieldInfo*); + + // Links un-/sichtbar in LinkManager einfuegen (gelinkte Bereiche) + sal_Bool IsVisibleLinks() const { return bVisibleLinks; } + void SetVisibleLinks( sal_Bool bFlag ) { bVisibleLinks = bFlag; } + + SvxLinkManager& GetLinkManager() { return *pLinkMgr; } + const SvxLinkManager& GetLinkManager() const { return *pLinkMgr; } + + // erfrage das spezifische Layout + const SwRootFrm* GetRootFrm() const { return pLayout; } + SwRootFrm* GetRootFrm() { return pLayout; } + // der alte muss !! von der Shell geloescht werden !! + void SetRootFrm( SwRootFrm* pNew ) { pLayout = pNew; } + + void StartIdleTimer() { aIdleTimer.Start(); } + void StopIdleTimer() { aIdleTimer.Stop(); } + sal_Bool IsIdleTimerActive() const { return aIdleTimer.IsActive(); } + + sal_Bool IsOLEPrtNotifyPending() const { return bOLEPrtNotifyPending; } + void SetOLEPrtNotifyPending() { bOLEPrtNotifyPending = sal_True; } + void PrtOLENotify( sal_Bool bAll ); //Alle oder nur Markierte + + sal_Bool IsPurgeOLE() const { return bPurgeOLE; } + void SetPurgeOLE( sal_Bool bFlag ) { bPurgeOLE = bFlag; } + + // das Dokument im Browse-Modus anzeigen + void SetBrowseMode( sal_Bool bFlag = sal_True ) { bBrowseMode = bFlag; } + sal_Bool IsBrowseMode() const { return bBrowseMode; } + void SetHTMLMode( sal_Bool bFlag = sal_True ) { bHTMLMode = bFlag; } + sal_Bool IsHTMLMode() const { return bHTMLMode; } + void SetHeadInBrowse( sal_Bool bFlag = sal_True ) { bHeadInBrowse = bFlag; } + sal_Bool IsHeadInBrowse() const { return bHeadInBrowse; } + void SetFootInBrowse( sal_Bool bFlag = sal_True ) { bFootInBrowse = bFlag; } + sal_Bool IsFootInBrowse() const { return bFootInBrowse; } + void SetFrmBeepEnabled( sal_Bool bFlag = sal_True ) { bFrmBeepEnabled = bFlag; } + sal_Bool IsFrmBeepEnabled() const { return bFrmBeepEnabled; } + + void SetGlobalDoc( sal_Bool bFlag = sal_True ) { bIsGlobalDoc = bFlag; } + sal_Bool IsGlobalDoc() const { return bIsGlobalDoc; } + void SetGlblDocSaveLinks( sal_Bool bFlag=sal_True ) { bGlblDocSaveLinks = bFlag; } + sal_Bool IsGlblDocSaveLinks() const { return bGlblDocSaveLinks; } + + void SetLabelDoc( sal_Bool bFlag = sal_True ) { bIsLabelDoc = bFlag; } + sal_Bool IsLabelDoc() const { return bIsLabelDoc; } + + sal_uInt16 GetLinkUpdMode() const; + void SetLinkUpdMode( sal_uInt16 nMode ) { nLinkUpdMode = nMode; } + // nur fuer den Writer, weil dieser das richtige Enum schreiben muss! + sal_uInt16 _GetLinkUpdMode() const { return nLinkUpdMode; } + + inline sal_Bool IsInDtor() const { return bDtor; } + + // SS fuer das Drawing, Model und LayerId's + const SdrModel* GetDrawModel() const { return pDrawModel; } + SdrModel* GetDrawModel() { return pDrawModel; } + sal_Int8 GetHeavenId() const { return nHeaven; } + sal_Int8 GetHellId() const { return nHell; } + sal_Int8 GetControlsId() const { return nControls; } + + // liefert zu allen fliegenden Rahmen die Position im Dokument. + // Wird ein Pam-Pointer uebergeben, muessen die absatzgebundenen + // FlyFrames von der ::com::sun::star::awt::Selection vollstaendig umschlossen sein + // ( Start < Pos < End ) !!! + // (wird fuer die Writer benoetigt) + void GetAllFlyFmts( SwPosFlyFrms& rPosFlyFmts, const SwPaM* = 0, + sal_Bool bDrawAlso = sal_False ) const; + + // dokumentglobale Macros + sal_Bool HasGlobalMacro(sal_uInt16 nEvent) const; + const SvxMacro& GetGlobalMacro(sal_uInt16 nEvent) const; + void SetGlobalMacro(sal_uInt16 nEvent, const SvxMacro&); + sal_Bool DelGlobalMacro(sal_uInt16 nEvent); + const SvxMacroTableDtor& GetMacroTable() const { return *pMacroTable; } + + // Fussnoten Informationen + const SwFtnInfo& GetFtnInfo() const { return *pFtnInfo; } + void SetFtnInfo(const SwFtnInfo& rInfo); + const SwEndNoteInfo& GetEndNoteInfo() const { return *pEndNoteInfo; } + void SetEndNoteInfo(const SwEndNoteInfo& rInfo); + + // Zeilennummerierung + const SwLineNumberInfo& GetLineNumberInfo() const { return *pLineNumberInfo; } + void SetLineNumberInfo(const SwLineNumberInfo& rInfo); + + SwFtnIdxs& GetFtnIdxs() { return *pFtnIdxs; } + const SwFtnIdxs& GetFtnIdxs() const { return *pFtnIdxs; } + // Fussnoten im Bereich aendern + sal_Bool SetCurFtn( const SwPaM& rPam, const String& rNumStr, + sal_uInt16 nNumber, sal_Bool bIsEndNote ); + + // wegen swrtf.cxx und define private public, jetzt hier + SwFlyFrmFmt *MakeFlyFrmFmt (const String &rFmtName, SwFrmFmt *pDerivedFrom); + SwDrawFrmFmt *MakeDrawFrmFmt(const String &rFmtName, SwFrmFmt *pDerivedFrom); + + SwLayouter* GetLayouter() { return pLayouter; } + const SwLayouter* GetLayouter() const { return pLayouter; } + void SetLayouter( SwLayouter* pNew ) { pLayouter = pNew; } + + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > + Spell(SwPaM&, ::com::sun::star::uno::Reference< + ::com::sun::star::linguistic::XSpellChecker1 > &, + sal_uInt16* pPageCnt, sal_uInt16* pPageSt ) const; + ::com::sun::star::uno::Reference< ::com::sun::star::linguistic::XHyphenatedWord > + Hyphenate( SwPaM *pPam, const Point &rCrsrPos, + sal_uInt16* pPageCnt, sal_uInt16* pPageSt ); + + const SwBookmarks& GetBookmarks() const { return *pBookmarkTbl; } + SwBookmark* MakeBookmark( const SwPaM& rPaM, const KeyCode&, + const String& rName, const String& rShortName, BOOKMARK_TYPE eMark = BOOKMARK); + void DelBookmark( sal_uInt16 nPos ); + void DelBookmark( const String& rName ); + sal_uInt16 FindBookmark( const String& rName ); + // erzeugt einen eindeutigen Namen. Der Name selbst muss vorgegeben + // werden, es wird dann bei gleichen Namen nur durchnumeriert. + void MakeUniqueBookmarkName( String& rNm ); + // Anzahl der ::com::sun::star::text::Bookmarks, gfs. nur "echte" + sal_uInt16 GetBookmarkCnt(sal_Bool bBkmrk = sal_False) const; + SwBookmark& GetBookmark( sal_uInt16, sal_Bool bBkmrk = sal_False); + + // Textbaustein Dokument? + void SetGlossDoc( sal_Bool bGlssDc = sal_True ) { bGlossDoc = bGlssDc; } + sal_Bool IsGlossDoc() const { return bGlossDoc; } + sal_Bool IsInsOnlyTextGlossary() const { return bInsOnlyTxtGlssry; } + + //Bei Formataenderungen muss das zu Fuss gerufen werden! + void SetModified(); + void ResetModified(); + sal_Bool IsModified() const { return bModified; } //Dokumentaenderungen? + + sal_Bool IsInCallModified() const { return bInCallModified; } + void SetUndoNoResetModified() { nUndoSavePos = USHRT_MAX; } + sal_Bool IsUndoNoResetModified() const { return USHRT_MAX == nUndoSavePos; } + + //Die neuen (hoffentlich bestaendigen) Schnittstellen fuer alles, + //was mit dem Layout zu tun hat. + SwFrmFmt *MakeLayoutFmt( RndStdIds eRequest, + SwFrmFmt* = 0, + const SfxItemSet* pSet = 0 ); + // JP 08.05.98: fuer Flys muss jetzt diese Schnittstelle benutzt + // werden. pAnchorPos muss gesetzt sein, wenn keine + // Seitenbindung vorliegt UND der ::com::sun::star::chaos::Anchor nicht schon + // im FlySet/FrmFmt mit gueltiger CntntPos gesetzt ist + SwFlyFrmFmt* MakeFlySection( RndStdIds eAnchorType, + const SwPosition* pAnchorPos, + const SfxItemSet* pSet = 0, + SwFrmFmt *pParent = 0 ); + SwFlyFrmFmt* MakeFlyAndMove( const SwPaM& rPam, const SfxItemSet& rSet, + const SwSelBoxes* pSelBoxes = 0, + SwFrmFmt *pParent = 0 ); + + void DelLayoutFmt( SwFrmFmt *pFmt ); + SwFrmFmt *CopyLayoutFmt( const SwFrmFmt& rSrc, + const SwFmtAnchor& rNewAnchor, + sal_Bool bSetTxtFlyAtt = sal_True, sal_Bool bMakeFrms = sal_True ); + void CopyWithFlyInFly( const SwNodeRange& rRg, + const SwNodeIndex& rInsPos, + sal_Bool bMakeNewFrms = sal_True, + sal_Bool bDelRedlines = sal_True, + sal_Bool bCopyFlyAtFly = sal_False ) const; + sal_Bool IsInHeaderFooter( const SwNodeIndex& rIdx ) const; + + sal_Bool SetFlyFrmAttr( SwFrmFmt& rFlyFmt, SfxItemSet& rSet ); + sal_Bool SetFrmFmtToFly( SwFrmFmt& rFlyFmt, SwFrmFmt& rNewFmt, + SfxItemSet* pSet = 0, sal_Bool bKeepOrient = sal_False ); + + // Abstakt fuellen + void Summary( SwDoc* pExtDoc, sal_uInt8 nLevel, sal_uInt8 nPara, sal_Bool bImpress ); + + /* Verwaltet SwDoc::nLinkCt, sollte (paarig!) von allen benutzt werden, + * die einen Pointer auf dieses Dokument halten, denn wenn Remove() 0 + * liefert, wird das Dokument zerstoert! Oder anders: Jeder bei dem + * Remove() 0 liefert, muss das Dokument zerstoeren. + */ + sal_Int8 AddLink() { return nLinkCt++; } + sal_Int8 RemoveLink() { return nLinkCt ? --nLinkCt : nLinkCt; } + sal_Int8 GetLinkCnt() const { return nLinkCt; } + + // UndoHistory am Dokument pflegen + // bei Save, SaveAs, Create wird UndoHistory zurueckgesetzt ??? + void DoUndo(sal_Bool bUn = sal_True) { bUndo = bUn; } + sal_Bool DoesUndo() const { return bUndo; } + // Zusammenfassen von Kontinuierlichen Insert/Delete/Overwrite von + // Charaktern. Default ist ::com::sun::star::sdbcx::Group-Undo. + void DoGroupUndo(sal_Bool bUn = sal_True) { bGroupUndo = bUn; } + sal_Bool DoesGroupUndo() const { return bGroupUndo; } + + // macht rueckgaengig: + // 0 letzte Aktion, sonst Aktionen bis zum Start der Klammerung nUndoId + // In rUndoRange wird der restaurierte Bereich gesetzt. + sal_Bool Undo( SwUndoIter& ); + // setzt Undoklammerung auf, nUndoId kommt von der UI-Seite + sal_uInt16 StartUndo( sal_uInt16 nUndoId = 0 ); + // schliesst Klammerung der nUndoId + sal_uInt16 EndUndo( sal_uInt16 nUndoId = 0 ); + // loescht die gesamten UndoObjecte ( fuer Methoden die am Nodes + // Array drehen ohne entsprechendes Undo !!) + void DelAllUndoObj(); + // liefert die Id der letzten undofaehigen Aktion zurueck + // oder USHRT_MAX + // fuellt ggf. VARARR mit ::com::sun::star::sdbcx::User-UndoIds + sal_uInt16 GetUndoIds( String* pStr = 0, SwUndoIds *pUndoIds = 0) const; + // gibt es Klammerung mit der Id? + sal_Bool HasUndoId(sal_uInt16 nId) const; + // die drei folgenden Methoden werden beim Undo und nur dort + // benoetigt. Sollten sonst nicht aufgerufen werden. + const SwNodes* GetUndoNds() const { return &aUndoNodes; } + + // bei einstufigem Undo muss die History und das Undo-Array geloescht + // werden. Dabei ist aber zu beachten, das nur vollstaendige Gruppen + // geloescht werden koennen. + // Sind beide FLAGS auf sal_False, kann erfragt werden, ob sich in der + // History eine offene Gruppe befindet. ( return = sal_True ) + // bDelHisory = sal_True: loesche die Undo-History + // bDelUndoNds = sal_True: loesche das Undo-Nodes-Arary + sal_Bool DelUndoGroups( sal_Bool bDelUndoNds=sal_True, sal_Bool bDelHistory=sal_True ); + SwUndo* RemoveLastUndo( sal_uInt16 nUndoId ); + + // abfragen/setzen der Anzahl von wiederherstellbaren Undo-Actions + static sal_uInt16 GetUndoActionCount() { return nUndoActions; } + static void SetUndoActionCount( sal_uInt16 nNew ) { nUndoActions = nNew; } + + // Redo + // wiederholt + sal_Bool Redo( SwUndoIter& ); + // liefert die Id der letzten Redofaehigen Aktion zurueck + // fuellt ggf. VARARR mit RedoIds + sal_uInt16 GetRedoIds( String* pStr = 0, SwUndoIds *pRedoIds = 0) const; + + // Repeat + // wiederholt + sal_Bool Repeat( SwUndoIter&, sal_uInt16 nRepeatCnt = 1 ); + // liefert die Id der letzten Repeatfaehigen Aktion zurueck + // fuellt ggf. VARARR mit RedoIds + sal_uInt16 GetRepeatIds( String* pStr = 0, SwUndoIds *pRedoIds = 0) const; + + /* Felder */ + const SwFldTypes *GetFldTypes() const { return pFldTypes; } + SwFieldType *InsertFldType(const SwFieldType &); + SwFieldType *GetSysFldType( const sal_uInt16 eWhich ) const; + SwFieldType* GetFldType(sal_uInt16 nResId, const String& rName) const; + void RemoveFldType(sal_uInt16 nFld); + void UpdateFlds( SfxPoolItem* pNewHt = 0, sal_Bool bCloseDB = sal_False ); + void InsDeletedFldType( SwFieldType & ); + sal_Bool RenameUserFields(const String& rOldName, const String& rNewName); + + // rufe das Update der Expression Felder auf; alle Ausdruecke werden + // neu berechnet. + void UpdateRefFlds( SfxPoolItem* pHt = 0); + void UpdateTblFlds( SfxPoolItem* pHt = 0); + void UpdateExpFlds( SwTxtFld* pFld = 0, sal_Bool bUpdateRefFlds = sal_True ); + void UpdateUsrFlds(); + void UpdatePageFlds( SfxPoolItem* ); + void LockExpFlds() { ++nLockExpFld; } + void UnlockExpFlds() { if( nLockExpFld ) --nLockExpFld; } + sal_Bool IsExpFldsLocked() const { return 0 != nLockExpFld; } + SwDocUpdtFld& GetUpdtFlds() const { return *pUpdtFlds; } + sal_Bool SetFieldsDirty( sal_Bool b, const SwNode* pChk = 0, sal_uInt32 nLen = 0 ); + + void SetFixFields( sal_Bool bOnlyTimeDate = sal_False, + const DateTime* pNewDateTime = 0 ); + + sal_uInt16 GetFldUpdateFlags() const; + void SetFldUpdateFlags( sal_uInt16 eMode ) { nFldUpdMode = eMode; } + // nur fuer den Writer, weil dieser das richtige Enum schreiben muss! + sal_uInt16 _GetFldUpdateFlags() const { return nFldUpdMode; } + + void ChangeAuthorityData(const SwAuthEntry* pNewData); + + // Zustaende ueber Ladezustand + // frueher DocInfo + // + sal_Bool IsPageNums() const { return bPageNums; } + sal_Bool IsLoaded() const { return bLoaded; } + sal_Bool IsUpdateExpFld() const { return bUpdateExpFld; } + sal_Bool IsNewDoc() const { return bNewDoc; } + + void SetPageNums(sal_Bool b = sal_True) { bPageNums = b; } + void SetNewDoc(sal_Bool b = sal_True) { bNewDoc = b; } + void SetUpdateExpFldStat(sal_Bool b = sal_True) { bUpdateExpFld = b; } + void SetLoaded(sal_Bool b = sal_True) { bLoaded = b; } + + // Setze im Calculator alle SetExpresion Felder, die bis zur + // angegebenen Position (Node [ + ::com::sun::star::ucb::Content]) gueltig sind. Es kann + // eine erzeugte Liste aller Felder mit uebergegeben werden. + // (ist die Adresse != 0, und der Pointer == 0 wird eine neue + // Liste returnt.) + void FldsToCalc( SwCalc& rCalc, sal_uInt32 nLastNd = ULONG_MAX, + sal_uInt16 nLastCntnt = USHRT_MAX ); + void FldsToCalc( SwCalc& rCalc, const _SetGetExpFld& rToThisFld ); + void FldsToExpand( SwHash**& ppTbl, sal_uInt16& rTblSize, + const _SetGetExpFld& rToThisFld ); + sal_Bool IsNewFldLst() const { return bNewFldLst; } + void SetNewFldLst( sal_Bool bFlag = sal_True ) { bNewFldLst = bFlag; } + void InsDelFldInFldLst( sal_Bool bIns, const SwTxtFld& rFld ); + + /* Datenbank && DB-Manager */ + void SetNewDBMgr( SwNewDBMgr* pNewMgr ) { pNewDBMgr = pNewMgr; } + SwNewDBMgr* GetNewDBMgr() const { return pNewDBMgr; } + void ChangeDBFields( const SvStringsDtor& rOldNames, + const String& rNewName ); + void SetInitDBFields(sal_Bool b); + // Von Feldern verwendete Datenbanken herausfinden + void GetAllUsedDB( SvStringsDtor& rDBNameList, + const SvStringsDtor* pAllDBNames = 0 ); + + void ChgDBName( const String& rNewName ); + String GetDBName(); + const String& GetDBDesc(); + const String& _GetDBDesc() const { return aDBName; } + + + // Kopieren eines Bereiches im oder in ein anderes Dokument ! + // Die Position kann auch im Bereich liegen !! + sal_Bool Copy( SwPaM&, SwPosition& ) const; // in ndcopy.cxx + + // Loesche die Section, in der der Node steht. + void DeleteSection( SwNode *pNode ); + + sal_Bool Delete( SwPaM& ); //loeschen eines Bereiches + sal_Bool DelFullPara( SwPaM& ); //loeschen gesamter Absaetze + sal_Bool DeleteAndJoin( SwPaM& ); //komplett loeschen eines Bereiches + + sal_Bool Move( SwPaM&, SwPosition&, SwMoveFlags = DOC_MOVEDEFAULT ); //verschieben eines Bereiches + sal_Bool Move( SwNodeRange&, SwNodeIndex&, + SwMoveFlags = DOC_MOVEDEFAULT ); // verschieben ganzer Nodes + sal_Bool MoveAndJoin( SwPaM&, SwPosition&, SwMoveFlags = DOC_MOVEDEFAULT ); //verschieben eines Bereiches + //Ueberschreiben eines einzelnen Zeichens. rRg.Start() bezeichnet + //den Node und die Position in dem Node, an der eingefuegt wird, + sal_Bool Overwrite( const SwPaM &rRg, sal_Unicode c ); + //Ueberschreiben eines Strings in einem bestehenden Textnode. + sal_Bool Overwrite(const SwPaM &rRg, const String& rStr ); + //Einfuegen eines einzelnen Zeichens. rRg.Start() bezeichnet + //den Node und die Position in dem Node, an der eingefuegt wird. + sal_Bool Insert(const SwPaM &rRg, sal_Unicode c ); + //Einfuegen eines Strings in einen bestehenden + //Textnode. Der Text wird kopiert. + sal_Bool Insert( const SwPaM &rRg, const String &, + sal_Bool bHintExpand = sal_True ); + + //Einfuegen einer Grafik, Formel. Die XXXX werden kopiert. + SwFlyFrmFmt* Insert(const SwPaM &rRg, + const String& rGrfName, + const String& rFltName, + const Graphic* pGraphic = 0, + const SfxItemSet* pFlyAttrSet = 0, + const SfxItemSet* pGrfAttrSet = 0, + SwFrmFmt* = 0 ); + // austauschen einer Grafik (mit Undo) + void ReRead( SwPaM&, const String& rGrfName, const String& rFltName, + const Graphic* pGraphic ); + + //Einfuegen eines DrawObjectes. Das Object muss bereits im DrawModel + // angemeldet sein. + SwDrawFrmFmt* Insert( const SwPaM &rRg, + SdrObject& rDrawObj, + const SfxItemSet* pFlyAttrSet = 0, + SwFrmFmt* = 0 ); + String GetUniqueGrfName() const; + + //Einfuegen von OLE-Objecten. + SwFlyFrmFmt* Insert( const SwPaM &rRg, SvInPlaceObject *, + const SfxItemSet* pFlyAttrSet = 0, + const SfxItemSet* pGrfAttrSet = 0, + SwFrmFmt* = 0 ); + String GetUniqueOLEName() const; + + void GrfToOle( const SwPaM &rRg, SvInPlaceObject * ); + void OleToGrf( const SwPaM &rRg, const Graphic *pGrf ); + + // ein bischen wa fuer die benannten FlyFrames + String GetUniqueFrameName() const; + void SetFlyName( SwFlyFrmFmt& rFmt, const String& rName ); + const SwFlyFrmFmt* FindFlyByName( const String& rName, sal_Int8 nNdTyp = 0 ) const; + + void GetGrfNms( const SwFlyFrmFmt& rFmt, String* pGrfName, + String* pFltName ) const; + + // setze bei allen Flys ohne Namen einen gueltigen (Wird von den Readern + // nach dem Einlesen gerufen ) + void SetAllUniqueFlyNames(); + + //Aufspalten eines Nodes an rPos (nur fuer den TxtNode implementiert) + sal_Bool SplitNode(const SwPosition &rPos, sal_Bool bChkTableStart = sal_False ); + sal_Bool AppendTxtNode( SwPosition& rPos ); // nicht const! + + // Ersetz einen selektierten Bereich in einem TextNode mit dem + // String. Ist fuers Suchen&Ersetzen gedacht. + // bRegExpRplc - ersetze Tabs (\\t) und setze den gefundenen String + // ein ( nicht \& ) + // z.B.: Fnd: "zzz", Repl: "xx\t\\t..&..\&" + // --> "xx\t<Tab>..zzz..&" + sal_Bool Replace( SwPaM& rPam, const String& rNewStr, + sal_Bool bRegExpRplc = sal_False ); + + /* + * Einfuegen eines Attributs. Erstreckt sich rRg ueber + * mehrere Nodes, wird das Attribut aufgespaltet, sofern + * dieses Sinn macht. Nodes, in denen dieses Attribut keinen + * Sinn macht, werden ignoriert. In vollstaendig in der + * Selektion eingeschlossenen Nodes wird das Attribut zu + * harter Formatierung, in den anderen (Text-)Nodes wird das + * Attribut in das Attributearray eingefuegt. Bei einem + * Zeichenattribut wird ein "leerer" Hint eingefuegt, + * wenn keine Selektion + * vorliegt; andernfalls wird das Attribut als harte + * Formatierung dem durch rRg.Start() bezeichneten Node + * hinzugefuegt. Wenn das Attribut nicht eingefuegt werden + * konnte, liefert die Methode sal_False. + */ + sal_Bool Insert( const SwPaM &rRg, const SfxPoolItem&, sal_uInt16 nFlags = 0 ); + sal_Bool Insert( const SwPaM &rRg, const SfxItemSet&, sal_uInt16 nFlags = 0 ); + + //Zuruecksetzen der Attribute; es werden alle TxtHints und bei + //vollstaendiger Selektion harte Formatierung (AUTO-Formate) entfernt + void ResetAttr(const SwPaM &rRg, sal_Bool bTxtAttr = sal_True, + const SvUShortsSort* = 0 ); + void RstTxtAttr(const SwPaM &rRg, BOOL bInclRefToxMark = FALSE ); + + // Setze das Attribut im angegebenen Format. Ist Undo aktiv, wird + // das alte in die Undo-History aufgenommen + void SetAttr( const SfxPoolItem&, SwFmt& ); + void SetAttr( const SfxItemSet&, SwFmt& ); + + // Setze das Attribut als neues default Attribut in diesem Dokument. + // Ist Undo aktiv, wird das alte in die Undo-History aufgenommen + void SetDefault( const SfxPoolItem& ); + void SetDefault( const SfxItemSet& ); + + // Erfrage das Default Attribut in diesem Dokument. + const SfxPoolItem& GetDefault( sal_uInt16 nFmtHint ) const; + // TextAttribute nicht mehr aufspannen lassen + sal_Bool DontExpandFmt( const SwPosition& rPos, sal_Bool bFlag = sal_True ); + + /* Formate */ + const SwFrmFmts* GetFrmFmts() const { return pFrmFmtTbl; } + SwFrmFmts* GetFrmFmts() { return pFrmFmtTbl; } + const SwCharFmts* GetCharFmts() const { return pCharFmtTbl;} + + /* LayoutFormate (Rahmen, DrawObjecte), mal const mal nicht */ + const SwSpzFrmFmts* GetSpzFrmFmts() const { return pSpzFrmFmtTbl; } + SwSpzFrmFmts* GetSpzFrmFmts() { return pSpzFrmFmtTbl; } + + const SwFrmFmt *GetDfltFrmFmt() const { return pDfltFrmFmt; } + SwFrmFmt *GetDfltFrmFmt() { return pDfltFrmFmt; } + const SwFrmFmt *GetEmptyPageFmt() const { return pEmptyPageFmt; } + SwFrmFmt *GetEmptyPageFmt() { return pEmptyPageFmt; } + const SwFrmFmt *GetColumnContFmt() const{ return pColumnContFmt; } + SwFrmFmt *GetColumnContFmt() { return pColumnContFmt; } + const SwCharFmt *GetDfltCharFmt() const { return pDfltCharFmt;} + SwCharFmt *GetDfltCharFmt() { return pDfltCharFmt;} + + SwFrmFmt *MakeFrmFmt(const String &rFmtName, SwFrmFmt *pDerivedFrom); + void DelFrmFmt( SwFrmFmt *pFmt ); + SwFrmFmt* FindFrmFmtByName( const String& rName ) const + { return (SwFrmFmt*)FindFmtByName( (SvPtrarr&)*pFrmFmtTbl, rName ); } + SwFrmFmt* FindSpzFrmFmtByName( const String& rName ) const + { return (SwFrmFmt*)FindFmtByName( (SvPtrarr&)*pSpzFrmFmtTbl, rName ); } + + SwCharFmt *MakeCharFmt(const String &rFmtName, SwCharFmt *pDerivedFrom); + void DelCharFmt(sal_uInt16 nFmt); + void DelCharFmt(SwCharFmt* pFmt); + SwCharFmt* FindCharFmtByName( const String& rName ) const + { return (SwCharFmt*)FindFmtByName( (SvPtrarr&)*pCharFmtTbl, rName ); } + + /* Formatcollections (Vorlagen) */ + // TXT + const SwTxtFmtColl* GetDfltTxtFmtColl() const { return pDfltTxtFmtColl; } + const SwTxtFmtColls *GetTxtFmtColls() const { return pTxtFmtCollTbl; } + SwTxtFmtColl *MakeTxtFmtColl( const String &rFmtName, + SwTxtFmtColl *pDerivedFrom ); + SwConditionTxtFmtColl* MakeCondTxtFmtColl( const String &rFmtName, + SwTxtFmtColl *pDerivedFrom ); + void DelTxtFmtColl(sal_uInt16 nFmt); + void DelTxtFmtColl( SwTxtFmtColl* pColl ); + sal_Bool SetTxtFmtColl( const SwPaM &rRg, SwTxtFmtColl *pFmt, + sal_Bool bReset = sal_True); + SwTxtFmtColl* FindTxtFmtCollByName( const String& rName ) const + { return (SwTxtFmtColl*)FindFmtByName( (SvPtrarr&)*pTxtFmtCollTbl, rName ); } + + // GRF + const SwGrfFmtColl* GetDfltGrfFmtColl() const { return pDfltGrfFmtColl; } + const SwGrfFmtColls *GetGrfFmtColls() const { return pGrfFmtCollTbl; } + SwGrfFmtColl *MakeGrfFmtColl(const String &rFmtName, + SwGrfFmtColl *pDerivedFrom); + void DelGrfFmtColl(sal_uInt16 nFmt); + void DelGrfFmtColl( SwGrfFmtColl* pColl ); + SwGrfFmtColl* FindGrfFmtCollByName( const String& rName ) const + { return (SwGrfFmtColl*)FindFmtByName( (SvPtrarr&)*pGrfFmtCollTbl, rName ); } + + // Tabellen-Formate + const SwFrmFmts* GetTblFrmFmts() const { return pTblFrmFmtTbl; } + SwFrmFmts* GetTblFrmFmts() { return pTblFrmFmtTbl; } + sal_uInt16 GetTblFrmFmtCount( sal_Bool bUsed ) const; + SwFrmFmt& GetTblFrmFmt(sal_uInt16 nFmt, sal_Bool bUsed ) const; + SwTableFmt* MakeTblFrmFmt(const String &rFmtName, SwFrmFmt *pDerivedFrom); + void DelTblFrmFmt( SwTableFmt* pFmt ); + SwTableFmt* FindTblFmtByName( const String& rName, sal_Bool bAll = sal_False ) const; + + //Rahmenzugriff + //iterieren ueber Flys - fuer Basic-Collections + sal_uInt16 GetFlyCount(FlyCntType eType = FLYCNTTYPE_ALL) const; + SwFrmFmt* GetFlyNum(sal_uInt16 nIdx, FlyCntType eType = FLYCNTTYPE_ALL); + + + // kopiere die Formate in die eigenen Arrays und returne diese + SwFrmFmt *CopyFrmFmt ( const SwFrmFmt& ); + SwCharFmt *CopyCharFmt( const SwCharFmt& ); + SwTxtFmtColl* CopyTxtColl( const SwTxtFmtColl& rColl ); + SwGrfFmtColl* CopyGrfColl( const SwGrfFmtColl& rColl ); + + // ersetze alle Formate mit denen aus rSource + void ReplaceStyles( SwDoc& rSource ); + + // Gebe die "Auto-Collection" mit der Id zurueck. Existiert + // sie noch nicht, dann erzuege sie + // Ist der String-Pointer definiert, dann erfrage nur die + // Beschreibung der Attribute, !! es legt keine Vorlage an !! + SwTxtFmtColl* GetTxtCollFromPool( sal_uInt16 nId, String* pDescription = 0, + SfxItemPresentation ePres = SFX_ITEM_PRESENTATION_COMPLETE, + SfxMapUnit eCoreMetric = SFX_MAPUNIT_TWIP, + SfxMapUnit ePresMetric = SFX_MAPUNIT_TWIP ); + // return das geforderte automatische Format - Basis-Klasse ! + SwFmt* GetFmtFromPool( sal_uInt16 nId, String* pDescription = 0, + SfxItemPresentation ePres = SFX_ITEM_PRESENTATION_COMPLETE, + SfxMapUnit eCoreMetric = SFX_MAPUNIT_TWIP, + SfxMapUnit ePresMetric = SFX_MAPUNIT_TWIP ); + // returne das geforderte automatische Format + SwFrmFmt* GetFrmFmtFromPool( sal_uInt16 nId, String* pDescription = 0 ) + { return (SwFrmFmt*)GetFmtFromPool( nId, pDescription ); } + SwCharFmt* GetCharFmtFromPool( sal_uInt16 nId, String* pDescription = 0 ) + { return (SwCharFmt*)GetFmtFromPool( nId, pDescription ); } + // returne die geforderte automatische Seiten-Vorlage + SwPageDesc* GetPageDescFromPool( sal_uInt16 nId, String* pDescription = 0, + SfxItemPresentation ePres = SFX_ITEM_PRESENTATION_COMPLETE, + SfxMapUnit eCoreMetric = SFX_MAPUNIT_TWIP, + SfxMapUnit ePresMetric = SFX_MAPUNIT_TWIP ); + SwNumRule* GetNumRuleFromPool( sal_uInt16 nId, String* pDescription = 0, + SfxItemPresentation ePres = SFX_ITEM_PRESENTATION_COMPLETE, + SfxMapUnit eCoreMetric = SFX_MAPUNIT_TWIP, + SfxMapUnit ePresMetric = SFX_MAPUNIT_TWIP ); + + // pruefe, ob diese "Auto-Collection" in Dokument schon/noch + // benutzt wird + sal_Bool IsPoolTxtCollUsed( sal_uInt16 nId ) const; + sal_Bool IsPoolFmtUsed( sal_uInt16 nId ) const; + sal_Bool IsPoolPageDescUsed( sal_uInt16 nId ) const; + sal_Bool IsPoolNumRuleUsed( sal_uInt16 nId ) const; + + // erfrage ob die Absatz-/Zeichen-/Rahmen-/Seiten - Vorlage benutzt wird + sal_Bool IsUsed( const SwModify& ) const; + sal_Bool IsUsed( const SwNumRule& ) const; + + // ist der Name ein Pool-Vorlagen-Name, returne seine ID, + // sonst USHRT_MAX + sal_uInt16 GetPoolId( const String& rName, SwGetPoolIdFromName ) const; + + const SvStringsDtor& GetTextNmArray() const + { return pTextNmArray ? *pTextNmArray : *NewTextNmArray(); } + const SvStringsDtor& GetListsNmArray() const + { return pListsNmArray ? *pListsNmArray : *NewListsNmArray(); } + const SvStringsDtor& GetExtraNmArray() const + { return pExtraNmArray ? *pExtraNmArray : *NewExtraNmArray(); } + const SvStringsDtor& GetRegisterNmArray() const + { return pRegisterNmArray ? *pRegisterNmArray : *NewRegisterNmArray(); } + const SvStringsDtor& GetDocNmArray() const + { return pDocNmArray ? *pDocNmArray : *NewDocNmArray(); } + const SvStringsDtor& GetHTMLNmArray() const + { return pHTMLNmArray ? *pHTMLNmArray : *NewHTMLNmArray(); } + const SvStringsDtor& GetFrmFmtNmArray() const + { return pFrmFmtNmArray ? *pFrmFmtNmArray : *NewFrmFmtNmArray(); } + const SvStringsDtor& GetChrFmtNmArray() const + { return pChrFmtNmArray ? *pChrFmtNmArray : *NewChrFmtNmArray(); } + const SvStringsDtor& GetHTMLChrFmtNmArray() const + { return pHTMLChrFmtNmArray ? *pHTMLChrFmtNmArray : *NewHTMLChrFmtNmArray(); } + const SvStringsDtor& GetPageDescNmArray() const + { return pPageDescNmArray ? *pPageDescNmArray : *NewPageDescNmArray(); } + const SvStringsDtor& GetNumRuleNmArray() const + { return pNumRuleNmArray ? *pNumRuleNmArray : *NewNumRuleNmArray(); } + + // erfrage zu einer PoolId den Namen (steht im poolfmt.cxx) + static String& GetPoolNm( sal_uInt16 nId, String& rFillNm ); + + // setze den Namen der neu geladenen Dokument-Vorlage + sal_uInt16 SetDocPattern( const String& rPatternName ); + // gebe die Anzahl von geladenen Dok-VorlagenNamen zurueck. + // !! Die nicht mehr benutzten sind 0-Pointer !! + sal_uInt16 GetDocPatternCnt() const { return aPatternNms.Count(); } + // gebe den Dok-VorlagenNamen zurueck. !!! Kann auch 0 sein !!! + String* GetDocPattern( sal_uInt16 nPos ) const { return aPatternNms[nPos]; } + // loeche die nicht mehr benutzten Pattern-Namen aus dem Array. + + // alle nicht mehr referenzierten Namen werden durch 0-Pointer + // ersetzt. Diese Positionen koennen wieder vergeben werden. + void ReOrgPatternHelpIds(); + + + // Loesche alle nicht referenzierten FeldTypen + void GCFieldTypes(); // impl. in docfld.cxx + + // akt. Dokument mit Textbausteindokument verbinden/erfragen + void SetGlossaryDoc( SwDoc* pDoc ) { pGlossaryDoc = pDoc; } + SwDoc* GetGlossaryDoc() const { return pGlossaryDoc; } + // jetzt mit einem verkappten Reader/Writer/Dokument + + // travel over PaM Ring + sal_Bool InsertGlossary( SwTextBlocks& rBlock, const String& rEntry, + SwPaM& rPaM, SwCrsrShell* pShell = 0); + + String GetCurWord(SwPaM&); + + // JobSetup und Freunde + SfxPrinter* GetPrt( sal_Bool bCreate ) const + { if( !bCreate || pPrt ) return pPrt; else return _GetPrt(); } + SfxPrinter* GetPrt() const { return pPrt; } + inline void _SetPrt( SfxPrinter *pP ) { pPrt = pP; } + void SetPrt( SfxPrinter *pP ); + const JobSetup* GetJobsetup() const; + void SetJobsetup( const JobSetup& rJobSetup ); + + // Dokument - Info + // legt sie auf jedenfall an! + const SfxDocumentInfo* GetInfo(); + // kann auch 0 sein !!! + const SfxDocumentInfo* GetpInfo() const { return pSwgInfo; } + + // setze ueber die DocShell in den entsp. Storage-Stream. Hier wird + // jetzt die DocInfo verwaltet. Fuer die Felder ist am Doc eine Kopie + // der Info, um einen schnellen Zugriff zu ermoeglichen. + // (impl. in docsh2.cxx) + void SetInfo( const SfxDocumentInfo& rInfo ); + // die DocInfo hat siche geaendert (Notify ueber die DocShell) + // stosse die entsp. Felder zum Updaten an. + void DocInfoChgd( const SfxDocumentInfo& rInfo ); + + // Dokument - Statistics + inline const SwDocStat &GetDocStat() const { return *pDocStat; } + void SetDocStat( const SwDocStat& rStat ); + void UpdateDocStat( SwDocStat& rStat, sal_uInt16 nNumPages ); + + //PageDescriptor-Schnittstelle + sal_uInt16 GetPageDescCnt() const { return aPageDescs.Count(); } + const SwPageDesc& GetPageDesc( sal_uInt16 i ) const { return *aPageDescs[i]; } + SwPageDesc* FindPageDescByName( const String& rName, + sal_uInt16* pPos = 0 ) const; + + // kopiere den gesamten PageDesc - ueber Dokumentgrenzen und "tief"! + // optional kann das kopieren der PoolFmtId, -HlpId verhindert werden + void CopyPageDesc( const SwPageDesc& rSrcDesc, SwPageDesc& rDstDesc, + sal_Bool bCopyPoolIds = sal_True ); + + // kopiere die Kopzeile (mit dem Inhalt!) aus dem SrcFmt + // ins DestFmt ( auch ueber Doc grenzen hinaus!) + void CopyHeader( const SwFrmFmt& rSrcFmt, SwFrmFmt& rDestFmt ) + { _CopyPageDescHeaderFooter( sal_True, rSrcFmt, rDestFmt ); } + // kopiere die Fusszeile (mit dem Inhalt!) aus dem SrcFmt + // ins DestFmt ( auch ueber Doc grenzen hinaus!) + void CopyFooter( const SwFrmFmt& rSrcFmt, SwFrmFmt& rDestFmt ) + { _CopyPageDescHeaderFooter( sal_False, rSrcFmt, rDestFmt ); } + + //fuer Reader + SwPageDesc& _GetPageDesc( sal_uInt16 i ) const { return *aPageDescs[i]; } + void ChgPageDesc( sal_uInt16 i, const SwPageDesc& ); + void DelPageDesc( sal_uInt16 i ); + sal_uInt16 MakePageDesc( const String &rName, const SwPageDesc* pCpy = 0 ); + + // Methoden fuer die Verzeichnisse: + // - Verzeichnismarke einfuegen loeschen travel + sal_uInt16 GetCurTOXMark( const SwPosition& rPos, SwTOXMarks& ) const; + void Delete( SwTOXMark* pTOXMark ); + const SwTOXMark& GotoTOXMark( const SwTOXMark& rCurTOXMark, + SwTOXSearch eDir, sal_Bool bInReadOnly ); + + // - Verzeichnis einfuegen, und bei Bedarf erneuern + const SwTOXBaseSection* InsertTableOf( const SwPosition& rPos, + const SwTOXBase& rTOX, + const SfxItemSet* pSet = 0, + sal_Bool bExpand = sal_False ); + const SwTOXBaseSection* InsertTableOf( sal_uInt32 nSttNd, sal_uInt32 nEndNd, + const SwTOXBase& rTOX, + const SfxItemSet* pSet = 0 ); + const SwTOXBase* GetCurTOX( const SwPosition& rPos ) const; + const SwAttrSet& GetTOXBaseAttrSet(const SwTOXBase& rTOX) const; + + sal_Bool DeleteTOX( const SwTOXBase& rTOXBase, sal_Bool bDelNodes = sal_False ); + String GetUniqueTOXBaseName( const SwTOXType& rType, + const String* pChkStr = 0 ) const; + + sal_Bool SetTOXBaseName(const SwTOXBase& rTOXBase, const String& rName); + void SetTOXBaseProtection(const SwTOXBase& rTOXBase, sal_Bool bProtect); + + // nach einlesen einer Datei alle Verzeichnisse updaten + void SetUpdateTOX( sal_Bool bFlag = sal_True ) { bUpdateTOX = bFlag; } + sal_Bool IsUpdateTOX() const { return bUpdateTOX; } + + const String& GetTOIAutoMarkURL() const {return sTOIAutoMarkURL;} + void SetTOIAutoMarkURL(const String& rSet) {sTOIAutoMarkURL = rSet;} + void ApplyAutoMark(); + + sal_Bool IsInReading() const { return bInReading; } + + // - Verzeichnis-Typen verwalten + sal_uInt16 GetTOXTypeCount( TOXTypes eTyp ) const; + const SwTOXType* GetTOXType( TOXTypes eTyp, sal_uInt16 nId ) const; + sal_Bool DeleteTOXType( TOXTypes eTyp, sal_uInt16 nId ); + const SwTOXType* InsertTOXType( const SwTOXType& rTyp ); + const SwTOXTypes& GetTOXTypes() const { return *pTOXTypes; } + + const SwTOXBase* GetDefaultTOXBase( TOXTypes eTyp, sal_Bool bCreate = sal_False ); + void SetDefaultTOXBase(const SwTOXBase& rBase); + + // - Schluessel fuer die Indexverwaltung + sal_uInt16 GetTOIKeys( SwTOIKeyType eTyp, SvStringsSort& rArr ) const; + + // Sortieren Tabellen Text + sal_Bool SortTbl(const SwSelBoxes& rBoxes, const SwSortOptions&); + sal_Bool SortText(const SwPaM&, const SwSortOptions&); + + // korrigiere die im Dokument angemeldeten SwPosition-Objecte, + // wie z.B. die ::com::sun::star::text::Bookmarks oder die Verzeichnisse. + // JP 22.06.95: ist bMoveCrsr gesetzt, verschiebe auch die Crsr + + // Setzt alles in rOldNode auf rNewPos + Offset + void CorrAbs( const SwNodeIndex& rOldNode, const SwPosition& rNewPos, + const xub_StrLen nOffset = 0, sal_Bool bMoveCrsr = sal_False ); + // Setzt alles im Bereich von [rStartNode, rEndNode] nach rNewPos + void CorrAbs( const SwNodeIndex& rStartNode, const SwNodeIndex& rEndNode, + const SwPosition& rNewPos, sal_Bool bMoveCrsr = sal_False ); + // Setzt alles im Bereich von rRange nach rNewPos + void CorrAbs( const SwPaM& rRange, const SwPosition& rNewPos, + sal_Bool bMoveCrsr = sal_False ); + // Setzt alles in rOldNode auf relative Pos + void CorrRel( const SwNodeIndex& rOldNode, const SwPosition& rNewPos, + const xub_StrLen nOffset = 0, sal_Bool bMoveCrsr = sal_False ); + + // GliederungsRegeln erfragen / setzen + const SwNumRule* GetOutlineNumRule() const { return pOutlineRule; } + void SetOutlineNumRule( const SwNumRule& rRule ); + // Gliederung - hoch-/runterstufen + sal_Bool OutlineUpDown( const SwPaM& rPam, short nOffset = 1 ); + // Gliederung - hoch-/runtermoven + sal_Bool MoveOutlinePara( const SwPaM& rPam, short nOffset = 1); + // zu diesem Gliederungspunkt + sal_Bool GotoOutline( SwPosition& rPos, const String& rName ) const; + // die Aenderungen an den Gliederungsvorlagen in die OutlineRule uebernehmen + void SetOutlineLSpace( sal_uInt8 nLevel, short nFirstLnOfst, sal_uInt16 nLSpace ); + + // setzt, wenn noch keine Numerierung, sonst wird geaendert + // arbeitet mit alten und neuen Regeln, nur Differenzen aktualisieren + void SetNumRule( const SwPaM&, const SwNumRule&, + sal_Bool bSetAbsLSpace = sal_True ); + // ab hier neu starten lassen oder den Start wieder aufheben + void SetNumRuleStart( const SwPosition& rPos, sal_Bool bFlag = sal_True ); + void SetNodeNumStart( const SwPosition& rPos, sal_uInt16 nStt = USHRT_MAX ); + + SwNumRule* GetCurrNumRule( const SwPosition& rPos ) const; + SwNumRuleTbl& GetNumRuleTbl() { return *pNumRuleTbl; } + const SwNumRuleTbl& GetNumRuleTbl() const { return *pNumRuleTbl; } + sal_uInt16 MakeNumRule( const String &rName, const SwNumRule* pCpy = 0 ); + sal_uInt16 FindNumRule( const String& rName ) const; + SwNumRule* FindNumRulePtr( const String& rName ) const; + // loeschen geht nur, wenn die ::com::sun::star::chaos::Rule niemand benutzt! + sal_Bool DelNumRule( const String& rName ); + String GetUniqueNumRuleName( const String* pChkStr = 0, sal_Bool bAutoNum = sal_True ) const; + void UpdateNumRule( const String& rName, sal_uInt32 nUpdPos ); + void UpdateNumRule(); // alle invaliden Updaten + void ChgNumRuleFmts( const SwNumRule& rRule ); + sal_Bool ReplaceNumRule( const SwPosition& rPos, const String& rOldRule, + const String& rNewRule ); + + // zum naechsten/vorhergehenden Punkt auf gleicher Ebene + sal_Bool GotoNextNum( SwPosition&, sal_Bool bOverUpper = sal_True, + sal_uInt8* pUpper = 0, sal_uInt8* pLower = 0 ); + sal_Bool GotoPrevNum( SwPosition&, sal_Bool bOverUpper = sal_True, + sal_uInt8* pUpper = 0, sal_uInt8* pLower = 0 ); + + // Absaetze ohne Numerierung, aber mit Einzuegen + sal_Bool NoNum( const SwPaM& ); + // Loeschen, Splitten der Aufzaehlungsliste + sal_Bool DelNumRules( const SwPaM& ); + // Hoch-/Runterstufen + sal_Bool NumUpDown( const SwPaM&, sal_Bool bDown = sal_True ); + // Bewegt selektierte Absaetze (nicht nur Numerierungen) + // entsprechend des Offsets. (negativ: zum Doc-Anf.) + sal_Bool MoveParagraph( const SwPaM&, long nOffset = 1, sal_Bool bIsOutlMv = sal_False ); + // No-/Numerierung ueber Delete/Backspace ein/abschalten + sal_Bool NumOrNoNum( const SwNodeIndex& rIdx, sal_Bool bDel = sal_False, + sal_Bool bOutline = sal_False ); + // Animation der Grafiken stoppen + void StopNumRuleAnimations( OutputDevice* ); + + // fuege eine neue Tabelle auf der Position rPos ein. (es + // wird vor dem Node eingefuegt !!) + //JP 28.10.96: + // fuer AutoFormat bei der Eingabe: dann muessen die Spalten + // auf die vordefinierten Breite gesetzt werden. Im Array stehen die + // Positionen der Spalten!! (nicht deren Breite!) + const SwTable* InsertTable( const SwPosition& rPos, sal_uInt16 nRows, + sal_uInt16 nCols, SwHoriOrient eAdjust, + sal_uInt16 nInsert = HEADLINE_NO_BORDER, + const SwTableAutoFmt* pTAFmt = 0, + const SvUShorts* pColArr = 0 ); + + // steht der Index in einer Tabelle, dann returne den TableNode sonst 0 + SwTableNode* IsIdxInTbl( const SwNodeIndex& rIdx ); + inline const SwTableNode* IsIdxInTbl( const SwNodeIndex& rIdx ) const; + + // erzeuge aus dem makierten Bereich eine ausgeglichene Tabelle + const SwTable* TextToTable( const SwPaM& rRange, sal_Unicode cCh, + SwHoriOrient eAdjust, + sal_uInt16 nInsert = HEADLINE_NO_BORDER, + const SwTableAutoFmt* = 0 ); + // erzeuge aus der Tabelle wieder normalen Text + sal_Bool TableToText( const SwTableNode* pTblNd, sal_Unicode cCh ); + // einfuegen von Spalten/Zeilen in der Tabelle + sal_Bool InsertCol( const SwCursor& rCursor, + sal_uInt16 nCnt = 1, sal_Bool bBehind = sal_True ); + sal_Bool InsertCol( const SwSelBoxes& rBoxes, + sal_uInt16 nCnt = 1, sal_Bool bBehind = sal_True ); + sal_Bool InsertRow( const SwCursor& rCursor, + sal_uInt16 nCnt = 1, sal_Bool bBehind = sal_True ); + sal_Bool InsertRow( const SwSelBoxes& rBoxes, + sal_uInt16 nCnt = 1, sal_Bool bBehind = sal_True ); + // loeschen von Spalten/Zeilen in der Tabelle + sal_Bool DeleteRowCol( const SwSelBoxes& rBoxes ); + sal_Bool DeleteRow( const SwCursor& rCursor ); + sal_Bool DeleteCol( const SwCursor& rCursor ); + // teilen / zusammenfassen von Boxen in der Tabelle + sal_Bool SplitTbl( const SwSelBoxes& rBoxes, sal_Bool bVert = sal_True, sal_uInt16 nCnt=1 ); + // returnt den enum TableMergeErr + sal_uInt16 MergeTbl( SwPaM& rPam ); + String GetUniqueTblName() const; + sal_Bool IsInsTblFormatNum() const; + sal_Bool IsInsTblChangeNumFormat() const; + sal_Bool IsInsTblAlignNum() const; + + // aus der FEShell wg.. Undo und bModified + void GetTabCols( SwTabCols &rFill, const SwCursor* pCrsr, + const SwCellFrm* pBoxFrm = 0 ) const; + void SetTabCols( const SwTabCols &rNew, sal_Bool bCurRowOnly, + const SwCursor* pCrsr, const SwCellFrm* pBoxFrm = 0 ); + + // Direktzugriff fuer Uno + void SetTabCols(SwTable& rTab, const SwTabCols &rNew, SwTabCols &rOld, + const SwTableBox *pStart, sal_Bool bCurRowOnly); + + void SetHeadlineRepeat( SwTable &rTable, sal_Bool bSet ); + // AutoFormat fuer die Tabelle/TabellenSelection + sal_Bool SetTableAutoFmt( const SwSelBoxes& rBoxes, const SwTableAutoFmt& rNew ); + // Erfrage wie attributiert ist + sal_Bool GetTableAutoFmt( const SwSelBoxes& rBoxes, SwTableAutoFmt& rGet ); + // setze das TabelleAttribut Undo auf: + void AppendUndoForAttrTable( const SwTable& rTbl ); + // setze die Spalten/Zeilen/ZTellen Breite/Hoehe + sal_Bool SetColRowWidthHeight( SwTableBox& rAktBox, sal_uInt16 eType, + SwTwips nAbsDiff, SwTwips nRelDiff ); + SwTableBoxFmt* MakeTableBoxFmt(); + SwTableLineFmt* MakeTableLineFmt(); + // teste ob die Box ein numerischen Wert darstellt und aender dann ggfs. + // das Format der Box + void ChkBoxNumFmt( SwTableBox& rAktBox, sal_Bool bCallUpdate ); + void SetTblBoxFormulaAttrs( SwTableBox& rBox, const SfxItemSet& rSet ); + void ClearBoxNumAttrs( const SwNodeIndex& rNode ); + + sal_Bool CopyTblInTbl( const SwTable& rSrcTable, SwTable& rDestTbl, + const SwNodeIndex& rBoxIdx ); + sal_Bool InsCopyOfTbl( SwPosition& rInsPos, const SwSelBoxes& rBoxes, + const SwTable* pCpyTbl = 0, sal_Bool bCpyName = sal_False, + sal_Bool bCorrPos = sal_False ); + + sal_Bool UnProtectCells( const String& rTblName ); + sal_Bool UnProtectCells( const SwSelBoxes& rBoxes ); + sal_Bool UnProtectTbls( const SwPaM& rPam ); + sal_Bool HasTblAnyProtection( const SwPosition* pPos, + const String* pTblName = 0, + sal_Bool* pFullTblProtection = 0 ); + + // Tabelle an der Position in der GrundLine aufsplitten, sprich eine + // neue Tabelle erzeugen. + sal_Bool SplitTable( const SwPosition& rPos, sal_uInt16 eMode = 0, + sal_Bool bCalcNewSize = sal_False ); + // und die Umkehrung davon. rPos muss in der Tabelle stehen, die bestehen + // bleibt. Das Flag besagt ob die aktuelle mit der davor oder dahinter + // stehenden vereint wird. + sal_Bool MergeTable( const SwPosition& rPos, sal_Bool bWithPrev = sal_True, + sal_uInt16 nMode = 0 ); + + // Raeume die Umrandung innerhalb der Tabelle ein wenig auf (doppelte + // an einer Kante erkennen und beseitigen) + sal_Bool GCTableBorder( const SwPosition& rPos ); + // Charts der angegebenen Tabelle zum Update bewegen + void UpdateCharts( const String &rName ) const; + // update all charts, for that exists any table + void UpdateAllCharts() { DoUpdateAllCharts( 0 ); } + // Tabelle wird umbenannt und aktualisiert die Charts + void SetTableName( SwFrmFmt& rTblFmt, const String &rNewName ); + + // returne zum Namen die im Doc gesetzte Referenz + const SwFmtRefMark* GetRefMark( const String& rName ) const; + // returne die RefMark per Index - fuer Uno + const SwFmtRefMark* GetRefMark( sal_uInt16 nIndex ) const; + // returne die Namen aller im Doc gesetzten Referenzen. + // Ist der ArrayPointer 0 dann returne nur, ob im Doc. eine RefMark + // gesetzt ist + sal_uInt16 GetRefMarks( SvStringsDtor* = 0 ) const; + + //Einfuegen einer Beschriftung - falls ein FlyFormat erzeugt wird, so + // returne dieses. + SwFlyFrmFmt* InsertLabel( const SwLabelType eType, const String &rTxt, + const sal_Bool bBefore, const sal_uInt16 nId, const sal_uInt32 nIdx, + const sal_Bool bCpyBrd = sal_True ); + SwFlyFrmFmt* InsertDrawLabel( const String &rTxt, const sal_uInt16 nId, + SdrObject& rObj ); + + // erfrage den Attribut Pool + const SwAttrPool& GetAttrPool() const { return aAttrPool; } + SwAttrPool& GetAttrPool() { return aAttrPool; } + + // suche ueber das Layout eine EditShell und ggfs. eine ViewShell + SwEditShell* GetEditShell( ViewShell** ppSh = 0 ) const; + + // OLE 2.0-Benachrichtung + inline void SetOle2Link(const Link& rLink) {aOle2Link = rLink;} + inline const Link& GetOle2Link() const {return aOle2Link;} + + // SS fuer Bereiche + SwSection* Insert( const SwPaM& rRange, const SwSection& rNew, + const SfxItemSet* pAttr = 0, sal_Bool bUpdate = sal_True ); + sal_uInt16 IsInsRegionAvailable( const SwPaM& rRange, + const SwNode** ppSttNd = 0 ) const; + SwSection* GetCurrSection( const SwPosition& rPos ) const; + SwSectionFmts& GetSections() { return *pSectionFmtTbl; } + const SwSectionFmts& GetSections() const { return *pSectionFmtTbl; } + SwSectionFmt *MakeSectionFmt( SwSectionFmt *pDerivedFrom ); + void DelSectionFmt( SwSectionFmt *pFmt, sal_Bool bDelNodes = sal_False ); + void ChgSection( sal_uInt16 nSect, const SwSection&, const SfxItemSet* = 0 ); + String GetUniqueSectionName( const String* pChkStr = 0 ) const; + + // Passwort fuer geschuetzte Bereiche erfragen/setzen + void ChgSectionPasswd( const String& sNew ); + const String& GetSectionPasswd() const { return sSectionPasswd; } + + // Pointer auf die SfxDocShell vom Doc, kann 0 sein !!! + SwDocShell* GetDocShell() { return pDocShell; } + const SwDocShell* GetDocShell() const { return pDocShell; } + void SetDocShell( SwDocShell* pDSh ); + + // falls beim Kopieren von OLE-Nodes eine DocShell angelegt werden muss, + // dann MUSS der Ref-Pointer besetzt sein!!!! + SvEmbeddedObjectRef* GetRefForDocShell() { return pDocShRef; } + void SetRefForDocShell( SvEmbeddedObjectRef* p ) { pDocShRef = p; } + + // fuer die TextBausteine - diese habe nur ein SvPersist zur + // Verfuegung + SvPersist* GetPersist() const; + void SetPersist( SvPersist* ); + + // Pointer auf den Storage des SfxDocShells, kann 0 sein !!! + SvStorage* GetDocStorage(); + + // abfrage/setze Flag, ob das Dokument im asynchronen Laden ist + sal_Bool IsInLoadAsynchron() const { return bInLoadAsynchron; } + void SetInLoadAsynchron( sal_Bool bFlag ) { bInLoadAsynchron = bFlag; } + + // SS fuers Linken von Dokumentteilen + sal_Bool GetData( const String& rItem, SvData& rData ) const; + sal_Bool ChangeData( const String& rItem, const SvData& rData ); + SvPseudoObject* CreateHotLink( const String& rItem ); + // erzeuge um das zu Servende Object eine Selektion + sal_Bool SelectServerObj( const String& rStr, SwPaM*& rpPam, + SwNodeRange*& rpRange ) const; + // erfage alle zu servendenen Objecte + sal_uInt16 GetServerObjects( SvStrings& rStrArr ) const; + + // fuer Drag&Move: ( z.B. RefMarks "verschieben" erlauben ) + sal_Bool IsCopyIsMove() const { return bCopyIsMove; } + void SetCopyIsMove( sal_Bool bFlag ) { bCopyIsMove = bFlag; } + + // fuers Draw-Undo: Aktionen auf Flys wollen wir selbst behandeln + sal_Bool IsNoDrawUndoObj() const { return bNoDrawUndoObj; } + void SetNoDrawUndoObj( sal_Bool bFlag ) { bNoDrawUndoObj = bFlag; } + SwDrawContact* GroupSelection( SdrView& ); + void UnGroupSelection( SdrView& ); + sal_Bool DeleteSelection( SwDrawView& ); + + // Invalidiert OnlineSpell-WrongListen + void SpellItAgainSam( sal_Bool bInvalid, sal_Bool bOnlyWrong ); + void InvalidateAutoCompleteFlag(); + + SdrModel* _MakeDrawModel(); + inline SdrModel* MakeDrawModel() + { return GetDrawModel() ? GetDrawModel() : _MakeDrawModel(); } + void SetCalcFieldValueHdl(Outliner* pOutliner); + + // erfrage ob die ::com::sun::star::util::URL besucht war. Uebers Doc, falls nur ein ::com::sun::star::text::Bookmark + // angegeben ist. Dann muss der Doc. Name davor gesetzt werden! + sal_Bool IsVisitedURL( const String& rURL ) const; + + // speicher die akt. Werte fuer die automatische Aufnahme von Ausnahmen + // in die Autokorrektur + void SetAutoCorrExceptWord( SwAutoCorrExceptWord* pNew ); + SwAutoCorrExceptWord* GetAutoCorrExceptWord() { return pACEWord; } + + const SwFmtINetFmt* FindINetAttr( const String& rName ) const; + + // rufe ins dunkle Basic, mit evt. Return String + sal_Bool ExecMacro( const SvxMacro& rMacro, String* pRet = 0, SbxArray* pArgs = 0 ); + // rufe ins dunkle Basic/JavaScript + sal_uInt16 CallEvent( sal_uInt16 nEvent, const SwCallMouseEvent& rCallEvent, + sal_Bool bChkPtr = sal_False, SbxArray* pArgs = 0, + const Link* pCallBack = 0 ); + + // linken Rand ueber Objectleiste einstellen (aenhlich dem Stufen von + // Numerierungen), optional kann man "um" den Offset stufen oder "auf" + // die Position gestuft werden (bModulus = sal_True) + void MoveLeftMargin( const SwPaM& rPam, sal_Bool bRight = sal_True, + sal_Bool bModulus = sal_True ); + + // Numberformatter erfragen + inline SvNumberFormatter* GetNumberFormatter( sal_Bool bCreate = sal_True ); + inline const SvNumberFormatter* GetNumberFormatter( sal_Bool bCreate = sal_True ) const; + + // loesche den nicht sichtbaren ::com::sun::star::ucb::Content aus dem Document, wie z.B.: + // versteckte Bereiche, versteckte Absaetze + sal_Bool RemoveInvisibleContent(); + // embedded alle lokalen Links (Bereiche/Grafiken) + sal_Bool EmbedAllLinks(); + // erzeuge Anhand der vorgebenen Collection Teildokumente + // falls keine angegeben ist, nehme die Kapitelvorlage der 1. Ebene + sal_Bool GenerateGlobalDoc( const String& rPath, + const SwTxtFmtColl* pSplitColl = 0 ); + sal_Bool GenerateHTMLDoc( const String& rPath, + const SwTxtFmtColl* pSplitColl = 0 ); + + + // alles fuers Redlining + SwRedlineMode GetRedlineMode() const { return eRedlineMode; } + sal_Bool IsRedlineOn() const { return ::IsRedlineOn( eRedlineMode ); } + sal_Bool IsIgnoreRedline() const { return REDLINE_IGNORE & eRedlineMode; } + void SetRedlineMode_intern( sal_uInt16 eMode ) { eRedlineMode = (SwRedlineMode)eMode; } + void SetRedlineMode( sal_uInt16 eMode ); + + const SwRedlineTbl& GetRedlineTbl() const { return *pRedlineTbl; } + sal_Bool AppendRedline( SwRedline* pPtr, sal_Bool bCallDelete = sal_True ); + sal_Bool SplitRedline( const SwPaM& rPam ); + sal_Bool DeleteRedline( const SwPaM& rPam, sal_Bool bSaveInUndo = sal_True, + sal_uInt16 nDelType = USHRT_MAX ); + sal_Bool DeleteRedline( const SwStartNode& rSection, sal_Bool bSaveInUndo = sal_True, + sal_uInt16 nDelType = USHRT_MAX ); + void DeleteRedline( sal_uInt16 nPos ); + sal_uInt16 GetRedlinePos( const SwNode& rNd, sal_uInt16 nType = USHRT_MAX ) const; + void CompressRedlines(); + const SwRedline* GetRedline( const SwPosition& rPos, + sal_uInt16* pFndPos = 0 ) const; + + sal_Bool IsRedlineMove() const { return bIsRedlineMove; } + void SetRedlineMove( sal_Bool bFlag ) { bIsRedlineMove = bFlag; } + + sal_Bool AcceptRedline( sal_uInt16 nPos, sal_Bool bCallDelete = sal_True ); + sal_Bool AcceptRedline( const SwPaM& rPam, sal_Bool bCallDelete = sal_True ); + sal_Bool RejectRedline( sal_uInt16 nPos, sal_Bool bCallDelete = sal_True ); + sal_Bool RejectRedline( const SwPaM& rPam, sal_Bool bCallDelete = sal_True ); + const SwRedline* SelNextRedline( SwPaM& rPam ) const; + const SwRedline* SelPrevRedline( SwPaM& rPam ) const; + + // alle Redline invalidieren, die Darstellung hat sich geaendert + void UpdateRedlineAttr(); + // legt gegebenenfalls einen neuen Author an + sal_uInt16 GetRedlineAuthor(); + // fuer die Reader usw. - neuen Author in die Tabelle eintragen + sal_uInt16 InsertRedlineAuthor( const String& ); + // Kommentar am Redline an der Position setzen + sal_Bool SetRedlineComment( const SwPaM& rPam, const String& rS ); + + // vergleiche zwei Dokument miteinander + long CompareDoc( const SwDoc& rDoc ); + // merge zweier Dokumente + long MergeDoc( const SwDoc& rDoc ); + // setze Kommentar-Text fuers Redline, das dann per AppendRedline + // hereinkommt. Wird vom Autoformat benutzt. 0-Pointer setzt den Modus + // wieder zurueck. Die SequenceNummer ist fuers UI-seitige zusammen- + // fassen von Redlines. + void SetAutoFmtRedlineComment( const String* pTxt, sal_uInt16 nSeqNo = 0 ); + + sal_Bool IsAutoFmtRedline() const { return bIsAutoFmtRedline; } + void SetAutoFmtRedline( sal_Bool bFlag ) { bIsAutoFmtRedline = bFlag; } + + // fuer AutoFormat: mit Undo/Redlining - Behandlung + void SetTxtFmtCollByAutoFmt( const SwPosition& rPos, sal_uInt16 nPoolId, + const SfxItemSet* pSet = 0 ); + void SetFmtItemByAutoFmt( const SwPaM& rPam, const SfxPoolItem& ); + + // !!!NUR fuer die SW-Textblocks!! beachtet kein LAYOUT!!! + void ClearDoc(); // loescht den gesamten Inhalt. + + // erfrage / setze die Daten fuer die PagePreView + const SwPagePreViewPrtData* GetPreViewPrtData() const { return pPgPViewPrtData; } + // wenn der Pointer == 0 ist, dann wird im Doc der Pointer zerstoert, + // ansonsten wird das Object kopiert. + // Der Pointer geht NICHT in den Besitz des Doc's!! + void SetPreViewPrtData( const SwPagePreViewPrtData* pData ); + + // update all modified OLE-Objects. The modification is called over the + // StarOne - Interface --> Bug 67026 + void SetOLEObjModified() + { if( GetRootFrm() ) aOLEModifiedTimer.Start(); } + + // -------------------- Uno - Schnittstellen --------------------------- + const SwUnoCrsrTbl& GetUnoCrsrTbl() const { return *pUnoCrsrTbl; } + SwUnoCrsr* CreateUnoCrsr( const SwPosition& rPos, sal_Bool bTblCrsr = sal_False ); + // -------------------- Uno - Schnittstellen --------------------------- + + // -------------------- FeShell - Schnittstellen ----------------------- + // !!!!! diese gehen immer davon aus, das ein Layout existiert !!!! + sal_Bool ChgAnchor( const SdrMarkList &rMrkList, int eAnchorId, + sal_Bool bSameOnly, sal_Bool bPosCorr ); + + void SetRowHeight( const SwCursor& rCursor, const SwFmtFrmSize &rNew ); + void GetRowHeight( const SwCursor& rCursor, SwFmtFrmSize *& rpSz ) const; + sal_Bool BalanceRowHeight( const SwCursor& rCursor, sal_Bool bTstOnly = sal_True ); + void SetRowBackground( const SwCursor& rCursor, const SvxBrushItem &rNew ); + sal_Bool GetRowBackground( const SwCursor& rCursor, SvxBrushItem &rToFill ) const; + void SetTabBorders( const SwCursor& rCursor, const SfxItemSet& rSet ); + void SetTabLineStyle( const SwCursor& rCursor, + const Color* pColor, sal_Bool bSetLine, + const SvxBorderLine* pBorderLine ); + void GetTabBorders( const SwCursor& rCursor, SfxItemSet& rSet ) const; + void SetBoxAttr( const SwCursor& rCursor, const SfxPoolItem &rNew ); + sal_Bool GetBoxBackground( const SwCursor& rCursor, SvxBrushItem &rToFill ) const; + void SetBoxAlign( const SwCursor& rCursor, sal_uInt16 nAlign ); + sal_uInt16 GetBoxAlign( const SwCursor& rCursor ) const; + void AdjustCellWidth( const SwCursor& rCursor, sal_Bool bBalance = sal_False ); + + int Chainable( const SwFrmFmt &rSource, const SwFrmFmt &rDest ); + int Chain( SwFrmFmt &rSource, const SwFrmFmt &rDest ); + void Unchain( SwFrmFmt &rFmt ); + + // fuers Copy/Move aus der FrmShell + SdrObject* CloneSdrObj( const SdrObject&, sal_Bool bMoveWithinDoc = sal_False, + sal_Bool bInsInPage = sal_True ); + + // + // -------------------- FeShell - Schnittstellen Ende ------------------ + + + // Schnittstelle fuer die TextInputDaten - ( fuer die Texteingabe + // von japanischen/chinesischen Zeichen) + SwExtTextInput* CreateExtTextInput( const SwPaM& rPam ); + void DeleteExtTextInput( SwExtTextInput* pDel ); + SwExtTextInput* GetExtTextInput( const SwNode& rNd, + xub_StrLen nCntntPos = STRING_NOTFOUND) const; + + // Schnistelle fuer den Zugriff auf die AutoComplete-Liste + static SwAutoCompleteWord& GetAutoCompleteWords() { return *pACmpltWords; } + + sal_Bool ContainsMSVBasic() const { return bContains_MSVBasic; } + void SetContainsMSVBasic( sal_Bool bFlag ) { bContains_MSVBasic = bFlag; } + + // ------------------- Zugriff auf Dummy-Member -------------------- + + sal_Bool IsParaSpaceMax() const { return n8Dummy1 & DUMMY_PARASPACEMAX; } + sal_Bool IsParaSpaceMaxAtPages() const { return n8Dummy1 & DUMMY_PARASPACEMAX_AT_PAGES; } + void SetParaSpaceMax( sal_Bool bNew, sal_Bool bAtPages ) + { + if( bNew ) n8Dummy1 |= DUMMY_PARASPACEMAX; else n8Dummy1 &= ~DUMMY_PARASPACEMAX; + if( bAtPages ) n8Dummy1 |= DUMMY_PARASPACEMAX_AT_PAGES; else n8Dummy1 &= ~DUMMY_PARASPACEMAX_AT_PAGES; + } + + void SetULongDummy1( sal_uInt32 n ) { n32Dummy1 = n; } + void SetULongDummy2( sal_uInt32 n ) { n32Dummy2 = n; } + void SetByteDummy1( sal_Int8 n ) { n8Dummy1 = n; } + void SetByteDummy2( sal_Int8 n ) { n8Dummy2 = n; } + void SetStringDummy1( const String& r ) { sDummy1 = r; } + void SetStringDummy2( const String& r ) { sDummy2 = r; } + sal_uInt32 GetULongDummy1() const { return n32Dummy1; } + sal_uInt32 GetULongDummy2() const { return n32Dummy2; } + sal_Int8 GetByteDummy1() const { return n8Dummy1; } + sal_Int8 GetByteDummy2() const { return n8Dummy2; } + const String& GetStringDummy1() const { return sDummy1; } + const String& GetStringDummy2() const { return sDummy2; } + + // call back for API wrapper + SwModify* GetUnoCallBack() const; +}; + + +// Diese Methode wird im Dtor vom SwDoc gerufen und loescht den Cache +// der Konturobjekte +void ClrContourCache(); + + +//------------------ inline impl. --------------------------------- + +inline const SwTableNode* SwDoc::IsIdxInTbl( const SwNodeIndex& rIdx ) const +{ + return ((SwDoc*)this)->IsIdxInTbl( rIdx ); +} + +inline SvNumberFormatter* SwDoc::GetNumberFormatter( sal_Bool bCreate ) +{ + if( bCreate && !pNumberFormatter ) + _CreateNumberFormatter(); + return pNumberFormatter; +} + +inline const SvNumberFormatter* SwDoc::GetNumberFormatter( sal_Bool bCreate ) const +{ + return ((SwDoc*)this)->GetNumberFormatter( bCreate ); +} + + +// ist das NodesArray das normale vom Doc? (nicht das UndoNds, .. ) +// Implementierung steht hier, weil man dazu Doc kennen muss! +inline sal_Bool SwNodes::IsDocNodes() const +{ + return this == &pMyDoc->GetNodes(); +} + + + +#endif //_DOC_HXX |