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_TABFRM_HXX 24 #define SW_TABFRM_HXX 25 26 #include <tools/mempool.hxx> 27 #include "layfrm.hxx" 28 #include "flowfrm.hxx" 29 30 class SwTable; 31 class SwBorderAttrs; 32 class SwAttrSetChg; 33 34 class SwTabFrm: public SwLayoutFrm, public SwFlowFrm 35 { 36 friend void CalcCntnt( SwLayoutFrm *pLay, bool bNoColl, bool bNoCalcFollow ); 37 38 //Fuert Spezialbehandlung fuer _Get[Next|Prev]Leaf() durch. 39 using SwFrm::GetLeaf; 40 SwLayoutFrm *GetLeaf( MakePageType eMakePage, sal_Bool bFwd ); 41 42 SwTable* pTable; 43 44 sal_Bool bComplete :1; //Eintrage als Repaint ohne das CompletePaint 45 //der Basisklasse gesetzt werden muss. Damit 46 //sollen unertraegliche Tabellen-Repaints 47 //vermieden werden. 48 sal_Bool bCalcLowers :1; //Im MakeAll auf jedenfall auch fuer Stabilitaet 49 //des Inhaltes sorgen. 50 sal_Bool bLowersFormatted :1;//Kommunikation zwischen MakeAll und Layact 51 sal_Bool bLockBackMove :1; //BackMove-Test hat der Master erledigt. 52 sal_Bool bResizeHTMLTable :1; //Resize des HTMLTableLayout rufen im MakeAll 53 //Zur Optimierung, damit dies nicht im 54 //CntntFrm::Grow gerufen werden muss, denn dann 55 //wird es ggf. fuer jede Zelle gerufen #47483# 56 sal_Bool bONECalcLowers :1; //Primaer fuer die StarONE-SS. Beim MakeAll werden 57 //die Cntnts auf jedenfall per Calc() formatiert. 58 //es finden keine zusaetzlichen Invalidierungen 59 //statt und dieser Weg kann auch kaum garantien 60 //geben. 61 62 sal_Bool bHasFollowFlowLine :1; // Means that the first line in the follow 63 // is indented to contain content from a broken 64 // cell 65 sal_Bool bIsRebuildLastLine :1; // Means that currently the last line of the 66 // TabFrame is rebuilded. In this case we 67 // do not want any notification to the master 68 // table 69 sal_Bool bRestrictTableGrowth :1; // Usually, the table may grow infinite, 70 // because the table can be split in 71 // SwTabFrm::MakeAll. In MakeAll, this 72 // flag is set to indicate that the table 73 // may only grow inside its upper. This 74 // is necessary, in order to let the text 75 // flow into the FollowFlowLine 76 sal_Bool bRemoveFollowFlowLinePending :1; 77 sal_Bool bConsiderObjsForMinCellHeight :1; // Usually, the floating screen objects 78 // are considered on the calculation 79 // for the minimal cell height. 80 // For splitting table rows algorithm 81 // it's needed not to consider floating 82 // screen object for the preparation 83 // of the re-calculation of the 84 // last table row. 85 sal_Bool bObjsDoesFit :1; // For splitting table rows algorithm, this boolean 86 // indicates, if the floating screen objects fits 87 88 bool mbInRecalcLowerRow : 1; 89 90 //Split() spaltet den Frm an der angegebenen Stelle, es wird ein 91 //Follow erzeugt und aufgebaut und direkt hinter this gepastet. 92 //Join() Holt sich den Inhalt aus dem Follow und vernichtet diesen. 93 bool Split( const SwTwips nCutPos, bool bTryToSplit, bool bTableRowKeep ); 94 bool Join(); 95 96 void _UpdateAttr( 97 const SfxPoolItem*, 98 const SfxPoolItem*, sal_uInt8 &, 99 SwAttrSetChg *pa = 0, 100 SwAttrSetChg *pb = 0 ); 101 102 virtual sal_Bool ShouldBwdMoved( SwLayoutFrm *pNewUpper, sal_Bool bHead, sal_Bool &rReformat ); 103 104 protected: 105 virtual void MakeAll(); 106 virtual void Format( const SwBorderAttrs *pAttrs = 0 ); 107 virtual void Modify( const SfxPoolItem*, const SfxPoolItem* ); 108 //Aendert nur die Framesize, nicht die PrtArea-SSize 109 virtual SwTwips GrowFrm ( SwTwips, sal_Bool bTst = sal_False, sal_Bool bInfo = sal_False ); 110 111 public: 112 SwTabFrm( SwTable &, SwFrm* ); //Immer nach dem erzeugen _und_ pasten das 113 //Regist Flys rufen! 114 SwTabFrm( SwTabFrm & ); //_Nur_ zum erzeugen von Follows 115 ~SwTabFrm(); 116 117 void JoinAndDelFollows(); //Fuer DelFrms des TableNodes! 118 119 //Ruft das RegistFlys der Zeilen. 120 void RegistFlys(); 121 122 inline const SwTabFrm *GetFollow() const; 123 inline SwTabFrm *GetFollow(); 124 SwTabFrm* FindMaster( bool bFirstMaster = false ) const; 125 126 virtual sal_Bool GetInfo( SfxPoolItem &rHnt ) const; 127 virtual void Paint( SwRect const&, 128 SwPrintData const*const pPrintData = NULL ) const; 129 virtual void CheckDirection( sal_Bool bVert ); 130 131 virtual void Cut(); 132 virtual void Paste( SwFrm* pParent, SwFrm* pSibling = 0 ); 133 134 virtual void Prepare( const PrepareHint ePrep = PREP_CLEAR, 135 const void *pVoid = 0, sal_Bool bNotify = sal_True ); 136 137 SwCntntFrm *FindLastCntnt(); 138 inline const SwCntntFrm *FindLastCntnt() const; 139 140 const SwTable *GetTable() const { return pTable; } 141 SwTable *GetTable() { return pTable; } 142 143 sal_Bool IsComplete() { return bComplete; } 144 void SetComplete() { bComplete = sal_True; } 145 void ResetComplete() { bComplete = sal_False; } 146 147 sal_Bool IsLowersFormatted() const { return bLowersFormatted; } 148 void SetLowersFormatted( sal_Bool b ) { bLowersFormatted = b; } 149 150 void SetCalcLowers() { bCalcLowers = sal_True; } //Sparsam einsetzen! 151 void SetResizeHTMLTable() { bResizeHTMLTable = sal_True; } //dito 152 void SetONECalcLowers() { bONECalcLowers = sal_True; } 153 154 // 155 // Start: New stuff for breaking table rows 156 // 157 sal_Bool HasFollowFlowLine() const { return bHasFollowFlowLine; } 158 void SetFollowFlowLine( sal_Bool bNew ) { bHasFollowFlowLine = bNew; } 159 160 sal_Bool IsRebuildLastLine() const { return bIsRebuildLastLine; } 161 void SetRebuildLastLine( sal_Bool bNew ) { bIsRebuildLastLine = bNew; } 162 163 sal_Bool IsRestrictTableGrowth() const { return bRestrictTableGrowth; } 164 void SetRestrictTableGrowth( sal_Bool bNew ) { bRestrictTableGrowth = bNew; } 165 166 sal_Bool IsRemoveFollowFlowLinePending() const { return bRemoveFollowFlowLinePending; } 167 void SetRemoveFollowFlowLinePending( sal_Bool bNew ) { bRemoveFollowFlowLinePending = bNew; } 168 169 bool IsInRecalcLowerRow() const 170 { 171 return mbInRecalcLowerRow; 172 } 173 void SetInRecalcLowerRow( bool bNew ) 174 { 175 mbInRecalcLowerRow = bNew; 176 } 177 178 sal_Bool IsConsiderObjsForMinCellHeight() const 179 { 180 return bConsiderObjsForMinCellHeight; 181 } 182 void SetConsiderObjsForMinCellHeight( sal_Bool _bNewConsiderObjsForMinCellHeight ) 183 { 184 bConsiderObjsForMinCellHeight = _bNewConsiderObjsForMinCellHeight; 185 } 186 187 sal_Bool DoesObjsFit() const 188 { 189 return bObjsDoesFit; 190 } 191 void SetDoesObjsFit( sal_Bool _bNewObjsDoesFit ) 192 { 193 bObjsDoesFit = _bNewObjsDoesFit; 194 } 195 196 bool RemoveFollowFlowLine(); 197 // 198 // End: New stuff for breaking table rows 199 // 200 201 sal_Bool CalcFlyOffsets( 202 SwTwips& rUpper, 203 long& rLeftOffset, 204 long& rRightOffset ) const; 205 206 SwTwips CalcHeightOfFirstContentLine() const; 207 208 bool IsInHeadline( const SwFrm& rFrm ) const; 209 SwRowFrm* GetFirstNonHeadlineRow() const; 210 211 bool IsLayoutSplitAllowed() const; 212 213 bool IsCollapsingBorders() const; 214 215 sal_uInt16 GetBottomLineSize() const; 216 217 DECL_FIXEDMEMPOOL_NEWDEL(SwTabFrm) 218 }; 219 220 inline const SwCntntFrm *SwTabFrm::FindLastCntnt() const 221 { 222 return ((SwTabFrm*)this)->FindLastCntnt(); 223 } 224 225 inline const SwTabFrm *SwTabFrm::GetFollow() const 226 { 227 return (const SwTabFrm*)SwFlowFrm::GetFollow(); 228 } 229 inline SwTabFrm *SwTabFrm::GetFollow() 230 { 231 return (SwTabFrm*)SwFlowFrm::GetFollow(); 232 } 233 234 #endif // SW_TABFRM_HXX 235