xref: /aoo4110/main/sw/source/core/inc/layouter.hxx (revision b1cdbd2c)
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