1*1d2dbeb0SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*1d2dbeb0SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*1d2dbeb0SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*1d2dbeb0SAndrew Rist * distributed with this work for additional information 6*1d2dbeb0SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*1d2dbeb0SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*1d2dbeb0SAndrew Rist * "License"); you may not use this file except in compliance 9*1d2dbeb0SAndrew Rist * with the License. You may obtain a copy of the License at 10*1d2dbeb0SAndrew Rist * 11*1d2dbeb0SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*1d2dbeb0SAndrew Rist * 13*1d2dbeb0SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*1d2dbeb0SAndrew Rist * software distributed under the License is distributed on an 15*1d2dbeb0SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*1d2dbeb0SAndrew Rist * KIND, either express or implied. See the License for the 17*1d2dbeb0SAndrew Rist * specific language governing permissions and limitations 18*1d2dbeb0SAndrew Rist * under the License. 19*1d2dbeb0SAndrew Rist * 20*1d2dbeb0SAndrew Rist *************************************************************/ 21*1d2dbeb0SAndrew Rist 22*1d2dbeb0SAndrew Rist 23cdf0e10cSrcweir #ifndef _LAYOUTER_HXX 24cdf0e10cSrcweir #define _LAYOUTER_HXX 25cdf0e10cSrcweir 26cdf0e10cSrcweir #include "swtypes.hxx" 27cdf0e10cSrcweir 28cdf0e10cSrcweir class SwEndnoter; 29cdf0e10cSrcweir class SwDoc; 30cdf0e10cSrcweir class SwSectionFrm; 31cdf0e10cSrcweir class SwFtnFrm; 32cdf0e10cSrcweir class SwPageFrm; 33cdf0e10cSrcweir class SwLooping; 34cdf0e10cSrcweir class IDocumentLayoutAccess; 35cdf0e10cSrcweir 36cdf0e10cSrcweir // --> OD 2004-06-23 #i28701# 37cdf0e10cSrcweir class SwMovedFwdFrmsByObjPos; 38cdf0e10cSrcweir class SwTxtFrm; 39cdf0e10cSrcweir // <-- 40cdf0e10cSrcweir // --> OD 2004-10-05 #i26945# 41cdf0e10cSrcweir class SwRowFrm; 42cdf0e10cSrcweir // <-- 43cdf0e10cSrcweir // --> OD 2004-10-22 #i35911# 44cdf0e10cSrcweir class SwObjsMarkedAsTmpConsiderWrapInfluence; 45cdf0e10cSrcweir class SwAnchoredObject; 46cdf0e10cSrcweir // <-- 47cdf0e10cSrcweir // --> OD 2005-01-12 #i40155# 48cdf0e10cSrcweir #include <vector> 49cdf0e10cSrcweir class SwFrm; 50cdf0e10cSrcweir // <-- 51cdf0e10cSrcweir // --> OD 2006-05-10 #i65250# 52cdf0e10cSrcweir #include <swtypes.hxx> 53cdf0e10cSrcweir #include <hash_map> 54cdf0e10cSrcweir class SwFlowFrm; 55cdf0e10cSrcweir class SwLayoutFrm; 56cdf0e10cSrcweir // <-- 57cdf0e10cSrcweir 58cdf0e10cSrcweir #define LOOP_PAGE 1 59cdf0e10cSrcweir 60cdf0e10cSrcweir class SwLayouter 61cdf0e10cSrcweir { 62cdf0e10cSrcweir SwEndnoter* pEndnoter; 63cdf0e10cSrcweir SwLooping* pLooping; 64cdf0e10cSrcweir void _CollectEndnotes( SwSectionFrm* pSect ); 65cdf0e10cSrcweir sal_Bool StartLooping( SwPageFrm* pPage ); 66cdf0e10cSrcweir 67cdf0e10cSrcweir // --> OD 2004-06-23 #i28701# 68cdf0e10cSrcweir SwMovedFwdFrmsByObjPos* mpMovedFwdFrms; 69cdf0e10cSrcweir // <-- 70cdf0e10cSrcweir // --> OD 2004-10-22 #i35911# 71cdf0e10cSrcweir SwObjsMarkedAsTmpConsiderWrapInfluence* mpObjsTmpConsiderWrapInfl; 72cdf0e10cSrcweir // <-- 73cdf0e10cSrcweir // --> OD 2005-01-12 #i40155# - data structure to collect frames, which are 74cdf0e10cSrcweir // marked not to wrap around objects. 75cdf0e10cSrcweir std::vector< const SwFrm* > maFrmsNotToWrap; 76cdf0e10cSrcweir // <-- 77cdf0e10cSrcweir 78cdf0e10cSrcweir public: 79cdf0e10cSrcweir // --> OD 2006-05-10 #i65250# 80cdf0e10cSrcweir // - data structure to collect moving backward layout information 81cdf0e10cSrcweir struct tMoveBwdLayoutInfoKey 82cdf0e10cSrcweir { 83cdf0e10cSrcweir // frame ID of flow frame 84cdf0e10cSrcweir sal_uInt32 mnFrmId; 85cdf0e10cSrcweir // position of new upper frame 86cdf0e10cSrcweir SwTwips mnNewUpperPosX; 87cdf0e10cSrcweir SwTwips mnNewUpperPosY; 88cdf0e10cSrcweir // size of new upper frame 89cdf0e10cSrcweir SwTwips mnNewUpperWidth; 90cdf0e10cSrcweir SwTwips mnNewUpperHeight; 91cdf0e10cSrcweir // free space in new upper frame 92cdf0e10cSrcweir SwTwips mnFreeSpaceInNewUpper; 93cdf0e10cSrcweir 94cdf0e10cSrcweir }; 95cdf0e10cSrcweir private: 96cdf0e10cSrcweir struct fMoveBwdLayoutInfoKeyHash 97cdf0e10cSrcweir { operator ()SwLayouter::fMoveBwdLayoutInfoKeyHash98cdf0e10cSrcweir size_t operator()( const tMoveBwdLayoutInfoKey& p_key ) const 99cdf0e10cSrcweir { 100cdf0e10cSrcweir return p_key.mnFrmId; 101cdf0e10cSrcweir } 102cdf0e10cSrcweir }; 103cdf0e10cSrcweir struct fMoveBwdLayoutInfoKeyEq 104cdf0e10cSrcweir { operator ()SwLayouter::fMoveBwdLayoutInfoKeyEq105cdf0e10cSrcweir bool operator()( const tMoveBwdLayoutInfoKey& p_key1, 106cdf0e10cSrcweir const tMoveBwdLayoutInfoKey& p_key2 ) const 107cdf0e10cSrcweir { 108cdf0e10cSrcweir return p_key1.mnFrmId == p_key2.mnFrmId && 109cdf0e10cSrcweir p_key1.mnNewUpperPosX == p_key2.mnNewUpperPosX && 110cdf0e10cSrcweir p_key1.mnNewUpperPosY == p_key2.mnNewUpperPosY && 111cdf0e10cSrcweir p_key1.mnNewUpperWidth == p_key2.mnNewUpperWidth && 112cdf0e10cSrcweir p_key1.mnNewUpperHeight == p_key2.mnNewUpperHeight && 113cdf0e10cSrcweir p_key1.mnFreeSpaceInNewUpper == p_key2.mnFreeSpaceInNewUpper; 114cdf0e10cSrcweir } 115cdf0e10cSrcweir }; 116cdf0e10cSrcweir std::hash_map< const tMoveBwdLayoutInfoKey, sal_uInt16, 117cdf0e10cSrcweir fMoveBwdLayoutInfoKeyHash, 118cdf0e10cSrcweir fMoveBwdLayoutInfoKeyEq > maMoveBwdLayoutInfo; 119cdf0e10cSrcweir // <-- 120cdf0e10cSrcweir public: 121cdf0e10cSrcweir SwLayouter(); 122cdf0e10cSrcweir ~SwLayouter(); 123cdf0e10cSrcweir void InsertEndnotes( SwSectionFrm* pSect ); 124cdf0e10cSrcweir void CollectEndnote( SwFtnFrm* pFtn ); 125cdf0e10cSrcweir sal_Bool HasEndnotes() const; 126cdf0e10cSrcweir 127cdf0e10cSrcweir void LoopControl( SwPageFrm* pPage, sal_uInt8 nLoop ); 128cdf0e10cSrcweir void EndLoopControl(); 129cdf0e10cSrcweir void LoopingLouieLight( const SwDoc& rDoc, const SwTxtFrm& rFrm ); 130cdf0e10cSrcweir 131cdf0e10cSrcweir static void CollectEndnotes( SwDoc* pDoc, SwSectionFrm* pSect ); 132cdf0e10cSrcweir static sal_Bool Collecting( SwDoc* pDoc, SwSectionFrm* pSect, SwFtnFrm* pFtn ); 133cdf0e10cSrcweir static sal_Bool StartLoopControl( SwDoc* pDoc, SwPageFrm *pPage ); 134cdf0e10cSrcweir 135cdf0e10cSrcweir // --> OD 2004-06-23 #i28701# 136cdf0e10cSrcweir static void ClearMovedFwdFrms( const SwDoc& _rDoc ); 137cdf0e10cSrcweir static void InsertMovedFwdFrm( const SwDoc& _rDoc, 138cdf0e10cSrcweir const SwTxtFrm& _rMovedFwdFrmByObjPos, 139cdf0e10cSrcweir const sal_uInt32 _nToPageNum ); 140cdf0e10cSrcweir static bool FrmMovedFwdByObjPos( const SwDoc& _rDoc, 141cdf0e10cSrcweir const SwTxtFrm& _rTxtFrm, 142cdf0e10cSrcweir sal_uInt32& _ornToPageNum ); 143cdf0e10cSrcweir // <-- 144cdf0e10cSrcweir // --> OD 2005-01-12 #i40155# - ummark given frame as to be moved forward. 145cdf0e10cSrcweir static void RemoveMovedFwdFrm( const SwDoc& _rDoc, 146cdf0e10cSrcweir const SwTxtFrm& _rTxtFrm ); 147cdf0e10cSrcweir // <-- 148cdf0e10cSrcweir // --> OD 2004-10-05 #i26945# 149cdf0e10cSrcweir static bool DoesRowContainMovedFwdFrm( const SwDoc& _rDoc, 150cdf0e10cSrcweir const SwRowFrm& _rRowFrm ); 151cdf0e10cSrcweir // <-- 152cdf0e10cSrcweir 153cdf0e10cSrcweir // --> OD 2004-10-22 #i35911# 154cdf0e10cSrcweir static void ClearObjsTmpConsiderWrapInfluence( const SwDoc& _rDoc ); 155cdf0e10cSrcweir static void InsertObjForTmpConsiderWrapInfluence( 156cdf0e10cSrcweir const SwDoc& _rDoc, 157cdf0e10cSrcweir SwAnchoredObject& _rAnchoredObj ); 158cdf0e10cSrcweir // <-- 159cdf0e10cSrcweir // --> OD 2005-01-12 #i40155# 160cdf0e10cSrcweir static void ClearFrmsNotToWrap( const SwDoc& _rDoc ); 161cdf0e10cSrcweir static void InsertFrmNotToWrap( const SwDoc& _rDoc, 162cdf0e10cSrcweir const SwFrm& _rFrm ); 163cdf0e10cSrcweir static bool FrmNotToWrap( const IDocumentLayoutAccess& _rIDLA, 164cdf0e10cSrcweir const SwFrm& _rFrm ); 165cdf0e10cSrcweir // <-- 166cdf0e10cSrcweir // --> OD 2006-05-10 #i65250# 167cdf0e10cSrcweir static bool MoveBwdSuppressed( const SwDoc& p_rDoc, 168cdf0e10cSrcweir const SwFlowFrm& p_rFlowFrm, 169cdf0e10cSrcweir const SwLayoutFrm& p_rNewUpperFrm ); 170cdf0e10cSrcweir static void ClearMoveBwdLayoutInfo( const SwDoc& p_rDoc ); 171cdf0e10cSrcweir // <-- 172cdf0e10cSrcweir }; 173cdf0e10cSrcweir 174cdf0e10cSrcweir 175cdf0e10cSrcweir extern void LOOPING_LOUIE_LIGHT( bool bCondition, const SwTxtFrm& rTxtFrm ); 176cdf0e10cSrcweir 177cdf0e10cSrcweir #endif //_LAYOUTER_HXX 178cdf0e10cSrcweir 179cdf0e10cSrcweir 180