/************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2008 by Sun Microsystems, Inc. * * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: ftnboss.hxx,v $ * $Revision: 1.5 $ * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ #ifndef _FTNBOSS_HXX #define _FTNBOSS_HXX #include "layfrm.hxx" class SwFtnBossFrm; class SwFtnContFrm; class SwFtnFrm; class SwTxtFtn; //Setzen des maximalen Fussnotenbereiches. Restaurieren des alten Wertes im DTor. //Implementierung im ftnfrm.cxx class SwSaveFtnHeight { SwFtnBossFrm *pBoss; const SwTwips nOldHeight; SwTwips nNewHeight; public: SwSaveFtnHeight( SwFtnBossFrm *pBs, const SwTwips nDeadLine ); ~SwSaveFtnHeight(); }; #define NA_ONLY_ADJUST 0 #define NA_GROW_SHRINK 1 #define NA_GROW_ADJUST 2 #define NA_ADJUST_GROW 3 class SwFtnBossFrm: public SwLayoutFrm { //Fuer die privaten Fussnotenoperationen friend class SwFrm; friend class SwSaveFtnHeight; friend class SwPageFrm; // fuer das Setzen der MaxFtnHeight //Maximale Hoehe des Fussnotencontainers fuer diese Seite. SwTwips nMaxFtnHeight; SwFtnContFrm *MakeFtnCont(); SwFtnFrm *FindFirstFtn(); BYTE _NeighbourhoodAdjustment( const SwFrm* pFrm ) const; protected: void InsertFtn( SwFtnFrm * ); static void ResetFtn( const SwFtnFrm *pAssumed ); public: inline SwFtnBossFrm( SwFrmFmt* pFmt) : SwLayoutFrm( pFmt ) {} SwLayoutFrm *FindBodyCont(); inline const SwLayoutFrm *FindBodyCont() const; inline void SetMaxFtnHeight( const SwTwips nNewMax ) { nMaxFtnHeight = nNewMax; } //Fussnotenschnittstelle void AppendFtn( SwCntntFrm *, SwTxtFtn * ); void RemoveFtn( const SwCntntFrm *, const SwTxtFtn *, BOOL bPrep = TRUE ); static SwFtnFrm *FindFtn( const SwCntntFrm *, const SwTxtFtn * ); SwFtnContFrm *FindFtnCont(); inline const SwFtnContFrm *FindFtnCont() const; const SwFtnFrm *FindFirstFtn( SwCntntFrm* ) const; SwFtnContFrm *FindNearestFtnCont( BOOL bDontLeave = FALSE ); void ChangeFtnRef( const SwCntntFrm *pOld, const SwTxtFtn *, SwCntntFrm *pNew ); void RearrangeFtns( const SwTwips nDeadLine, const BOOL bLock = FALSE, const SwTxtFtn *pAttr = 0 ); //SS damit der Textformatierer Temporaer die Fussnotenhoehe begrenzen //kann. DeadLine in Dokumentkoordinaten. void SetFtnDeadLine( const SwTwips nDeadLine ); SwTwips GetMaxFtnHeight() const { return nMaxFtnHeight; } //Liefert den Wert, der noch uebrig ist, bis der Body seine minimale //Hoehe erreicht hat. SwTwips GetVarSpace() const; //Layoutseitig benoetigte Methoden /// OD 03.04.2003 #108446# - add parameters <_bCollectOnlyPreviousFtns> and /// <_pRefFtnBossFrm> in order to control, if only footnotes, which are positioned /// before the given reference footnote boss frame have to be collected. /// Note: if parameter <_bCollectOnlyPreviousFtns> is true, then parameter /// <_pRefFtnBossFrm> have to be referenced to an object. static void _CollectFtns( const SwCntntFrm* _pRef, SwFtnFrm* _pFtn, SvPtrarr& _rFtnArr, const sal_Bool _bCollectOnlyPreviousFtns = sal_False, const SwFtnBossFrm* _pRefFtnBossFrm = NULL); /// OD 03.04.2003 #108446# - add parameter <_bCollectOnlyPreviousFtns> in /// order to control, if only footnotes, which are positioned before the /// footnote boss frame have to be collected. void CollectFtns( const SwCntntFrm* _pRef, SwFtnBossFrm* _pOld, SvPtrarr& _rFtnArr, const sal_Bool _bCollectOnlyPreviousFtns = sal_False ); void _MoveFtns( SvPtrarr &rFtnArr, BOOL bCalc = FALSE ); void MoveFtns( const SwCntntFrm *pSrc, SwCntntFrm *pDest, SwTxtFtn *pAttr ); // Sollte AdjustNeighbourhood gerufen werden (oder Grow/Shrink)? BYTE NeighbourhoodAdjustment( const SwFrm* pFrm ) const { return IsPageFrm() ? NA_ONLY_ADJUST : _NeighbourhoodAdjustment( pFrm ); } }; inline const SwLayoutFrm *SwFtnBossFrm::FindBodyCont() const { return ((SwFtnBossFrm*)this)->FindBodyCont(); } inline const SwFtnContFrm *SwFtnBossFrm::FindFtnCont() const { return ((SwFtnBossFrm*)this)->FindFtnCont(); } #endif //_FTNBOSS_HXX