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 _LAYOUTER_HXX 24*b1cdbd2cSJim Jagielski #define _LAYOUTER_HXX 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski #include "swtypes.hxx" 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski class SwEndnoter; 29*b1cdbd2cSJim Jagielski class SwDoc; 30*b1cdbd2cSJim Jagielski class SwSectionFrm; 31*b1cdbd2cSJim Jagielski class SwFtnFrm; 32*b1cdbd2cSJim Jagielski class SwPageFrm; 33*b1cdbd2cSJim Jagielski class SwLooping; 34*b1cdbd2cSJim Jagielski class IDocumentLayoutAccess; 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski // --> OD 2004-06-23 #i28701# 37*b1cdbd2cSJim Jagielski class SwMovedFwdFrmsByObjPos; 38*b1cdbd2cSJim Jagielski class SwTxtFrm; 39*b1cdbd2cSJim Jagielski // <-- 40*b1cdbd2cSJim Jagielski // --> OD 2004-10-05 #i26945# 41*b1cdbd2cSJim Jagielski class SwRowFrm; 42*b1cdbd2cSJim Jagielski // <-- 43*b1cdbd2cSJim Jagielski // --> OD 2004-10-22 #i35911# 44*b1cdbd2cSJim Jagielski class SwObjsMarkedAsTmpConsiderWrapInfluence; 45*b1cdbd2cSJim Jagielski class SwAnchoredObject; 46*b1cdbd2cSJim Jagielski // <-- 47*b1cdbd2cSJim Jagielski // --> OD 2005-01-12 #i40155# 48*b1cdbd2cSJim Jagielski #include <vector> 49*b1cdbd2cSJim Jagielski class SwFrm; 50*b1cdbd2cSJim Jagielski // <-- 51*b1cdbd2cSJim Jagielski // --> OD 2006-05-10 #i65250# 52*b1cdbd2cSJim Jagielski #include <swtypes.hxx> 53*b1cdbd2cSJim Jagielski #include <hash_map> 54*b1cdbd2cSJim Jagielski class SwFlowFrm; 55*b1cdbd2cSJim Jagielski class SwLayoutFrm; 56*b1cdbd2cSJim Jagielski // <-- 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski #define LOOP_PAGE 1 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski class SwLayouter 61*b1cdbd2cSJim Jagielski { 62*b1cdbd2cSJim Jagielski SwEndnoter* pEndnoter; 63*b1cdbd2cSJim Jagielski SwLooping* pLooping; 64*b1cdbd2cSJim Jagielski void _CollectEndnotes( SwSectionFrm* pSect ); 65*b1cdbd2cSJim Jagielski sal_Bool StartLooping( SwPageFrm* pPage ); 66*b1cdbd2cSJim Jagielski 67*b1cdbd2cSJim Jagielski // --> OD 2004-06-23 #i28701# 68*b1cdbd2cSJim Jagielski SwMovedFwdFrmsByObjPos* mpMovedFwdFrms; 69*b1cdbd2cSJim Jagielski // <-- 70*b1cdbd2cSJim Jagielski // --> OD 2004-10-22 #i35911# 71*b1cdbd2cSJim Jagielski SwObjsMarkedAsTmpConsiderWrapInfluence* mpObjsTmpConsiderWrapInfl; 72*b1cdbd2cSJim Jagielski // <-- 73*b1cdbd2cSJim Jagielski // --> OD 2005-01-12 #i40155# - data structure to collect frames, which are 74*b1cdbd2cSJim Jagielski // marked not to wrap around objects. 75*b1cdbd2cSJim Jagielski std::vector< const SwFrm* > maFrmsNotToWrap; 76*b1cdbd2cSJim Jagielski // <-- 77*b1cdbd2cSJim Jagielski 78*b1cdbd2cSJim Jagielski public: 79*b1cdbd2cSJim Jagielski // --> OD 2006-05-10 #i65250# 80*b1cdbd2cSJim Jagielski // - data structure to collect moving backward layout information 81*b1cdbd2cSJim Jagielski struct tMoveBwdLayoutInfoKey 82*b1cdbd2cSJim Jagielski { 83*b1cdbd2cSJim Jagielski // frame ID of flow frame 84*b1cdbd2cSJim Jagielski sal_uInt32 mnFrmId; 85*b1cdbd2cSJim Jagielski // position of new upper frame 86*b1cdbd2cSJim Jagielski SwTwips mnNewUpperPosX; 87*b1cdbd2cSJim Jagielski SwTwips mnNewUpperPosY; 88*b1cdbd2cSJim Jagielski // size of new upper frame 89*b1cdbd2cSJim Jagielski SwTwips mnNewUpperWidth; 90*b1cdbd2cSJim Jagielski SwTwips mnNewUpperHeight; 91*b1cdbd2cSJim Jagielski // free space in new upper frame 92*b1cdbd2cSJim Jagielski SwTwips mnFreeSpaceInNewUpper; 93*b1cdbd2cSJim Jagielski 94*b1cdbd2cSJim Jagielski }; 95*b1cdbd2cSJim Jagielski private: 96*b1cdbd2cSJim Jagielski struct fMoveBwdLayoutInfoKeyHash 97*b1cdbd2cSJim Jagielski { operator ()SwLayouter::fMoveBwdLayoutInfoKeyHash98*b1cdbd2cSJim Jagielski size_t operator()( const tMoveBwdLayoutInfoKey& p_key ) const 99*b1cdbd2cSJim Jagielski { 100*b1cdbd2cSJim Jagielski return p_key.mnFrmId; 101*b1cdbd2cSJim Jagielski } 102*b1cdbd2cSJim Jagielski }; 103*b1cdbd2cSJim Jagielski struct fMoveBwdLayoutInfoKeyEq 104*b1cdbd2cSJim Jagielski { operator ()SwLayouter::fMoveBwdLayoutInfoKeyEq105*b1cdbd2cSJim Jagielski bool operator()( const tMoveBwdLayoutInfoKey& p_key1, 106*b1cdbd2cSJim Jagielski const tMoveBwdLayoutInfoKey& p_key2 ) const 107*b1cdbd2cSJim Jagielski { 108*b1cdbd2cSJim Jagielski return p_key1.mnFrmId == p_key2.mnFrmId && 109*b1cdbd2cSJim Jagielski p_key1.mnNewUpperPosX == p_key2.mnNewUpperPosX && 110*b1cdbd2cSJim Jagielski p_key1.mnNewUpperPosY == p_key2.mnNewUpperPosY && 111*b1cdbd2cSJim Jagielski p_key1.mnNewUpperWidth == p_key2.mnNewUpperWidth && 112*b1cdbd2cSJim Jagielski p_key1.mnNewUpperHeight == p_key2.mnNewUpperHeight && 113*b1cdbd2cSJim Jagielski p_key1.mnFreeSpaceInNewUpper == p_key2.mnFreeSpaceInNewUpper; 114*b1cdbd2cSJim Jagielski } 115*b1cdbd2cSJim Jagielski }; 116*b1cdbd2cSJim Jagielski std::hash_map< const tMoveBwdLayoutInfoKey, sal_uInt16, 117*b1cdbd2cSJim Jagielski fMoveBwdLayoutInfoKeyHash, 118*b1cdbd2cSJim Jagielski fMoveBwdLayoutInfoKeyEq > maMoveBwdLayoutInfo; 119*b1cdbd2cSJim Jagielski // <-- 120*b1cdbd2cSJim Jagielski public: 121*b1cdbd2cSJim Jagielski SwLayouter(); 122*b1cdbd2cSJim Jagielski ~SwLayouter(); 123*b1cdbd2cSJim Jagielski void InsertEndnotes( SwSectionFrm* pSect ); 124*b1cdbd2cSJim Jagielski void CollectEndnote( SwFtnFrm* pFtn ); 125*b1cdbd2cSJim Jagielski sal_Bool HasEndnotes() const; 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski void LoopControl( SwPageFrm* pPage, sal_uInt8 nLoop ); 128*b1cdbd2cSJim Jagielski void EndLoopControl(); 129*b1cdbd2cSJim Jagielski void LoopingLouieLight( const SwDoc& rDoc, const SwTxtFrm& rFrm ); 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski static void CollectEndnotes( SwDoc* pDoc, SwSectionFrm* pSect ); 132*b1cdbd2cSJim Jagielski static sal_Bool Collecting( SwDoc* pDoc, SwSectionFrm* pSect, SwFtnFrm* pFtn ); 133*b1cdbd2cSJim Jagielski static sal_Bool StartLoopControl( SwDoc* pDoc, SwPageFrm *pPage ); 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski // --> OD 2004-06-23 #i28701# 136*b1cdbd2cSJim Jagielski static void ClearMovedFwdFrms( const SwDoc& _rDoc ); 137*b1cdbd2cSJim Jagielski static void InsertMovedFwdFrm( const SwDoc& _rDoc, 138*b1cdbd2cSJim Jagielski const SwTxtFrm& _rMovedFwdFrmByObjPos, 139*b1cdbd2cSJim Jagielski const sal_uInt32 _nToPageNum ); 140*b1cdbd2cSJim Jagielski static bool FrmMovedFwdByObjPos( const SwDoc& _rDoc, 141*b1cdbd2cSJim Jagielski const SwTxtFrm& _rTxtFrm, 142*b1cdbd2cSJim Jagielski sal_uInt32& _ornToPageNum ); 143*b1cdbd2cSJim Jagielski // <-- 144*b1cdbd2cSJim Jagielski // --> OD 2005-01-12 #i40155# - ummark given frame as to be moved forward. 145*b1cdbd2cSJim Jagielski static void RemoveMovedFwdFrm( const SwDoc& _rDoc, 146*b1cdbd2cSJim Jagielski const SwTxtFrm& _rTxtFrm ); 147*b1cdbd2cSJim Jagielski // <-- 148*b1cdbd2cSJim Jagielski // --> OD 2004-10-05 #i26945# 149*b1cdbd2cSJim Jagielski static bool DoesRowContainMovedFwdFrm( const SwDoc& _rDoc, 150*b1cdbd2cSJim Jagielski const SwRowFrm& _rRowFrm ); 151*b1cdbd2cSJim Jagielski // <-- 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski // --> OD 2004-10-22 #i35911# 154*b1cdbd2cSJim Jagielski static void ClearObjsTmpConsiderWrapInfluence( const SwDoc& _rDoc ); 155*b1cdbd2cSJim Jagielski static void InsertObjForTmpConsiderWrapInfluence( 156*b1cdbd2cSJim Jagielski const SwDoc& _rDoc, 157*b1cdbd2cSJim Jagielski SwAnchoredObject& _rAnchoredObj ); 158*b1cdbd2cSJim Jagielski // <-- 159*b1cdbd2cSJim Jagielski // --> OD 2005-01-12 #i40155# 160*b1cdbd2cSJim Jagielski static void ClearFrmsNotToWrap( const SwDoc& _rDoc ); 161*b1cdbd2cSJim Jagielski static void InsertFrmNotToWrap( const SwDoc& _rDoc, 162*b1cdbd2cSJim Jagielski const SwFrm& _rFrm ); 163*b1cdbd2cSJim Jagielski static bool FrmNotToWrap( const IDocumentLayoutAccess& _rIDLA, 164*b1cdbd2cSJim Jagielski const SwFrm& _rFrm ); 165*b1cdbd2cSJim Jagielski // <-- 166*b1cdbd2cSJim Jagielski // --> OD 2006-05-10 #i65250# 167*b1cdbd2cSJim Jagielski static bool MoveBwdSuppressed( const SwDoc& p_rDoc, 168*b1cdbd2cSJim Jagielski const SwFlowFrm& p_rFlowFrm, 169*b1cdbd2cSJim Jagielski const SwLayoutFrm& p_rNewUpperFrm ); 170*b1cdbd2cSJim Jagielski static void ClearMoveBwdLayoutInfo( const SwDoc& p_rDoc ); 171*b1cdbd2cSJim Jagielski // <-- 172*b1cdbd2cSJim Jagielski }; 173*b1cdbd2cSJim Jagielski 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski extern void LOOPING_LOUIE_LIGHT( bool bCondition, const SwTxtFrm& rTxtFrm ); 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski #endif //_LAYOUTER_HXX 178*b1cdbd2cSJim Jagielski 179*b1cdbd2cSJim Jagielski 180