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