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