xref: /aoo4110/main/sw/source/core/inc/frame.hxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski #ifndef SW_FRAME_HXX
24*b1cdbd2cSJim Jagielski #define SW_FRAME_HXX
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include <svl/svarray.hxx>
27*b1cdbd2cSJim Jagielski #include "swtypes.hxx"	// fuer SwTwips
28*b1cdbd2cSJim Jagielski #include "swrect.hxx"
29*b1cdbd2cSJim Jagielski #include "calbck.hxx"	// fuer SwClient
30*b1cdbd2cSJim Jagielski #include <svl/brdcst.hxx>
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski #include <com/sun/star/style/TabStop.hpp>
33*b1cdbd2cSJim Jagielski #include <comphelper/stlunosequence.hxx>
34*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
35*b1cdbd2cSJim Jagielski class SwLayoutFrm;
36*b1cdbd2cSJim Jagielski class SwRootFrm;
37*b1cdbd2cSJim Jagielski class SwPageFrm;
38*b1cdbd2cSJim Jagielski class SwFlyFrm;
39*b1cdbd2cSJim Jagielski class SwSectionFrm;
40*b1cdbd2cSJim Jagielski class SdrObject;
41*b1cdbd2cSJim Jagielski class SwFtnFrm;
42*b1cdbd2cSJim Jagielski class SwFtnBossFrm;
43*b1cdbd2cSJim Jagielski class SwTabFrm;
44*b1cdbd2cSJim Jagielski class SwRowFrm;
45*b1cdbd2cSJim Jagielski class SwFlowFrm;
46*b1cdbd2cSJim Jagielski class SwCntntFrm;
47*b1cdbd2cSJim Jagielski class SfxPoolItem;
48*b1cdbd2cSJim Jagielski class SwAttrSet;
49*b1cdbd2cSJim Jagielski class ViewShell;
50*b1cdbd2cSJim Jagielski class Color;
51*b1cdbd2cSJim Jagielski class SwBorderAttrs;
52*b1cdbd2cSJim Jagielski class SwCache;
53*b1cdbd2cSJim Jagielski class SvxBrushItem;
54*b1cdbd2cSJim Jagielski class SwSelectionList;
55*b1cdbd2cSJim Jagielski struct SwPosition;
56*b1cdbd2cSJim Jagielski struct SwCrsrMoveState;
57*b1cdbd2cSJim Jagielski class SwFmt;
58*b1cdbd2cSJim Jagielski class SwPrintData;
59*b1cdbd2cSJim Jagielski class SwSortedObjs;
60*b1cdbd2cSJim Jagielski class SwAnchoredObject;
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski //Jeder FrmTyp findet sich hier in einem Bit wieder.
63*b1cdbd2cSJim Jagielski //Die Bits muessen so gesetzt werden, dass mit einer Maskierung festgestellt
64*b1cdbd2cSJim Jagielski //werden kann was fuer ein FrmTyp eine Instanz ist _und_ von welchen Klassen
65*b1cdbd2cSJim Jagielski //sie abgeleitet ist.
66*b1cdbd2cSJim Jagielski //Der Frm hat in der Basisklasse einen Member der von den CToren der
67*b1cdbd2cSJim Jagielski //einzelnen Frms entsprechend gesetzt werden muss.
68*b1cdbd2cSJim Jagielski #define	FRM_ROOT		0x0001
69*b1cdbd2cSJim Jagielski #define	FRM_PAGE		0x0002
70*b1cdbd2cSJim Jagielski #define	FRM_COLUMN		0x0004
71*b1cdbd2cSJim Jagielski #define	FRM_HEADER		0x0008
72*b1cdbd2cSJim Jagielski #define FRM_FOOTER		0x0010
73*b1cdbd2cSJim Jagielski #define	FRM_FTNCONT		0x0020
74*b1cdbd2cSJim Jagielski #define	FRM_FTN			0x0040
75*b1cdbd2cSJim Jagielski #define	FRM_BODY		0x0080
76*b1cdbd2cSJim Jagielski #define	FRM_FLY     	0x0100
77*b1cdbd2cSJim Jagielski #define	FRM_SECTION  	0x0200
78*b1cdbd2cSJim Jagielski #define	FRM_UNUSED    	0x0400
79*b1cdbd2cSJim Jagielski #define	FRM_TAB			0x0800
80*b1cdbd2cSJim Jagielski #define	FRM_ROW			0x1000
81*b1cdbd2cSJim Jagielski #define	FRM_CELL		0x2000
82*b1cdbd2cSJim Jagielski #define	FRM_TXT			0x4000
83*b1cdbd2cSJim Jagielski #define	FRM_NOTXT		0x8000
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski //Fuer den internen Gebrauch ein paar gebraeuchliche Verknuepfungen.
86*b1cdbd2cSJim Jagielski #define FRM_LAYOUT		0x3FFF
87*b1cdbd2cSJim Jagielski #define FRM_CNTNT		0xC000
88*b1cdbd2cSJim Jagielski #define FRM_FTNBOSS		0x0006
89*b1cdbd2cSJim Jagielski #define FRM_ACCESSIBLE (FRM_HEADER|FRM_FOOTER|FRM_FTN|FRM_TXT|FRM_ROOT|FRM_FLY|FRM_TAB|FRM_CELL|FRM_PAGE)
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski 		//Weils so schon ist das ganze als Bitfeld....
92*b1cdbd2cSJim Jagielski //0000 0000 0000 0001	ROOT
93*b1cdbd2cSJim Jagielski //0000 0000 0000 0010	PAGE
94*b1cdbd2cSJim Jagielski //0000 0000 0000 0100	COLUMN
95*b1cdbd2cSJim Jagielski //0000 0000 0000 1000	HEADER
96*b1cdbd2cSJim Jagielski //0000 0000 0001 0000	FOOTER
97*b1cdbd2cSJim Jagielski //0000 0000 0010 0000	FTNCONT
98*b1cdbd2cSJim Jagielski //0000 0000 0100 0000	FTN
99*b1cdbd2cSJim Jagielski //0000 0000 1000 0000	BODY
100*b1cdbd2cSJim Jagielski //0000 0001 0000 0000	FLY
101*b1cdbd2cSJim Jagielski //0000 0010 0000 0000	SECTION
102*b1cdbd2cSJim Jagielski //0000 0100 0000 0000	UNUSED
103*b1cdbd2cSJim Jagielski //0000 1000 0000 0000	TAB
104*b1cdbd2cSJim Jagielski //0001 0000 0000 0000	ROW
105*b1cdbd2cSJim Jagielski //0010 0000 0000 0000	CELL
106*b1cdbd2cSJim Jagielski //0100 0000 0000 0000	TXT
107*b1cdbd2cSJim Jagielski //1000 0000 0000 0000	NOTXT
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski // The type of the frame is internal represented by the 4-bit value nType,
110*b1cdbd2cSJim Jagielski // which can expanded to the types above by shifting a bit (0x1 << nType)
111*b1cdbd2cSJim Jagielski // Here are the corresponding defines for the compressed representation:
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski #define FRMC_ROOT        0
114*b1cdbd2cSJim Jagielski #define FRMC_PAGE        1
115*b1cdbd2cSJim Jagielski #define FRMC_COLUMN      2
116*b1cdbd2cSJim Jagielski #define FRMC_HEADER      3
117*b1cdbd2cSJim Jagielski #define FRMC_FOOTER      4
118*b1cdbd2cSJim Jagielski #define FRMC_FTNCONT     5
119*b1cdbd2cSJim Jagielski #define FRMC_FTN         6
120*b1cdbd2cSJim Jagielski #define FRMC_BODY        7
121*b1cdbd2cSJim Jagielski #define FRMC_FLY         8
122*b1cdbd2cSJim Jagielski #define FRMC_SECTION     9
123*b1cdbd2cSJim Jagielski #define FRMC_UNUSED      10
124*b1cdbd2cSJim Jagielski #define FRMC_TAB         11
125*b1cdbd2cSJim Jagielski #define FRMC_ROW         12
126*b1cdbd2cSJim Jagielski #define FRMC_CELL        13
127*b1cdbd2cSJim Jagielski #define FRMC_TXT         14
128*b1cdbd2cSJim Jagielski #define FRMC_NOTXT       15
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski #define FRM_NEIGHBOUR   0x2004
131*b1cdbd2cSJim Jagielski #define FRM_NOTE_VERT   0x7a60
132*b1cdbd2cSJim Jagielski #define FRM_HEADFOOT    0x0018
133*b1cdbd2cSJim Jagielski #define FRM_BODYFTNC    0x00a0
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski class SwFrm;
136*b1cdbd2cSJim Jagielski typedef long (SwFrm:: *SwFrmGet)() const;
137*b1cdbd2cSJim Jagielski typedef sal_Bool (SwFrm:: *SwFrmMax)( long );
138*b1cdbd2cSJim Jagielski typedef void (SwFrm:: *SwFrmMakePos)( const SwFrm*, const SwFrm*, sal_Bool );
139*b1cdbd2cSJim Jagielski typedef long (*SwOperator)( long, long );
140*b1cdbd2cSJim Jagielski typedef void (SwFrm:: *SwFrmSet)( long, long );
141*b1cdbd2cSJim Jagielski 
142*b1cdbd2cSJim Jagielski SwFrm* SaveCntnt( SwLayoutFrm*, SwFrm* pStart = NULL );
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski struct SwRectFnCollection
145*b1cdbd2cSJim Jagielski {
146*b1cdbd2cSJim Jagielski     SwRectGet     fnGetTop;
147*b1cdbd2cSJim Jagielski     SwRectGet     fnGetBottom;
148*b1cdbd2cSJim Jagielski     SwRectGet     fnGetLeft;
149*b1cdbd2cSJim Jagielski     SwRectGet     fnGetRight;
150*b1cdbd2cSJim Jagielski     SwRectGet     fnGetWidth;
151*b1cdbd2cSJim Jagielski     SwRectGet     fnGetHeight;
152*b1cdbd2cSJim Jagielski     SwRectPoint   fnGetPos;
153*b1cdbd2cSJim Jagielski     SwRectSize    fnGetSize;
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski     SwRectSet     fnSetTop;
156*b1cdbd2cSJim Jagielski     SwRectSet     fnSetBottom;
157*b1cdbd2cSJim Jagielski     SwRectSet     fnSetLeft;
158*b1cdbd2cSJim Jagielski     SwRectSet     fnSetRight;
159*b1cdbd2cSJim Jagielski     SwRectSet     fnSetWidth;
160*b1cdbd2cSJim Jagielski     SwRectSet     fnSetHeight;
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski     SwRectSet     fnSubTop;
163*b1cdbd2cSJim Jagielski     SwRectSet     fnAddBottom;
164*b1cdbd2cSJim Jagielski     SwRectSet     fnSubLeft;
165*b1cdbd2cSJim Jagielski     SwRectSet     fnAddRight;
166*b1cdbd2cSJim Jagielski     SwRectSet     fnAddWidth;
167*b1cdbd2cSJim Jagielski     SwRectSet     fnAddHeight;
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski     SwRectSet     fnSetPosX;
170*b1cdbd2cSJim Jagielski     SwRectSet     fnSetPosY;
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski     SwFrmGet      fnGetTopMargin;
173*b1cdbd2cSJim Jagielski     SwFrmGet      fnGetBottomMargin;
174*b1cdbd2cSJim Jagielski     SwFrmGet      fnGetLeftMargin;
175*b1cdbd2cSJim Jagielski     SwFrmGet      fnGetRightMargin;
176*b1cdbd2cSJim Jagielski     SwFrmSet      fnSetXMargins;
177*b1cdbd2cSJim Jagielski     SwFrmSet      fnSetYMargins;
178*b1cdbd2cSJim Jagielski     SwFrmGet      fnGetPrtTop;
179*b1cdbd2cSJim Jagielski     SwFrmGet      fnGetPrtBottom;
180*b1cdbd2cSJim Jagielski     SwFrmGet      fnGetPrtLeft;
181*b1cdbd2cSJim Jagielski     SwFrmGet      fnGetPrtRight;
182*b1cdbd2cSJim Jagielski     SwRectDist    fnTopDist;
183*b1cdbd2cSJim Jagielski     SwRectDist    fnBottomDist;
184*b1cdbd2cSJim Jagielski     SwRectDist    fnLeftDist;
185*b1cdbd2cSJim Jagielski     SwRectDist    fnRightDist;
186*b1cdbd2cSJim Jagielski     SwFrmMax      fnSetLimit;
187*b1cdbd2cSJim Jagielski     SwRectMax     fnOverStep;
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski     SwRectSetPos  fnSetPos;
190*b1cdbd2cSJim Jagielski     SwFrmMakePos  fnMakePos;
191*b1cdbd2cSJim Jagielski     SwOperator    fnXDiff;
192*b1cdbd2cSJim Jagielski     SwOperator    fnYDiff;
193*b1cdbd2cSJim Jagielski     SwOperator    fnXInc;
194*b1cdbd2cSJim Jagielski     SwOperator    fnYInc;
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski     SwRectSetTwice fnSetLeftAndWidth;
197*b1cdbd2cSJim Jagielski     SwRectSetTwice fnSetTopAndHeight;
198*b1cdbd2cSJim Jagielski };
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski typedef SwRectFnCollection* SwRectFn;
201*b1cdbd2cSJim Jagielski /*
202*b1cdbd2cSJim Jagielski extern SwRectFn fnRectHori, fnRectVert, fnRectB2T, fnRectVL2R;
203*b1cdbd2cSJim Jagielski #define SWRECTFN( pFrm )    sal_Bool bVert = pFrm->IsVertical(); \
204*b1cdbd2cSJim Jagielski                             sal_Bool bRev = pFrm->IsReverse(); \
205*b1cdbd2cSJim Jagielski                             SwRectFn fnRect = bVert ? \
206*b1cdbd2cSJim Jagielski                                 ( bRev ? fnRectVL2R : fnRectVert ): \
207*b1cdbd2cSJim Jagielski                                 ( bRev ? fnRectB2T : fnRectHori );
208*b1cdbd2cSJim Jagielski #define SWRECTFNX( pFrm )   sal_Bool bVertX = pFrm->IsVertical(); \
209*b1cdbd2cSJim Jagielski                             sal_Bool bRevX = pFrm->IsReverse(); \
210*b1cdbd2cSJim Jagielski                             SwRectFn fnRectX = bVertX ? \
211*b1cdbd2cSJim Jagielski                                 ( bRevX ? fnRectVL2R : fnRectVert ): \
212*b1cdbd2cSJim Jagielski                                 ( bRevX ? fnRectB2T : fnRectHori );
213*b1cdbd2cSJim Jagielski #define SWREFRESHFN( pFrm ) { if( bVert != pFrm->IsVertical() || \
214*b1cdbd2cSJim Jagielski                                   bRev  != pFrm->IsReverse() ) \
215*b1cdbd2cSJim Jagielski                                 bVert = pFrm->IsVertical(); \
216*b1cdbd2cSJim Jagielski                                 bRev = pFrm->IsReverse(); \
217*b1cdbd2cSJim Jagielski                                 fnRect = bVert ? \
218*b1cdbd2cSJim Jagielski                                     ( bRev ? fnRectVL2R : fnRectVert ): \
219*b1cdbd2cSJim Jagielski                                     ( bRev ? fnRectB2T : fnRectHori ); }
220*b1cdbd2cSJim Jagielski #define SWRECTFN2( pFrm )   sal_Bool bVert = pFrm->IsVertical(); \
221*b1cdbd2cSJim Jagielski                             sal_Bool bNeighb = pFrm->IsNeighbourFrm(); \
222*b1cdbd2cSJim Jagielski                             SwRectFn fnRect = bVert == bNeighb ? \
223*b1cdbd2cSJim Jagielski                                 fnRectHori : fnRectVert;
224*b1cdbd2cSJim Jagielski */
225*b1cdbd2cSJim Jagielski 
226*b1cdbd2cSJim Jagielski //Badaa: 2008-04-18 * Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
227*b1cdbd2cSJim Jagielski extern SwRectFn fnRectHori, fnRectVert, fnRectB2T, fnRectVL2R, fnRectVertL2R;
228*b1cdbd2cSJim Jagielski #define SWRECTFN( pFrm )    sal_Bool bVert = pFrm->IsVertical(); \
229*b1cdbd2cSJim Jagielski                             sal_Bool bRev = pFrm->IsReverse(); \
230*b1cdbd2cSJim Jagielski                             sal_Bool bVertL2R = pFrm->IsVertLR(); \
231*b1cdbd2cSJim Jagielski                             SwRectFn fnRect = bVert ? \
232*b1cdbd2cSJim Jagielski                                 ( bRev ? fnRectVL2R : ( bVertL2R ? fnRectVertL2R : fnRectVert ) ): \
233*b1cdbd2cSJim Jagielski                                 ( bRev ? fnRectB2T : fnRectHori );
234*b1cdbd2cSJim Jagielski #define SWRECTFNX( pFrm )   sal_Bool bVertX = pFrm->IsVertical(); \
235*b1cdbd2cSJim Jagielski                             sal_Bool bRevX = pFrm->IsReverse(); \
236*b1cdbd2cSJim Jagielski                             sal_Bool bVertL2RX = pFrm->IsVertLR(); \
237*b1cdbd2cSJim Jagielski                             SwRectFn fnRectX = bVertX ? \
238*b1cdbd2cSJim Jagielski                                 ( bRevX ? fnRectVL2R : ( bVertL2RX ? fnRectVertL2R : fnRectVert ) ): \
239*b1cdbd2cSJim Jagielski                                 ( bRevX ? fnRectB2T : fnRectHori );
240*b1cdbd2cSJim Jagielski #define SWREFRESHFN( pFrm ) { if( bVert != pFrm->IsVertical() || \
241*b1cdbd2cSJim Jagielski                                   bRev  != pFrm->IsReverse() ) \
242*b1cdbd2cSJim Jagielski                                 bVert = pFrm->IsVertical(); \
243*b1cdbd2cSJim Jagielski                                 bRev = pFrm->IsReverse(); \
244*b1cdbd2cSJim Jagielski                                 bVertL2R = pFrm->IsVertLR(); \
245*b1cdbd2cSJim Jagielski                                 fnRect = bVert ? \
246*b1cdbd2cSJim Jagielski                                     ( bRev ? fnRectVL2R : ( bVertL2R ? fnRectVertL2R : fnRectVert ) ): \
247*b1cdbd2cSJim Jagielski                                     ( bRev ? fnRectB2T : fnRectHori ); }
248*b1cdbd2cSJim Jagielski #define SWRECTFN2( pFrm )   sal_Bool bVert = pFrm->IsVertical(); \
249*b1cdbd2cSJim Jagielski 			    sal_Bool bVertL2R = pFrm->IsVertLR(); \
250*b1cdbd2cSJim Jagielski                             sal_Bool bNeighb = pFrm->IsNeighbourFrm(); \
251*b1cdbd2cSJim Jagielski                             SwRectFn fnRect = bVert == bNeighb ? \
252*b1cdbd2cSJim Jagielski                                 fnRectHori : ( bVertL2R ? fnRectVertL2R : fnRectVert );
253*b1cdbd2cSJim Jagielski //End of SCMS
254*b1cdbd2cSJim Jagielski #define POS_DIFF( aFrm1, aFrm2 ) \
255*b1cdbd2cSJim Jagielski             ( (aFrm1.*fnRect->fnGetTop)() != (aFrm2.*fnRect->fnGetTop)() || \
256*b1cdbd2cSJim Jagielski             (aFrm1.*fnRect->fnGetLeft)() != (aFrm2.*fnRect->fnGetLeft)() )
257*b1cdbd2cSJim Jagielski 
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski //Fuer GetNextLeaf/GetPrevLeaf.
260*b1cdbd2cSJim Jagielski enum MakePageType
261*b1cdbd2cSJim Jagielski {
262*b1cdbd2cSJim Jagielski 	MAKEPAGE_NONE,		//Keine Seite bzw. Fussnote anlegen
263*b1cdbd2cSJim Jagielski 	MAKEPAGE_APPEND,	//Nur ggf. Seite anhaengen
264*b1cdbd2cSJim Jagielski 	MAKEPAGE_INSERT,	//Seite ggf. anhaengen oder einfuegen.
265*b1cdbd2cSJim Jagielski 	MAKEPAGE_FTN,		//Fussnote ggf. einfuegen.
266*b1cdbd2cSJim Jagielski 	MAKEPAGE_NOSECTION	// Don't create section frames
267*b1cdbd2cSJim Jagielski };
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski // OD 2004-05-06 #i28701# - replaced by new class <SwSortedObjs>
270*b1cdbd2cSJim Jagielski //typedef SdrObject* SdrObjectPtr;
271*b1cdbd2cSJim Jagielski //SV_DECL_PTRARR(SwDrawObjs,SdrObjectPtr,1,1);
272*b1cdbd2cSJim Jagielski 
273*b1cdbd2cSJim Jagielski class SwFrm: public SwClient, public SfxBroadcaster
274*b1cdbd2cSJim Jagielski {
275*b1cdbd2cSJim Jagielski 	//Der verkappte Frm
276*b1cdbd2cSJim Jagielski 	friend class SwFlowFrm;
277*b1cdbd2cSJim Jagielski 	friend class SwLayoutFrm;		// Sw3FrameIo: fuer pNext, pPrev
278*b1cdbd2cSJim Jagielski 	friend class SwLooping;         // LoopControlling  (layouter.cxx)
279*b1cdbd2cSJim Jagielski 
280*b1cdbd2cSJim Jagielski     //Hebt die Lower waehrend eines Spaltenumbaus auf.
281*b1cdbd2cSJim Jagielski 	friend SwFrm *SaveCntnt( SwLayoutFrm*, SwFrm* pStart );
282*b1cdbd2cSJim Jagielski         friend void   RestoreCntnt( SwFrm *, SwLayoutFrm *, SwFrm *pSibling, bool bGrow );
283*b1cdbd2cSJim Jagielski 
284*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 1
285*b1cdbd2cSJim Jagielski 	//entfernt leere SwSectionFrms aus einer Kette
286*b1cdbd2cSJim Jagielski 	friend SwFrm* SwClearDummies( SwFrm* pFrm );
287*b1cdbd2cSJim Jagielski #endif
288*b1cdbd2cSJim Jagielski 
289*b1cdbd2cSJim Jagielski 		//Zum validieren eines unsinnig invalidierten in SwCntntFrm::MakeAll
290*b1cdbd2cSJim Jagielski 	friend void ValidateSz( SwFrm *pFrm );
291*b1cdbd2cSJim Jagielski 		// Implementiert in text/txtftn.cxx, verhindert Ftn-Oszillation
292*b1cdbd2cSJim Jagielski 	friend void ValidateTxt( SwFrm *pFrm );
293*b1cdbd2cSJim Jagielski 
294*b1cdbd2cSJim Jagielski //	friend void CalcAnchorAndKeep( SwFlyFrm * );
295*b1cdbd2cSJim Jagielski 
296*b1cdbd2cSJim Jagielski 	friend void MakeNxt( SwFrm *pFrm, SwFrm *pNxt );
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski 	//Cache fuer (Umrandungs-)Attribute.
299*b1cdbd2cSJim Jagielski 	static SwCache *pCache;
300*b1cdbd2cSJim Jagielski 	//Solution:Member to identify if acc table should be disposed
301*b1cdbd2cSJim Jagielski 	sal_Bool bIfAccTableShouldDisposing;
302*b1cdbd2cSJim Jagielski 
303*b1cdbd2cSJim Jagielski     // --> OD 2006-05-10 #i65250#
304*b1cdbd2cSJim Jagielski     // frame ID is now in general available - used for layout loop control
305*b1cdbd2cSJim Jagielski     static sal_uInt32 mnLastFrmId;
306*b1cdbd2cSJim Jagielski     const  sal_uInt32 mnFrmId;
307*b1cdbd2cSJim Jagielski     // <--
308*b1cdbd2cSJim Jagielski 
309*b1cdbd2cSJim Jagielski     SwRootFrm   *mpRoot;
310*b1cdbd2cSJim Jagielski 	SwLayoutFrm *pUpper;
311*b1cdbd2cSJim Jagielski     SwFrm       *pNext;
312*b1cdbd2cSJim Jagielski     SwFrm       *pPrev;
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski     SwFrm *_FindNext();
315*b1cdbd2cSJim Jagielski 	SwFrm *_FindPrev();
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski     /** method to determine next content frame in the same environment
318*b1cdbd2cSJim Jagielski         for a flow frame (content frame, table frame, section frame)
319*b1cdbd2cSJim Jagielski 
320*b1cdbd2cSJim Jagielski         OD 2005-11-30 #i27138# - adding documentation:
321*b1cdbd2cSJim Jagielski         Travelling downwards through the layout to determine the next content
322*b1cdbd2cSJim Jagielski         frame in the same environment. There are several environments in a
323*b1cdbd2cSJim Jagielski         document, which form a closed context regarding this function. These
324*b1cdbd2cSJim Jagielski         environments are:
325*b1cdbd2cSJim Jagielski         - Each page header
326*b1cdbd2cSJim Jagielski         - Each page footer
327*b1cdbd2cSJim Jagielski         - Each unlinked fly frame
328*b1cdbd2cSJim Jagielski         - Each group of linked fly frames
329*b1cdbd2cSJim Jagielski         - All footnotes
330*b1cdbd2cSJim Jagielski         - All document body frames
331*b1cdbd2cSJim Jagielski         OD 2005-11-30 #i27138# - adding parameter <_bInSameFtn>
332*b1cdbd2cSJim Jagielski         Its default value is <false>. If its value is <true>, the environment
333*b1cdbd2cSJim Jagielski         'All footnotes' is no longer treated. Instead each footnote is treated
334*b1cdbd2cSJim Jagielski         as an own environment.
335*b1cdbd2cSJim Jagielski 
336*b1cdbd2cSJim Jagielski         @author OD
337*b1cdbd2cSJim Jagielski 
338*b1cdbd2cSJim Jagielski         @param _bInSameFtn
339*b1cdbd2cSJim Jagielski         input parameter - boolean indicating, that the found next content
340*b1cdbd2cSJim Jagielski         frame has to be in the same footnote frame. This parameter is only
341*b1cdbd2cSJim Jagielski         relevant for flow frames in footnotes.
342*b1cdbd2cSJim Jagielski 
343*b1cdbd2cSJim Jagielski         @return SwCntntFrm*
344*b1cdbd2cSJim Jagielski         pointer to the found next content frame. It's NULL, if none exists.
345*b1cdbd2cSJim Jagielski     */
346*b1cdbd2cSJim Jagielski     SwCntntFrm* _FindNextCnt( const bool _bInSameFtn = false );
347*b1cdbd2cSJim Jagielski 
348*b1cdbd2cSJim Jagielski     /** method to determine previous content frame in the same environment
349*b1cdbd2cSJim Jagielski         for a flow frame (content frame, table frame, section frame)
350*b1cdbd2cSJim Jagielski 
351*b1cdbd2cSJim Jagielski         OD 2005-11-30 #i27138#
352*b1cdbd2cSJim Jagielski         Travelling upwards through the layout to determine the previous content
353*b1cdbd2cSJim Jagielski         frame in the same environment. There are several environments in a
354*b1cdbd2cSJim Jagielski         document, which form a closed context regarding this function. These
355*b1cdbd2cSJim Jagielski         environments are:
356*b1cdbd2cSJim Jagielski         - Each page header
357*b1cdbd2cSJim Jagielski         - Each page footer
358*b1cdbd2cSJim Jagielski         - Each unlinked fly frame
359*b1cdbd2cSJim Jagielski         - Each group of linked fly frames
360*b1cdbd2cSJim Jagielski         - All footnotes
361*b1cdbd2cSJim Jagielski         - All document body frames
362*b1cdbd2cSJim Jagielski         OD 2005-11-30 #i27138# - adding parameter <_bInSameFtn>
363*b1cdbd2cSJim Jagielski         Its default value is <false>. If its value is <true>, the environment
364*b1cdbd2cSJim Jagielski         'All footnotes' is no longer treated. Instead each footnote is treated
365*b1cdbd2cSJim Jagielski         as an own environment.
366*b1cdbd2cSJim Jagielski 
367*b1cdbd2cSJim Jagielski         @author OD
368*b1cdbd2cSJim Jagielski 
369*b1cdbd2cSJim Jagielski         @param _bInSameFtn
370*b1cdbd2cSJim Jagielski         input parameter - boolean indicating, that the found previous content
371*b1cdbd2cSJim Jagielski         frame has to be in the same footnote frame. This parameter is only
372*b1cdbd2cSJim Jagielski         relevant for flow frames in footnotes.
373*b1cdbd2cSJim Jagielski 
374*b1cdbd2cSJim Jagielski         @return SwCntntFrm*
375*b1cdbd2cSJim Jagielski         pointer to the found previous content frame. It's NULL, if none exists.
376*b1cdbd2cSJim Jagielski     */
377*b1cdbd2cSJim Jagielski     SwCntntFrm* _FindPrevCnt( const bool _bInSameFtn = false );
378*b1cdbd2cSJim Jagielski 
379*b1cdbd2cSJim Jagielski 
380*b1cdbd2cSJim Jagielski 	void _UpdateAttrFrm( const SfxPoolItem*, const SfxPoolItem*, sal_uInt8 & );
381*b1cdbd2cSJim Jagielski 	SwFrm* _GetIndNext();
382*b1cdbd2cSJim Jagielski     void SetDirFlags( sal_Bool bVert );
383*b1cdbd2cSJim Jagielski 
384*b1cdbd2cSJim Jagielski 	SwFrm( SwFrm & );		//Kopieren ist nicht erlaubt.
385*b1cdbd2cSJim Jagielski 
386*b1cdbd2cSJim Jagielski     const SwLayoutFrm* ImplGetNextLayoutLeaf( bool bFwd ) const;
387*b1cdbd2cSJim Jagielski 
388*b1cdbd2cSJim Jagielski protected:
389*b1cdbd2cSJim Jagielski     SwSortedObjs* pDrawObjs;    //Hier haengen die DrawObjs, kann 0 sein
390*b1cdbd2cSJim Jagielski 
391*b1cdbd2cSJim Jagielski 	SwRect	aFrm;	//Absolute Dokumentposition und groesse des Frm
392*b1cdbd2cSJim Jagielski 	SwRect	aPrt;	//Position der PrtArea rel zum Frm und groesse der PrtArea
393*b1cdbd2cSJim Jagielski 
394*b1cdbd2cSJim Jagielski     sal_uInt16 bFlag01:         1;
395*b1cdbd2cSJim Jagielski     sal_uInt16 bFlag02:         1;
396*b1cdbd2cSJim Jagielski     sal_uInt16 bFlag03:         1;
397*b1cdbd2cSJim Jagielski     sal_uInt16 bFlag04:         1;
398*b1cdbd2cSJim Jagielski     sal_uInt16 bFlag05:         1;
399*b1cdbd2cSJim Jagielski     sal_uInt16 bReverse:        1; // Next line above/at the right side instead
400*b1cdbd2cSJim Jagielski                                // under/at the left side of the previous line.
401*b1cdbd2cSJim Jagielski     sal_uInt16 bInvalidR2L:     1;
402*b1cdbd2cSJim Jagielski     sal_uInt16 bDerivedR2L:     1;
403*b1cdbd2cSJim Jagielski     sal_uInt16 bRightToLeft:    1;
404*b1cdbd2cSJim Jagielski     sal_uInt16 bInvalidVert:    1;
405*b1cdbd2cSJim Jagielski     sal_uInt16 bDerivedVert:    1;
406*b1cdbd2cSJim Jagielski     sal_uInt16 bVertical:       1;
407*b1cdbd2cSJim Jagielski     //Badaa: 2008-04-18 * Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
408*b1cdbd2cSJim Jagielski     sal_uInt16 bVertLR:         1;
409*b1cdbd2cSJim Jagielski     //End of SCMS
410*b1cdbd2cSJim Jagielski     sal_uInt16 nType:         4;  //Who am I?
411*b1cdbd2cSJim Jagielski 
412*b1cdbd2cSJim Jagielski 	sal_Bool bValidPos:			1;
413*b1cdbd2cSJim Jagielski 	sal_Bool bValidPrtArea:		1;
414*b1cdbd2cSJim Jagielski 	sal_Bool bValidSize:		1;
415*b1cdbd2cSJim Jagielski 	sal_Bool bValidLineNum:		1;
416*b1cdbd2cSJim Jagielski     sal_Bool bFixSize:          1;
417*b1cdbd2cSJim Jagielski     sal_Bool bUnUsed1:          1;
418*b1cdbd2cSJim Jagielski 	sal_Bool bCompletePaint:	1;	//Frame wird ganz gepaintet wenn sal_True, auch
419*b1cdbd2cSJim Jagielski 								//wenn der Inhalt nur teilw. veraendert ist;
420*b1cdbd2cSJim Jagielski 								//Bei CntntFrms wird ausschliesslich wenn sal_True
421*b1cdbd2cSJim Jagielski 								//der Border (von Action) gemalt.
422*b1cdbd2cSJim Jagielski 	sal_Bool bRetouche:			1;	//Der Frame ist fuer Retusche verantwortlich
423*b1cdbd2cSJim Jagielski 								//wenn sal_True.
424*b1cdbd2cSJim Jagielski public:
GetTabStopInfo(SwTwips)425*b1cdbd2cSJim Jagielski 	virtual uno::Sequence< style::TabStop >  GetTabStopInfo( SwTwips )
426*b1cdbd2cSJim Jagielski 	{
427*b1cdbd2cSJim Jagielski 		return uno::Sequence< style::TabStop >();
428*b1cdbd2cSJim Jagielski 	}
429*b1cdbd2cSJim Jagielski     sal_Bool bUnUsed2:          1;
430*b1cdbd2cSJim Jagielski protected:
431*b1cdbd2cSJim Jagielski 	sal_Bool bInfInvalid:		1;	//InfoFlags sind Invalid.
432*b1cdbd2cSJim Jagielski 	sal_Bool bInfBody:			1;	//Frm steht im DokumentBody.
433*b1cdbd2cSJim Jagielski 	sal_Bool bInfTab:			1;	//Frm steht in einer Tabelle.
434*b1cdbd2cSJim Jagielski 	sal_Bool bInfFly:			1;	//Frm steht in einem Fly.
435*b1cdbd2cSJim Jagielski 	sal_Bool bInfFtn:			1;	//Frm steht in einer Fussnote.
436*b1cdbd2cSJim Jagielski 	sal_Bool bInfSct:			1;  //Frm steht in einem Bereich.
437*b1cdbd2cSJim Jagielski 	sal_Bool bColLocked:		1;  //Grow/Shrink sperren bei spaltigen Section-
438*b1cdbd2cSJim Jagielski 								//oder Fly-Frames, wird im Format gesetzt
439*b1cdbd2cSJim Jagielski 
ColLock()440*b1cdbd2cSJim Jagielski 	void ColLock()		{ bColLocked = sal_True; }
ColUnlock()441*b1cdbd2cSJim Jagielski 	void ColUnlock()   	{ bColLocked = sal_False; }
442*b1cdbd2cSJim Jagielski 
443*b1cdbd2cSJim Jagielski     // Only used by SwRootFrm Ctor to get 'this' into mpRoot...
setRootFrm(SwRootFrm * pRoot)444*b1cdbd2cSJim Jagielski 	void setRootFrm( SwRootFrm* pRoot )	{ mpRoot = pRoot; }
445*b1cdbd2cSJim Jagielski 
446*b1cdbd2cSJim Jagielski 	SwPageFrm *InsertPage( SwPageFrm *pSibling, sal_Bool bFtn );
447*b1cdbd2cSJim Jagielski 	void PrepareMake();
448*b1cdbd2cSJim Jagielski 	void OptPrepareMake();
449*b1cdbd2cSJim Jagielski 	void MakePos();
450*b1cdbd2cSJim Jagielski     // --> OD 2005-09-28 #b6329202#
451*b1cdbd2cSJim Jagielski     // method formats next frame of table frame to assure keep attribute.
452*b1cdbd2cSJim Jagielski     // in case of nested tables method <SwFrm::MakeAll()> is called to
453*b1cdbd2cSJim Jagielski     // avoid format of superior table frame.
454*b1cdbd2cSJim Jagielski     friend SwFrm* lcl_FormatNextCntntForKeep( SwTabFrm* pTabFrm );
455*b1cdbd2cSJim Jagielski     // <--
456*b1cdbd2cSJim Jagielski     virtual void MakeAll() = 0;
457*b1cdbd2cSJim Jagielski 		//Adjustierung der Frames einer Seite
458*b1cdbd2cSJim Jagielski 	SwTwips AdjustNeighbourhood( SwTwips nDiff, sal_Bool bTst = sal_False );
459*b1cdbd2cSJim Jagielski 
460*b1cdbd2cSJim Jagielski 
461*b1cdbd2cSJim Jagielski 		//Aendern nur die Framesize, nicht die PrtArea-SSize
462*b1cdbd2cSJim Jagielski     virtual SwTwips ShrinkFrm( SwTwips, sal_Bool bTst = sal_False, sal_Bool bInfo = sal_False ) = 0;
463*b1cdbd2cSJim Jagielski     virtual SwTwips GrowFrm  ( SwTwips, sal_Bool bTst = sal_False, sal_Bool bInfo = sal_False ) = 0;
464*b1cdbd2cSJim Jagielski 
GetDep()465*b1cdbd2cSJim Jagielski 	SwModify	  	*GetDep()		{ return GetRegisteredInNonConst(); }
GetDep() const466*b1cdbd2cSJim Jagielski 	const SwModify	*GetDep() const { return GetRegisteredIn(); }
467*b1cdbd2cSJim Jagielski 
468*b1cdbd2cSJim Jagielski 	SwFrm( SwModify*, SwFrm* );
469*b1cdbd2cSJim Jagielski 
470*b1cdbd2cSJim Jagielski     void CheckDir( sal_uInt16 nDir, sal_Bool bVert, sal_Bool bOnlyBiDi, sal_Bool bBrowse );
471*b1cdbd2cSJim Jagielski 
472*b1cdbd2cSJim Jagielski     /** enumeration for the different invalidations
473*b1cdbd2cSJim Jagielski 
474*b1cdbd2cSJim Jagielski         OD 2004-05-19 #i28701#
475*b1cdbd2cSJim Jagielski 
476*b1cdbd2cSJim Jagielski         @author OD
477*b1cdbd2cSJim Jagielski     */
478*b1cdbd2cSJim Jagielski     enum InvalidationType
479*b1cdbd2cSJim Jagielski     {
480*b1cdbd2cSJim Jagielski         INVALID_SIZE, INVALID_PRTAREA, INVALID_POS, INVALID_LINENUM, INVALID_ALL
481*b1cdbd2cSJim Jagielski     };
482*b1cdbd2cSJim Jagielski 
483*b1cdbd2cSJim Jagielski     /** method to determine, if an invalidation is allowed.
484*b1cdbd2cSJim Jagielski 
485*b1cdbd2cSJim Jagielski         OD 2004-05-19 #i28701
486*b1cdbd2cSJim Jagielski 
487*b1cdbd2cSJim Jagielski         @author OD
488*b1cdbd2cSJim Jagielski     */
489*b1cdbd2cSJim Jagielski     virtual bool _InvalidationAllowed( const InvalidationType _nInvalid ) const;
490*b1cdbd2cSJim Jagielski 
491*b1cdbd2cSJim Jagielski     /** method to perform additional actions on an invalidation
492*b1cdbd2cSJim Jagielski 
493*b1cdbd2cSJim Jagielski         OD 2004-05-19 #i28701#
494*b1cdbd2cSJim Jagielski         Method has *only* to contain actions, which has to be performed on
495*b1cdbd2cSJim Jagielski         *every* assignment of the corresponding flag to <sal_False>.
496*b1cdbd2cSJim Jagielski 
497*b1cdbd2cSJim Jagielski         @author OD
498*b1cdbd2cSJim Jagielski     */
499*b1cdbd2cSJim Jagielski     virtual void _ActionOnInvalidation( const InvalidationType _nInvalid );
500*b1cdbd2cSJim Jagielski 
501*b1cdbd2cSJim Jagielski         //Schatten und Umrandung painten
502*b1cdbd2cSJim Jagielski     void PaintShadow( const SwRect&, SwRect&, const SwBorderAttrs& ) const;
503*b1cdbd2cSJim Jagielski 	virtual	void  Modify( const SfxPoolItem*, const SfxPoolItem* );
504*b1cdbd2cSJim Jagielski 
505*b1cdbd2cSJim Jagielski public:
506*b1cdbd2cSJim Jagielski 	TYPEINFO();	//Bereits in Basisklasse Client drin.
507*b1cdbd2cSJim Jagielski 
GetType() const508*b1cdbd2cSJim Jagielski     sal_uInt16 GetType() const { return 0x1 << nType; }
509*b1cdbd2cSJim Jagielski 
GetCache()510*b1cdbd2cSJim Jagielski 	static SwCache &GetCache() 				  { return *pCache; }
GetCachePtr()511*b1cdbd2cSJim Jagielski 	static SwCache *GetCachePtr()			  { return pCache;	}
SetCache(SwCache * pNew)512*b1cdbd2cSJim Jagielski 	static void		SetCache( SwCache *pNew ) { pCache = pNew;	}
513*b1cdbd2cSJim Jagielski 
514*b1cdbd2cSJim Jagielski 		//Aendern die PrtArea-SSize und die FrmSize.
515*b1cdbd2cSJim Jagielski     SwTwips Shrink( SwTwips, sal_Bool bTst = sal_False, sal_Bool bInfo = sal_False );
516*b1cdbd2cSJim Jagielski     SwTwips Grow  ( SwTwips, sal_Bool bTst = sal_False, sal_Bool bInfo = sal_False );
517*b1cdbd2cSJim Jagielski 
518*b1cdbd2cSJim Jagielski 	//Wir brauchen unterschiedliche Methoden (wg. Performance) fuer das
519*b1cdbd2cSJim Jagielski 	//Einfuegenin den Layout Baum:
520*b1cdbd2cSJim Jagielski 
521*b1cdbd2cSJim Jagielski 	//Einfuegen vor pBehind  oder am Ende der Kette unter pUpper
522*b1cdbd2cSJim Jagielski 	void InsertBefore( SwLayoutFrm* pParent, SwFrm* pBehind );
523*b1cdbd2cSJim Jagielski 	//Einfuegen hinter pBefore oder am Anfang der Kette unter pUpper
524*b1cdbd2cSJim Jagielski 	void InsertBehind( SwLayoutFrm *pParent, SwFrm *pBefore );
525*b1cdbd2cSJim Jagielski 	//Einfuegen vor pBehind oder am Ende der Kette, unter Beruecksichtigung
526*b1cdbd2cSJim Jagielski 	//der Geschwister von pSct
527*b1cdbd2cSJim Jagielski 	void InsertGroupBefore( SwFrm* pParent, SwFrm* pWhere, SwFrm* pSct );
528*b1cdbd2cSJim Jagielski 	void Remove();
529*b1cdbd2cSJim Jagielski 
530*b1cdbd2cSJim Jagielski 	//For internal use only; wer es anders macht wird
531*b1cdbd2cSJim Jagielski 	//in einen Sack gesteckt und muss zwei Tage drin hocken bleiben.
532*b1cdbd2cSJim Jagielski 	//Fuert Spezialbehandlung fuer _Get[Next|Prev]Leaf() durch (Tabellen).
533*b1cdbd2cSJim Jagielski 	SwLayoutFrm *GetLeaf( MakePageType eMakePage, sal_Bool bFwd );
534*b1cdbd2cSJim Jagielski 	SwLayoutFrm *GetNextLeaf   ( MakePageType eMakePage );
535*b1cdbd2cSJim Jagielski 	SwLayoutFrm *GetNextFtnLeaf( MakePageType eMakePage );
536*b1cdbd2cSJim Jagielski 	SwLayoutFrm *GetNextSctLeaf( MakePageType eMakePage );
537*b1cdbd2cSJim Jagielski     SwLayoutFrm *GetNextCellLeaf( MakePageType eMakePage );
538*b1cdbd2cSJim Jagielski     SwLayoutFrm *GetPrevLeaf   ( MakePageType eMakeFtn = MAKEPAGE_FTN );
539*b1cdbd2cSJim Jagielski 	SwLayoutFrm *GetPrevFtnLeaf( MakePageType eMakeFtn = MAKEPAGE_FTN );
540*b1cdbd2cSJim Jagielski 	SwLayoutFrm *GetPrevSctLeaf( MakePageType eMakeFtn = MAKEPAGE_FTN );
541*b1cdbd2cSJim Jagielski     SwLayoutFrm *GetPrevCellLeaf( MakePageType eMakeFtn = MAKEPAGE_FTN );
542*b1cdbd2cSJim Jagielski     const SwLayoutFrm *GetLeaf ( MakePageType eMakePage, sal_Bool bFwd,
543*b1cdbd2cSJim Jagielski 								 const SwFrm *pAnch ) const;
544*b1cdbd2cSJim Jagielski 
545*b1cdbd2cSJim Jagielski     sal_Bool WrongPageDesc( SwPageFrm* pNew );
546*b1cdbd2cSJim Jagielski 
547*b1cdbd2cSJim Jagielski     // --> OD 2004-07-02 #i28701# - new methods to append/remove drawing objects
548*b1cdbd2cSJim Jagielski     void AppendDrawObj( SwAnchoredObject& _rNewObj );
549*b1cdbd2cSJim Jagielski     void RemoveDrawObj( SwAnchoredObject& _rToRemoveObj );
550*b1cdbd2cSJim Jagielski     // <--
551*b1cdbd2cSJim Jagielski 
552*b1cdbd2cSJim Jagielski 	//Arbeiten mit der Kette der FlyFrms
553*b1cdbd2cSJim Jagielski 	void  AppendFly( SwFlyFrm *pNew );
554*b1cdbd2cSJim Jagielski 	void  RemoveFly( SwFlyFrm *pToRemove );
GetDrawObjs() const555*b1cdbd2cSJim Jagielski     const SwSortedObjs *GetDrawObjs() const { return pDrawObjs; }
GetDrawObjs()556*b1cdbd2cSJim Jagielski           SwSortedObjs *GetDrawObjs()         { return pDrawObjs; }
557*b1cdbd2cSJim Jagielski     // --> OD 2004-07-01 #i28701# - change purpose of method and adjust its name
558*b1cdbd2cSJim Jagielski     void InvalidateObjs( const bool _bInvaPosOnly,
559*b1cdbd2cSJim Jagielski                          const bool _bNoInvaOfAsCharAnchoredObjs = true );
560*b1cdbd2cSJim Jagielski 
561*b1cdbd2cSJim Jagielski 	virtual	void PaintBorder( const SwRect&, const SwPageFrm *pPage,
562*b1cdbd2cSJim Jagielski 							  const SwBorderAttrs & ) const;
563*b1cdbd2cSJim Jagielski 	void PaintBaBo( const SwRect&, const SwPageFrm *pPage = 0,
564*b1cdbd2cSJim Jagielski 					const sal_Bool bLowerBorder = sal_False ) const;
565*b1cdbd2cSJim Jagielski 	void PaintBackground( const SwRect&, const SwPageFrm *pPage,
566*b1cdbd2cSJim Jagielski 						  const SwBorderAttrs &,
567*b1cdbd2cSJim Jagielski 						  const sal_Bool bLowerMode = sal_False,
568*b1cdbd2cSJim Jagielski 						  const sal_Bool bLowerBorder = sal_False ) const;
569*b1cdbd2cSJim Jagielski 	void PaintBorderLine( const SwRect&, const SwRect&, const SwPageFrm*,
570*b1cdbd2cSJim Jagielski 						  const Color *pColor ) const;
571*b1cdbd2cSJim Jagielski 
572*b1cdbd2cSJim Jagielski 	//Retouche, nicht im Bereich des uebergebenen Rect!
573*b1cdbd2cSJim Jagielski 	void Retouche( const SwPageFrm *pPage, const SwRect &rRect ) const;
574*b1cdbd2cSJim Jagielski 
575*b1cdbd2cSJim Jagielski 	sal_Bool GetBackgroundBrush( const SvxBrushItem*& rpBrush,
576*b1cdbd2cSJim Jagielski 							 const Color*& rpColor,
577*b1cdbd2cSJim Jagielski 							 SwRect &rOrigRect,
578*b1cdbd2cSJim Jagielski 							 sal_Bool bLowerMode ) const;
579*b1cdbd2cSJim Jagielski 
580*b1cdbd2cSJim Jagielski 	inline void SetCompletePaint() const;
581*b1cdbd2cSJim Jagielski 	inline void ResetCompletePaint() const;
IsCompletePaint() const582*b1cdbd2cSJim Jagielski 	inline sal_Bool IsCompletePaint() const { return bCompletePaint; }
583*b1cdbd2cSJim Jagielski 
584*b1cdbd2cSJim Jagielski 	inline void SetRetouche() const;
585*b1cdbd2cSJim Jagielski 	inline void ResetRetouche() const;
IsRetouche() const586*b1cdbd2cSJim Jagielski 	inline sal_Bool IsRetouche() const { return bRetouche; }
587*b1cdbd2cSJim Jagielski 
588*b1cdbd2cSJim Jagielski 	void SetInfFlags();					//Setzen der InfoFlags
InvalidateInfFlags()589*b1cdbd2cSJim Jagielski 	inline void InvalidateInfFlags() { bInfInvalid = sal_True; }
590*b1cdbd2cSJim Jagielski 	inline sal_Bool	IsInDocBody() const;	//Benutzen die InfoFlags.
591*b1cdbd2cSJim Jagielski 	inline sal_Bool	IsInFtn() const;		//ggf. werden die Flags ermittelt.
592*b1cdbd2cSJim Jagielski 	inline sal_Bool IsInTab() const;
593*b1cdbd2cSJim Jagielski 	inline sal_Bool IsInFly() const;
594*b1cdbd2cSJim Jagielski 	inline sal_Bool IsInSct() const;
595*b1cdbd2cSJim Jagielski 
596*b1cdbd2cSJim Jagielski     // If frame is inside a split table row, this function returns
597*b1cdbd2cSJim Jagielski     // the corresponding row frame in the follow table.
598*b1cdbd2cSJim Jagielski     const SwRowFrm* IsInSplitTableRow() const;
599*b1cdbd2cSJim Jagielski 
600*b1cdbd2cSJim Jagielski     // If frame is inside a follow flow row, this function returns
601*b1cdbd2cSJim Jagielski     // the corresponding row frame master table
602*b1cdbd2cSJim Jagielski     const SwRowFrm* IsInFollowFlowRow() const;
603*b1cdbd2cSJim Jagielski 
604*b1cdbd2cSJim Jagielski     bool IsInBalancedSection() const;
605*b1cdbd2cSJim Jagielski 
IsReverse() const606*b1cdbd2cSJim Jagielski     inline sal_Bool IsReverse() const { return bReverse; }
SetReverse(sal_Bool bNew)607*b1cdbd2cSJim Jagielski     inline void SetReverse( sal_Bool bNew ){ bReverse = bNew ? 1 : 0; }
608*b1cdbd2cSJim Jagielski     inline sal_Bool IsVertical() const;
609*b1cdbd2cSJim Jagielski     //Badaa: 2008-04-18 * Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
610*b1cdbd2cSJim Jagielski     inline sal_Bool IsVertLR() const;
611*b1cdbd2cSJim Jagielski     //End of SCMS
612*b1cdbd2cSJim Jagielski     inline sal_Bool GetVerticalFlag() const;
SetVertical(sal_Bool bNew)613*b1cdbd2cSJim Jagielski     inline void SetVertical( sal_Bool bNew ){ bVertical = bNew ? 1 : 0; }
614*b1cdbd2cSJim Jagielski     //Badaa: 2008-04-18 * Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
SetbVertLR(sal_Bool bNew)615*b1cdbd2cSJim Jagielski     inline void SetbVertLR( sal_Bool bNew ) { bVertLR = bNew ? 1 : 0; }
616*b1cdbd2cSJim Jagielski     //End of SCMS
SetDerivedVert(sal_Bool bNew)617*b1cdbd2cSJim Jagielski     inline void SetDerivedVert( sal_Bool bNew ){ bDerivedVert = bNew ? 1 : 0; }
SetInvalidVert(sal_Bool bNew)618*b1cdbd2cSJim Jagielski     inline void SetInvalidVert( sal_Bool bNew) { bInvalidVert = bNew ? 1 : 0; }
619*b1cdbd2cSJim Jagielski     inline sal_Bool IsRightToLeft() const;
620*b1cdbd2cSJim Jagielski     inline sal_Bool GetRightToLeftFlag() const;
SetRightToLeft(sal_Bool bNew)621*b1cdbd2cSJim Jagielski     inline void SetRightToLeft( sal_Bool bNew ){ bRightToLeft = bNew ? 1 : 0; }
SetDerivedR2L(sal_Bool bNew)622*b1cdbd2cSJim Jagielski     inline void SetDerivedR2L( sal_Bool bNew ) { bDerivedR2L  = bNew ? 1 : 0; }
SetInvalidR2L(sal_Bool bNew)623*b1cdbd2cSJim Jagielski     inline void SetInvalidR2L( sal_Bool bNew ) { bInvalidR2L  = bNew ? 1 : 0; }
624*b1cdbd2cSJim Jagielski 
625*b1cdbd2cSJim Jagielski     void CheckDirChange();
626*b1cdbd2cSJim Jagielski     // returns upper left frame position for LTR and
627*b1cdbd2cSJim Jagielski     // upper right frame position for Asian / RTL frames
628*b1cdbd2cSJim Jagielski     Point   GetFrmAnchorPos( sal_Bool bIgnoreFlysAnchoredAtThisFrame ) const;
629*b1cdbd2cSJim Jagielski 
630*b1cdbd2cSJim Jagielski     /** determine, if frame is moveable in given environment
631*b1cdbd2cSJim Jagielski 
632*b1cdbd2cSJim Jagielski         OD 08.08.2003 #110978#
633*b1cdbd2cSJim Jagielski         method replaced 'old' method <sal_Bool IsMoveable() const>.
634*b1cdbd2cSJim Jagielski         Determines, if frame is moveable in given environment. if no environment
635*b1cdbd2cSJim Jagielski         is given (parameter _pLayoutFrm == 0L), the movability in the actual
636*b1cdbd2cSJim Jagielski         environment (<this->GetUpper()) is checked.
637*b1cdbd2cSJim Jagielski 
638*b1cdbd2cSJim Jagielski         @author OD
639*b1cdbd2cSJim Jagielski 
640*b1cdbd2cSJim Jagielski         @param _pLayoutFrm
641*b1cdbd2cSJim Jagielski         input parameter - given environment (layout frame), in which the movability
642*b1cdbd2cSJim Jagielski         will be checked. If not set ( == 0L ), actual environment is taken.
643*b1cdbd2cSJim Jagielski 
644*b1cdbd2cSJim Jagielski         @return boolean, indicating, if frame is moveable in given environment
645*b1cdbd2cSJim Jagielski     */
646*b1cdbd2cSJim Jagielski //    sal_Bool IsMoveable() const;
647*b1cdbd2cSJim Jagielski     bool IsMoveable( const SwLayoutFrm* _pLayoutFrm = 0L ) const;
648*b1cdbd2cSJim Jagielski 
649*b1cdbd2cSJim Jagielski 	//Ist es fuer den (Txt)Frm in der aktuellen Umgebung erlaubt eine
650*b1cdbd2cSJim Jagielski 	//Fussnote einzufuegen (nicht z.B. in wiederholten TabellenHeadlines).
651*b1cdbd2cSJim Jagielski 	sal_Bool IsFtnAllowed() const;
652*b1cdbd2cSJim Jagielski 
653*b1cdbd2cSJim Jagielski 	virtual void  Format( const SwBorderAttrs *pAttrs = 0 );
654*b1cdbd2cSJim Jagielski 
655*b1cdbd2cSJim Jagielski     virtual void  CheckDirection( sal_Bool bVert );
656*b1cdbd2cSJim Jagielski 
657*b1cdbd2cSJim Jagielski 	void ReinitializeFrmSizeAttrFlags();
658*b1cdbd2cSJim Jagielski 
659*b1cdbd2cSJim Jagielski 	const SwAttrSet	*GetAttrSet() const;
660*b1cdbd2cSJim Jagielski 
HasFixSize() const661*b1cdbd2cSJim Jagielski     inline sal_Bool HasFixSize() const { return bFixSize; }
SetFixSize(sal_Bool bNew)662*b1cdbd2cSJim Jagielski     inline void SetFixSize( sal_Bool bNew ) { bFixSize = bNew; }
663*b1cdbd2cSJim Jagielski 
664*b1cdbd2cSJim Jagielski 	//Prueft alle Seiten ab der Uebergebenen und korrigiert ggf.
665*b1cdbd2cSJim Jagielski 	static void CheckPageDescs( SwPageFrm *pStart, sal_Bool bNotifyFields = sal_True );
666*b1cdbd2cSJim Jagielski 
667*b1cdbd2cSJim Jagielski 		//Koennen 0 liefern, einmal const einmal nicht
GetNext()668*b1cdbd2cSJim Jagielski 	SwFrm				*GetNext()	{ return pNext; }
GetPrev()669*b1cdbd2cSJim Jagielski 	SwFrm				*GetPrev()	{ return pPrev; }
GetUpper()670*b1cdbd2cSJim Jagielski 	SwLayoutFrm			*GetUpper()	{ return pUpper; }
getRootFrm()671*b1cdbd2cSJim Jagielski 	SwRootFrm			*getRootFrm(){ return mpRoot; }
672*b1cdbd2cSJim Jagielski 	SwPageFrm	   		*FindPageFrm();
673*b1cdbd2cSJim Jagielski 	SwFrm				*FindColFrm();
674*b1cdbd2cSJim Jagielski 	SwFtnBossFrm		*FindFtnBossFrm( sal_Bool bFootnotes = sal_False );
675*b1cdbd2cSJim Jagielski 	SwTabFrm			*ImplFindTabFrm();
676*b1cdbd2cSJim Jagielski 	SwFtnFrm			*ImplFindFtnFrm();
677*b1cdbd2cSJim Jagielski 	SwFlyFrm 			*ImplFindFlyFrm();
678*b1cdbd2cSJim Jagielski 	SwSectionFrm		*ImplFindSctFrm();
679*b1cdbd2cSJim Jagielski 	SwFrm				*FindFooterOrHeader();
680*b1cdbd2cSJim Jagielski 	SwFrm				*GetLower();
GetNext() const681*b1cdbd2cSJim Jagielski 	const SwFrm			*GetNext()	const { return pNext; }
GetPrev() const682*b1cdbd2cSJim Jagielski 	const SwFrm			*GetPrev()	const { return pPrev; }
GetUpper() const683*b1cdbd2cSJim Jagielski 	const SwLayoutFrm	*GetUpper()	const { return pUpper; }
getRootFrm() const684*b1cdbd2cSJim Jagielski 	const SwRootFrm     *getRootFrm()	const { return mpRoot; }
685*b1cdbd2cSJim Jagielski 	inline SwTabFrm		*FindTabFrm();
686*b1cdbd2cSJim Jagielski 	inline SwFtnFrm		*FindFtnFrm();
687*b1cdbd2cSJim Jagielski 	inline SwFlyFrm 	*FindFlyFrm();
688*b1cdbd2cSJim Jagielski 	inline SwSectionFrm	*FindSctFrm();
689*b1cdbd2cSJim Jagielski 	inline SwFrm		*FindNext();
690*b1cdbd2cSJim Jagielski     // --> OD 2005-12-01 #i27138# - add parameter <_bInSameFtn>
691*b1cdbd2cSJim Jagielski     inline SwCntntFrm* FindNextCnt( const bool _bInSameFtn = false );
692*b1cdbd2cSJim Jagielski     // <--
693*b1cdbd2cSJim Jagielski 	inline SwFrm		*FindPrev();
694*b1cdbd2cSJim Jagielski 	inline const SwPageFrm *FindPageFrm() const;
695*b1cdbd2cSJim Jagielski 	inline const SwFtnBossFrm *FindFtnBossFrm( sal_Bool bFtn = sal_False ) const;
696*b1cdbd2cSJim Jagielski 	inline const SwFrm     *FindColFrm() const;
697*b1cdbd2cSJim Jagielski 	inline const SwFrm     *FindFooterOrHeader() const;
698*b1cdbd2cSJim Jagielski 	inline const SwTabFrm  *FindTabFrm() const;
699*b1cdbd2cSJim Jagielski 	inline const SwFtnFrm  *FindFtnFrm() const;
700*b1cdbd2cSJim Jagielski 	inline const SwFlyFrm  *FindFlyFrm() const;
701*b1cdbd2cSJim Jagielski 	inline const SwSectionFrm *FindSctFrm() const;
702*b1cdbd2cSJim Jagielski 	inline const SwFrm	   *FindNext() const;
703*b1cdbd2cSJim Jagielski     // --> OD 2005-12-01 #i27138# - add parameter <_bInSameFtn>
704*b1cdbd2cSJim Jagielski     inline const SwCntntFrm* FindNextCnt( const bool _bInSameFtn = false ) const;
705*b1cdbd2cSJim Jagielski     // <--
706*b1cdbd2cSJim Jagielski 	inline const SwFrm	   *FindPrev() const;
707*b1cdbd2cSJim Jagielski 		   const SwFrm	   *GetLower()	const;
708*b1cdbd2cSJim Jagielski 
709*b1cdbd2cSJim Jagielski     /** inline wrapper method for <_FindPrevCnt(..)>
710*b1cdbd2cSJim Jagielski 
711*b1cdbd2cSJim Jagielski         OD 2005-11-30 #i27138#
712*b1cdbd2cSJim Jagielski 
713*b1cdbd2cSJim Jagielski         @author OD
714*b1cdbd2cSJim Jagielski     */
FindPrevCnt(const bool _bInSameFtn=false)715*b1cdbd2cSJim Jagielski     inline SwCntntFrm* FindPrevCnt( const bool _bInSameFtn = false )
716*b1cdbd2cSJim Jagielski     {
717*b1cdbd2cSJim Jagielski         if ( GetPrev() && GetPrev()->IsCntntFrm() )
718*b1cdbd2cSJim Jagielski             return (SwCntntFrm*)(GetPrev());
719*b1cdbd2cSJim Jagielski         else
720*b1cdbd2cSJim Jagielski             return _FindPrevCnt( _bInSameFtn );
721*b1cdbd2cSJim Jagielski     }
722*b1cdbd2cSJim Jagielski 
723*b1cdbd2cSJim Jagielski     /** inline const wrapper method for <_FindPrevCnt(..)>
724*b1cdbd2cSJim Jagielski 
725*b1cdbd2cSJim Jagielski         OD 2005-11-30 #i27138#
726*b1cdbd2cSJim Jagielski 
727*b1cdbd2cSJim Jagielski         @author OD
728*b1cdbd2cSJim Jagielski     */
FindPrevCnt(const bool _bInSameFtn=false) const729*b1cdbd2cSJim Jagielski     inline const SwCntntFrm* FindPrevCnt( const bool _bInSameFtn = false ) const
730*b1cdbd2cSJim Jagielski     {
731*b1cdbd2cSJim Jagielski         if ( GetPrev() && GetPrev()->IsCntntFrm() )
732*b1cdbd2cSJim Jagielski             return (const SwCntntFrm*)(GetPrev());
733*b1cdbd2cSJim Jagielski         else
734*b1cdbd2cSJim Jagielski             return const_cast<SwFrm*>(this)->_FindPrevCnt( _bInSameFtn );
735*b1cdbd2cSJim Jagielski     }
736*b1cdbd2cSJim Jagielski 
737*b1cdbd2cSJim Jagielski     // --> OD 2007-09-04 #i79774#, #b6596954#
738*b1cdbd2cSJim Jagielski     SwFrm* _GetIndPrev() const;
GetIndPrev() const739*b1cdbd2cSJim Jagielski     SwFrm* GetIndPrev() const
740*b1cdbd2cSJim Jagielski 		{ return ( pPrev || !IsInSct() ) ? pPrev : _GetIndPrev(); }
741*b1cdbd2cSJim Jagielski //    const SwFrm* GetIndPrev() const { return ((SwFrm*)this)->GetIndPrev(); }
742*b1cdbd2cSJim Jagielski     // <--
GetIndNext()743*b1cdbd2cSJim Jagielski 	SwFrm* GetIndNext()
744*b1cdbd2cSJim Jagielski 		{ return ( pNext || !IsInSct() ) ? pNext : _GetIndNext(); }
GetIndNext() const745*b1cdbd2cSJim Jagielski 	const SwFrm* GetIndNext() const { return ((SwFrm*)this)->GetIndNext(); }
746*b1cdbd2cSJim Jagielski 
747*b1cdbd2cSJim Jagielski 	sal_uInt16 GetPhyPageNum() const;	//Seitennummer ohne Offset
748*b1cdbd2cSJim Jagielski 	sal_uInt16 GetVirtPageNum() const;	//Seitenummer mit Offset
OnRightPage() const749*b1cdbd2cSJim Jagielski 	sal_Bool OnRightPage() const { return 0 != GetPhyPageNum() % 2; };
750*b1cdbd2cSJim Jagielski 	sal_Bool WannaRightPage() const;
751*b1cdbd2cSJim Jagielski 
752*b1cdbd2cSJim Jagielski 
753*b1cdbd2cSJim Jagielski     inline const  SwLayoutFrm *GetPrevLayoutLeaf() const;
754*b1cdbd2cSJim Jagielski     inline const  SwLayoutFrm *GetNextLayoutLeaf() const;
755*b1cdbd2cSJim Jagielski     inline SwLayoutFrm *GetPrevLayoutLeaf();
756*b1cdbd2cSJim Jagielski 	inline SwLayoutFrm *GetNextLayoutLeaf();
757*b1cdbd2cSJim Jagielski 
758*b1cdbd2cSJim Jagielski     inline void Calc() const;       //Hier wird ggf. 'Formatiert'
759*b1cdbd2cSJim Jagielski 	inline void OptCalc() const;    //Hier wird zur Optimierung davon ausgegangen,
760*b1cdbd2cSJim Jagielski 									//das die Vorgaenger bereits formatiert sind.
761*b1cdbd2cSJim Jagielski 
762*b1cdbd2cSJim Jagielski 	inline Point   GetRelPos() const;
Frm() const763*b1cdbd2cSJim Jagielski 	const  SwRect &Frm() const { return aFrm; }
Prt() const764*b1cdbd2cSJim Jagielski 	const  SwRect &Prt() const { return aPrt; }
765*b1cdbd2cSJim Jagielski 
766*b1cdbd2cSJim Jagielski 	// The PaintArea is the area, where content may be displayed.
767*b1cdbd2cSJim Jagielski 	// The margin of the page or the space between columns belongs to her.
768*b1cdbd2cSJim Jagielski 	const SwRect PaintArea() const;
769*b1cdbd2cSJim Jagielski 	// The UnionFrm is the union of frm- and prt-area, normally identical
770*b1cdbd2cSJim Jagielski 	// to the frm-area except the case of negative prt-margins.
771*b1cdbd2cSJim Jagielski 	const SwRect UnionFrm( sal_Bool bBorder = sal_False ) const;
772*b1cdbd2cSJim Jagielski 
773*b1cdbd2cSJim Jagielski 	//Der Zugriff auf die Member wird hier ausnahmsweiste gestattet,
774*b1cdbd2cSJim Jagielski 	//dies soll aber nicht dazu dienen die Werte wahllos zu veraendern;
775*b1cdbd2cSJim Jagielski 	//es ist nur die einzige Moeglichkeit die Compilerprobleme zu umgehen
776*b1cdbd2cSJim Jagielski 	//(gleiche Methode mal public mal protected).
Frm()777*b1cdbd2cSJim Jagielski 	SwRect &Frm() { return aFrm; }
Prt()778*b1cdbd2cSJim Jagielski 	SwRect &Prt() { return aPrt; }
779*b1cdbd2cSJim Jagielski 
780*b1cdbd2cSJim Jagielski 	virtual Size ChgSize( const Size& aNewSize );
781*b1cdbd2cSJim Jagielski 
782*b1cdbd2cSJim Jagielski 	virtual void Cut() = 0;
783*b1cdbd2cSJim Jagielski 	//Solution:Add a method to change the acc table dispose state.
SetAccTableDispose(sal_Bool bDispose)784*b1cdbd2cSJim Jagielski 	void SetAccTableDispose( sal_Bool bDispose){ bIfAccTableShouldDisposing = bDispose;}
785*b1cdbd2cSJim Jagielski 	virtual void Paste( SwFrm* pParent, SwFrm* pSibling = 0 ) = 0;
786*b1cdbd2cSJim Jagielski 
ValidateLineNum()787*b1cdbd2cSJim Jagielski 	void ValidateLineNum() { bValidLineNum = sal_True; }
788*b1cdbd2cSJim Jagielski 
GetValidPosFlag() const789*b1cdbd2cSJim Jagielski 	sal_Bool GetValidPosFlag()	  const { return bValidPos; }
GetValidPrtAreaFlag() const790*b1cdbd2cSJim Jagielski 	sal_Bool GetValidPrtAreaFlag()const { return bValidPrtArea; }
GetValidSizeFlag() const791*b1cdbd2cSJim Jagielski 	sal_Bool GetValidSizeFlag()	  const { return bValidSize; }
GetValidLineNumFlag() const792*b1cdbd2cSJim Jagielski 	sal_Bool GetValidLineNumFlag()const { return bValidLineNum; }
IsValid() const793*b1cdbd2cSJim Jagielski 	sal_Bool IsValid() const { return bValidPos && bValidSize && bValidPrtArea; }
794*b1cdbd2cSJim Jagielski 
795*b1cdbd2cSJim Jagielski     //Invalideren nur den Frm
796*b1cdbd2cSJim Jagielski     // OD 2004-05-19 #i28701# - add call to method <_ActionOnInvalidation(..)>
797*b1cdbd2cSJim Jagielski     // for all invalidation methods.
798*b1cdbd2cSJim Jagielski     // OD 2004-05-19 #i28701# - use method <_InvalidationAllowed(..)> to
799*b1cdbd2cSJim Jagielski     // decide, if invalidation will to be performed or not.
800*b1cdbd2cSJim Jagielski     // --> OD 2004-10-08 #i26945# - no additional invalidation, if it's already
801*b1cdbd2cSJim Jagielski     // invalidate.
_InvalidateSize()802*b1cdbd2cSJim Jagielski     void _InvalidateSize()
803*b1cdbd2cSJim Jagielski     {
804*b1cdbd2cSJim Jagielski         if ( bValidSize && _InvalidationAllowed( INVALID_SIZE ) )
805*b1cdbd2cSJim Jagielski         {
806*b1cdbd2cSJim Jagielski             bValidSize = sal_False;
807*b1cdbd2cSJim Jagielski             _ActionOnInvalidation( INVALID_SIZE );
808*b1cdbd2cSJim Jagielski         }
809*b1cdbd2cSJim Jagielski     }
_InvalidatePrt()810*b1cdbd2cSJim Jagielski     void _InvalidatePrt()
811*b1cdbd2cSJim Jagielski     {
812*b1cdbd2cSJim Jagielski         if ( bValidPrtArea && _InvalidationAllowed( INVALID_PRTAREA ) )
813*b1cdbd2cSJim Jagielski         {
814*b1cdbd2cSJim Jagielski             bValidPrtArea = sal_False;
815*b1cdbd2cSJim Jagielski             _ActionOnInvalidation( INVALID_PRTAREA );
816*b1cdbd2cSJim Jagielski         }
817*b1cdbd2cSJim Jagielski     }
_InvalidatePos()818*b1cdbd2cSJim Jagielski     void _InvalidatePos()
819*b1cdbd2cSJim Jagielski     {
820*b1cdbd2cSJim Jagielski         if ( bValidPos && _InvalidationAllowed( INVALID_POS ) )
821*b1cdbd2cSJim Jagielski         {
822*b1cdbd2cSJim Jagielski             bValidPos = sal_False;
823*b1cdbd2cSJim Jagielski             _ActionOnInvalidation( INVALID_POS );
824*b1cdbd2cSJim Jagielski         }
825*b1cdbd2cSJim Jagielski     }
_InvalidateLineNum()826*b1cdbd2cSJim Jagielski     void _InvalidateLineNum()
827*b1cdbd2cSJim Jagielski     {
828*b1cdbd2cSJim Jagielski         if ( bValidLineNum && _InvalidationAllowed( INVALID_LINENUM ) )
829*b1cdbd2cSJim Jagielski         {
830*b1cdbd2cSJim Jagielski             bValidLineNum = sal_False;
831*b1cdbd2cSJim Jagielski             _ActionOnInvalidation( INVALID_LINENUM );
832*b1cdbd2cSJim Jagielski         }
833*b1cdbd2cSJim Jagielski     }
_InvalidateAll()834*b1cdbd2cSJim Jagielski     void _InvalidateAll()
835*b1cdbd2cSJim Jagielski     {
836*b1cdbd2cSJim Jagielski         if ( ( bValidSize || bValidPrtArea || bValidPos ) &&
837*b1cdbd2cSJim Jagielski              _InvalidationAllowed( INVALID_ALL ) )
838*b1cdbd2cSJim Jagielski         {
839*b1cdbd2cSJim Jagielski             bValidSize = bValidPrtArea = bValidPos = sal_False;
840*b1cdbd2cSJim Jagielski             _ActionOnInvalidation( INVALID_ALL );
841*b1cdbd2cSJim Jagielski         }
842*b1cdbd2cSJim Jagielski     }
843*b1cdbd2cSJim Jagielski     // <--
844*b1cdbd2cSJim Jagielski 	//Benachrichtigen gleich die Seite mit.
845*b1cdbd2cSJim Jagielski 	inline void InvalidateSize();
846*b1cdbd2cSJim Jagielski 	inline void InvalidatePrt();
847*b1cdbd2cSJim Jagielski 	inline void InvalidatePos();
848*b1cdbd2cSJim Jagielski 	inline void InvalidateLineNum();
849*b1cdbd2cSJim Jagielski 	inline void InvalidateAll();
850*b1cdbd2cSJim Jagielski 	void ImplInvalidateSize();
851*b1cdbd2cSJim Jagielski 	void ImplInvalidatePrt();
852*b1cdbd2cSJim Jagielski 	void ImplInvalidatePos();
853*b1cdbd2cSJim Jagielski 	void ImplInvalidateLineNum();
854*b1cdbd2cSJim Jagielski 
855*b1cdbd2cSJim Jagielski 	inline void InvalidateNextPos( sal_Bool bNoFtn = sal_False );
856*b1cdbd2cSJim Jagielski 	void ImplInvalidateNextPos( sal_Bool bNoFtn = sal_False );
857*b1cdbd2cSJim Jagielski 
858*b1cdbd2cSJim Jagielski     /** method to invalidate printing area of next frame
859*b1cdbd2cSJim Jagielski 
860*b1cdbd2cSJim Jagielski         OD 09.01.2004 #i11859#
861*b1cdbd2cSJim Jagielski 
862*b1cdbd2cSJim Jagielski         @author OD
863*b1cdbd2cSJim Jagielski     */
864*b1cdbd2cSJim Jagielski     void InvalidateNextPrtArea();
865*b1cdbd2cSJim Jagielski 
866*b1cdbd2cSJim Jagielski 	void InvalidatePage( const SwPageFrm *pPage = 0 ) const;
867*b1cdbd2cSJim Jagielski 
868*b1cdbd2cSJim Jagielski 	virtual bool    FillSelection( SwSelectionList& rList, const SwRect& rRect ) const;
869*b1cdbd2cSJim Jagielski 
870*b1cdbd2cSJim Jagielski 	virtual sal_Bool	GetCrsrOfst( SwPosition *, Point&,
871*b1cdbd2cSJim Jagielski 								 SwCrsrMoveState* = 0 ) const;
872*b1cdbd2cSJim Jagielski 	virtual sal_Bool	GetCharRect( SwRect &, const SwPosition&,
873*b1cdbd2cSJim Jagielski 								 SwCrsrMoveState* = 0 ) const;
874*b1cdbd2cSJim Jagielski     virtual void Paint( SwRect const&,
875*b1cdbd2cSJim Jagielski                         SwPrintData const*const pPrintData = NULL ) const;
876*b1cdbd2cSJim Jagielski 
877*b1cdbd2cSJim Jagielski 	// der "kurze Dienstweg" zwischen den Frames und der Formatierung.
878*b1cdbd2cSJim Jagielski 	// Wer den void* falsch Casted ist selbst schuld!
879*b1cdbd2cSJim Jagielski 	// Auf jedenfall muss der void* auf 0 geprueft werden.
880*b1cdbd2cSJim Jagielski 	virtual void Prepare( const PrepareHint ePrep = PREP_CLEAR,
881*b1cdbd2cSJim Jagielski 						  const void *pVoid = 0, sal_Bool bNotify = sal_True );
882*b1cdbd2cSJim Jagielski 
883*b1cdbd2cSJim Jagielski 	//sal_True wenn's die richtige Klasse ist, sal_False sonst
884*b1cdbd2cSJim Jagielski 	inline sal_Bool IsLayoutFrm() const;
885*b1cdbd2cSJim Jagielski 	inline sal_Bool IsRootFrm() const;
886*b1cdbd2cSJim Jagielski 	inline sal_Bool IsPageFrm() const;
887*b1cdbd2cSJim Jagielski 	inline sal_Bool IsColumnFrm() const;
888*b1cdbd2cSJim Jagielski 	inline sal_Bool IsFtnBossFrm() const; // Fussnotenbosse sind PageFrms und ColumnFrms
889*b1cdbd2cSJim Jagielski 	inline sal_Bool IsHeaderFrm() const;
890*b1cdbd2cSJim Jagielski 	inline sal_Bool IsFooterFrm() const;
891*b1cdbd2cSJim Jagielski 	inline sal_Bool IsFtnContFrm() const;
892*b1cdbd2cSJim Jagielski 	inline sal_Bool IsFtnFrm() const;
893*b1cdbd2cSJim Jagielski 	inline sal_Bool IsBodyFrm() const;
894*b1cdbd2cSJim Jagielski 	inline sal_Bool IsColBodyFrm() const;	// in layfrm.hxx implementiert, BodyFrm unterhalb ColumnFrm
895*b1cdbd2cSJim Jagielski 	inline sal_Bool IsPageBodyFrm() const;  // in layfrm.hxx implementiert, BodyFrm unterhalb PageFrm
896*b1cdbd2cSJim Jagielski 	inline sal_Bool IsFlyFrm() const;
897*b1cdbd2cSJim Jagielski 	inline sal_Bool IsSctFrm() const;
898*b1cdbd2cSJim Jagielski 	inline sal_Bool IsTabFrm() const;
899*b1cdbd2cSJim Jagielski 	inline sal_Bool IsRowFrm() const;
900*b1cdbd2cSJim Jagielski 	inline sal_Bool IsCellFrm() const;
901*b1cdbd2cSJim Jagielski 	inline sal_Bool IsCntntFrm() const;
902*b1cdbd2cSJim Jagielski 	inline sal_Bool IsTxtFrm() const;
903*b1cdbd2cSJim Jagielski 	inline sal_Bool IsNoTxtFrm() const;
904*b1cdbd2cSJim Jagielski 	inline sal_Bool IsFlowFrm() const;		//Frms deren PrtArea von den Nachbarn
905*b1cdbd2cSJim Jagielski 										//abhaengen und die halt im Inhaltsfluss
906*b1cdbd2cSJim Jagielski 										//stehen.
907*b1cdbd2cSJim Jagielski 	inline sal_Bool IsRetoucheFrm() const;	//Frms die Retouchefaehig sind bzw. die
908*b1cdbd2cSJim Jagielski 										//u.U. hinter sich Retouchieren muessen.
909*b1cdbd2cSJim Jagielski 	inline sal_Bool IsAccessibleFrm() const;
910*b1cdbd2cSJim Jagielski 
911*b1cdbd2cSJim Jagielski 	void PrepareCrsr();					//Die CrsrShell darf.
912*b1cdbd2cSJim Jagielski 
913*b1cdbd2cSJim Jagielski 	//Ist der Frm (bzw. die Section in der er steht) geschuetzt?
914*b1cdbd2cSJim Jagielski 	//Auch Fly in Fly in ... und Fussnoten
915*b1cdbd2cSJim Jagielski 	sal_Bool IsProtected() const;
916*b1cdbd2cSJim Jagielski 
IsColLocked() const917*b1cdbd2cSJim Jagielski 	sal_Bool IsColLocked()	const { return bColLocked; }
918*b1cdbd2cSJim Jagielski 
919*b1cdbd2cSJim Jagielski 	virtual ~SwFrm();
920*b1cdbd2cSJim Jagielski 
921*b1cdbd2cSJim Jagielski     // No inline cause we need the function pointers
922*b1cdbd2cSJim Jagielski     long GetTopMargin() const;
923*b1cdbd2cSJim Jagielski     long GetBottomMargin() const;
924*b1cdbd2cSJim Jagielski     long GetLeftMargin() const;
925*b1cdbd2cSJim Jagielski     long GetRightMargin() const;
926*b1cdbd2cSJim Jagielski     void SetTopBottomMargins( long, long );
927*b1cdbd2cSJim Jagielski     void SetBottomTopMargins( long, long );
928*b1cdbd2cSJim Jagielski     void SetLeftRightMargins( long, long );
929*b1cdbd2cSJim Jagielski     void SetRightLeftMargins( long, long );
930*b1cdbd2cSJim Jagielski     void SetLeftAndWidth( long nLeft, long nWidth );
931*b1cdbd2cSJim Jagielski     void SetTopAndHeight( long nTop, long nHeight );
932*b1cdbd2cSJim Jagielski     void SetRightAndWidth( long nRight, long nWidth );
933*b1cdbd2cSJim Jagielski     void SetBottomAndHeight( long nBottom, long nHeight );
934*b1cdbd2cSJim Jagielski     long GetPrtLeft() const;
935*b1cdbd2cSJim Jagielski     long GetPrtBottom() const;
936*b1cdbd2cSJim Jagielski     long GetPrtRight() const;
937*b1cdbd2cSJim Jagielski     long GetPrtTop() const;
938*b1cdbd2cSJim Jagielski     sal_Bool SetMinLeft( long );
939*b1cdbd2cSJim Jagielski     sal_Bool SetMaxBottom( long );
940*b1cdbd2cSJim Jagielski     sal_Bool SetMaxRight( long );
941*b1cdbd2cSJim Jagielski     sal_Bool SetMinTop( long );
942*b1cdbd2cSJim Jagielski     void MakeBelowPos( const SwFrm*, const SwFrm*, sal_Bool );
943*b1cdbd2cSJim Jagielski     void MakeUpperPos( const SwFrm*, const SwFrm*, sal_Bool );
944*b1cdbd2cSJim Jagielski     void MakeLeftPos( const SwFrm*, const SwFrm*, sal_Bool );
945*b1cdbd2cSJim Jagielski     void MakeRightPos( const SwFrm*, const SwFrm*, sal_Bool );
IsNeighbourFrm() const946*b1cdbd2cSJim Jagielski     inline sal_Bool IsNeighbourFrm() const
947*b1cdbd2cSJim Jagielski         { return GetType() & FRM_NEIGHBOUR ? sal_True : sal_False; }
948*b1cdbd2cSJim Jagielski 
949*b1cdbd2cSJim Jagielski     // --> OD 2006-05-10 #i65250#
GetFrmId() const950*b1cdbd2cSJim Jagielski     inline sal_uInt32 GetFrmId() const { return mnFrmId; }
GetLastFrmId() const951*b1cdbd2cSJim Jagielski     inline sal_uInt32 GetLastFrmId() const { return mnLastFrmId; }
952*b1cdbd2cSJim Jagielski     // <--
953*b1cdbd2cSJim Jagielski 
954*b1cdbd2cSJim Jagielski     // NEW TABELS
955*b1cdbd2cSJim Jagielski     // Some functions for covered/covering table cells. This way unnessessary
956*b1cdbd2cSJim Jagielski     // includes can be avoided
957*b1cdbd2cSJim Jagielski     bool IsLeaveUpperAllowed() const;
958*b1cdbd2cSJim Jagielski     bool IsCoveredCell() const;
959*b1cdbd2cSJim Jagielski     bool IsInCoveredCell() const;
960*b1cdbd2cSJim Jagielski 
961*b1cdbd2cSJim Jagielski     // FME 2007-08-30 #i81146# new loop control
962*b1cdbd2cSJim Jagielski     bool KnowsFormat( const SwFmt& rFmt ) const;
963*b1cdbd2cSJim Jagielski     void RegisterToFormat( SwFmt& rFmt );
964*b1cdbd2cSJim Jagielski     void ValidateThisAndAllLowers( const sal_uInt16 nStage );
965*b1cdbd2cSJim Jagielski };
966*b1cdbd2cSJim Jagielski 
IsInDocBody() const967*b1cdbd2cSJim Jagielski inline sal_Bool	SwFrm::IsInDocBody() const
968*b1cdbd2cSJim Jagielski {
969*b1cdbd2cSJim Jagielski 	if ( bInfInvalid )
970*b1cdbd2cSJim Jagielski 		((SwFrm*)this)->SetInfFlags();
971*b1cdbd2cSJim Jagielski 	return bInfBody;
972*b1cdbd2cSJim Jagielski }
IsInFtn() const973*b1cdbd2cSJim Jagielski inline sal_Bool	SwFrm::IsInFtn() const
974*b1cdbd2cSJim Jagielski {
975*b1cdbd2cSJim Jagielski 	if ( bInfInvalid )
976*b1cdbd2cSJim Jagielski 		((SwFrm*)this)->SetInfFlags();
977*b1cdbd2cSJim Jagielski 	return bInfFtn;
978*b1cdbd2cSJim Jagielski }
IsInTab() const979*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsInTab() const
980*b1cdbd2cSJim Jagielski {
981*b1cdbd2cSJim Jagielski 	if ( bInfInvalid )
982*b1cdbd2cSJim Jagielski 		((SwFrm*)this)->SetInfFlags();
983*b1cdbd2cSJim Jagielski 	return bInfTab;
984*b1cdbd2cSJim Jagielski }
IsInFly() const985*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsInFly() const
986*b1cdbd2cSJim Jagielski {
987*b1cdbd2cSJim Jagielski 	if ( bInfInvalid )
988*b1cdbd2cSJim Jagielski 		((SwFrm*)this)->SetInfFlags();
989*b1cdbd2cSJim Jagielski 	return bInfFly;
990*b1cdbd2cSJim Jagielski }
IsInSct() const991*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsInSct() const
992*b1cdbd2cSJim Jagielski {
993*b1cdbd2cSJim Jagielski 	if ( bInfInvalid )
994*b1cdbd2cSJim Jagielski 		((SwFrm*)this)->SetInfFlags();
995*b1cdbd2cSJim Jagielski 	return bInfSct;
996*b1cdbd2cSJim Jagielski }
IsVertical() const997*b1cdbd2cSJim Jagielski sal_Bool SwFrm::IsVertical() const
998*b1cdbd2cSJim Jagielski {
999*b1cdbd2cSJim Jagielski     if( bInvalidVert )
1000*b1cdbd2cSJim Jagielski         ((SwFrm*)this)->SetDirFlags( sal_True );
1001*b1cdbd2cSJim Jagielski     return bVertical != 0;
1002*b1cdbd2cSJim Jagielski }
1003*b1cdbd2cSJim Jagielski //Badaa: 2008-04-18 * Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
IsVertLR() const1004*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsVertLR() const
1005*b1cdbd2cSJim Jagielski {
1006*b1cdbd2cSJim Jagielski 	return bVertLR != 0;
1007*b1cdbd2cSJim Jagielski }
1008*b1cdbd2cSJim Jagielski //End of SCMS
GetVerticalFlag() const1009*b1cdbd2cSJim Jagielski sal_Bool SwFrm::GetVerticalFlag() const
1010*b1cdbd2cSJim Jagielski {
1011*b1cdbd2cSJim Jagielski     return bVertical != 0;
1012*b1cdbd2cSJim Jagielski }
IsRightToLeft() const1013*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsRightToLeft() const
1014*b1cdbd2cSJim Jagielski {
1015*b1cdbd2cSJim Jagielski     if( bInvalidR2L )
1016*b1cdbd2cSJim Jagielski         ((SwFrm*)this)->SetDirFlags( sal_False );
1017*b1cdbd2cSJim Jagielski     return bRightToLeft != 0;
1018*b1cdbd2cSJim Jagielski }
GetRightToLeftFlag() const1019*b1cdbd2cSJim Jagielski sal_Bool SwFrm::GetRightToLeftFlag() const
1020*b1cdbd2cSJim Jagielski {
1021*b1cdbd2cSJim Jagielski     return bRightToLeft != 0;
1022*b1cdbd2cSJim Jagielski }
1023*b1cdbd2cSJim Jagielski 
SetCompletePaint() const1024*b1cdbd2cSJim Jagielski inline void SwFrm::SetCompletePaint() const
1025*b1cdbd2cSJim Jagielski {
1026*b1cdbd2cSJim Jagielski 	((SwFrm*)this)->bCompletePaint = sal_True;
1027*b1cdbd2cSJim Jagielski }
ResetCompletePaint() const1028*b1cdbd2cSJim Jagielski inline void SwFrm::ResetCompletePaint() const
1029*b1cdbd2cSJim Jagielski {
1030*b1cdbd2cSJim Jagielski 	((SwFrm*)this)->bCompletePaint = sal_False;
1031*b1cdbd2cSJim Jagielski }
1032*b1cdbd2cSJim Jagielski 
SetRetouche() const1033*b1cdbd2cSJim Jagielski inline void SwFrm::SetRetouche() const
1034*b1cdbd2cSJim Jagielski {
1035*b1cdbd2cSJim Jagielski 	((SwFrm*)this)->bRetouche = sal_True;
1036*b1cdbd2cSJim Jagielski }
ResetRetouche() const1037*b1cdbd2cSJim Jagielski inline void SwFrm::ResetRetouche() const
1038*b1cdbd2cSJim Jagielski {
1039*b1cdbd2cSJim Jagielski 	((SwFrm*)this)->bRetouche = sal_False;
1040*b1cdbd2cSJim Jagielski }
1041*b1cdbd2cSJim Jagielski 
GetNextLayoutLeaf()1042*b1cdbd2cSJim Jagielski inline SwLayoutFrm *SwFrm::GetNextLayoutLeaf()
1043*b1cdbd2cSJim Jagielski {
1044*b1cdbd2cSJim Jagielski     return (SwLayoutFrm*)((const SwFrm*)this)->GetNextLayoutLeaf();
1045*b1cdbd2cSJim Jagielski }
1046*b1cdbd2cSJim Jagielski 
GetPrevLayoutLeaf()1047*b1cdbd2cSJim Jagielski inline SwLayoutFrm *SwFrm::GetPrevLayoutLeaf()
1048*b1cdbd2cSJim Jagielski {
1049*b1cdbd2cSJim Jagielski 	return (SwLayoutFrm*)((const SwFrm*)this)->GetPrevLayoutLeaf();
1050*b1cdbd2cSJim Jagielski }
1051*b1cdbd2cSJim Jagielski 
GetNextLayoutLeaf() const1052*b1cdbd2cSJim Jagielski inline const SwLayoutFrm *SwFrm::GetNextLayoutLeaf() const
1053*b1cdbd2cSJim Jagielski {
1054*b1cdbd2cSJim Jagielski     return ImplGetNextLayoutLeaf( true );
1055*b1cdbd2cSJim Jagielski }
1056*b1cdbd2cSJim Jagielski 
GetPrevLayoutLeaf() const1057*b1cdbd2cSJim Jagielski inline const SwLayoutFrm *SwFrm::GetPrevLayoutLeaf() const
1058*b1cdbd2cSJim Jagielski {
1059*b1cdbd2cSJim Jagielski     return ImplGetNextLayoutLeaf( false );
1060*b1cdbd2cSJim Jagielski }
1061*b1cdbd2cSJim Jagielski 
InvalidateSize()1062*b1cdbd2cSJim Jagielski inline void SwFrm::InvalidateSize()
1063*b1cdbd2cSJim Jagielski {
1064*b1cdbd2cSJim Jagielski 	if ( bValidSize )
1065*b1cdbd2cSJim Jagielski 		ImplInvalidateSize();
1066*b1cdbd2cSJim Jagielski }
InvalidatePrt()1067*b1cdbd2cSJim Jagielski inline void SwFrm::InvalidatePrt()
1068*b1cdbd2cSJim Jagielski {
1069*b1cdbd2cSJim Jagielski 	if ( bValidPrtArea )
1070*b1cdbd2cSJim Jagielski 		ImplInvalidatePrt();
1071*b1cdbd2cSJim Jagielski }
InvalidatePos()1072*b1cdbd2cSJim Jagielski inline void SwFrm::InvalidatePos()
1073*b1cdbd2cSJim Jagielski {
1074*b1cdbd2cSJim Jagielski 	if ( bValidPos )
1075*b1cdbd2cSJim Jagielski 		ImplInvalidatePos();
1076*b1cdbd2cSJim Jagielski }
InvalidateLineNum()1077*b1cdbd2cSJim Jagielski inline void SwFrm::InvalidateLineNum()
1078*b1cdbd2cSJim Jagielski {
1079*b1cdbd2cSJim Jagielski 	if ( bValidLineNum )
1080*b1cdbd2cSJim Jagielski 		ImplInvalidateLineNum();
1081*b1cdbd2cSJim Jagielski }
1082*b1cdbd2cSJim Jagielski 
InvalidateAll()1083*b1cdbd2cSJim Jagielski inline void SwFrm::InvalidateAll()
1084*b1cdbd2cSJim Jagielski {
1085*b1cdbd2cSJim Jagielski     if ( _InvalidationAllowed( INVALID_ALL ) )
1086*b1cdbd2cSJim Jagielski     {
1087*b1cdbd2cSJim Jagielski         if ( bValidPrtArea && bValidSize && bValidPos  )
1088*b1cdbd2cSJim Jagielski             ImplInvalidatePos();
1089*b1cdbd2cSJim Jagielski         bValidPrtArea = bValidSize = bValidPos = sal_False;
1090*b1cdbd2cSJim Jagielski 
1091*b1cdbd2cSJim Jagielski         // OD 2004-05-19 #i28701#
1092*b1cdbd2cSJim Jagielski         _ActionOnInvalidation( INVALID_ALL );
1093*b1cdbd2cSJim Jagielski     }
1094*b1cdbd2cSJim Jagielski }
1095*b1cdbd2cSJim Jagielski 
InvalidateNextPos(sal_Bool bNoFtn)1096*b1cdbd2cSJim Jagielski inline void SwFrm::InvalidateNextPos( sal_Bool bNoFtn )
1097*b1cdbd2cSJim Jagielski {
1098*b1cdbd2cSJim Jagielski 	if ( pNext && !pNext->IsSctFrm() )
1099*b1cdbd2cSJim Jagielski 		pNext->InvalidatePos();
1100*b1cdbd2cSJim Jagielski #ifndef C30 // vielleicht geht es ja bei C40 ?
1101*b1cdbd2cSJim Jagielski 	else
1102*b1cdbd2cSJim Jagielski 		ImplInvalidateNextPos( bNoFtn );
1103*b1cdbd2cSJim Jagielski #else
1104*b1cdbd2cSJim Jagielski 	if ( !pNext )
1105*b1cdbd2cSJim Jagielski 		ImplInvalidateNextPos( bNoFtn );
1106*b1cdbd2cSJim Jagielski #endif
1107*b1cdbd2cSJim Jagielski }
1108*b1cdbd2cSJim Jagielski 
Calc() const1109*b1cdbd2cSJim Jagielski inline void SwFrm::Calc() const
1110*b1cdbd2cSJim Jagielski {
1111*b1cdbd2cSJim Jagielski 	if ( !bValidPos || !bValidPrtArea || !bValidSize )
1112*b1cdbd2cSJim Jagielski 		((SwFrm*)this)->PrepareMake();
1113*b1cdbd2cSJim Jagielski }
OptCalc() const1114*b1cdbd2cSJim Jagielski inline void SwFrm::OptCalc() const
1115*b1cdbd2cSJim Jagielski {
1116*b1cdbd2cSJim Jagielski 	if ( !bValidPos || !bValidPrtArea || !bValidSize )
1117*b1cdbd2cSJim Jagielski 		((SwFrm*)this)->OptPrepareMake();
1118*b1cdbd2cSJim Jagielski }
1119*b1cdbd2cSJim Jagielski 
GetRelPos() const1120*b1cdbd2cSJim Jagielski inline Point SwFrm::GetRelPos() const
1121*b1cdbd2cSJim Jagielski {
1122*b1cdbd2cSJim Jagielski 	Point aRet( aFrm.Pos() );
1123*b1cdbd2cSJim Jagielski 		//hier wird gecasted, weil die Klasse SwLayoutFrm nur vorward-
1124*b1cdbd2cSJim Jagielski 		//declariert ist.
1125*b1cdbd2cSJim Jagielski 	aRet -= ((SwFrm*)GetUpper())->Prt().Pos();
1126*b1cdbd2cSJim Jagielski 	aRet -= ((SwFrm*)GetUpper())->Frm().Pos();
1127*b1cdbd2cSJim Jagielski 	return aRet;
1128*b1cdbd2cSJim Jagielski }
1129*b1cdbd2cSJim Jagielski 
FindPageFrm() const1130*b1cdbd2cSJim Jagielski inline const SwPageFrm *SwFrm::FindPageFrm() const
1131*b1cdbd2cSJim Jagielski {
1132*b1cdbd2cSJim Jagielski 	return ((SwFrm*)this)->FindPageFrm();
1133*b1cdbd2cSJim Jagielski }
FindColFrm() const1134*b1cdbd2cSJim Jagielski inline const SwFrm *SwFrm::FindColFrm() const
1135*b1cdbd2cSJim Jagielski {
1136*b1cdbd2cSJim Jagielski 	return ((SwFrm*)this)->FindColFrm();
1137*b1cdbd2cSJim Jagielski }
FindFooterOrHeader() const1138*b1cdbd2cSJim Jagielski inline const SwFrm *SwFrm::FindFooterOrHeader() const
1139*b1cdbd2cSJim Jagielski {
1140*b1cdbd2cSJim Jagielski 	return ((SwFrm*)this)->FindFooterOrHeader();
1141*b1cdbd2cSJim Jagielski }
FindTabFrm()1142*b1cdbd2cSJim Jagielski inline SwTabFrm *SwFrm::FindTabFrm()
1143*b1cdbd2cSJim Jagielski {
1144*b1cdbd2cSJim Jagielski 	return IsInTab() ? ImplFindTabFrm() : 0;
1145*b1cdbd2cSJim Jagielski }
FindFtnBossFrm(sal_Bool bFtn) const1146*b1cdbd2cSJim Jagielski inline const SwFtnBossFrm *SwFrm::FindFtnBossFrm( sal_Bool bFtn ) const
1147*b1cdbd2cSJim Jagielski {
1148*b1cdbd2cSJim Jagielski 	return ((SwFrm*)this)->FindFtnBossFrm( bFtn );
1149*b1cdbd2cSJim Jagielski }
FindFtnFrm()1150*b1cdbd2cSJim Jagielski inline SwFtnFrm *SwFrm::FindFtnFrm()
1151*b1cdbd2cSJim Jagielski {
1152*b1cdbd2cSJim Jagielski 	return IsInFtn() ? ImplFindFtnFrm() : 0;
1153*b1cdbd2cSJim Jagielski }
FindFlyFrm()1154*b1cdbd2cSJim Jagielski inline SwFlyFrm *SwFrm::FindFlyFrm()
1155*b1cdbd2cSJim Jagielski {
1156*b1cdbd2cSJim Jagielski 	return IsInFly() ? ImplFindFlyFrm() : 0;
1157*b1cdbd2cSJim Jagielski }
FindSctFrm()1158*b1cdbd2cSJim Jagielski inline SwSectionFrm *SwFrm::FindSctFrm()
1159*b1cdbd2cSJim Jagielski {
1160*b1cdbd2cSJim Jagielski 	return IsInSct() ? ImplFindSctFrm() : 0;
1161*b1cdbd2cSJim Jagielski }
1162*b1cdbd2cSJim Jagielski 
FindTabFrm() const1163*b1cdbd2cSJim Jagielski inline const SwTabFrm *SwFrm::FindTabFrm() const
1164*b1cdbd2cSJim Jagielski {
1165*b1cdbd2cSJim Jagielski 	return IsInTab() ? ((SwFrm*)this)->ImplFindTabFrm() : 0;
1166*b1cdbd2cSJim Jagielski }
FindFtnFrm() const1167*b1cdbd2cSJim Jagielski inline const SwFtnFrm *SwFrm::FindFtnFrm() const
1168*b1cdbd2cSJim Jagielski {
1169*b1cdbd2cSJim Jagielski 	return IsInFtn() ? ((SwFrm*)this)->ImplFindFtnFrm() : 0;
1170*b1cdbd2cSJim Jagielski }
FindFlyFrm() const1171*b1cdbd2cSJim Jagielski inline const SwFlyFrm *SwFrm::FindFlyFrm() const
1172*b1cdbd2cSJim Jagielski {
1173*b1cdbd2cSJim Jagielski 	return IsInFly() ? ((SwFrm*)this)->ImplFindFlyFrm() : 0;
1174*b1cdbd2cSJim Jagielski }
FindSctFrm() const1175*b1cdbd2cSJim Jagielski inline const SwSectionFrm *SwFrm::FindSctFrm() const
1176*b1cdbd2cSJim Jagielski {
1177*b1cdbd2cSJim Jagielski 	return IsInSct() ? ((SwFrm*)this)->ImplFindSctFrm() : 0;
1178*b1cdbd2cSJim Jagielski }
FindNext()1179*b1cdbd2cSJim Jagielski inline SwFrm *SwFrm::FindNext()
1180*b1cdbd2cSJim Jagielski {
1181*b1cdbd2cSJim Jagielski 	if ( pNext )
1182*b1cdbd2cSJim Jagielski 		return pNext;
1183*b1cdbd2cSJim Jagielski 	else
1184*b1cdbd2cSJim Jagielski 		return _FindNext();
1185*b1cdbd2cSJim Jagielski }
FindNext() const1186*b1cdbd2cSJim Jagielski inline const SwFrm *SwFrm::FindNext() const
1187*b1cdbd2cSJim Jagielski {
1188*b1cdbd2cSJim Jagielski 	if ( pNext )
1189*b1cdbd2cSJim Jagielski 		return pNext;
1190*b1cdbd2cSJim Jagielski 	else
1191*b1cdbd2cSJim Jagielski 		return ((SwFrm*)this)->_FindNext();
1192*b1cdbd2cSJim Jagielski }
1193*b1cdbd2cSJim Jagielski // --> OD 2005-12-01 #i27138# - add parameter <_bInSameFtn>
FindNextCnt(const bool _bInSameFtn)1194*b1cdbd2cSJim Jagielski inline SwCntntFrm *SwFrm::FindNextCnt( const bool _bInSameFtn )
1195*b1cdbd2cSJim Jagielski {
1196*b1cdbd2cSJim Jagielski 	if ( pNext && pNext->IsCntntFrm() )
1197*b1cdbd2cSJim Jagielski 		return (SwCntntFrm*)pNext;
1198*b1cdbd2cSJim Jagielski 	else
1199*b1cdbd2cSJim Jagielski         return _FindNextCnt( _bInSameFtn );
1200*b1cdbd2cSJim Jagielski }
1201*b1cdbd2cSJim Jagielski // <--
1202*b1cdbd2cSJim Jagielski // --> OD 2005-12-01 #i27138# - add parameter <_bInSameFtn>
FindNextCnt(const bool _bInSameFtn) const1203*b1cdbd2cSJim Jagielski inline const SwCntntFrm *SwFrm::FindNextCnt( const bool _bInSameFtn ) const
1204*b1cdbd2cSJim Jagielski {
1205*b1cdbd2cSJim Jagielski 	if ( pNext && pNext->IsCntntFrm() )
1206*b1cdbd2cSJim Jagielski 		return (SwCntntFrm*)pNext;
1207*b1cdbd2cSJim Jagielski 	else
1208*b1cdbd2cSJim Jagielski         return ((SwFrm*)this)->_FindNextCnt( _bInSameFtn );
1209*b1cdbd2cSJim Jagielski }
1210*b1cdbd2cSJim Jagielski // <--
FindPrev()1211*b1cdbd2cSJim Jagielski inline SwFrm *SwFrm::FindPrev()
1212*b1cdbd2cSJim Jagielski {
1213*b1cdbd2cSJim Jagielski 	if ( pPrev && !pPrev->IsSctFrm() )
1214*b1cdbd2cSJim Jagielski 		return pPrev;
1215*b1cdbd2cSJim Jagielski 	else
1216*b1cdbd2cSJim Jagielski 		return _FindPrev();
1217*b1cdbd2cSJim Jagielski }
FindPrev() const1218*b1cdbd2cSJim Jagielski inline const SwFrm *SwFrm::FindPrev() const
1219*b1cdbd2cSJim Jagielski {
1220*b1cdbd2cSJim Jagielski 	if ( pPrev && !pPrev->IsSctFrm() )
1221*b1cdbd2cSJim Jagielski 		return pPrev;
1222*b1cdbd2cSJim Jagielski 	else
1223*b1cdbd2cSJim Jagielski 		return ((SwFrm*)this)->_FindPrev();
1224*b1cdbd2cSJim Jagielski }
1225*b1cdbd2cSJim Jagielski 
1226*b1cdbd2cSJim Jagielski 
IsLayoutFrm() const1227*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsLayoutFrm() const
1228*b1cdbd2cSJim Jagielski {
1229*b1cdbd2cSJim Jagielski     return GetType() & FRM_LAYOUT ? sal_True : sal_False;
1230*b1cdbd2cSJim Jagielski }
IsRootFrm() const1231*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsRootFrm() const
1232*b1cdbd2cSJim Jagielski {
1233*b1cdbd2cSJim Jagielski     return nType == FRMC_ROOT;
1234*b1cdbd2cSJim Jagielski }
IsPageFrm() const1235*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsPageFrm() const
1236*b1cdbd2cSJim Jagielski {
1237*b1cdbd2cSJim Jagielski     return nType == FRMC_PAGE;
1238*b1cdbd2cSJim Jagielski }
IsColumnFrm() const1239*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsColumnFrm() const
1240*b1cdbd2cSJim Jagielski {
1241*b1cdbd2cSJim Jagielski     return nType == FRMC_COLUMN;
1242*b1cdbd2cSJim Jagielski }
IsFtnBossFrm() const1243*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsFtnBossFrm() const
1244*b1cdbd2cSJim Jagielski {
1245*b1cdbd2cSJim Jagielski     return GetType() & FRM_FTNBOSS ? sal_True : sal_False;
1246*b1cdbd2cSJim Jagielski }
IsHeaderFrm() const1247*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsHeaderFrm() const
1248*b1cdbd2cSJim Jagielski {
1249*b1cdbd2cSJim Jagielski     return nType == FRMC_HEADER;
1250*b1cdbd2cSJim Jagielski }
IsFooterFrm() const1251*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsFooterFrm() const
1252*b1cdbd2cSJim Jagielski {
1253*b1cdbd2cSJim Jagielski     return nType == FRMC_FOOTER;
1254*b1cdbd2cSJim Jagielski }
IsFtnContFrm() const1255*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsFtnContFrm() const
1256*b1cdbd2cSJim Jagielski {
1257*b1cdbd2cSJim Jagielski     return nType == FRMC_FTNCONT;
1258*b1cdbd2cSJim Jagielski }
IsFtnFrm() const1259*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsFtnFrm() const
1260*b1cdbd2cSJim Jagielski {
1261*b1cdbd2cSJim Jagielski     return nType == FRMC_FTN;
1262*b1cdbd2cSJim Jagielski }
IsBodyFrm() const1263*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsBodyFrm() const
1264*b1cdbd2cSJim Jagielski {
1265*b1cdbd2cSJim Jagielski     return nType == FRMC_BODY;
1266*b1cdbd2cSJim Jagielski }
IsFlyFrm() const1267*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsFlyFrm() const
1268*b1cdbd2cSJim Jagielski {
1269*b1cdbd2cSJim Jagielski     return nType == FRMC_FLY;
1270*b1cdbd2cSJim Jagielski }
IsSctFrm() const1271*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsSctFrm() const
1272*b1cdbd2cSJim Jagielski {
1273*b1cdbd2cSJim Jagielski     return nType == FRMC_SECTION;
1274*b1cdbd2cSJim Jagielski }
IsTabFrm() const1275*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsTabFrm() const
1276*b1cdbd2cSJim Jagielski {
1277*b1cdbd2cSJim Jagielski     return nType == FRMC_TAB;
1278*b1cdbd2cSJim Jagielski }
IsRowFrm() const1279*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsRowFrm() const
1280*b1cdbd2cSJim Jagielski {
1281*b1cdbd2cSJim Jagielski     return nType == FRMC_ROW;
1282*b1cdbd2cSJim Jagielski }
IsCellFrm() const1283*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsCellFrm() const
1284*b1cdbd2cSJim Jagielski {
1285*b1cdbd2cSJim Jagielski     return nType == FRMC_CELL;
1286*b1cdbd2cSJim Jagielski }
IsCntntFrm() const1287*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsCntntFrm() const
1288*b1cdbd2cSJim Jagielski {
1289*b1cdbd2cSJim Jagielski     return GetType() & FRM_CNTNT ? sal_True : sal_False;
1290*b1cdbd2cSJim Jagielski }
IsTxtFrm() const1291*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsTxtFrm() const
1292*b1cdbd2cSJim Jagielski {
1293*b1cdbd2cSJim Jagielski     return nType == FRMC_TXT;
1294*b1cdbd2cSJim Jagielski }
IsNoTxtFrm() const1295*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsNoTxtFrm() const
1296*b1cdbd2cSJim Jagielski {
1297*b1cdbd2cSJim Jagielski     return nType == FRMC_NOTXT;
1298*b1cdbd2cSJim Jagielski }
IsFlowFrm() const1299*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsFlowFrm() const
1300*b1cdbd2cSJim Jagielski {
1301*b1cdbd2cSJim Jagielski     return GetType() & 0xCA00 ? sal_True : sal_False;   //TabFrm, CntntFrm, SectionFrm
1302*b1cdbd2cSJim Jagielski }
IsRetoucheFrm() const1303*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsRetoucheFrm() const
1304*b1cdbd2cSJim Jagielski {
1305*b1cdbd2cSJim Jagielski     return GetType() & 0xCA40 ? sal_True : sal_False;   //TabFrm, CntntFrm, SectionFrm, Ftnfrm
1306*b1cdbd2cSJim Jagielski }
IsAccessibleFrm() const1307*b1cdbd2cSJim Jagielski inline sal_Bool SwFrm::IsAccessibleFrm() const
1308*b1cdbd2cSJim Jagielski {
1309*b1cdbd2cSJim Jagielski     return GetType() & FRM_ACCESSIBLE ? sal_True : sal_False;
1310*b1cdbd2cSJim Jagielski }
1311*b1cdbd2cSJim Jagielski #endif
1312