Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #ifndef INCLUDED_SW_SOURCE_CORE_INC_FRAME_HXX
21 : #define INCLUDED_SW_SOURCE_CORE_INC_FRAME_HXX
22 :
23 : #include <vector>
24 : #include <drawinglayer/primitive2d/baseprimitive2d.hxx>
25 : #include <drawinglayer/processor2d/baseprocessor2d.hxx>
26 : #include <editeng/borderline.hxx>
27 : #include "swtypes.hxx"
28 : #include "swrect.hxx"
29 : #include "calbck.hxx"
30 : #include <svl/brdcst.hxx>
31 : #include "IDocumentDrawModelAccess.hxx"
32 :
33 : #include <com/sun/star/style/TabStop.hpp>
34 :
35 : using namespace ::com::sun::star;
36 : class SwLayoutFrm;
37 : class SwRootFrm;
38 : class SwPageFrm;
39 : class SwFlyFrm;
40 : class SwSectionFrm;
41 : class SwFtnFrm;
42 : class SwFtnBossFrm;
43 : class SwTabFrm;
44 : class SwRowFrm;
45 : class SwFlowFrm;
46 : class SwCntntFrm;
47 : class SfxPoolItem;
48 : class SwAttrSet;
49 : class SwViewShell;
50 : class Color;
51 : class SwBorderAttrs;
52 : class SwCache;
53 : class SvxBrushItem;
54 : class XFillStyleItem;
55 : class XFillGradientItem;
56 : class SwSelectionList;
57 : struct SwPosition;
58 : struct SwCrsrMoveState;
59 : class SwFmt;
60 : class SwPrintData;
61 : class SwSortedObjs;
62 : class SwAnchoredObject;
63 : typedef struct _xmlTextWriter *xmlTextWriterPtr;
64 : //UUUU
65 : class FillAttributes;
66 :
67 : // Each FrmType is represented here as a bit.
68 : // The bits must be set in a way that it can be determined with masking of
69 : // which kind of FrmType an instance is _and_ from what classes it was derived.
70 : // Each frame has in its base class a member that must be set by the
71 : // constructors accordingly.
72 : #define FRM_ROOT 0x0001
73 : #define FRM_PAGE 0x0002
74 : #define FRM_COLUMN 0x0004
75 : #define FRM_HEADER 0x0008
76 : #define FRM_FOOTER 0x0010
77 : #define FRM_FTNCONT 0x0020
78 : #define FRM_FTN 0x0040
79 : #define FRM_BODY 0x0080
80 : #define FRM_FLY 0x0100
81 : #define FRM_SECTION 0x0200
82 : #define FRM_UNUSED 0x0400
83 : #define FRM_TAB 0x0800
84 : #define FRM_ROW 0x1000
85 : #define FRM_CELL 0x2000
86 : #define FRM_TXT 0x4000
87 : #define FRM_NOTXT 0x8000
88 :
89 : // for internal use some common combinations
90 : #define FRM_LAYOUT 0x3FFF
91 : #define FRM_CNTNT 0xC000
92 : #define FRM_FTNBOSS 0x0006
93 : #define FRM_ACCESSIBLE (FRM_HEADER|FRM_FOOTER|FRM_FTN|FRM_TXT|FRM_ROOT|FRM_FLY|FRM_TAB|FRM_CELL|FRM_PAGE)
94 :
95 : // The type of the frame is internal represented by the 4-bit value mnType,
96 : // which can expanded to the types above by shifting a bit (0x1 << mnType)
97 : // Here are the corresponding defines for the compressed representation:
98 : #define FRMC_ROOT 0
99 : #define FRMC_PAGE 1
100 : #define FRMC_COLUMN 2
101 : #define FRMC_HEADER 3
102 : #define FRMC_FOOTER 4
103 : #define FRMC_FTNCONT 5
104 : #define FRMC_FTN 6
105 : #define FRMC_BODY 7
106 : #define FRMC_FLY 8
107 : #define FRMC_SECTION 9
108 : #define FRMC_UNUSED 10
109 : #define FRMC_TAB 11
110 : #define FRMC_ROW 12
111 : #define FRMC_CELL 13
112 : #define FRMC_TXT 14
113 : #define FRMC_NOTXT 15
114 :
115 : #define FRM_NEIGHBOUR 0x2004
116 : #define FRM_NOTE_VERT 0x7a60
117 : #define FRM_HEADFOOT 0x0018
118 : #define FRM_BODYFTNC 0x00a0
119 :
120 : class SwFrm;
121 : typedef long (SwFrm:: *SwFrmGet)() const;
122 : typedef sal_Bool (SwFrm:: *SwFrmMax)( long );
123 : typedef void (SwFrm:: *SwFrmMakePos)( const SwFrm*, const SwFrm*, sal_Bool );
124 : typedef long (*SwOperator)( long, long );
125 : typedef void (SwFrm:: *SwFrmSet)( long, long );
126 :
127 : struct SwRectFnCollection
128 : {
129 : SwRectGet fnGetTop;
130 : SwRectGet fnGetBottom;
131 : SwRectGet fnGetLeft;
132 : SwRectGet fnGetRight;
133 : SwRectGet fnGetWidth;
134 : SwRectGet fnGetHeight;
135 : SwRectPoint fnGetPos;
136 : SwRectSize fnGetSize;
137 :
138 : SwRectSet fnSetTop;
139 : SwRectSet fnSetBottom;
140 : SwRectSet fnSetLeft;
141 : SwRectSet fnSetRight;
142 : SwRectSet fnSetWidth;
143 : SwRectSet fnSetHeight;
144 :
145 : SwRectSet fnSubTop;
146 : SwRectSet fnAddBottom;
147 : SwRectSet fnSubLeft;
148 : SwRectSet fnAddRight;
149 : SwRectSet fnAddWidth;
150 : SwRectSet fnAddHeight;
151 :
152 : SwRectSet fnSetPosX;
153 : SwRectSet fnSetPosY;
154 :
155 : SwFrmGet fnGetTopMargin;
156 : SwFrmGet fnGetBottomMargin;
157 : SwFrmGet fnGetLeftMargin;
158 : SwFrmGet fnGetRightMargin;
159 : SwFrmSet fnSetXMargins;
160 : SwFrmSet fnSetYMargins;
161 : SwFrmGet fnGetPrtTop;
162 : SwFrmGet fnGetPrtBottom;
163 : SwFrmGet fnGetPrtLeft;
164 : SwFrmGet fnGetPrtRight;
165 : SwRectDist fnTopDist;
166 : SwRectDist fnBottomDist;
167 : SwRectDist fnLeftDist;
168 : SwRectDist fnRightDist;
169 : SwFrmMax fnSetLimit;
170 : SwRectMax fnOverStep;
171 :
172 : SwRectSetPos fnSetPos;
173 : SwFrmMakePos fnMakePos;
174 : SwOperator fnXDiff;
175 : SwOperator fnYDiff;
176 : SwOperator fnXInc;
177 : SwOperator fnYInc;
178 :
179 : SwRectSetTwice fnSetLeftAndWidth;
180 : SwRectSetTwice fnSetTopAndHeight;
181 : };
182 :
183 : typedef SwRectFnCollection* SwRectFn;
184 :
185 : // Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
186 : extern SwRectFn fnRectHori, fnRectVert, fnRectB2T, fnRectVL2R, fnRectVertL2R;
187 : #define SWRECTFN( pFrm ) bool bVert = pFrm->IsVertical(); \
188 : bool bRev = pFrm->IsReverse(); \
189 : bool bVertL2R = pFrm->IsVertLR(); \
190 : SwRectFn fnRect = bVert ? \
191 : ( bRev ? fnRectVL2R : ( bVertL2R ? fnRectVertL2R : fnRectVert ) ): \
192 : ( bRev ? fnRectB2T : fnRectHori );
193 : #define SWRECTFNX( pFrm ) bool bVertX = pFrm->IsVertical(); \
194 : bool bRevX = pFrm->IsReverse(); \
195 : bool bVertL2RX = pFrm->IsVertLR(); \
196 : SwRectFn fnRectX = bVertX ? \
197 : ( bRevX ? fnRectVL2R : ( bVertL2RX ? fnRectVertL2R : fnRectVert ) ): \
198 : ( bRevX ? fnRectB2T : fnRectHori );
199 : #define SWREFRESHFN( pFrm ) { if( bVert != pFrm->IsVertical() || \
200 : bRev != pFrm->IsReverse() ) \
201 : bVert = pFrm->IsVertical(); \
202 : bRev = pFrm->IsReverse(); \
203 : bVertL2R = pFrm->IsVertLR(); \
204 : fnRect = bVert ? \
205 : ( bRev ? fnRectVL2R : ( bVertL2R ? fnRectVertL2R : fnRectVert ) ): \
206 : ( bRev ? fnRectB2T : fnRectHori ); }
207 : #define SWRECTFN2( pFrm ) bool bVert = pFrm->IsVertical(); \
208 : bool bVertL2R = pFrm->IsVertLR(); \
209 : bool bNeighb = pFrm->IsNeighbourFrm(); \
210 : SwRectFn fnRect = bVert == bNeighb ? \
211 : fnRectHori : ( bVertL2R ? fnRectVertL2R : fnRectVert );
212 : //End of SCMS
213 : #define POS_DIFF( aFrm1, aFrm2 ) \
214 : ( (aFrm1.*fnRect->fnGetTop)() != (aFrm2.*fnRect->fnGetTop)() || \
215 : (aFrm1.*fnRect->fnGetLeft)() != (aFrm2.*fnRect->fnGetLeft)() )
216 :
217 : // for GetNextLeaf/GetPrevLeaf.
218 : enum MakePageType
219 : {
220 : MAKEPAGE_NONE, // do not create page/footnote
221 : MAKEPAGE_APPEND, // only append page if needed
222 : MAKEPAGE_INSERT, // add or append page if needed
223 : MAKEPAGE_FTN, // add footnote if needed
224 : MAKEPAGE_NOSECTION // Don't create section frames
225 : };
226 :
227 : /**
228 : * Base class of the Writer layout elements.
229 : *
230 : * This includes not only fly frames, but everything down to the paragraph
231 : * level: pages, headers, footers, etc. (Inside a paragraph SwLinePortion
232 : * instances are used.)
233 : */
234 : class SwFrm: public SwClient, public SfxBroadcaster
235 : {
236 : // the hidden Frm
237 : friend class SwFlowFrm;
238 : friend class SwLayoutFrm;
239 : friend class SwLooping;
240 :
241 : // voids lower during creation of a column
242 : friend SwFrm *SaveCntnt( SwLayoutFrm *, SwFrm* pStart );
243 : friend void RestoreCntnt( SwFrm *, SwLayoutFrm *, SwFrm *pSibling, bool bGrow );
244 :
245 : #ifdef DBG_UTIL
246 : // remove empty SwSectionFrms from a chain
247 : friend SwFrm* SwClearDummies( SwFrm* pFrm );
248 : #endif
249 :
250 : // for validating a mistakenly invalidated one in SwCntntFrm::MakeAll
251 : friend void ValidateSz( SwFrm *pFrm );
252 : // implemented in text/txtftn.cxx, prevents Ftn oscillation
253 : friend void ValidateTxt( SwFrm *pFrm );
254 :
255 : friend void MakeNxt( SwFrm *pFrm, SwFrm *pNxt );
256 :
257 : // cache for (border) attributes
258 : static SwCache *mpCache;
259 :
260 : bool mbIfAccTableShouldDisposing;
261 :
262 : // #i65250#
263 : // frame ID is now in general available - used for layout loop control
264 : static sal_uInt32 mnLastFrmId;
265 : const sal_uInt32 mnFrmId;
266 :
267 : SwRootFrm *mpRoot;
268 : SwLayoutFrm *mpUpper;
269 : SwFrm *mpNext;
270 : SwFrm *mpPrev;
271 :
272 : SwFrm *_FindNext();
273 : SwFrm *_FindPrev();
274 :
275 : /** method to determine next content frame in the same environment
276 : for a flow frame (content frame, table frame, section frame)
277 :
278 : #i27138# - adding documentation:
279 : Travelling downwards through the layout to determine the next content
280 : frame in the same environment. There are several environments in a
281 : document, which form a closed context regarding this function. These
282 : environments are:
283 : - Each page header
284 : - Each page footer
285 : - Each unlinked fly frame
286 : - Each group of linked fly frames
287 : - All footnotes
288 : - All document body frames
289 : #i27138# - adding parameter <_bInSameFtn>
290 : Its default value is <false>. If its value is <true>, the environment
291 : 'All footnotes' is no longer treated. Instead each footnote is treated
292 : as an own environment.
293 :
294 : @param _bInSameFtn
295 : input parameter - boolean indicating, that the found next content
296 : frame has to be in the same footnote frame. This parameter is only
297 : relevant for flow frames in footnotes.
298 :
299 : @return SwCntntFrm*
300 : pointer to the found next content frame. It's NULL, if none exists.
301 : */
302 : SwCntntFrm* _FindNextCnt( const bool _bInSameFtn = false );
303 :
304 : /** method to determine previous content frame in the same environment
305 : for a flow frame (content frame, table frame, section frame)
306 :
307 : #i27138#
308 : Travelling upwards through the layout to determine the previous content
309 : frame in the same environment. There are several environments in a
310 : document, which form a closed context regarding this function. These
311 : environments are:
312 : - Each page header
313 : - Each page footer
314 : - Each unlinked fly frame
315 : - Each group of linked fly frames
316 : - All footnotes
317 : - All document body frames
318 : #i27138# - adding parameter <_bInSameFtn>
319 : Its default value is <false>. If its value is <true>, the environment
320 : 'All footnotes' is no longer treated. Instead each footnote is treated
321 : as an own environment.
322 :
323 : @param _bInSameFtn
324 : input parameter - boolean indicating, that the found previous content
325 : frame has to be in the same footnote frame. This parameter is only
326 : relevant for flow frames in footnotes.
327 :
328 : @return SwCntntFrm*
329 : pointer to the found previous content frame. It's NULL, if none exists.
330 : */
331 : SwCntntFrm* _FindPrevCnt( const bool _bInSameFtn = false );
332 :
333 : void _UpdateAttrFrm( const SfxPoolItem*, const SfxPoolItem*, sal_uInt8 & );
334 : SwFrm* _GetIndNext();
335 : void SetDirFlags( sal_Bool bVert );
336 :
337 : const SwLayoutFrm* ImplGetNextLayoutLeaf( bool bFwd ) const;
338 :
339 : protected:
340 : SwSortedObjs* mpDrawObjs; // draw objects, can be 0
341 :
342 : SwRect maFrm; // absolute position in document and size of the Frm
343 : SwRect maPrt; // position relatively to Frm and size of PrtArea
344 :
345 : sal_uInt16 mbReverse : 1; // Next line above/at the right side instead
346 : // under/at the left side of the previous line
347 : sal_uInt16 mbInvalidR2L : 1;
348 : sal_uInt16 mbDerivedR2L : 1;
349 : sal_uInt16 mbRightToLeft : 1;
350 : sal_uInt16 mbInvalidVert : 1;
351 : sal_uInt16 mbDerivedVert : 1;
352 : sal_uInt16 mbVertical : 1;
353 : // Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
354 : sal_uInt16 mbVertLR : 1;
355 : sal_uInt16 mnType : 4; //Who am I?
356 :
357 : sal_Bool mbValidPos : 1;
358 : sal_Bool mbValidPrtArea : 1;
359 : sal_Bool mbValidSize : 1;
360 : sal_Bool mbValidLineNum : 1;
361 : sal_Bool mbFixSize : 1;
362 : // if sal_True, frame will be painted completely even content was changed
363 : // only partially. For CntntFrms a border (from Action) will exclusively
364 : // painted if <mbCompletePaint> is sal_True.
365 : sal_Bool mbCompletePaint : 1;
366 : sal_Bool mbRetouche : 1; // frame is responsible for retouching
367 :
368 : protected:
369 : sal_Bool mbInfInvalid : 1; // InfoFlags are invalid
370 : sal_Bool mbInfBody : 1; // Frm is in document body
371 : sal_Bool mbInfTab : 1; // Frm is in a table
372 : sal_Bool mbInfFly : 1; // Frm is in a Fly
373 : sal_Bool mbInfFtn : 1; // Frm is in a footnote
374 : sal_Bool mbInfSct : 1; // Frm is in a section
375 : sal_Bool mbColLocked : 1; // lock Grow/Shrink for column-wise section
376 : // or fly frames, will be set in Format
377 :
378 5975 : void ColLock() { mbColLocked = sal_True; }
379 5975 : void ColUnlock() { mbColLocked = sal_False; }
380 :
381 : void Destroy(); // for ~SwRootFrm
382 :
383 : // Only used by SwRootFrm Ctor to get 'this' into mpRoot...
384 1732 : void setRootFrm( SwRootFrm* pRoot ) { mpRoot = pRoot; }
385 :
386 : SwPageFrm *InsertPage( SwPageFrm *pSibling, sal_Bool bFtn );
387 : void PrepareMake();
388 : void OptPrepareMake();
389 : void MakePos();
390 : // Format next frame of table frame to assure keeping attributes.
391 : // In case of nested tables method <SwFrm::MakeAll()> is called to
392 : // avoid formatting of superior table frame.
393 : friend SwFrm* sw_FormatNextCntntForKeep( SwTabFrm* pTabFrm );
394 :
395 : virtual void MakeAll() = 0;
396 : // adjust frames of a page
397 : SwTwips AdjustNeighbourhood( SwTwips nDiff, sal_Bool bTst = sal_False );
398 :
399 : // change only frame size not the size of PrtArea
400 : virtual SwTwips ShrinkFrm( SwTwips, sal_Bool bTst = sal_False, sal_Bool bInfo = sal_False ) = 0;
401 : virtual SwTwips GrowFrm ( SwTwips, sal_Bool bTst = sal_False, sal_Bool bInfo = sal_False ) = 0;
402 :
403 4440285 : SwModify *GetDep() { return GetRegisteredInNonConst(); }
404 2868368 : const SwModify *GetDep() const { return GetRegisteredIn(); }
405 :
406 : SwFrm( SwModify*, SwFrm* );
407 :
408 : void CheckDir( sal_uInt16 nDir, sal_Bool bVert, sal_Bool bOnlyBiDi, sal_Bool bBrowse );
409 :
410 : /** enumeration for the different invalidations
411 : #i28701#
412 : */
413 : enum InvalidationType
414 : {
415 : INVALID_SIZE, INVALID_PRTAREA, INVALID_POS, INVALID_LINENUM, INVALID_ALL
416 : };
417 :
418 : /** method to determine, if an invalidation is allowed.
419 : #i28701
420 : */
421 : virtual bool _InvalidationAllowed( const InvalidationType _nInvalid ) const;
422 :
423 : /** method to perform additional actions on an invalidation
424 :
425 : #i28701#
426 : Method has *only* to contain actions, which has to be performed on
427 : *every* assignment of the corresponding flag to <sal_False>.
428 : */
429 : virtual void _ActionOnInvalidation( const InvalidationType _nInvalid );
430 :
431 : // draw shadow and borders
432 : void PaintShadow( const SwRect&, SwRect&, const SwBorderAttrs& ) const;
433 : virtual void Modify( const SfxPoolItem*, const SfxPoolItem* ) SAL_OVERRIDE;
434 :
435 : virtual const IDocumentDrawModelAccess* getIDocumentDrawModelAccess( );
436 :
437 : public:
438 0 : virtual uno::Sequence< style::TabStop > GetTabStopInfo( SwTwips )
439 : {
440 0 : return uno::Sequence< style::TabStop >();
441 : }
442 :
443 : TYPEINFO_OVERRIDE(); // already in base class
444 :
445 11389415 : sal_uInt16 GetType() const { return 0x1 << mnType; }
446 :
447 308710 : static SwCache &GetCache() { return *mpCache; }
448 37 : static SwCache *GetCachePtr() { return mpCache; }
449 37 : static void SetCache( SwCache *pNew ) { mpCache = pNew; }
450 :
451 : // change PrtArea size and FrmSize
452 : SwTwips Shrink( SwTwips, sal_Bool bTst = sal_False, sal_Bool bInfo = sal_False );
453 : SwTwips Grow ( SwTwips, sal_Bool bTst = sal_False, sal_Bool bInfo = sal_False );
454 :
455 : // different methods for inserting in layout tree (for performance reasons)
456 :
457 : // insert before pBehind or at the end of the chain below mpUpper
458 : void InsertBefore( SwLayoutFrm* pParent, SwFrm* pBehind );
459 : // insert after pBefore or at the beginnig of the chain below mpUpper
460 : void InsertBehind( SwLayoutFrm *pParent, SwFrm *pBefore );
461 : // insert before pBehind or at the end of the chain while considering
462 : // the siblings of pSct
463 : void InsertGroupBefore( SwFrm* pParent, SwFrm* pWhere, SwFrm* pSct );
464 : void Remove();
465 :
466 : // For internal use only - who ignores this will be put in a sack and has
467 : // to stay there for two days
468 : // Does special treatment for _Get[Next|Prev]Leaf() (for tables).
469 : SwLayoutFrm *GetLeaf( MakePageType eMakePage, sal_Bool bFwd );
470 : SwLayoutFrm *GetNextLeaf ( MakePageType eMakePage );
471 : SwLayoutFrm *GetNextFtnLeaf( MakePageType eMakePage );
472 : SwLayoutFrm *GetNextSctLeaf( MakePageType eMakePage );
473 : SwLayoutFrm *GetNextCellLeaf( MakePageType eMakePage );
474 : SwLayoutFrm *GetPrevLeaf ( MakePageType eMakeFtn = MAKEPAGE_FTN );
475 : SwLayoutFrm *GetPrevFtnLeaf( MakePageType eMakeFtn = MAKEPAGE_FTN );
476 : SwLayoutFrm *GetPrevSctLeaf( MakePageType eMakeFtn = MAKEPAGE_FTN );
477 : SwLayoutFrm *GetPrevCellLeaf( MakePageType eMakeFtn = MAKEPAGE_FTN );
478 : const SwLayoutFrm *GetLeaf ( MakePageType eMakePage, sal_Bool bFwd,
479 : const SwFrm *pAnch ) const;
480 :
481 : sal_Bool WrongPageDesc( SwPageFrm* pNew );
482 :
483 : //#i28701# - new methods to append/remove drawing objects
484 : void AppendDrawObj( SwAnchoredObject& _rNewObj );
485 : void RemoveDrawObj( SwAnchoredObject& _rToRemoveObj );
486 :
487 : // work with chain of FlyFrms
488 : void AppendFly( SwFlyFrm *pNew );
489 : void RemoveFly( SwFlyFrm *pToRemove );
490 487137 : const SwSortedObjs *GetDrawObjs() const { return mpDrawObjs; }
491 865772 : SwSortedObjs *GetDrawObjs() { return mpDrawObjs; }
492 : // #i28701# - change purpose of method and adjust its name
493 : void InvalidateObjs( const bool _bInvaPosOnly,
494 : const bool _bNoInvaOfAsCharAnchoredObjs = true );
495 :
496 : virtual void PaintBorder( const SwRect&, const SwPageFrm *pPage,
497 : const SwBorderAttrs & ) const;
498 : void PaintBaBo( const SwRect&, const SwPageFrm *pPage = 0,
499 : const sal_Bool bLowerBorder = sal_False, const bool bOnlyTxtBackground = false ) const;
500 : void PaintBackground( const SwRect&, const SwPageFrm *pPage,
501 : const SwBorderAttrs &,
502 : const sal_Bool bLowerMode = sal_False,
503 : const sal_Bool bLowerBorder = sal_False,
504 : const bool bOnlyTxtBackground = false ) const;
505 : void PaintBorderLine( const SwRect&, const SwRect&, const SwPageFrm*,
506 : const Color *pColor, const editeng::SvxBorderStyle =
507 : ::com::sun::star::table::BorderLineStyle::SOLID ) const;
508 :
509 : drawinglayer::processor2d::BaseProcessor2D * CreateProcessor2D( ) const;
510 : void ProcessPrimitives( const drawinglayer::primitive2d::Primitive2DSequence& rSequence ) const;
511 :
512 : // FIXME: EasyHack (refactoring): rename method name in all files
513 : // retouch, not in the area of the given Rect!
514 : void Retouche( const SwPageFrm *pPage, const SwRect &rRect ) const;
515 :
516 : sal_Bool GetBackgroundBrush(
517 : boost::shared_ptr< FillAttributes >& rFillAttributes,
518 : const SvxBrushItem*& rpBrush,
519 : const Color*& rpColor,
520 : SwRect &rOrigRect,
521 : sal_Bool bLowerMode ) const;
522 :
523 : inline void SetCompletePaint() const;
524 : inline void ResetCompletePaint() const;
525 178374 : inline sal_Bool IsCompletePaint() const { return mbCompletePaint; }
526 :
527 : inline void SetRetouche() const;
528 : inline void ResetRetouche() const;
529 45848 : inline sal_Bool IsRetouche() const { return mbRetouche; }
530 :
531 : void SetInfFlags();
532 4 : inline void InvalidateInfFlags() { mbInfInvalid = sal_True; }
533 : inline bool IsInDocBody() const; // use InfoFlags, determine flags
534 : inline sal_Bool IsInFtn() const; // if necessary
535 : inline sal_Bool IsInTab() const;
536 : inline sal_Bool IsInFly() const;
537 : inline sal_Bool IsInSct() const;
538 :
539 : // If frame is inside a split table row, this function returns
540 : // the corresponding row frame in the follow table.
541 : const SwRowFrm* IsInSplitTableRow() const;
542 :
543 : // If frame is inside a follow flow row, this function returns
544 : // the corresponding row frame master table
545 : const SwRowFrm* IsInFollowFlowRow() const;
546 :
547 : bool IsInBalancedSection() const;
548 :
549 2348272 : inline bool IsReverse() const { return mbReverse; }
550 : inline void SetReverse( sal_Bool bNew ){ mbReverse = bNew ? 1 : 0; }
551 : inline bool IsVertical() const;
552 : //Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
553 : inline sal_Bool IsVertLR() const;
554 : inline sal_Bool GetVerticalFlag() const;
555 : inline void SetVertical( sal_Bool bNew ){ mbVertical = bNew ? 1 : 0; }
556 : //Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
557 : inline void SetbVertLR( sal_Bool bNew ) { mbVertLR = bNew ? 1 : 0; }
558 3718 : inline void SetDerivedVert( sal_Bool bNew ){ mbDerivedVert = bNew ? 1 : 0; }
559 125967 : inline void SetInvalidVert( sal_Bool bNew) { mbInvalidVert = bNew ? 1 : 0; }
560 : inline bool IsRightToLeft() const;
561 : inline sal_Bool GetRightToLeftFlag() const;
562 : inline void SetRightToLeft( sal_Bool bNew ){ mbRightToLeft = bNew ? 1 : 0; }
563 2822 : inline void SetDerivedR2L( sal_Bool bNew ) { mbDerivedR2L = bNew ? 1 : 0; }
564 19021 : inline void SetInvalidR2L( sal_Bool bNew ) { mbInvalidR2L = bNew ? 1 : 0; }
565 :
566 : void CheckDirChange();
567 : // returns upper left frame position for LTR and
568 : // upper right frame position for Asian / RTL frames
569 : Point GetFrmAnchorPos( sal_Bool bIgnoreFlysAnchoredAtThisFrame ) const;
570 :
571 : /** determine, if frame is moveable in given environment
572 :
573 : method replaced 'old' method <sal_Bool IsMoveable() const>.
574 : Determines, if frame is moveable in given environment. if no environment
575 : is given (parameter _pLayoutFrm == 0L), the movability in the actual
576 : environment (<this->GetUpper()) is checked.
577 :
578 : @param _pLayoutFrm
579 : input parameter - given environment (layout frame), in which the movability
580 : will be checked. If not set ( == 0L ), actual environment is taken.
581 :
582 : @return boolean, indicating, if frame is moveable in given environment
583 : */
584 : bool IsMoveable( const SwLayoutFrm* _pLayoutFrm = 0L ) const;
585 :
586 : // Is it permitted for the (Txt)Frm to add a footnote in the current
587 : // environment (not e.g. for repeating table headlines)
588 : sal_Bool IsFtnAllowed() const;
589 :
590 : virtual void Format( const SwBorderAttrs *pAttrs = 0 );
591 :
592 : virtual void CheckDirection( bool bVert );
593 :
594 : void ReinitializeFrmSizeAttrFlags();
595 :
596 : const SwAttrSet *GetAttrSet() const;
597 :
598 119681 : inline sal_Bool HasFixSize() const { return mbFixSize; }
599 : inline void SetFixSize( sal_Bool bNew ) { mbFixSize = bNew; }
600 :
601 : // check all pages (starting from the given) and correct them if needed
602 : static void CheckPageDescs( SwPageFrm *pStart, sal_Bool bNotifyFields = sal_True, SwPageFrm** ppPrev = 0);
603 :
604 : // might return 0, with and without const
605 2548320 : SwFrm *GetNext() { return mpNext; }
606 628971 : SwFrm *GetPrev() { return mpPrev; }
607 12735224 : SwLayoutFrm *GetUpper() { return mpUpper; }
608 1371918 : SwRootFrm *getRootFrm(){ return mpRoot; }
609 : SwPageFrm *FindPageFrm();
610 : SwFrm *FindColFrm();
611 : SwRowFrm *FindRowFrm();
612 : SwFtnBossFrm *FindFtnBossFrm( sal_Bool bFootnotes = sal_False );
613 : SwTabFrm *ImplFindTabFrm();
614 : SwFtnFrm *ImplFindFtnFrm();
615 : SwFlyFrm *ImplFindFlyFrm();
616 : SwSectionFrm *ImplFindSctFrm();
617 : SwFrm *FindFooterOrHeader();
618 : SwFrm *GetLower();
619 4451537 : const SwFrm *GetNext() const { return mpNext; }
620 1959164 : const SwFrm *GetPrev() const { return mpPrev; }
621 6247798 : const SwLayoutFrm *GetUpper() const { return mpUpper; }
622 829424 : const SwRootFrm *getRootFrm() const { return mpRoot; }
623 : inline SwTabFrm *FindTabFrm();
624 : inline SwFtnFrm *FindFtnFrm();
625 : inline SwFlyFrm *FindFlyFrm();
626 : inline SwSectionFrm *FindSctFrm();
627 : inline SwFrm *FindNext();
628 : // #i27138# - add parameter <_bInSameFtn>
629 : inline SwCntntFrm* FindNextCnt( const bool _bInSameFtn = false );
630 : inline SwFrm *FindPrev();
631 : inline const SwPageFrm *FindPageFrm() const;
632 : inline const SwFtnBossFrm *FindFtnBossFrm( sal_Bool bFtn = sal_False ) const;
633 : inline const SwFrm *FindColFrm() const;
634 : inline const SwFrm *FindFooterOrHeader() const;
635 : inline const SwTabFrm *FindTabFrm() const;
636 : inline const SwFtnFrm *FindFtnFrm() const;
637 : inline const SwFlyFrm *FindFlyFrm() const;
638 : inline const SwSectionFrm *FindSctFrm() const;
639 : inline const SwFrm *FindNext() const;
640 : // #i27138# - add parameter <_bInSameFtn>
641 : inline const SwCntntFrm* FindNextCnt( const bool _bInSameFtn = false ) const;
642 : inline const SwFrm *FindPrev() const;
643 : const SwFrm *GetLower() const;
644 :
645 : /** inline wrapper method for <_FindPrevCnt(..)>
646 : #i27138#
647 : */
648 0 : inline SwCntntFrm* FindPrevCnt( const bool _bInSameFtn = false )
649 : {
650 0 : if ( GetPrev() && GetPrev()->IsCntntFrm() )
651 0 : return (SwCntntFrm*)(GetPrev());
652 : else
653 0 : return _FindPrevCnt( _bInSameFtn );
654 : }
655 :
656 : /** inline const wrapper method for <_FindPrevCnt(..)>
657 : #i27138#
658 : */
659 3 : inline const SwCntntFrm* FindPrevCnt( const bool _bInSameFtn = false ) const
660 : {
661 3 : if ( GetPrev() && GetPrev()->IsCntntFrm() )
662 1 : return (const SwCntntFrm*)(GetPrev());
663 : else
664 2 : return const_cast<SwFrm*>(this)->_FindPrevCnt( _bInSameFtn );
665 : }
666 :
667 : // #i79774#
668 : SwFrm* _GetIndPrev() const;
669 181213 : SwFrm* GetIndPrev() const
670 181213 : { return ( mpPrev || !IsInSct() ) ? mpPrev : _GetIndPrev(); }
671 :
672 152686 : SwFrm* GetIndNext()
673 152686 : { return ( mpNext || !IsInSct() ) ? mpNext : _GetIndNext(); }
674 : const SwFrm* GetIndNext() const { return ((SwFrm*)this)->GetIndNext(); }
675 :
676 : sal_uInt16 GetPhyPageNum() const; // page number without offset
677 : sal_uInt16 GetVirtPageNum() const; // page number with offset
678 5467 : sal_Bool OnRightPage() const { return 0 != GetPhyPageNum() % 2; };
679 : sal_Bool WannaRightPage() const;
680 : bool OnFirstPage() const;
681 :
682 : inline const SwLayoutFrm *GetPrevLayoutLeaf() const;
683 : inline const SwLayoutFrm *GetNextLayoutLeaf() const;
684 : inline SwLayoutFrm *GetPrevLayoutLeaf();
685 : inline SwLayoutFrm *GetNextLayoutLeaf();
686 :
687 : virtual void Calc() const; // here might be "formatted"
688 : inline void OptCalc() const; // here we assume (for optimization) that
689 : // the predecessors are already formatted
690 :
691 : inline Point GetRelPos() const;
692 2804409 : const SwRect &Frm() const { return maFrm; }
693 1120506 : const SwRect &Prt() const { return maPrt; }
694 :
695 : // PaintArea is the area where content might be displayed.
696 : // The margin of a page or the space between columns belongs to it.
697 : const SwRect PaintArea() const;
698 : // UnionFrm is the union of Frm- and PrtArea, normally identical
699 : // to the FrmArea except in case of negative Prt margins.
700 : const SwRect UnionFrm( sal_Bool bBorder = sal_False ) const;
701 :
702 : // HACK: Here we exceptionally allow direct access to members.
703 : // This should not delude into changing those value randomly; it is the
704 : // only option to circumvent compiler problems (same method with public
705 : // and protected).
706 4796421 : SwRect &Frm() { return maFrm; }
707 3333592 : SwRect &Prt() { return maPrt; }
708 :
709 : virtual Size ChgSize( const Size& aNewSize );
710 :
711 : virtual void Cut() = 0;
712 : //Add a method to change the acc table dispose state.
713 494 : void SetAccTableDispose(bool bDispose) { mbIfAccTableShouldDisposing = bDispose;}
714 : virtual void Paste( SwFrm* pParent, SwFrm* pSibling = 0 ) = 0;
715 :
716 25259 : void ValidateLineNum() { mbValidLineNum = sal_True; }
717 :
718 9488 : sal_Bool GetValidPosFlag() const { return mbValidPos; }
719 9099 : sal_Bool GetValidPrtAreaFlag()const { return mbValidPrtArea; }
720 132329 : sal_Bool GetValidSizeFlag() const { return mbValidSize; }
721 63904 : sal_Bool GetValidLineNumFlag()const { return mbValidLineNum; }
722 834458 : sal_Bool IsValid() const { return mbValidPos && mbValidSize && mbValidPrtArea; }
723 :
724 : // Only invalidate Frm
725 : // #i28701# - add call to method <_ActionOnInvalidation(..)>
726 : // for all invalidation methods.
727 : // #i28701# - use method <_InvalidationAllowed(..)> to
728 : // decide, if invalidation will to be performed or not.
729 : // #i26945# - no additional invalidation, if it's already
730 : // invalidate.
731 51809 : void _InvalidateSize()
732 : {
733 51809 : if ( mbValidSize && _InvalidationAllowed( INVALID_SIZE ) )
734 : {
735 10663 : mbValidSize = sal_False;
736 10663 : _ActionOnInvalidation( INVALID_SIZE );
737 : }
738 51809 : }
739 56034 : void _InvalidatePrt()
740 : {
741 56034 : if ( mbValidPrtArea && _InvalidationAllowed( INVALID_PRTAREA ) )
742 : {
743 23204 : mbValidPrtArea = sal_False;
744 23204 : _ActionOnInvalidation( INVALID_PRTAREA );
745 : }
746 56034 : }
747 53521 : void _InvalidatePos()
748 : {
749 53521 : if ( mbValidPos && _InvalidationAllowed( INVALID_POS ) )
750 : {
751 12678 : mbValidPos = sal_False;
752 12678 : _ActionOnInvalidation( INVALID_POS );
753 : }
754 53521 : }
755 25370 : void _InvalidateLineNum()
756 : {
757 25370 : if ( mbValidLineNum && _InvalidationAllowed( INVALID_LINENUM ) )
758 : {
759 1886 : mbValidLineNum = sal_False;
760 1886 : _ActionOnInvalidation( INVALID_LINENUM );
761 : }
762 25370 : }
763 88476 : void _InvalidateAll()
764 : {
765 120488 : if ( ( mbValidSize || mbValidPrtArea || mbValidPos ) &&
766 32012 : _InvalidationAllowed( INVALID_ALL ) )
767 : {
768 32012 : mbValidSize = mbValidPrtArea = mbValidPos = sal_False;
769 32012 : _ActionOnInvalidation( INVALID_ALL );
770 : }
771 88476 : }
772 : // also notify page at the same time
773 : inline void InvalidateSize();
774 : inline void InvalidatePrt();
775 : inline void InvalidatePos();
776 : inline void InvalidateLineNum();
777 : inline void InvalidateAll();
778 : void ImplInvalidateSize();
779 : void ImplInvalidatePrt();
780 : void ImplInvalidatePos();
781 : void ImplInvalidateLineNum();
782 :
783 : inline void InvalidateNextPos( sal_Bool bNoFtn = sal_False );
784 : void ImplInvalidateNextPos( sal_Bool bNoFtn = sal_False );
785 :
786 : /** method to invalidate printing area of next frame
787 : #i11859#
788 : */
789 : void InvalidateNextPrtArea();
790 :
791 : void InvalidatePage( const SwPageFrm *pPage = 0 ) const;
792 :
793 : virtual bool FillSelection( SwSelectionList& rList, const SwRect& rRect ) const;
794 :
795 : virtual bool GetCrsrOfst( SwPosition *, Point&,
796 : SwCrsrMoveState* = 0, bool bTestBackground = false ) const;
797 : virtual bool GetCharRect( SwRect &, const SwPosition&,
798 : SwCrsrMoveState* = 0 ) const;
799 : virtual void Paint( SwRect const&,
800 : SwPrintData const*const pPrintData = NULL ) const;
801 :
802 : // HACK: shortcut between frame and formatting
803 : // It's your own fault if you cast void* incorrectly! In any case check
804 : // the void* for 0.
805 : virtual void Prepare( const PrepareHint ePrep = PREP_CLEAR,
806 : const void *pVoid = 0, bool bNotify = true );
807 :
808 : // sal_True if it is the correct class, sal_False otherwise
809 : inline bool IsLayoutFrm() const;
810 : inline bool IsRootFrm() const;
811 : inline bool IsPageFrm() const;
812 : inline bool IsColumnFrm() const;
813 : inline bool IsFtnBossFrm() const; // footnote bosses might be PageFrms or ColumnFrms
814 : inline bool IsHeaderFrm() const;
815 : inline bool IsFooterFrm() const;
816 : inline bool IsFtnContFrm() const;
817 : inline bool IsFtnFrm() const;
818 : inline bool IsBodyFrm() const;
819 : inline bool IsColBodyFrm() const; // implemented in layfrm.hxx, BodyFrm above ColumnFrm
820 : inline bool IsPageBodyFrm() const; // implemented in layfrm.hxx, BodyFrm above PageFrm
821 : inline bool IsFlyFrm() const;
822 : inline bool IsSctFrm() const;
823 : inline bool IsTabFrm() const;
824 : inline bool IsRowFrm() const;
825 : inline bool IsCellFrm() const;
826 : inline bool IsCntntFrm() const;
827 : inline bool IsTxtFrm() const;
828 : inline bool IsNoTxtFrm() const;
829 : // Frms where its PrtArea depends on their neighbors and that are
830 : // positioned in the content flow
831 : inline bool IsFlowFrm() const;
832 : // Frms that are capable of retouching or that might need to retouch behind
833 : // themselves
834 : inline bool IsRetoucheFrm() const;
835 : inline bool IsAccessibleFrm() const;
836 :
837 : void PrepareCrsr(); // CrsrShell is allowed to call this
838 :
839 : // Is the Frm (or the section containing it) protected? Same for Fly in
840 : // Fly in ... and footnotes
841 : sal_Bool IsProtected() const;
842 :
843 33164 : sal_Bool IsColLocked() const { return mbColLocked; }
844 :
845 : virtual ~SwFrm();
846 :
847 : // No inline cause we need the function pointers
848 : long GetTopMargin() const;
849 : long GetBottomMargin() const;
850 : long GetLeftMargin() const;
851 : long GetRightMargin() const;
852 : void SetTopBottomMargins( long, long );
853 : void SetBottomTopMargins( long, long );
854 : void SetLeftRightMargins( long, long );
855 : void SetRightLeftMargins( long, long );
856 : void SetLeftAndWidth( long nLeft, long nWidth );
857 : void SetTopAndHeight( long nTop, long nHeight );
858 : void SetRightAndWidth( long nRight, long nWidth );
859 : void SetBottomAndHeight( long nBottom, long nHeight );
860 : long GetPrtLeft() const;
861 : long GetPrtBottom() const;
862 : long GetPrtRight() const;
863 : long GetPrtTop() const;
864 : sal_Bool SetMinLeft( long );
865 : sal_Bool SetMaxBottom( long );
866 : sal_Bool SetMaxRight( long );
867 : sal_Bool SetMinTop( long );
868 : void MakeBelowPos( const SwFrm*, const SwFrm*, sal_Bool );
869 : void MakeUpperPos( const SwFrm*, const SwFrm*, sal_Bool );
870 : void MakeLeftPos( const SwFrm*, const SwFrm*, sal_Bool );
871 : void MakeRightPos( const SwFrm*, const SwFrm*, sal_Bool );
872 237399 : inline bool IsNeighbourFrm() const
873 237399 : { return (GetType() & FRM_NEIGHBOUR) != 0; }
874 :
875 : // #i65250#
876 8474 : inline sal_uInt32 GetFrmId() const { return mnFrmId; }
877 : inline sal_uInt32 GetLastFrmId() const { return mnLastFrmId; }
878 :
879 : // NEW TABELS
880 : // Some functions for covered/covering table cells. This way unnessessary
881 : // includes can be avoided
882 : bool IsLeaveUpperAllowed() const;
883 : bool IsCoveredCell() const;
884 : bool IsInCoveredCell() const;
885 :
886 : // #i81146# new loop control
887 : bool KnowsFormat( const SwFmt& rFmt ) const;
888 : void RegisterToFormat( SwFmt& rFmt );
889 : void ValidateThisAndAllLowers( const sal_uInt16 nStage );
890 :
891 : public:
892 : // if writer is NULL, dumps the layout structure as XML in layout.xml
893 : virtual void dumpAsXml(xmlTextWriterPtr writer = NULL);
894 : virtual void dumpInfosAsXml(xmlTextWriterPtr writer);
895 : virtual void dumpAsXmlAttributes(xmlTextWriterPtr writer);
896 : void dumpChildrenAsXml(xmlTextWriterPtr writer);
897 : bool IsCollapse() const;
898 : };
899 :
900 1385325 : inline bool SwFrm::IsInDocBody() const
901 : {
902 1385325 : if ( mbInfInvalid )
903 6912 : ((SwFrm*)this)->SetInfFlags();
904 1385325 : return mbInfBody;
905 : }
906 797117 : inline sal_Bool SwFrm::IsInFtn() const
907 : {
908 797117 : if ( mbInfInvalid )
909 1081 : ((SwFrm*)this)->SetInfFlags();
910 797117 : return mbInfFtn;
911 : }
912 1699616 : inline sal_Bool SwFrm::IsInTab() const
913 : {
914 1699616 : if ( mbInfInvalid )
915 17333 : ((SwFrm*)this)->SetInfFlags();
916 1699616 : return mbInfTab;
917 : }
918 747050 : inline sal_Bool SwFrm::IsInFly() const
919 : {
920 747050 : if ( mbInfInvalid )
921 8779 : ((SwFrm*)this)->SetInfFlags();
922 747050 : return mbInfFly;
923 : }
924 931165 : inline sal_Bool SwFrm::IsInSct() const
925 : {
926 931165 : if ( mbInfInvalid )
927 18162 : ((SwFrm*)this)->SetInfFlags();
928 931165 : return mbInfSct;
929 : }
930 4731049 : bool SwFrm::IsVertical() const
931 : {
932 4731049 : if( mbInvalidVert )
933 778429 : ((SwFrm*)this)->SetDirFlags( sal_True );
934 4731049 : return mbVertical != 0;
935 : }
936 : //Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
937 2424012 : inline sal_Bool SwFrm::IsVertLR() const
938 : {
939 2424012 : return mbVertLR != 0;
940 : }
941 : //End of SCMS
942 19021 : sal_Bool SwFrm::GetVerticalFlag() const
943 : {
944 19021 : return mbVertical != 0;
945 : }
946 2409071 : inline bool SwFrm::IsRightToLeft() const
947 : {
948 2409071 : if( mbInvalidR2L )
949 54607 : ((SwFrm*)this)->SetDirFlags( sal_False );
950 2409071 : return mbRightToLeft != 0;
951 : }
952 19021 : sal_Bool SwFrm::GetRightToLeftFlag() const
953 : {
954 19021 : return mbRightToLeft != 0;
955 : }
956 :
957 178369 : inline void SwFrm::SetCompletePaint() const
958 : {
959 178369 : ((SwFrm*)this)->mbCompletePaint = sal_True;
960 178369 : }
961 49277 : inline void SwFrm::ResetCompletePaint() const
962 : {
963 49277 : ((SwFrm*)this)->mbCompletePaint = sal_False;
964 49277 : }
965 :
966 65188 : inline void SwFrm::SetRetouche() const
967 : {
968 65188 : ((SwFrm*)this)->mbRetouche = sal_True;
969 65188 : }
970 6108 : inline void SwFrm::ResetRetouche() const
971 : {
972 6108 : ((SwFrm*)this)->mbRetouche = sal_False;
973 6108 : }
974 :
975 7270 : inline SwLayoutFrm *SwFrm::GetNextLayoutLeaf()
976 : {
977 7270 : return (SwLayoutFrm*)((const SwFrm*)this)->GetNextLayoutLeaf();
978 : }
979 37132 : inline SwLayoutFrm *SwFrm::GetPrevLayoutLeaf()
980 : {
981 37132 : return (SwLayoutFrm*)((const SwFrm*)this)->GetPrevLayoutLeaf();
982 : }
983 25646 : inline const SwLayoutFrm *SwFrm::GetNextLayoutLeaf() const
984 : {
985 25646 : return ImplGetNextLayoutLeaf( true );
986 : }
987 37177 : inline const SwLayoutFrm *SwFrm::GetPrevLayoutLeaf() const
988 : {
989 37177 : return ImplGetNextLayoutLeaf( false );
990 : }
991 :
992 98996 : inline void SwFrm::InvalidateSize()
993 : {
994 98996 : if ( mbValidSize )
995 15660 : ImplInvalidateSize();
996 98996 : }
997 35467 : inline void SwFrm::InvalidatePrt()
998 : {
999 35467 : if ( mbValidPrtArea )
1000 28056 : ImplInvalidatePrt();
1001 35467 : }
1002 109786 : inline void SwFrm::InvalidatePos()
1003 : {
1004 109786 : if ( mbValidPos )
1005 27054 : ImplInvalidatePos();
1006 109786 : }
1007 20503 : inline void SwFrm::InvalidateLineNum()
1008 : {
1009 20503 : if ( mbValidLineNum )
1010 1964 : ImplInvalidateLineNum();
1011 20503 : }
1012 900 : inline void SwFrm::InvalidateAll()
1013 : {
1014 900 : if ( _InvalidationAllowed( INVALID_ALL ) )
1015 : {
1016 900 : if ( mbValidPrtArea && mbValidSize && mbValidPos )
1017 377 : ImplInvalidatePos();
1018 900 : mbValidPrtArea = mbValidSize = mbValidPos = sal_False;
1019 :
1020 : // #i28701#
1021 900 : _ActionOnInvalidation( INVALID_ALL );
1022 : }
1023 900 : }
1024 63703 : inline void SwFrm::InvalidateNextPos( sal_Bool bNoFtn )
1025 : {
1026 63703 : if ( mpNext && !mpNext->IsSctFrm() )
1027 1674 : mpNext->InvalidatePos();
1028 : else
1029 62029 : ImplInvalidateNextPos( bNoFtn );
1030 63703 : }
1031 :
1032 569415 : inline void SwFrm::Calc() const
1033 : {
1034 569415 : if ( !mbValidPos || !mbValidPrtArea || !mbValidSize )
1035 98340 : ((SwFrm*)this)->PrepareMake();
1036 569415 : }
1037 73670 : inline void SwFrm::OptCalc() const
1038 : {
1039 73670 : if ( !mbValidPos || !mbValidPrtArea || !mbValidSize )
1040 22889 : ((SwFrm*)this)->OptPrepareMake();
1041 73670 : }
1042 :
1043 0 : inline Point SwFrm::GetRelPos() const
1044 : {
1045 0 : Point aRet( maFrm.Pos() );
1046 : // here we cast since SwLayoutFrm is declared only as forwarded
1047 0 : aRet -= ((SwFrm*)GetUpper())->Prt().Pos();
1048 0 : aRet -= ((SwFrm*)GetUpper())->Frm().Pos();
1049 0 : return aRet;
1050 : }
1051 :
1052 438371 : inline const SwPageFrm *SwFrm::FindPageFrm() const
1053 : {
1054 438371 : return ((SwFrm*)this)->FindPageFrm();
1055 : }
1056 5698 : inline const SwFrm *SwFrm::FindColFrm() const
1057 : {
1058 5698 : return ((SwFrm*)this)->FindColFrm();
1059 : }
1060 95751 : inline const SwFrm *SwFrm::FindFooterOrHeader() const
1061 : {
1062 95751 : return ((SwFrm*)this)->FindFooterOrHeader();
1063 : }
1064 192518 : inline SwTabFrm *SwFrm::FindTabFrm()
1065 : {
1066 192518 : return IsInTab() ? ImplFindTabFrm() : 0;
1067 : }
1068 450 : inline const SwFtnBossFrm *SwFrm::FindFtnBossFrm( sal_Bool bFtn ) const
1069 : {
1070 450 : return ((SwFrm*)this)->FindFtnBossFrm( bFtn );
1071 : }
1072 19513 : inline SwFtnFrm *SwFrm::FindFtnFrm()
1073 : {
1074 19513 : return IsInFtn() ? ImplFindFtnFrm() : 0;
1075 : }
1076 18691 : inline SwFlyFrm *SwFrm::FindFlyFrm()
1077 : {
1078 18691 : return IsInFly() ? ImplFindFlyFrm() : 0;
1079 : }
1080 36577 : inline SwSectionFrm *SwFrm::FindSctFrm()
1081 : {
1082 36577 : return IsInSct() ? ImplFindSctFrm() : 0;
1083 : }
1084 :
1085 134080 : inline const SwTabFrm *SwFrm::FindTabFrm() const
1086 : {
1087 134080 : return IsInTab() ? ((SwFrm*)this)->ImplFindTabFrm() : 0;
1088 : }
1089 414 : inline const SwFtnFrm *SwFrm::FindFtnFrm() const
1090 : {
1091 414 : return IsInFtn() ? ((SwFrm*)this)->ImplFindFtnFrm() : 0;
1092 : }
1093 328855 : inline const SwFlyFrm *SwFrm::FindFlyFrm() const
1094 : {
1095 328855 : return IsInFly() ? ((SwFrm*)this)->ImplFindFlyFrm() : 0;
1096 : }
1097 2339 : inline const SwSectionFrm *SwFrm::FindSctFrm() const
1098 : {
1099 2339 : return IsInSct() ? ((SwFrm*)this)->ImplFindSctFrm() : 0;
1100 : }
1101 382272 : inline SwFrm *SwFrm::FindNext()
1102 : {
1103 382272 : if ( mpNext )
1104 373659 : return mpNext;
1105 : else
1106 8613 : return _FindNext();
1107 : }
1108 0 : inline const SwFrm *SwFrm::FindNext() const
1109 : {
1110 0 : if ( mpNext )
1111 0 : return mpNext;
1112 : else
1113 0 : return ((SwFrm*)this)->_FindNext();
1114 : }
1115 : // #i27138# - add parameter <_bInSameFtn>
1116 104990 : inline SwCntntFrm *SwFrm::FindNextCnt( const bool _bInSameFtn )
1117 : {
1118 104990 : if ( mpNext && mpNext->IsCntntFrm() )
1119 55736 : return (SwCntntFrm*)mpNext;
1120 : else
1121 49254 : return _FindNextCnt( _bInSameFtn );
1122 : }
1123 : // #i27138# - add parameter <_bInSameFtn>
1124 13 : inline const SwCntntFrm *SwFrm::FindNextCnt( const bool _bInSameFtn ) const
1125 : {
1126 13 : if ( mpNext && mpNext->IsCntntFrm() )
1127 2 : return (SwCntntFrm*)mpNext;
1128 : else
1129 11 : return ((SwFrm*)this)->_FindNextCnt( _bInSameFtn );
1130 : }
1131 101033 : inline SwFrm *SwFrm::FindPrev()
1132 : {
1133 101033 : if ( mpPrev && !mpPrev->IsSctFrm() )
1134 57930 : return mpPrev;
1135 : else
1136 43103 : return _FindPrev();
1137 : }
1138 395360 : inline const SwFrm *SwFrm::FindPrev() const
1139 : {
1140 395360 : if ( mpPrev && !mpPrev->IsSctFrm() )
1141 320635 : return mpPrev;
1142 : else
1143 74725 : return ((SwFrm*)this)->_FindPrev();
1144 : }
1145 :
1146 2599525 : inline bool SwFrm::IsLayoutFrm() const
1147 : {
1148 2599525 : return GetType() & FRM_LAYOUT;
1149 : }
1150 310064 : inline bool SwFrm::IsRootFrm() const
1151 : {
1152 310064 : return mnType == FRMC_ROOT;
1153 : }
1154 5069887 : inline bool SwFrm::IsPageFrm() const
1155 : {
1156 5069887 : return mnType == FRMC_PAGE;
1157 : }
1158 675589 : inline bool SwFrm::IsColumnFrm() const
1159 : {
1160 675589 : return mnType == FRMC_COLUMN;
1161 : }
1162 121667 : inline bool SwFrm::IsFtnBossFrm() const
1163 : {
1164 121667 : return GetType() & FRM_FTNBOSS;
1165 : }
1166 319616 : inline bool SwFrm::IsHeaderFrm() const
1167 : {
1168 319616 : return mnType == FRMC_HEADER;
1169 : }
1170 482159 : inline bool SwFrm::IsFooterFrm() const
1171 : {
1172 482159 : return mnType == FRMC_FOOTER;
1173 : }
1174 88203 : inline bool SwFrm::IsFtnContFrm() const
1175 : {
1176 88203 : return mnType == FRMC_FTNCONT;
1177 : }
1178 259772 : inline bool SwFrm::IsFtnFrm() const
1179 : {
1180 259772 : return mnType == FRMC_FTN;
1181 : }
1182 387852 : inline bool SwFrm::IsBodyFrm() const
1183 : {
1184 387852 : return mnType == FRMC_BODY;
1185 : }
1186 6695129 : inline bool SwFrm::IsFlyFrm() const
1187 : {
1188 6695129 : return mnType == FRMC_FLY;
1189 : }
1190 3054683 : inline bool SwFrm::IsSctFrm() const
1191 : {
1192 3054683 : return mnType == FRMC_SECTION;
1193 : }
1194 2635843 : inline bool SwFrm::IsTabFrm() const
1195 : {
1196 2635843 : return mnType == FRMC_TAB;
1197 : }
1198 1279172 : inline bool SwFrm::IsRowFrm() const
1199 : {
1200 1279172 : return mnType == FRMC_ROW;
1201 : }
1202 1486725 : inline bool SwFrm::IsCellFrm() const
1203 : {
1204 1486725 : return mnType == FRMC_CELL;
1205 : }
1206 5800305 : inline bool SwFrm::IsCntntFrm() const
1207 : {
1208 5800305 : return GetType() & FRM_CNTNT;
1209 : }
1210 3523926 : inline bool SwFrm::IsTxtFrm() const
1211 : {
1212 3523926 : return mnType == FRMC_TXT;
1213 : }
1214 84184 : inline bool SwFrm::IsNoTxtFrm() const
1215 : {
1216 84184 : return mnType == FRMC_NOTXT;
1217 : }
1218 923870 : inline bool SwFrm::IsFlowFrm() const
1219 : {
1220 923870 : return GetType() & 0xCA00; //TabFrm, CntntFrm, SectionFrm
1221 : }
1222 61747 : inline bool SwFrm::IsRetoucheFrm() const
1223 : {
1224 61747 : return GetType() & 0xCA40; //TabFrm, CntntFrm, SectionFrm, Ftnfrm
1225 : }
1226 189217 : inline bool SwFrm::IsAccessibleFrm() const
1227 : {
1228 189217 : return GetType() & FRM_ACCESSIBLE;
1229 : }
1230 : #endif
1231 :
1232 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|