1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: ftnboss.hxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
41 //Setzen des maximalen Fussnotenbereiches. Restaurieren des alten Wertes im DTor.
42 //Implementierung im ftnfrm.cxx
46 const SwTwips nOldHeight
;
49 SwSaveFtnHeight( SwFtnBossFrm
*pBs
, const SwTwips nDeadLine
);
53 #define NA_ONLY_ADJUST 0
54 #define NA_GROW_SHRINK 1
55 #define NA_GROW_ADJUST 2
56 #define NA_ADJUST_GROW 3
58 class SwFtnBossFrm
: public SwLayoutFrm
60 //Fuer die privaten Fussnotenoperationen
62 friend class SwSaveFtnHeight
;
63 friend class SwPageFrm
; // fuer das Setzen der MaxFtnHeight
65 //Maximale Hoehe des Fussnotencontainers fuer diese Seite.
66 SwTwips nMaxFtnHeight
;
68 SwFtnContFrm
*MakeFtnCont();
69 SwFtnFrm
*FindFirstFtn();
70 BYTE
_NeighbourhoodAdjustment( const SwFrm
* pFrm
) const;
73 void InsertFtn( SwFtnFrm
* );
74 static void ResetFtn( const SwFtnFrm
*pAssumed
);
76 inline SwFtnBossFrm( SwFrmFmt
* pFmt
) : SwLayoutFrm( pFmt
) {}
78 SwLayoutFrm
*FindBodyCont();
79 inline const SwLayoutFrm
*FindBodyCont() const;
80 inline void SetMaxFtnHeight( const SwTwips nNewMax
) { nMaxFtnHeight
= nNewMax
; }
82 //Fussnotenschnittstelle
83 void AppendFtn( SwCntntFrm
*, SwTxtFtn
* );
84 void RemoveFtn( const SwCntntFrm
*, const SwTxtFtn
*, BOOL bPrep
= TRUE
);
85 static SwFtnFrm
*FindFtn( const SwCntntFrm
*, const SwTxtFtn
* );
86 SwFtnContFrm
*FindFtnCont();
87 inline const SwFtnContFrm
*FindFtnCont() const;
88 const SwFtnFrm
*FindFirstFtn( SwCntntFrm
* ) const;
89 SwFtnContFrm
*FindNearestFtnCont( BOOL bDontLeave
= FALSE
);
91 void ChangeFtnRef( const SwCntntFrm
*pOld
, const SwTxtFtn
*,
93 void RearrangeFtns( const SwTwips nDeadLine
, const BOOL bLock
= FALSE
,
94 const SwTxtFtn
*pAttr
= 0 );
96 //SS damit der Textformatierer Temporaer die Fussnotenhoehe begrenzen
97 //kann. DeadLine in Dokumentkoordinaten.
98 void SetFtnDeadLine( const SwTwips nDeadLine
);
99 SwTwips
GetMaxFtnHeight() const { return nMaxFtnHeight
; }
101 //Liefert den Wert, der noch uebrig ist, bis der Body seine minimale
102 //Hoehe erreicht hat.
103 SwTwips
GetVarSpace() const;
105 //Layoutseitig benoetigte Methoden
106 /// OD 03.04.2003 #108446# - add parameters <_bCollectOnlyPreviousFtns> and
107 /// <_pRefFtnBossFrm> in order to control, if only footnotes, which are positioned
108 /// before the given reference footnote boss frame have to be collected.
109 /// Note: if parameter <_bCollectOnlyPreviousFtns> is true, then parameter
110 /// <_pRefFtnBossFrm> have to be referenced to an object.
111 static void _CollectFtns( const SwCntntFrm
* _pRef
,
114 const sal_Bool _bCollectOnlyPreviousFtns
= sal_False
,
115 const SwFtnBossFrm
* _pRefFtnBossFrm
= NULL
);
116 /// OD 03.04.2003 #108446# - add parameter <_bCollectOnlyPreviousFtns> in
117 /// order to control, if only footnotes, which are positioned before the
118 /// footnote boss frame <this> have to be collected.
119 void CollectFtns( const SwCntntFrm
* _pRef
,
122 const sal_Bool _bCollectOnlyPreviousFtns
= sal_False
);
123 void _MoveFtns( SvPtrarr
&rFtnArr
, BOOL bCalc
= FALSE
);
124 void MoveFtns( const SwCntntFrm
*pSrc
, SwCntntFrm
*pDest
,
126 // Sollte AdjustNeighbourhood gerufen werden (oder Grow/Shrink)?
127 BYTE
NeighbourhoodAdjustment( const SwFrm
* pFrm
) const
128 { return IsPageFrm() ? NA_ONLY_ADJUST
: _NeighbourhoodAdjustment( pFrm
); }
131 inline const SwLayoutFrm
*SwFtnBossFrm::FindBodyCont() const
133 return ((SwFtnBossFrm
*)this)->FindBodyCont();
135 inline const SwFtnContFrm
*SwFtnBossFrm::FindFtnCont() const
137 return ((SwFtnBossFrm
*)this)->FindFtnCont();
140 #endif //_FTNBOSS_HXX