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