blob: 4b89c2a80af717e82d6019328e7162c5beb6252b [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef SW_FRAME_HXX
#define SW_FRAME_HXX
#include <svl/svarray.hxx>
#include "swtypes.hxx" // fuer SwTwips
#include "swrect.hxx"
#include "calbck.hxx" // fuer SwClient
#include <svl/brdcst.hxx>
#include <com/sun/star/style/TabStop.hpp>
#include <comphelper/stlunosequence.hxx>
using namespace ::com::sun::star;
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 SwFmt;
class SwPrintData;
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 sal_Bool (SwFrm:: *SwFrmMax)( long );
typedef void (SwFrm:: *SwFrmMakePos)( const SwFrm*, const SwFrm*, sal_Bool );
typedef long (*SwOperator)( long, long );
typedef void (SwFrm:: *SwFrmSet)( long, long );
SwFrm* SaveCntnt( SwLayoutFrm*, SwFrm* pStart = NULL );
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;
*/
//Badaa: 2008-04-18 * Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
extern SwRectFn fnRectHori, fnRectVert, fnRectB2T, fnRectVL2R, fnRectVertL2R;
#define SWRECTFN( pFrm ) sal_Bool bVert = pFrm->IsVertical(); \
sal_Bool bRev = pFrm->IsReverse(); \
sal_Bool bVertL2R = pFrm->IsVertLR(); \
SwRectFn fnRect = bVert ? \
( bRev ? fnRectVL2R : ( bVertL2R ? fnRectVertL2R : fnRectVert ) ): \
( bRev ? fnRectB2T : fnRectHori );
#define SWRECTFNX( pFrm ) sal_Bool bVertX = pFrm->IsVertical(); \
sal_Bool bRevX = pFrm->IsReverse(); \
sal_Bool bVertL2RX = pFrm->IsVertLR(); \
SwRectFn fnRectX = bVertX ? \
( bRevX ? fnRectVL2R : ( bVertL2RX ? fnRectVertL2R : fnRectVert ) ): \
( bRevX ? fnRectB2T : fnRectHori );
#define SWREFRESHFN( pFrm ) { if( bVert != pFrm->IsVertical() || \
bRev != pFrm->IsReverse() ) \
bVert = pFrm->IsVertical(); \
bRev = pFrm->IsReverse(); \
bVertL2R = pFrm->IsVertLR(); \
fnRect = bVert ? \
( bRev ? fnRectVL2R : ( bVertL2R ? fnRectVertL2R : fnRectVert ) ): \
( bRev ? fnRectB2T : fnRectHori ); }
#define SWRECTFN2( pFrm ) sal_Bool bVert = pFrm->IsVertical(); \
sal_Bool bVertL2R = pFrm->IsVertLR(); \
sal_Bool bNeighb = pFrm->IsNeighbourFrm(); \
SwRectFn fnRect = bVert == bNeighb ? \
fnRectHori : ( bVertL2R ? fnRectVertL2R : fnRectVert );
//End of SCMS
#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, public SfxBroadcaster
{
//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 );
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;
//Solution:Member to identify if acc table should be disposed
sal_Bool bIfAccTableShouldDisposing;
// --> 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;
// <--
SwRootFrm *mpRoot;
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( const SfxPoolItem*, const SfxPoolItem*, sal_uInt8 & );
SwFrm* _GetIndNext();
void SetDirFlags( sal_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
sal_uInt16 bFlag01: 1;
sal_uInt16 bFlag02: 1;
sal_uInt16 bFlag03: 1;
sal_uInt16 bFlag04: 1;
sal_uInt16 bFlag05: 1;
sal_uInt16 bReverse: 1; // Next line above/at the right side instead
// under/at the left side of the previous line.
sal_uInt16 bInvalidR2L: 1;
sal_uInt16 bDerivedR2L: 1;
sal_uInt16 bRightToLeft: 1;
sal_uInt16 bInvalidVert: 1;
sal_uInt16 bDerivedVert: 1;
sal_uInt16 bVertical: 1;
//Badaa: 2008-04-18 * Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
sal_uInt16 bVertLR: 1;
//End of SCMS
sal_uInt16 nType: 4; //Who am I?
sal_Bool bValidPos: 1;
sal_Bool bValidPrtArea: 1;
sal_Bool bValidSize: 1;
sal_Bool bValidLineNum: 1;
sal_Bool bFixSize: 1;
sal_Bool bUnUsed1: 1;
sal_Bool bCompletePaint: 1; //Frame wird ganz gepaintet wenn sal_True, auch
//wenn der Inhalt nur teilw. veraendert ist;
//Bei CntntFrms wird ausschliesslich wenn sal_True
//der Border (von Action) gemalt.
sal_Bool bRetouche: 1; //Der Frame ist fuer Retusche verantwortlich
//wenn sal_True.
public:
virtual uno::Sequence< style::TabStop > GetTabStopInfo( SwTwips )
{
return uno::Sequence< style::TabStop >();
}
sal_Bool bUnUsed2: 1;
protected:
sal_Bool bInfInvalid: 1; //InfoFlags sind Invalid.
sal_Bool bInfBody: 1; //Frm steht im DokumentBody.
sal_Bool bInfTab: 1; //Frm steht in einer Tabelle.
sal_Bool bInfFly: 1; //Frm steht in einem Fly.
sal_Bool bInfFtn: 1; //Frm steht in einer Fussnote.
sal_Bool bInfSct: 1; //Frm steht in einem Bereich.
sal_Bool bColLocked: 1; //Grow/Shrink sperren bei spaltigen Section-
//oder Fly-Frames, wird im Format gesetzt
void ColLock() { bColLocked = sal_True; }
void ColUnlock() { bColLocked = sal_False; }
// Only used by SwRootFrm Ctor to get 'this' into mpRoot...
void setRootFrm( SwRootFrm* pRoot ) { mpRoot = pRoot; }
SwPageFrm *InsertPage( SwPageFrm *pSibling, sal_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, sal_Bool bTst = sal_False );
//Aendern nur die Framesize, nicht die PrtArea-SSize
virtual SwTwips ShrinkFrm( SwTwips, sal_Bool bTst = sal_False, sal_Bool bInfo = sal_False ) = 0;
virtual SwTwips GrowFrm ( SwTwips, sal_Bool bTst = sal_False, sal_Bool bInfo = sal_False ) = 0;
SwModify *GetDep() { return GetRegisteredInNonConst(); }
const SwModify *GetDep() const { return GetRegisteredIn(); }
SwFrm( SwModify*, SwFrm* );
void CheckDir( sal_uInt16 nDir, sal_Bool bVert, sal_Bool bOnlyBiDi, sal_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 <sal_False>.
@author OD
*/
virtual void _ActionOnInvalidation( const InvalidationType _nInvalid );
//Schatten und Umrandung painten
void PaintShadow( const SwRect&, SwRect&, const SwBorderAttrs& ) const;
virtual void Modify( const SfxPoolItem*, const SfxPoolItem* );
public:
TYPEINFO(); //Bereits in Basisklasse Client drin.
sal_uInt16 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, sal_Bool bTst = sal_False, sal_Bool bInfo = sal_False );
SwTwips Grow ( SwTwips, sal_Bool bTst = sal_False, sal_Bool bInfo = sal_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, sal_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, sal_Bool bFwd,
const SwFrm *pAnch ) const;
sal_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 sal_Bool bLowerBorder = sal_False ) const;
void PaintBackground( const SwRect&, const SwPageFrm *pPage,
const SwBorderAttrs &,
const sal_Bool bLowerMode = sal_False,
const sal_Bool bLowerBorder = sal_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;
sal_Bool GetBackgroundBrush( const SvxBrushItem*& rpBrush,
const Color*& rpColor,
SwRect &rOrigRect,
sal_Bool bLowerMode ) const;
inline void SetCompletePaint() const;
inline void ResetCompletePaint() const;
inline sal_Bool IsCompletePaint() const { return bCompletePaint; }
inline void SetRetouche() const;
inline void ResetRetouche() const;
inline sal_Bool IsRetouche() const { return bRetouche; }
void SetInfFlags(); //Setzen der InfoFlags
inline void InvalidateInfFlags() { bInfInvalid = sal_True; }
inline sal_Bool IsInDocBody() const; //Benutzen die InfoFlags.
inline sal_Bool IsInFtn() const; //ggf. werden die Flags ermittelt.
inline sal_Bool IsInTab() const;
inline sal_Bool IsInFly() const;
inline sal_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 sal_Bool IsReverse() const { return bReverse; }
inline void SetReverse( sal_Bool bNew ){ bReverse = bNew ? 1 : 0; }
inline sal_Bool IsVertical() const;
//Badaa: 2008-04-18 * Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
inline sal_Bool IsVertLR() const;
//End of SCMS
inline sal_Bool GetVerticalFlag() const;
inline void SetVertical( sal_Bool bNew ){ bVertical = bNew ? 1 : 0; }
//Badaa: 2008-04-18 * Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
inline void SetbVertLR( sal_Bool bNew ) { bVertLR = bNew ? 1 : 0; }
//End of SCMS
inline void SetDerivedVert( sal_Bool bNew ){ bDerivedVert = bNew ? 1 : 0; }
inline void SetInvalidVert( sal_Bool bNew) { bInvalidVert = bNew ? 1 : 0; }
inline sal_Bool IsRightToLeft() const;
inline sal_Bool GetRightToLeftFlag() const;
inline void SetRightToLeft( sal_Bool bNew ){ bRightToLeft = bNew ? 1 : 0; }
inline void SetDerivedR2L( sal_Bool bNew ) { bDerivedR2L = bNew ? 1 : 0; }
inline void SetInvalidR2L( sal_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 <sal_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
*/
// sal_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).
sal_Bool IsFtnAllowed() const;
virtual void Format( const SwBorderAttrs *pAttrs = 0 );
virtual void CheckDirection( sal_Bool bVert );
void ReinitializeFrmSizeAttrFlags();
const SwAttrSet *GetAttrSet() const;
inline sal_Bool HasFixSize() const { return bFixSize; }
inline void SetFixSize( sal_Bool bNew ) { bFixSize = bNew; }
//Prueft alle Seiten ab der Uebergebenen und korrigiert ggf.
static void CheckPageDescs( SwPageFrm *pStart, sal_Bool bNotifyFields = sal_True );
//Koennen 0 liefern, einmal const einmal nicht
SwFrm *GetNext() { return pNext; }
SwFrm *GetPrev() { return pPrev; }
SwLayoutFrm *GetUpper() { return pUpper; }
SwRootFrm *getRootFrm(){ return mpRoot; }
SwPageFrm *FindPageFrm();
SwFrm *FindColFrm();
SwFtnBossFrm *FindFtnBossFrm( sal_Bool bFootnotes = sal_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; }
const SwRootFrm *getRootFrm() const { return mpRoot; }
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 SwFtnBossFrm *FindFtnBossFrm( sal_Bool bFtn = sal_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(); }
sal_uInt16 GetPhyPageNum() const; //Seitennummer ohne Offset
sal_uInt16 GetVirtPageNum() const; //Seitenummer mit Offset
sal_Bool OnRightPage() const { return 0 != GetPhyPageNum() % 2; };
sal_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( sal_Bool bBorder = sal_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;
//Solution:Add a method to change the acc table dispose state.
void SetAccTableDispose( sal_Bool bDispose){ bIfAccTableShouldDisposing = bDispose;}
virtual void Paste( SwFrm* pParent, SwFrm* pSibling = 0 ) = 0;
void ValidateLineNum() { bValidLineNum = sal_True; }
sal_Bool GetValidPosFlag() const { return bValidPos; }
sal_Bool GetValidPrtAreaFlag()const { return bValidPrtArea; }
sal_Bool GetValidSizeFlag() const { return bValidSize; }
sal_Bool GetValidLineNumFlag()const { return bValidLineNum; }
sal_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 = sal_False;
_ActionOnInvalidation( INVALID_SIZE );
}
}
void _InvalidatePrt()
{
if ( bValidPrtArea && _InvalidationAllowed( INVALID_PRTAREA ) )
{
bValidPrtArea = sal_False;
_ActionOnInvalidation( INVALID_PRTAREA );
}
}
void _InvalidatePos()
{
if ( bValidPos && _InvalidationAllowed( INVALID_POS ) )
{
bValidPos = sal_False;
_ActionOnInvalidation( INVALID_POS );
}
}
void _InvalidateLineNum()
{
if ( bValidLineNum && _InvalidationAllowed( INVALID_LINENUM ) )
{
bValidLineNum = sal_False;
_ActionOnInvalidation( INVALID_LINENUM );
}
}
void _InvalidateAll()
{
if ( ( bValidSize || bValidPrtArea || bValidPos ) &&
_InvalidationAllowed( INVALID_ALL ) )
{
bValidSize = bValidPrtArea = bValidPos = sal_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( sal_Bool bNoFtn = sal_False );
void ImplInvalidateNextPos( sal_Bool bNoFtn = sal_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 sal_Bool GetCrsrOfst( SwPosition *, Point&,
SwCrsrMoveState* = 0 ) const;
virtual sal_Bool GetCharRect( SwRect &, const SwPosition&,
SwCrsrMoveState* = 0 ) const;
virtual void Paint( SwRect const&,
SwPrintData const*const 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, sal_Bool bNotify = sal_True );
//sal_True wenn's die richtige Klasse ist, sal_False sonst
inline sal_Bool IsLayoutFrm() const;
inline sal_Bool IsRootFrm() const;
inline sal_Bool IsPageFrm() const;
inline sal_Bool IsColumnFrm() const;
inline sal_Bool IsFtnBossFrm() const; // Fussnotenbosse sind PageFrms und ColumnFrms
inline sal_Bool IsHeaderFrm() const;
inline sal_Bool IsFooterFrm() const;
inline sal_Bool IsFtnContFrm() const;
inline sal_Bool IsFtnFrm() const;
inline sal_Bool IsBodyFrm() const;
inline sal_Bool IsColBodyFrm() const; // in layfrm.hxx implementiert, BodyFrm unterhalb ColumnFrm
inline sal_Bool IsPageBodyFrm() const; // in layfrm.hxx implementiert, BodyFrm unterhalb PageFrm
inline sal_Bool IsFlyFrm() const;
inline sal_Bool IsSctFrm() const;
inline sal_Bool IsTabFrm() const;
inline sal_Bool IsRowFrm() const;
inline sal_Bool IsCellFrm() const;
inline sal_Bool IsCntntFrm() const;
inline sal_Bool IsTxtFrm() const;
inline sal_Bool IsNoTxtFrm() const;
inline sal_Bool IsFlowFrm() const; //Frms deren PrtArea von den Nachbarn
//abhaengen und die halt im Inhaltsfluss
//stehen.
inline sal_Bool IsRetoucheFrm() const; //Frms die Retouchefaehig sind bzw. die
//u.U. hinter sich Retouchieren muessen.
inline sal_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
sal_Bool IsProtected() const;
sal_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;
sal_Bool SetMinLeft( long );
sal_Bool SetMaxBottom( long );
sal_Bool SetMaxRight( long );
sal_Bool SetMinTop( long );
void MakeBelowPos( const SwFrm*, const SwFrm*, sal_Bool );
void MakeUpperPos( const SwFrm*, const SwFrm*, sal_Bool );
void MakeLeftPos( const SwFrm*, const SwFrm*, sal_Bool );
void MakeRightPos( const SwFrm*, const SwFrm*, sal_Bool );
inline sal_Bool IsNeighbourFrm() const
{ return GetType() & FRM_NEIGHBOUR ? sal_True : sal_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
bool KnowsFormat( const SwFmt& rFmt ) const;
void RegisterToFormat( SwFmt& rFmt );
void ValidateThisAndAllLowers( const sal_uInt16 nStage );
};
inline sal_Bool SwFrm::IsInDocBody() const
{
if ( bInfInvalid )
((SwFrm*)this)->SetInfFlags();
return bInfBody;
}
inline sal_Bool SwFrm::IsInFtn() const
{
if ( bInfInvalid )
((SwFrm*)this)->SetInfFlags();
return bInfFtn;
}
inline sal_Bool SwFrm::IsInTab() const
{
if ( bInfInvalid )
((SwFrm*)this)->SetInfFlags();
return bInfTab;
}
inline sal_Bool SwFrm::IsInFly() const
{
if ( bInfInvalid )
((SwFrm*)this)->SetInfFlags();
return bInfFly;
}
inline sal_Bool SwFrm::IsInSct() const
{
if ( bInfInvalid )
((SwFrm*)this)->SetInfFlags();
return bInfSct;
}
sal_Bool SwFrm::IsVertical() const
{
if( bInvalidVert )
((SwFrm*)this)->SetDirFlags( sal_True );
return bVertical != 0;
}
//Badaa: 2008-04-18 * Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
inline sal_Bool SwFrm::IsVertLR() const
{
return bVertLR != 0;
}
//End of SCMS
sal_Bool SwFrm::GetVerticalFlag() const
{
return bVertical != 0;
}
inline sal_Bool SwFrm::IsRightToLeft() const
{
if( bInvalidR2L )
((SwFrm*)this)->SetDirFlags( sal_False );
return bRightToLeft != 0;
}
sal_Bool SwFrm::GetRightToLeftFlag() const
{
return bRightToLeft != 0;
}
inline void SwFrm::SetCompletePaint() const
{
((SwFrm*)this)->bCompletePaint = sal_True;
}
inline void SwFrm::ResetCompletePaint() const
{
((SwFrm*)this)->bCompletePaint = sal_False;
}
inline void SwFrm::SetRetouche() const
{
((SwFrm*)this)->bRetouche = sal_True;
}
inline void SwFrm::ResetRetouche() const
{
((SwFrm*)this)->bRetouche = sal_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 = sal_False;
// OD 2004-05-19 #i28701#
_ActionOnInvalidation( INVALID_ALL );
}
}
inline void SwFrm::InvalidateNextPos( sal_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 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( sal_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 sal_Bool SwFrm::IsLayoutFrm() const
{
return GetType() & FRM_LAYOUT ? sal_True : sal_False;
}
inline sal_Bool SwFrm::IsRootFrm() const
{
return nType == FRMC_ROOT;
}
inline sal_Bool SwFrm::IsPageFrm() const
{
return nType == FRMC_PAGE;
}
inline sal_Bool SwFrm::IsColumnFrm() const
{
return nType == FRMC_COLUMN;
}
inline sal_Bool SwFrm::IsFtnBossFrm() const
{
return GetType() & FRM_FTNBOSS ? sal_True : sal_False;
}
inline sal_Bool SwFrm::IsHeaderFrm() const
{
return nType == FRMC_HEADER;
}
inline sal_Bool SwFrm::IsFooterFrm() const
{
return nType == FRMC_FOOTER;
}
inline sal_Bool SwFrm::IsFtnContFrm() const
{
return nType == FRMC_FTNCONT;
}
inline sal_Bool SwFrm::IsFtnFrm() const
{
return nType == FRMC_FTN;
}
inline sal_Bool SwFrm::IsBodyFrm() const
{
return nType == FRMC_BODY;
}
inline sal_Bool SwFrm::IsFlyFrm() const
{
return nType == FRMC_FLY;
}
inline sal_Bool SwFrm::IsSctFrm() const
{
return nType == FRMC_SECTION;
}
inline sal_Bool SwFrm::IsTabFrm() const
{
return nType == FRMC_TAB;
}
inline sal_Bool SwFrm::IsRowFrm() const
{
return nType == FRMC_ROW;
}
inline sal_Bool SwFrm::IsCellFrm() const
{
return nType == FRMC_CELL;
}
inline sal_Bool SwFrm::IsCntntFrm() const
{
return GetType() & FRM_CNTNT ? sal_True : sal_False;
}
inline sal_Bool SwFrm::IsTxtFrm() const
{
return nType == FRMC_TXT;
}
inline sal_Bool SwFrm::IsNoTxtFrm() const
{
return nType == FRMC_NOTXT;
}
inline sal_Bool SwFrm::IsFlowFrm() const
{
return GetType() & 0xCA00 ? sal_True : sal_False; //TabFrm, CntntFrm, SectionFrm
}
inline sal_Bool SwFrm::IsRetoucheFrm() const
{
return GetType() & 0xCA40 ? sal_True : sal_False; //TabFrm, CntntFrm, SectionFrm, Ftnfrm
}
inline sal_Bool SwFrm::IsAccessibleFrm() const
{
return GetType() & FRM_ACCESSIBLE ? sal_True : sal_False;
}
#endif