summaryrefslogtreecommitdiff
path: root/sw/source/core/inc/frame.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/inc/frame.hxx')
-rw-r--r--sw/source/core/inc/frame.hxx1257
1 files changed, 1257 insertions, 0 deletions
diff --git a/sw/source/core/inc/frame.hxx b/sw/source/core/inc/frame.hxx
new file mode 100644
index 000000000000..e1560a230d7a
--- /dev/null
+++ b/sw/source/core/inc/frame.hxx
@@ -0,0 +1,1257 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _FRAME_HXX
+#define _FRAME_HXX
+#include <svl/svarray.hxx>
+#include "swtypes.hxx" // fuer SwTwips
+#include "swrect.hxx"
+#include "calbck.hxx" // fuer SwClient
+
+class SwLayoutFrm;
+class SwRootFrm;
+class SwPageFrm;
+class SwFlyFrm;
+class SwSectionFrm;
+class SdrObject;
+class SwFtnFrm;
+class SwFtnBossFrm;
+class SwTabFrm;
+class SwRowFrm;
+class SwFlowFrm;
+class SwCntntFrm;
+class SfxPoolItem;
+class SwAttrSet;
+class ViewShell;
+class Color;
+class SwBorderAttrs;
+class SwCache;
+class SvxBrushItem;
+class SwSelectionList;
+struct SwPosition;
+struct SwCrsrMoveState;
+class SwPrtOptions;
+
+// --> OD 2004-07-06 #i28701#
+class SwSortedObjs;
+class SwAnchoredObject;
+// <--
+
+//Jeder FrmTyp findet sich hier in einem Bit wieder.
+//Die Bits muessen so gesetzt werden, dass mit einer Maskierung festgestellt
+//werden kann was fuer ein FrmTyp eine Instanz ist _und_ von welchen Klassen
+//sie abgeleitet ist.
+//Der Frm hat in der Basisklasse einen Member der von den CToren der
+//einzelnen Frms entsprechend gesetzt werden muss.
+#define FRM_ROOT 0x0001
+#define FRM_PAGE 0x0002
+#define FRM_COLUMN 0x0004
+#define FRM_HEADER 0x0008
+#define FRM_FOOTER 0x0010
+#define FRM_FTNCONT 0x0020
+#define FRM_FTN 0x0040
+#define FRM_BODY 0x0080
+#define FRM_FLY 0x0100
+#define FRM_SECTION 0x0200
+#define FRM_UNUSED 0x0400
+#define FRM_TAB 0x0800
+#define FRM_ROW 0x1000
+#define FRM_CELL 0x2000
+#define FRM_TXT 0x4000
+#define FRM_NOTXT 0x8000
+
+//Fuer den internen Gebrauch ein paar gebraeuchliche Verknuepfungen.
+#define FRM_LAYOUT 0x3FFF
+#define FRM_CNTNT 0xC000
+#define FRM_FTNBOSS 0x0006
+#define FRM_ACCESSIBLE (FRM_HEADER|FRM_FOOTER|FRM_FTN|FRM_TXT|FRM_ROOT|FRM_FLY|FRM_TAB|FRM_CELL|FRM_PAGE)
+
+ //Weils so schon ist das ganze als Bitfeld....
+//0000 0000 0000 0001 ROOT
+//0000 0000 0000 0010 PAGE
+//0000 0000 0000 0100 COLUMN
+//0000 0000 0000 1000 HEADER
+//0000 0000 0001 0000 FOOTER
+//0000 0000 0010 0000 FTNCONT
+//0000 0000 0100 0000 FTN
+//0000 0000 1000 0000 BODY
+//0000 0001 0000 0000 FLY
+//0000 0010 0000 0000 SECTION
+//0000 0100 0000 0000 UNUSED
+//0000 1000 0000 0000 TAB
+//0001 0000 0000 0000 ROW
+//0010 0000 0000 0000 CELL
+//0100 0000 0000 0000 TXT
+//1000 0000 0000 0000 NOTXT
+
+// The type of the frame is internal represented by the 4-bit value nType,
+// which can expanded to the types above by shifting a bit (0x1 << nType)
+// Here are the corresponding defines for the compressed representation:
+
+#define FRMC_ROOT 0
+#define FRMC_PAGE 1
+#define FRMC_COLUMN 2
+#define FRMC_HEADER 3
+#define FRMC_FOOTER 4
+#define FRMC_FTNCONT 5
+#define FRMC_FTN 6
+#define FRMC_BODY 7
+#define FRMC_FLY 8
+#define FRMC_SECTION 9
+#define FRMC_UNUSED 10
+#define FRMC_TAB 11
+#define FRMC_ROW 12
+#define FRMC_CELL 13
+#define FRMC_TXT 14
+#define FRMC_NOTXT 15
+
+#define FRM_NEIGHBOUR 0x2004
+#define FRM_NOTE_VERT 0x7a60
+#define FRM_HEADFOOT 0x0018
+#define FRM_BODYFTNC 0x00a0
+
+class SwFrm;
+typedef long (SwFrm:: *SwFrmGet)() const;
+typedef BOOL (SwFrm:: *SwFrmMax)( long );
+typedef void (SwFrm:: *SwFrmMakePos)( const SwFrm*, const SwFrm*, BOOL );
+typedef long (*SwOperator)( long, long );
+typedef void (SwFrm:: *SwFrmSet)( long, long );
+
+struct SwRectFnCollection
+{
+ SwRectGet fnGetTop;
+ SwRectGet fnGetBottom;
+ SwRectGet fnGetLeft;
+ SwRectGet fnGetRight;
+ SwRectGet fnGetWidth;
+ SwRectGet fnGetHeight;
+ SwRectPoint fnGetPos;
+ SwRectSize fnGetSize;
+
+ SwRectSet fnSetTop;
+ SwRectSet fnSetBottom;
+ SwRectSet fnSetLeft;
+ SwRectSet fnSetRight;
+ SwRectSet fnSetWidth;
+ SwRectSet fnSetHeight;
+
+ SwRectSet fnSubTop;
+ SwRectSet fnAddBottom;
+ SwRectSet fnSubLeft;
+ SwRectSet fnAddRight;
+ SwRectSet fnAddWidth;
+ SwRectSet fnAddHeight;
+
+ SwRectSet fnSetPosX;
+ SwRectSet fnSetPosY;
+
+ SwFrmGet fnGetTopMargin;
+ SwFrmGet fnGetBottomMargin;
+ SwFrmGet fnGetLeftMargin;
+ SwFrmGet fnGetRightMargin;
+ SwFrmSet fnSetXMargins;
+ SwFrmSet fnSetYMargins;
+ SwFrmGet fnGetPrtTop;
+ SwFrmGet fnGetPrtBottom;
+ SwFrmGet fnGetPrtLeft;
+ SwFrmGet fnGetPrtRight;
+ SwRectDist fnTopDist;
+ SwRectDist fnBottomDist;
+ SwRectDist fnLeftDist;
+ SwRectDist fnRightDist;
+ SwFrmMax fnSetLimit;
+ SwRectMax fnOverStep;
+
+ SwRectSetPos fnSetPos;
+ SwFrmMakePos fnMakePos;
+ SwOperator fnXDiff;
+ SwOperator fnYDiff;
+ SwOperator fnXInc;
+ SwOperator fnYInc;
+
+ SwRectSetTwice fnSetLeftAndWidth;
+ SwRectSetTwice fnSetTopAndHeight;
+};
+
+typedef SwRectFnCollection* SwRectFn;
+extern SwRectFn fnRectHori, fnRectVert, fnRectB2T, fnRectVL2R;
+
+#define SWRECTFN( pFrm ) sal_Bool bVert = pFrm->IsVertical(); \
+ sal_Bool bRev = pFrm->IsReverse(); \
+ SwRectFn fnRect = bVert ? \
+ ( bRev ? fnRectVL2R : fnRectVert ): \
+ ( bRev ? fnRectB2T : fnRectHori );
+#define SWRECTFNX( pFrm ) sal_Bool bVertX = pFrm->IsVertical(); \
+ sal_Bool bRevX = pFrm->IsReverse(); \
+ SwRectFn fnRectX = bVertX ? \
+ ( bRevX ? fnRectVL2R : fnRectVert ): \
+ ( bRevX ? fnRectB2T : fnRectHori );
+#define SWREFRESHFN( pFrm ) { if( bVert != pFrm->IsVertical() || \
+ bRev != pFrm->IsReverse() ) \
+ bVert = pFrm->IsVertical(); \
+ bRev = pFrm->IsReverse(); \
+ fnRect = bVert ? \
+ ( bRev ? fnRectVL2R : fnRectVert ): \
+ ( bRev ? fnRectB2T : fnRectHori ); }
+#define SWRECTFN2( pFrm ) sal_Bool bVert = pFrm->IsVertical(); \
+ sal_Bool bNeighb = pFrm->IsNeighbourFrm(); \
+ SwRectFn fnRect = bVert == bNeighb ? \
+ fnRectHori : fnRectVert;
+#define POS_DIFF( aFrm1, aFrm2 ) \
+ ( (aFrm1.*fnRect->fnGetTop)() != (aFrm2.*fnRect->fnGetTop)() || \
+ (aFrm1.*fnRect->fnGetLeft)() != (aFrm2.*fnRect->fnGetLeft)() )
+
+
+//Fuer GetNextLeaf/GetPrevLeaf.
+enum MakePageType
+{
+ MAKEPAGE_NONE, //Keine Seite bzw. Fussnote anlegen
+ MAKEPAGE_APPEND, //Nur ggf. Seite anhaengen
+ MAKEPAGE_INSERT, //Seite ggf. anhaengen oder einfuegen.
+ MAKEPAGE_FTN, //Fussnote ggf. einfuegen.
+ MAKEPAGE_NOSECTION // Don't create section frames
+};
+
+// OD 2004-05-06 #i28701# - replaced by new class <SwSortedObjs>
+//typedef SdrObject* SdrObjectPtr;
+//SV_DECL_PTRARR(SwDrawObjs,SdrObjectPtr,1,1);
+
+class SwFrm: public SwClient
+{
+ //Der verkappte Frm
+ friend class SwFlowFrm;
+ friend class SwLayoutFrm; // Sw3FrameIo: fuer pNext, pPrev
+ friend class SwLooping; // LoopControlling (layouter.cxx)
+
+ //Hebt die Lower waehrend eines Spaltenumbaus auf.
+ friend SwFrm *SaveCntnt( SwLayoutFrm *, SwFrm* pStart = NULL );
+ friend void RestoreCntnt( SwFrm *, SwLayoutFrm *, SwFrm *pSibling, bool bGrow );
+
+#if OSL_DEBUG_LEVEL > 1
+ //entfernt leere SwSectionFrms aus einer Kette
+ friend SwFrm* SwClearDummies( SwFrm* pFrm );
+#endif
+
+ //Zum validieren eines unsinnig invalidierten in SwCntntFrm::MakeAll
+ friend void ValidateSz( SwFrm *pFrm );
+ // Implementiert in text/txtftn.cxx, verhindert Ftn-Oszillation
+ friend void ValidateTxt( SwFrm *pFrm );
+
+// friend void CalcAnchorAndKeep( SwFlyFrm * );
+
+ friend void MakeNxt( SwFrm *pFrm, SwFrm *pNxt );
+
+ //Cache fuer (Umrandungs-)Attribute.
+ static SwCache *pCache;
+
+ // --> OD 2006-05-10 #i65250#
+ // frame ID is now in general available - used for layout loop control
+ static sal_uInt32 mnLastFrmId;
+ const sal_uInt32 mnFrmId;
+ // <--
+
+ SwLayoutFrm *pUpper;
+ SwFrm *pNext;
+ SwFrm *pPrev;
+
+ SwFrm *_FindNext();
+ SwFrm *_FindPrev();
+
+ /** method to determine next content frame in the same environment
+ for a flow frame (content frame, table frame, section frame)
+
+ OD 2005-11-30 #i27138# - adding documentation:
+ Travelling downwards through the layout to determine the next content
+ frame in the same environment. There are several environments in a
+ document, which form a closed context regarding this function. These
+ environments are:
+ - Each page header
+ - Each page footer
+ - Each unlinked fly frame
+ - Each group of linked fly frames
+ - All footnotes
+ - All document body frames
+ OD 2005-11-30 #i27138# - adding parameter <_bInSameFtn>
+ Its default value is <false>. If its value is <true>, the environment
+ 'All footnotes' is no longer treated. Instead each footnote is treated
+ as an own environment.
+
+ @author OD
+
+ @param _bInSameFtn
+ input parameter - boolean indicating, that the found next content
+ frame has to be in the same footnote frame. This parameter is only
+ relevant for flow frames in footnotes.
+
+ @return SwCntntFrm*
+ pointer to the found next content frame. It's NULL, if none exists.
+ */
+ SwCntntFrm* _FindNextCnt( const bool _bInSameFtn = false );
+
+ /** method to determine previous content frame in the same environment
+ for a flow frame (content frame, table frame, section frame)
+
+ OD 2005-11-30 #i27138#
+ Travelling upwards through the layout to determine the previous content
+ frame in the same environment. There are several environments in a
+ document, which form a closed context regarding this function. These
+ environments are:
+ - Each page header
+ - Each page footer
+ - Each unlinked fly frame
+ - Each group of linked fly frames
+ - All footnotes
+ - All document body frames
+ OD 2005-11-30 #i27138# - adding parameter <_bInSameFtn>
+ Its default value is <false>. If its value is <true>, the environment
+ 'All footnotes' is no longer treated. Instead each footnote is treated
+ as an own environment.
+
+ @author OD
+
+ @param _bInSameFtn
+ input parameter - boolean indicating, that the found previous content
+ frame has to be in the same footnote frame. This parameter is only
+ relevant for flow frames in footnotes.
+
+ @return SwCntntFrm*
+ pointer to the found previous content frame. It's NULL, if none exists.
+ */
+ SwCntntFrm* _FindPrevCnt( const bool _bInSameFtn = false );
+
+
+ void _UpdateAttrFrm( SfxPoolItem*, SfxPoolItem*, BYTE & );
+ SwFrm* _GetIndNext();
+ void SetDirFlags( BOOL bVert );
+
+ SwFrm( SwFrm & ); //Kopieren ist nicht erlaubt.
+
+ const SwLayoutFrm* ImplGetNextLayoutLeaf( bool bFwd ) const;
+
+protected:
+ SwSortedObjs* pDrawObjs; //Hier haengen die DrawObjs, kann 0 sein
+
+ SwRect aFrm; //Absolute Dokumentposition und groesse des Frm
+ SwRect aPrt; //Position der PrtArea rel zum Frm und groesse der PrtArea
+
+ USHORT bFlag01: 1;
+ USHORT bFlag02: 1;
+ USHORT bFlag03: 1;
+ USHORT bFlag04: 1;
+ USHORT bFlag05: 1;
+ USHORT bReverse: 1; // Next line above/at the right side instead
+ // under/at the left side of the previous line.
+ USHORT bInvalidR2L: 1;
+ USHORT bDerivedR2L: 1;
+ USHORT bRightToLeft: 1;
+ USHORT bInvalidVert: 1;
+ USHORT bDerivedVert: 1;
+ USHORT bVertical: 1;
+ USHORT nType: 4; //Who am I?
+
+ BOOL bValidPos: 1;
+ BOOL bValidPrtArea: 1;
+ BOOL bValidSize: 1;
+ BOOL bValidLineNum: 1;
+ BOOL bFixSize: 1;
+ BOOL bUnUsed1: 1;
+ BOOL bCompletePaint: 1; //Frame wird ganz gepaintet wenn TRUE, auch
+ //wenn der Inhalt nur teilw. veraendert ist;
+ //Bei CntntFrms wird ausschliesslich wenn TRUE
+ //der Border (von Action) gemalt.
+ BOOL bRetouche: 1; //Der Frame ist fuer Retusche verantwortlich
+ //wenn TRUE.
+public:
+ BOOL bUnUsed2: 1;
+protected:
+ BOOL bInfInvalid: 1; //InfoFlags sind Invalid.
+ BOOL bInfBody: 1; //Frm steht im DokumentBody.
+ BOOL bInfTab: 1; //Frm steht in einer Tabelle.
+ BOOL bInfFly: 1; //Frm steht in einem Fly.
+ BOOL bInfFtn: 1; //Frm steht in einer Fussnote.
+ BOOL bInfSct: 1; //Frm steht in einem Bereich.
+ BOOL bColLocked: 1; //Grow/Shrink sperren bei spaltigen Section-
+ //oder Fly-Frames, wird im Format gesetzt
+
+ void ColLock() { bColLocked = TRUE; }
+ void ColUnlock() { bColLocked = FALSE; }
+
+ SwPageFrm *InsertPage( SwPageFrm *pSibling, BOOL bFtn );
+ void PrepareMake();
+ void OptPrepareMake();
+ void MakePos();
+ // --> OD 2005-09-28 #b6329202#
+ // method formats next frame of table frame to assure keep attribute.
+ // in case of nested tables method <SwFrm::MakeAll()> is called to
+ // avoid format of superior table frame.
+ friend SwFrm* lcl_FormatNextCntntForKeep( SwTabFrm* pTabFrm );
+ // <--
+ virtual void MakeAll() = 0;
+ //Adjustierung der Frames einer Seite
+ SwTwips AdjustNeighbourhood( SwTwips nDiff, BOOL bTst = FALSE );
+
+
+ //Aendern nur die Framesize, nicht die PrtArea-SSize
+ virtual SwTwips ShrinkFrm( SwTwips, BOOL bTst = FALSE, BOOL bInfo = FALSE ) = 0;
+ virtual SwTwips GrowFrm ( SwTwips, BOOL bTst = FALSE, BOOL bInfo = FALSE ) = 0;
+
+ SwModify *GetDep() { return pRegisteredIn; }
+ const SwModify *GetDep() const { return pRegisteredIn; }
+
+ SwFrm( SwModify* );
+
+ void CheckDir( UINT16 nDir, BOOL bVert, BOOL bOnlyBiDi, BOOL bBrowse );
+
+ /** enumeration for the different invalidations
+
+ OD 2004-05-19 #i28701#
+
+ @author OD
+ */
+ enum InvalidationType
+ {
+ INVALID_SIZE, INVALID_PRTAREA, INVALID_POS, INVALID_LINENUM, INVALID_ALL
+ };
+
+ /** method to determine, if an invalidation is allowed.
+
+ OD 2004-05-19 #i28701
+
+ @author OD
+ */
+ virtual bool _InvalidationAllowed( const InvalidationType _nInvalid ) const;
+
+ /** method to perform additional actions on an invalidation
+
+ OD 2004-05-19 #i28701#
+ Method has *only* to contain actions, which has to be performed on
+ *every* assignment of the corresponding flag to <FALSE>.
+
+ @author OD
+ */
+ virtual void _ActionOnInvalidation( const InvalidationType _nInvalid );
+
+ //Schatten und Umrandung painten
+ void PaintShadow( const SwRect&, SwRect&, const SwBorderAttrs& ) const;
+
+public:
+ TYPEINFO(); //Bereits in Basisklasse Client drin.
+
+ USHORT GetType() const { return 0x1 << nType; }
+
+ static SwCache &GetCache() { return *pCache; }
+ static SwCache *GetCachePtr() { return pCache; }
+ static void SetCache( SwCache *pNew ) { pCache = pNew; }
+
+ //Aendern die PrtArea-SSize und die FrmSize.
+ SwTwips Shrink( SwTwips, BOOL bTst = FALSE, BOOL bInfo = FALSE );
+ SwTwips Grow ( SwTwips, BOOL bTst = FALSE, BOOL bInfo = FALSE );
+
+ //Wir brauchen unterschiedliche Methoden (wg. Performance) fuer das
+ //Einfuegenin den Layout Baum:
+
+ //Einfuegen vor pBehind oder am Ende der Kette unter pUpper
+ void InsertBefore( SwLayoutFrm* pParent, SwFrm* pBehind );
+ //Einfuegen hinter pBefore oder am Anfang der Kette unter pUpper
+ void InsertBehind( SwLayoutFrm *pParent, SwFrm *pBefore );
+ //Einfuegen vor pBehind oder am Ende der Kette, unter Beruecksichtigung
+ //der Geschwister von pSct
+ void InsertGroupBefore( SwFrm* pParent, SwFrm* pWhere, SwFrm* pSct );
+ void Remove();
+
+ //For internal use only; wer es anders macht wird
+ //in einen Sack gesteckt und muss zwei Tage drin hocken bleiben.
+ //Fuert Spezialbehandlung fuer _Get[Next|Prev]Leaf() durch (Tabellen).
+ SwLayoutFrm *GetLeaf( MakePageType eMakePage, BOOL bFwd );
+ SwLayoutFrm *GetNextLeaf ( MakePageType eMakePage );
+ SwLayoutFrm *GetNextFtnLeaf( MakePageType eMakePage );
+ SwLayoutFrm *GetNextSctLeaf( MakePageType eMakePage );
+ SwLayoutFrm *GetNextCellLeaf( MakePageType eMakePage );
+ SwLayoutFrm *GetPrevLeaf ( MakePageType eMakeFtn = MAKEPAGE_FTN );
+ SwLayoutFrm *GetPrevFtnLeaf( MakePageType eMakeFtn = MAKEPAGE_FTN );
+ SwLayoutFrm *GetPrevSctLeaf( MakePageType eMakeFtn = MAKEPAGE_FTN );
+ SwLayoutFrm *GetPrevCellLeaf( MakePageType eMakeFtn = MAKEPAGE_FTN );
+ const SwLayoutFrm *GetLeaf ( MakePageType eMakePage, BOOL bFwd,
+ const SwFrm *pAnch ) const;
+
+ BOOL WrongPageDesc( SwPageFrm* pNew );
+
+ // --> OD 2004-07-02 #i28701# - new methods to append/remove drawing objects
+ void AppendDrawObj( SwAnchoredObject& _rNewObj );
+ void RemoveDrawObj( SwAnchoredObject& _rToRemoveObj );
+ // <--
+
+ //Arbeiten mit der Kette der FlyFrms
+ void AppendFly( SwFlyFrm *pNew );
+ void RemoveFly( SwFlyFrm *pToRemove );
+ const SwSortedObjs *GetDrawObjs() const { return pDrawObjs; }
+ SwSortedObjs *GetDrawObjs() { return pDrawObjs; }
+ // --> OD 2004-07-01 #i28701# - change purpose of method and adjust its name
+ void InvalidateObjs( const bool _bInvaPosOnly,
+ const bool _bNoInvaOfAsCharAnchoredObjs = true );
+
+ virtual void PaintBorder( const SwRect&, const SwPageFrm *pPage,
+ const SwBorderAttrs & ) const;
+ void PaintBaBo( const SwRect&, const SwPageFrm *pPage = 0,
+ const BOOL bLowerBorder = FALSE ) const;
+ void PaintBackground( const SwRect&, const SwPageFrm *pPage,
+ const SwBorderAttrs &,
+ const BOOL bLowerMode = FALSE,
+ const BOOL bLowerBorder = FALSE ) const;
+ void PaintBorderLine( const SwRect&, const SwRect&, const SwPageFrm*,
+ const Color *pColor ) const;
+
+ //Retouche, nicht im Bereich des uebergebenen Rect!
+ void Retouche( const SwPageFrm *pPage, const SwRect &rRect ) const;
+
+ BOOL GetBackgroundBrush( const SvxBrushItem*& rpBrush,
+ const Color*& rpColor,
+ SwRect &rOrigRect,
+ BOOL bLowerMode ) const;
+
+ inline void SetCompletePaint() const;
+ inline void ResetCompletePaint() const;
+ inline BOOL IsCompletePaint() const { return bCompletePaint; }
+
+ inline void SetRetouche() const;
+ inline void ResetRetouche() const;
+ inline BOOL IsRetouche() const { return bRetouche; }
+
+ void SetInfFlags(); //Setzen der InfoFlags
+ inline void InvalidateInfFlags() { bInfInvalid = TRUE; }
+ inline BOOL IsInDocBody() const; //Benutzen die InfoFlags.
+ inline BOOL IsInFtn() const; //ggf. werden die Flags ermittelt.
+ inline BOOL IsInTab() const;
+ inline BOOL IsInFly() const;
+ inline BOOL IsInSct() const;
+
+ // If frame is inside a split table row, this function returns
+ // the corresponding row frame in the follow table.
+ const SwRowFrm* IsInSplitTableRow() const;
+
+ // If frame is inside a follow flow row, this function returns
+ // the corresponding row frame master table
+ const SwRowFrm* IsInFollowFlowRow() const;
+
+ bool IsInBalancedSection() const;
+
+ inline BOOL IsReverse() const { return bReverse; }
+ inline void SetReverse( BOOL bNew ){ bReverse = bNew ? 1 : 0; }
+ inline BOOL IsVertical() const;
+ inline BOOL GetVerticalFlag() const;
+ inline void SetVertical( BOOL bNew ){ bVertical = bNew ? 1 : 0; }
+ inline void SetDerivedVert( BOOL bNew ){ bDerivedVert = bNew ? 1 : 0; }
+ inline void SetInvalidVert( BOOL bNew) { bInvalidVert = bNew ? 1 : 0; }
+ inline BOOL IsRightToLeft() const;
+ inline BOOL GetRightToLeftFlag() const;
+ inline void SetRightToLeft( BOOL bNew ){ bRightToLeft = bNew ? 1 : 0; }
+ inline void SetDerivedR2L( BOOL bNew ) { bDerivedR2L = bNew ? 1 : 0; }
+ inline void SetInvalidR2L( BOOL bNew ) { bInvalidR2L = bNew ? 1 : 0; }
+ void CheckDirChange();
+ // returns upper left frame position for LTR and
+ // upper right frame position for Asian / RTL frames
+ Point GetFrmAnchorPos( sal_Bool bIgnoreFlysAnchoredAtThisFrame ) const;
+
+ /** determine, if frame is moveable in given environment
+
+ OD 08.08.2003 #110978#
+ method replaced 'old' method <BOOL IsMoveable() const>.
+ Determines, if frame is moveable in given environment. if no environment
+ is given (parameter _pLayoutFrm == 0L), the movability in the actual
+ environment (<this->GetUpper()) is checked.
+
+ @author OD
+
+ @param _pLayoutFrm
+ input parameter - given environment (layout frame), in which the movability
+ will be checked. If not set ( == 0L ), actual environment is taken.
+
+ @return boolean, indicating, if frame is moveable in given environment
+ */
+// BOOL IsMoveable() const;
+ bool IsMoveable( const SwLayoutFrm* _pLayoutFrm = 0L ) const;
+
+ //Ist es fuer den (Txt)Frm in der aktuellen Umgebung erlaubt eine
+ //Fussnote einzufuegen (nicht z.B. in wiederholten TabellenHeadlines).
+ BOOL IsFtnAllowed() const;
+
+ virtual void Modify( SfxPoolItem*, SfxPoolItem* );
+ virtual void Format( const SwBorderAttrs *pAttrs = 0 );
+
+ virtual void CheckDirection( BOOL bVert );
+
+ void ReinitializeFrmSizeAttrFlags();
+
+ const SwAttrSet *GetAttrSet() const;
+
+ inline BOOL HasFixSize() const { return bFixSize; }
+ inline void SetFixSize( BOOL bNew ) { bFixSize = bNew; }
+
+ //Kann 0 liefern, pruefen auch ob die Shell zum richtigen Dokument
+ //gehoert. Impl in frmsh.hxx
+ ViewShell *GetShell() const;
+
+ //Prueft alle Seiten ab der Uebergebenen und korrigiert ggf.
+ static void CheckPageDescs( SwPageFrm *pStart, BOOL bNotifyFields = TRUE );
+
+ //Koennen 0 liefern, einmal const einmal nicht
+ SwFrm *GetNext() { return pNext; }
+ SwFrm *GetPrev() { return pPrev; }
+ SwLayoutFrm *GetUpper() { return pUpper; }
+ SwRootFrm *FindRootFrm();
+ SwPageFrm *FindPageFrm();
+ SwFrm *FindColFrm();
+ SwFtnBossFrm *FindFtnBossFrm( BOOL bFootnotes = FALSE );
+ SwTabFrm *ImplFindTabFrm();
+ SwFtnFrm *ImplFindFtnFrm();
+ SwFlyFrm *ImplFindFlyFrm();
+ SwSectionFrm *ImplFindSctFrm();
+ SwFrm *FindFooterOrHeader();
+ SwFrm *GetLower();
+ const SwFrm *GetNext() const { return pNext; }
+ const SwFrm *GetPrev() const { return pPrev; }
+ const SwLayoutFrm *GetUpper() const { return pUpper; }
+ inline SwTabFrm *FindTabFrm();
+ inline SwFtnFrm *FindFtnFrm();
+ inline SwFlyFrm *FindFlyFrm();
+ inline SwSectionFrm *FindSctFrm();
+ inline SwFrm *FindNext();
+ // --> OD 2005-12-01 #i27138# - add parameter <_bInSameFtn>
+ inline SwCntntFrm* FindNextCnt( const bool _bInSameFtn = false );
+ // <--
+ inline SwFrm *FindPrev();
+ inline const SwPageFrm *FindPageFrm() const;
+ inline const SwRootFrm *FindRootFrm() const;
+ inline const SwFtnBossFrm *FindFtnBossFrm( BOOL bFtn = FALSE ) const;
+ inline const SwFrm *FindColFrm() const;
+ inline const SwFrm *FindFooterOrHeader() const;
+ inline const SwTabFrm *FindTabFrm() const;
+ inline const SwFtnFrm *FindFtnFrm() const;
+ inline const SwFlyFrm *FindFlyFrm() const;
+ inline const SwSectionFrm *FindSctFrm() const;
+ inline const SwFrm *FindNext() const;
+ // --> OD 2005-12-01 #i27138# - add parameter <_bInSameFtn>
+ inline const SwCntntFrm* FindNextCnt( const bool _bInSameFtn = false ) const;
+ // <--
+ inline const SwFrm *FindPrev() const;
+ const SwFrm *GetLower() const;
+
+ /** inline wrapper method for <_FindPrevCnt(..)>
+
+ OD 2005-11-30 #i27138#
+
+ @author OD
+ */
+ inline SwCntntFrm* FindPrevCnt( const bool _bInSameFtn = false )
+ {
+ if ( GetPrev() && GetPrev()->IsCntntFrm() )
+ return (SwCntntFrm*)(GetPrev());
+ else
+ return _FindPrevCnt( _bInSameFtn );
+ }
+
+ /** inline const wrapper method for <_FindPrevCnt(..)>
+
+ OD 2005-11-30 #i27138#
+
+ @author OD
+ */
+ inline const SwCntntFrm* FindPrevCnt( const bool _bInSameFtn = false ) const
+ {
+ if ( GetPrev() && GetPrev()->IsCntntFrm() )
+ return (const SwCntntFrm*)(GetPrev());
+ else
+ return const_cast<SwFrm*>(this)->_FindPrevCnt( _bInSameFtn );
+ }
+
+ // --> OD 2007-09-04 #i79774#, #b6596954#
+ SwFrm* _GetIndPrev() const;
+ SwFrm* GetIndPrev() const
+ { return ( pPrev || !IsInSct() ) ? pPrev : _GetIndPrev(); }
+// const SwFrm* GetIndPrev() const { return ((SwFrm*)this)->GetIndPrev(); }
+ // <--
+ SwFrm* GetIndNext()
+ { return ( pNext || !IsInSct() ) ? pNext : _GetIndNext(); }
+ const SwFrm* GetIndNext() const { return ((SwFrm*)this)->GetIndNext(); }
+
+ USHORT GetPhyPageNum() const; //Seitennummer ohne Offset
+ USHORT GetVirtPageNum() const; //Seitenummer mit Offset
+ BOOL OnRightPage() const { return 0 != GetPhyPageNum() % 2; };
+ BOOL WannaRightPage() const;
+
+
+ inline const SwLayoutFrm *GetPrevLayoutLeaf() const;
+ inline const SwLayoutFrm *GetNextLayoutLeaf() const;
+ inline SwLayoutFrm *GetPrevLayoutLeaf();
+ inline SwLayoutFrm *GetNextLayoutLeaf();
+
+ inline void Calc() const; //Hier wird ggf. 'Formatiert'
+ inline void OptCalc() const; //Hier wird zur Optimierung davon ausgegangen,
+ //das die Vorgaenger bereits formatiert sind.
+
+ inline Point GetRelPos() const;
+ const SwRect &Frm() const { return aFrm; }
+ const SwRect &Prt() const { return aPrt; }
+
+ // The PaintArea is the area, where content may be displayed.
+ // The margin of the page or the space between columns belongs to her.
+ const SwRect PaintArea() const;
+ // The UnionFrm is the union of frm- and prt-area, normally identical
+ // to the frm-area except the case of negative prt-margins.
+ const SwRect UnionFrm( BOOL bBorder = FALSE ) const;
+
+ //Der Zugriff auf die Member wird hier ausnahmsweiste gestattet,
+ //dies soll aber nicht dazu dienen die Werte wahllos zu veraendern;
+ //es ist nur die einzige Moeglichkeit die Compilerprobleme zu umgehen
+ //(gleiche Methode mal public mal protected).
+ SwRect &Frm() { return aFrm; }
+ SwRect &Prt() { return aPrt; }
+
+ virtual Size ChgSize( const Size& aNewSize );
+
+ virtual void Cut() = 0;
+ virtual void Paste( SwFrm* pParent, SwFrm* pSibling = 0 ) = 0;
+
+ void ValidateLineNum() { bValidLineNum = TRUE; }
+
+ BOOL GetValidPosFlag() const { return bValidPos; }
+ BOOL GetValidPrtAreaFlag()const { return bValidPrtArea; }
+ BOOL GetValidSizeFlag() const { return bValidSize; }
+ BOOL GetValidLineNumFlag()const { return bValidLineNum; }
+ BOOL IsValid() const { return bValidPos && bValidSize && bValidPrtArea; }
+
+ //Invalideren nur den Frm
+ // OD 2004-05-19 #i28701# - add call to method <_ActionOnInvalidation(..)>
+ // for all invalidation methods.
+ // OD 2004-05-19 #i28701# - use method <_InvalidationAllowed(..)> to
+ // decide, if invalidation will to be performed or not.
+ // --> OD 2004-10-08 #i26945# - no additional invalidation, if it's already
+ // invalidate.
+ void _InvalidateSize()
+ {
+ if ( bValidSize && _InvalidationAllowed( INVALID_SIZE ) )
+ {
+ bValidSize = FALSE;
+ _ActionOnInvalidation( INVALID_SIZE );
+ }
+ }
+ void _InvalidatePrt()
+ {
+ if ( bValidPrtArea && _InvalidationAllowed( INVALID_PRTAREA ) )
+ {
+ bValidPrtArea = FALSE;
+ _ActionOnInvalidation( INVALID_PRTAREA );
+ }
+ }
+ void _InvalidatePos()
+ {
+ if ( bValidPos && _InvalidationAllowed( INVALID_POS ) )
+ {
+ bValidPos = FALSE;
+ _ActionOnInvalidation( INVALID_POS );
+ }
+ }
+ void _InvalidateLineNum()
+ {
+ if ( bValidLineNum && _InvalidationAllowed( INVALID_LINENUM ) )
+ {
+ bValidLineNum = FALSE;
+ _ActionOnInvalidation( INVALID_LINENUM );
+ }
+ }
+ void _InvalidateAll()
+ {
+ if ( ( bValidSize || bValidPrtArea || bValidPos ) &&
+ _InvalidationAllowed( INVALID_ALL ) )
+ {
+ bValidSize = bValidPrtArea = bValidPos = FALSE;
+ _ActionOnInvalidation( INVALID_ALL );
+ }
+ }
+ // <--
+ //Benachrichtigen gleich die Seite mit.
+ inline void InvalidateSize();
+ inline void InvalidatePrt();
+ inline void InvalidatePos();
+ inline void InvalidateLineNum();
+ inline void InvalidateAll();
+ void ImplInvalidateSize();
+ void ImplInvalidatePrt();
+ void ImplInvalidatePos();
+ void ImplInvalidateLineNum();
+
+ inline void InvalidateNextPos( BOOL bNoFtn = FALSE );
+ void ImplInvalidateNextPos( BOOL bNoFtn = FALSE );
+
+ /** method to invalidate printing area of next frame
+
+ OD 09.01.2004 #i11859#
+
+ @author OD
+ */
+ void InvalidateNextPrtArea();
+
+ void InvalidatePage( const SwPageFrm *pPage = 0 ) const;
+
+ virtual bool FillSelection( SwSelectionList& rList, const SwRect& rRect ) const;
+
+ virtual BOOL GetCrsrOfst( SwPosition *, Point&,
+ SwCrsrMoveState* = 0 ) const;
+ virtual BOOL GetCharRect( SwRect &, const SwPosition&,
+ SwCrsrMoveState* = 0 ) const;
+ virtual void Paint( const SwRect&, const SwPrtOptions *pPrintData = NULL ) const;
+
+ // der "kurze Dienstweg" zwischen den Frames und der Formatierung.
+ // Wer den void* falsch Casted ist selbst schuld!
+ // Auf jedenfall muss der void* auf 0 geprueft werden.
+ virtual void Prepare( const PrepareHint ePrep = PREP_CLEAR,
+ const void *pVoid = 0, BOOL bNotify = TRUE );
+
+ //TRUE wenn's die richtige Klasse ist, FALSE sonst
+ inline BOOL IsLayoutFrm() const;
+ inline BOOL IsRootFrm() const;
+ inline BOOL IsPageFrm() const;
+ inline BOOL IsColumnFrm() const;
+ inline BOOL IsFtnBossFrm() const; // Fussnotenbosse sind PageFrms und ColumnFrms
+ inline BOOL IsHeaderFrm() const;
+ inline BOOL IsFooterFrm() const;
+ inline BOOL IsFtnContFrm() const;
+ inline BOOL IsFtnFrm() const;
+ inline BOOL IsBodyFrm() const;
+ inline BOOL IsColBodyFrm() const; // in layfrm.hxx implementiert, BodyFrm unterhalb ColumnFrm
+ inline BOOL IsPageBodyFrm() const; // in layfrm.hxx implementiert, BodyFrm unterhalb PageFrm
+ inline BOOL IsFlyFrm() const;
+ inline BOOL IsSctFrm() const;
+ inline BOOL IsTabFrm() const;
+ inline BOOL IsRowFrm() const;
+ inline BOOL IsCellFrm() const;
+ inline BOOL IsCntntFrm() const;
+ inline BOOL IsTxtFrm() const;
+ inline BOOL IsNoTxtFrm() const;
+ inline BOOL IsFlowFrm() const; //Frms deren PrtArea von den Nachbarn
+ //abhaengen und die halt im Inhaltsfluss
+ //stehen.
+ inline BOOL IsRetoucheFrm() const; //Frms die Retouchefaehig sind bzw. die
+ //u.U. hinter sich Retouchieren muessen.
+ inline BOOL IsAccessibleFrm() const;
+
+ void PrepareCrsr(); //Die CrsrShell darf.
+
+ //Ist der Frm (bzw. die Section in der er steht) geschuetzt?
+ //Auch Fly in Fly in ... und Fussnoten
+ BOOL IsProtected() const;
+
+ BOOL IsColLocked() const { return bColLocked; }
+
+ virtual ~SwFrm();
+
+ // No inline cause we need the function pointers
+ long GetTopMargin() const;
+ long GetBottomMargin() const;
+ long GetLeftMargin() const;
+ long GetRightMargin() const;
+ void SetTopBottomMargins( long, long );
+ void SetBottomTopMargins( long, long );
+ void SetLeftRightMargins( long, long );
+ void SetRightLeftMargins( long, long );
+ void SetLeftAndWidth( long nLeft, long nWidth );
+ void SetTopAndHeight( long nTop, long nHeight );
+ void SetRightAndWidth( long nRight, long nWidth );
+ void SetBottomAndHeight( long nBottom, long nHeight );
+ long GetPrtLeft() const;
+ long GetPrtBottom() const;
+ long GetPrtRight() const;
+ long GetPrtTop() const;
+ BOOL SetMinLeft( long );
+ BOOL SetMaxBottom( long );
+ BOOL SetMaxRight( long );
+ BOOL SetMinTop( long );
+ void MakeBelowPos( const SwFrm*, const SwFrm*, BOOL );
+ void MakeUpperPos( const SwFrm*, const SwFrm*, BOOL );
+ void MakeLeftPos( const SwFrm*, const SwFrm*, BOOL );
+ void MakeRightPos( const SwFrm*, const SwFrm*, BOOL );
+ inline BOOL IsNeighbourFrm() const
+ { return GetType() & FRM_NEIGHBOUR ? TRUE : FALSE; }
+
+ // --> OD 2006-05-10 #i65250#
+ inline sal_uInt32 GetFrmId() const { return mnFrmId; }
+ inline sal_uInt32 GetLastFrmId() const { return mnLastFrmId; }
+ // <--
+
+ // NEW TABELS
+ // Some functions for covered/covering table cells. This way unnessessary
+ // includes can be avoided
+ bool IsLeaveUpperAllowed() const;
+ bool IsCoveredCell() const;
+ bool IsInCoveredCell() const;
+
+ // FME 2007-08-30 #i81146# new loop control
+ void ValidateThisAndAllLowers( const USHORT nStage );
+};
+
+inline BOOL SwFrm::IsInDocBody() const
+{
+ if ( bInfInvalid )
+ ((SwFrm*)this)->SetInfFlags();
+ return bInfBody;
+}
+inline BOOL SwFrm::IsInFtn() const
+{
+ if ( bInfInvalid )
+ ((SwFrm*)this)->SetInfFlags();
+ return bInfFtn;
+}
+inline BOOL SwFrm::IsInTab() const
+{
+ if ( bInfInvalid )
+ ((SwFrm*)this)->SetInfFlags();
+ return bInfTab;
+}
+inline BOOL SwFrm::IsInFly() const
+{
+ if ( bInfInvalid )
+ ((SwFrm*)this)->SetInfFlags();
+ return bInfFly;
+}
+inline BOOL SwFrm::IsInSct() const
+{
+ if ( bInfInvalid )
+ ((SwFrm*)this)->SetInfFlags();
+ return bInfSct;
+}
+BOOL SwFrm::IsVertical() const
+{
+ if( bInvalidVert )
+ ((SwFrm*)this)->SetDirFlags( TRUE );
+ return bVertical != 0;
+}
+BOOL SwFrm::GetVerticalFlag() const
+{
+ return bVertical != 0;
+}
+inline BOOL SwFrm::IsRightToLeft() const
+{
+ if( bInvalidR2L )
+ ((SwFrm*)this)->SetDirFlags( FALSE );
+ return bRightToLeft != 0;
+}
+BOOL SwFrm::GetRightToLeftFlag() const
+{
+ return bRightToLeft != 0;
+}
+
+inline void SwFrm::SetCompletePaint() const
+{
+ ((SwFrm*)this)->bCompletePaint = TRUE;
+}
+inline void SwFrm::ResetCompletePaint() const
+{
+ ((SwFrm*)this)->bCompletePaint = FALSE;
+}
+
+inline void SwFrm::SetRetouche() const
+{
+ ((SwFrm*)this)->bRetouche = TRUE;
+}
+inline void SwFrm::ResetRetouche() const
+{
+ ((SwFrm*)this)->bRetouche = FALSE;
+}
+
+inline SwLayoutFrm *SwFrm::GetNextLayoutLeaf()
+{
+ return (SwLayoutFrm*)((const SwFrm*)this)->GetNextLayoutLeaf();
+}
+
+inline SwLayoutFrm *SwFrm::GetPrevLayoutLeaf()
+{
+ return (SwLayoutFrm*)((const SwFrm*)this)->GetPrevLayoutLeaf();
+}
+
+inline const SwLayoutFrm *SwFrm::GetNextLayoutLeaf() const
+{
+ return ImplGetNextLayoutLeaf( true );
+}
+
+inline const SwLayoutFrm *SwFrm::GetPrevLayoutLeaf() const
+{
+ return ImplGetNextLayoutLeaf( false );
+}
+
+inline void SwFrm::InvalidateSize()
+{
+ if ( bValidSize )
+ ImplInvalidateSize();
+}
+inline void SwFrm::InvalidatePrt()
+{
+ if ( bValidPrtArea )
+ ImplInvalidatePrt();
+}
+inline void SwFrm::InvalidatePos()
+{
+ if ( bValidPos )
+ ImplInvalidatePos();
+}
+inline void SwFrm::InvalidateLineNum()
+{
+ if ( bValidLineNum )
+ ImplInvalidateLineNum();
+}
+
+inline void SwFrm::InvalidateAll()
+{
+ if ( _InvalidationAllowed( INVALID_ALL ) )
+ {
+ if ( bValidPrtArea && bValidSize && bValidPos )
+ ImplInvalidatePos();
+ bValidPrtArea = bValidSize = bValidPos = FALSE;
+
+ // OD 2004-05-19 #i28701#
+ _ActionOnInvalidation( INVALID_ALL );
+ }
+}
+
+inline void SwFrm::InvalidateNextPos( BOOL bNoFtn )
+{
+ if ( pNext && !pNext->IsSctFrm() )
+ pNext->InvalidatePos();
+#ifndef C30 // vielleicht geht es ja bei C40 ?
+ else
+ ImplInvalidateNextPos( bNoFtn );
+#else
+ if ( !pNext )
+ ImplInvalidateNextPos( bNoFtn );
+#endif
+}
+
+inline void SwFrm::Calc() const
+{
+ if ( !bValidPos || !bValidPrtArea || !bValidSize )
+ ((SwFrm*)this)->PrepareMake();
+}
+inline void SwFrm::OptCalc() const
+{
+ if ( !bValidPos || !bValidPrtArea || !bValidSize )
+ ((SwFrm*)this)->OptPrepareMake();
+}
+
+inline Point SwFrm::GetRelPos() const
+{
+ Point aRet( aFrm.Pos() );
+ //hier wird gecasted, weil die Klasse SwLayoutFrm nur vorward-
+ //declariert ist.
+ aRet -= ((SwFrm*)GetUpper())->Prt().Pos();
+ aRet -= ((SwFrm*)GetUpper())->Frm().Pos();
+ return aRet;
+}
+
+inline const SwPageFrm *SwFrm::FindPageFrm() const
+{
+ return ((SwFrm*)this)->FindPageFrm();
+}
+inline const SwRootFrm *SwFrm::FindRootFrm() const
+{
+ return ((SwFrm*)this)->FindRootFrm();
+}
+inline const SwFrm *SwFrm::FindColFrm() const
+{
+ return ((SwFrm*)this)->FindColFrm();
+}
+inline const SwFrm *SwFrm::FindFooterOrHeader() const
+{
+ return ((SwFrm*)this)->FindFooterOrHeader();
+}
+inline SwTabFrm *SwFrm::FindTabFrm()
+{
+ return IsInTab() ? ImplFindTabFrm() : 0;
+}
+inline const SwFtnBossFrm *SwFrm::FindFtnBossFrm( BOOL bFtn ) const
+{
+ return ((SwFrm*)this)->FindFtnBossFrm( bFtn );
+}
+inline SwFtnFrm *SwFrm::FindFtnFrm()
+{
+ return IsInFtn() ? ImplFindFtnFrm() : 0;
+}
+inline SwFlyFrm *SwFrm::FindFlyFrm()
+{
+ return IsInFly() ? ImplFindFlyFrm() : 0;
+}
+inline SwSectionFrm *SwFrm::FindSctFrm()
+{
+ return IsInSct() ? ImplFindSctFrm() : 0;
+}
+
+inline const SwTabFrm *SwFrm::FindTabFrm() const
+{
+ return IsInTab() ? ((SwFrm*)this)->ImplFindTabFrm() : 0;
+}
+inline const SwFtnFrm *SwFrm::FindFtnFrm() const
+{
+ return IsInFtn() ? ((SwFrm*)this)->ImplFindFtnFrm() : 0;
+}
+inline const SwFlyFrm *SwFrm::FindFlyFrm() const
+{
+ return IsInFly() ? ((SwFrm*)this)->ImplFindFlyFrm() : 0;
+}
+inline const SwSectionFrm *SwFrm::FindSctFrm() const
+{
+ return IsInSct() ? ((SwFrm*)this)->ImplFindSctFrm() : 0;
+}
+inline SwFrm *SwFrm::FindNext()
+{
+ if ( pNext )
+ return pNext;
+ else
+ return _FindNext();
+}
+inline const SwFrm *SwFrm::FindNext() const
+{
+ if ( pNext )
+ return pNext;
+ else
+ return ((SwFrm*)this)->_FindNext();
+}
+// --> OD 2005-12-01 #i27138# - add parameter <_bInSameFtn>
+inline SwCntntFrm *SwFrm::FindNextCnt( const bool _bInSameFtn )
+{
+ if ( pNext && pNext->IsCntntFrm() )
+ return (SwCntntFrm*)pNext;
+ else
+ return _FindNextCnt( _bInSameFtn );
+}
+// <--
+// --> OD 2005-12-01 #i27138# - add parameter <_bInSameFtn>
+inline const SwCntntFrm *SwFrm::FindNextCnt( const bool _bInSameFtn ) const
+{
+ if ( pNext && pNext->IsCntntFrm() )
+ return (SwCntntFrm*)pNext;
+ else
+ return ((SwFrm*)this)->_FindNextCnt( _bInSameFtn );
+}
+// <--
+inline SwFrm *SwFrm::FindPrev()
+{
+ if ( pPrev && !pPrev->IsSctFrm() )
+ return pPrev;
+ else
+ return _FindPrev();
+}
+inline const SwFrm *SwFrm::FindPrev() const
+{
+ if ( pPrev && !pPrev->IsSctFrm() )
+ return pPrev;
+ else
+ return ((SwFrm*)this)->_FindPrev();
+}
+
+
+inline BOOL SwFrm::IsLayoutFrm() const
+{
+ return GetType() & FRM_LAYOUT ? TRUE : FALSE;
+}
+inline BOOL SwFrm::IsRootFrm() const
+{
+ return nType == FRMC_ROOT;
+}
+inline BOOL SwFrm::IsPageFrm() const
+{
+ return nType == FRMC_PAGE;
+}
+inline BOOL SwFrm::IsColumnFrm() const
+{
+ return nType == FRMC_COLUMN;
+}
+inline BOOL SwFrm::IsFtnBossFrm() const
+{
+ return GetType() & FRM_FTNBOSS ? TRUE : FALSE;
+}
+inline BOOL SwFrm::IsHeaderFrm() const
+{
+ return nType == FRMC_HEADER;
+}
+inline BOOL SwFrm::IsFooterFrm() const
+{
+ return nType == FRMC_FOOTER;
+}
+inline BOOL SwFrm::IsFtnContFrm() const
+{
+ return nType == FRMC_FTNCONT;
+}
+inline BOOL SwFrm::IsFtnFrm() const
+{
+ return nType == FRMC_FTN;
+}
+inline BOOL SwFrm::IsBodyFrm() const
+{
+ return nType == FRMC_BODY;
+}
+inline BOOL SwFrm::IsFlyFrm() const
+{
+ return nType == FRMC_FLY;
+}
+inline BOOL SwFrm::IsSctFrm() const
+{
+ return nType == FRMC_SECTION;
+}
+inline BOOL SwFrm::IsTabFrm() const
+{
+ return nType == FRMC_TAB;
+}
+inline BOOL SwFrm::IsRowFrm() const
+{
+ return nType == FRMC_ROW;
+}
+inline BOOL SwFrm::IsCellFrm() const
+{
+ return nType == FRMC_CELL;
+}
+inline BOOL SwFrm::IsCntntFrm() const
+{
+ return GetType() & FRM_CNTNT ? TRUE : FALSE;
+}
+inline BOOL SwFrm::IsTxtFrm() const
+{
+ return nType == FRMC_TXT;
+}
+inline BOOL SwFrm::IsNoTxtFrm() const
+{
+ return nType == FRMC_NOTXT;
+}
+inline BOOL SwFrm::IsFlowFrm() const
+{
+ return GetType() & 0xCA00 ? TRUE : FALSE; //TabFrm, CntntFrm, SectionFrm
+}
+inline BOOL SwFrm::IsRetoucheFrm() const
+{
+ return GetType() & 0xCA40 ? TRUE : FALSE; //TabFrm, CntntFrm, SectionFrm, Ftnfrm
+}
+inline BOOL SwFrm::IsAccessibleFrm() const
+{
+ return GetType() & FRM_ACCESSIBLE ? TRUE : FALSE;
+}
+#endif