1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 #ifndef _CNTFRM_HXX 28 #define _CNTFRM_HXX 29 #include "frame.hxx" 30 #include "flowfrm.hxx" 31 #include "cshtyp.hxx" 32 33 class SwLayoutFrm; 34 class SwCntntNode; 35 class SwBorderAttrs; 36 class SwAttrSetChg; 37 class SwTxtFrm; 38 39 //Implementiert in cntfrm.cxx, wird von cntfrm.cxx und crsrsh.cxx angezogen 40 extern sal_Bool GetFrmInPage( const SwCntntFrm*, SwWhichPage, SwPosPage, SwPaM* ); 41 42 class SwCntntFrm: public SwFrm, public SwFlowFrm 43 { 44 friend void MakeNxt( SwFrm *pFrm, SwFrm *pNxt ); //ruft MakePrtArea 45 46 // --> OD 2007-11-26 #b6614158# 47 // parameter <bObjsInNewUpper>, indicating that objects are existing in 48 // remaining area of new upper 49 sal_Bool _WouldFit( SwTwips nSpace, 50 SwLayoutFrm *pNewUpper, 51 sal_Bool bTstMove, 52 const bool bObjsInNewUpper ); 53 // <-- 54 virtual void MakeAll(); 55 56 void _UpdateAttr( const SfxPoolItem*, const SfxPoolItem*, sal_uInt8 &, 57 SwAttrSetChg *pa = 0, SwAttrSetChg *pb = 0 ); 58 59 virtual sal_Bool ShouldBwdMoved( SwLayoutFrm *pNewUpper, sal_Bool, sal_Bool& ); 60 61 const SwCntntFrm* ImplGetNextCntntFrm( bool bFwd ) const; 62 63 protected: 64 65 sal_Bool MakePrtArea( const SwBorderAttrs & ); 66 67 virtual void Modify( const SfxPoolItem*, const SfxPoolItem* ); 68 virtual SwTwips ShrinkFrm( SwTwips, sal_Bool bTst = sal_False, sal_Bool bInfo = sal_False ); 69 virtual SwTwips GrowFrm ( SwTwips, sal_Bool bTst = sal_False, sal_Bool bInfo = sal_False ); 70 71 SwCntntFrm( SwCntntNode * const, SwFrm* ); 72 73 public: 74 virtual ~SwCntntFrm(); 75 TYPEINFO(); //bereits in Basisklassen drin 76 77 virtual void Cut(); 78 virtual void Paste( SwFrm* pParent, SwFrm* pSibling = 0 ); 79 80 inline SwCntntNode *GetNode(); 81 inline const SwCntntNode *GetNode() const; 82 sal_uInt16 GetSectionLevel(); 83 84 inline const SwCntntFrm *GetFollow() const; 85 inline SwCntntFrm *GetFollow(); 86 SwTxtFrm* FindMaster() const; 87 88 //Layoutabhaengiges Cursortravelling 89 virtual sal_Bool LeftMargin( SwPaM * ) const; 90 virtual sal_Bool RightMargin( SwPaM *, sal_Bool bAPI = sal_False ) const; 91 virtual sal_Bool UnitUp( SwPaM *, const SwTwips nOffset = 0, 92 sal_Bool bSetInReadOnly = sal_False ) const; 93 virtual sal_Bool UnitDown( SwPaM *, const SwTwips nOffset = 0, 94 sal_Bool bSetInReadOnly = sal_False ) const; 95 inline sal_Bool StartNextPage( SwPaM * ) const; 96 inline sal_Bool StartPrevPage( SwPaM * ) const; 97 inline sal_Bool StartCurrPage( SwPaM * ) const; 98 inline sal_Bool EndCurrPage( SwPaM * ) const; 99 inline sal_Bool EndNextPage( SwPaM * ) const; 100 inline sal_Bool EndPrevPage( SwPaM * ) const; 101 102 // nMaxHeight is the required height 103 // bSplit indicates, that the paragraph has to be split 104 // bTst indicates, that we are currently doing a test formatting 105 virtual sal_Bool WouldFit( SwTwips &nMaxHeight, sal_Bool &bSplit, sal_Bool bTst ); 106 107 sal_Bool MoveFtnCntFwd( sal_Bool, SwFtnBossFrm* );//von MoveFwd gerufen bei Ftn-Inhalt 108 109 inline SwCntntFrm* GetNextCntntFrm() const; 110 inline SwCntntFrm* GetPrevCntntFrm() const; 111 static bool CalcLowers( SwLayoutFrm* pLay, const SwLayoutFrm* pDontLeave, long nBottom, bool bSkipRowSpanCells ); 112 void RegisterToNode( SwCntntNode& ); 113 static void DelFrms( const SwCntntNode& ); 114 }; 115 116 inline SwCntntFrm* SwCntntFrm::GetNextCntntFrm() const 117 { 118 if ( GetNext() && GetNext()->IsCntntFrm() ) 119 return (SwCntntFrm*)GetNext(); 120 else 121 return (SwCntntFrm*)ImplGetNextCntntFrm( true ); 122 } 123 124 inline SwCntntFrm* SwCntntFrm::GetPrevCntntFrm() const 125 { 126 if ( GetPrev() && GetPrev()->IsCntntFrm() ) 127 return (SwCntntFrm*)GetPrev(); 128 else 129 return (SwCntntFrm*)ImplGetNextCntntFrm( false ); 130 } 131 132 inline SwCntntNode *SwCntntFrm::GetNode() 133 { 134 return (SwCntntNode*)GetDep(); 135 } 136 inline const SwCntntNode *SwCntntFrm::GetNode() const 137 { 138 return (SwCntntNode*)GetDep(); 139 } 140 141 inline const SwCntntFrm *SwCntntFrm::GetFollow() const 142 { 143 return (const SwCntntFrm*)SwFlowFrm::GetFollow(); 144 } 145 inline SwCntntFrm *SwCntntFrm::GetFollow() 146 { 147 return (SwCntntFrm*)SwFlowFrm::GetFollow(); 148 } 149 150 #endif 151