xref: /aoo4110/main/sw/inc/anchoredobject.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 _ANCHOREDOBJECT_HXX
24*b1cdbd2cSJim Jagielski #define _ANCHOREDOBJECT_HXX
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include <tools/rtti.hxx>
27*b1cdbd2cSJim Jagielski #include <swtypes.hxx>
28*b1cdbd2cSJim Jagielski #include <swrect.hxx>
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski class SdrObject;
31*b1cdbd2cSJim Jagielski class SwFrm;
32*b1cdbd2cSJim Jagielski class SwLayoutFrm;
33*b1cdbd2cSJim Jagielski // --> OD 2004-07-14 #117380#
34*b1cdbd2cSJim Jagielski class SwTxtFrm;
35*b1cdbd2cSJim Jagielski // <--
36*b1cdbd2cSJim Jagielski // --> OD 2004-06-30 #i28701#
37*b1cdbd2cSJim Jagielski class SwPageFrm;
38*b1cdbd2cSJim Jagielski class SwObjPositioningInProgress;
39*b1cdbd2cSJim Jagielski // <--
40*b1cdbd2cSJim Jagielski class SwFrmFmt;
41*b1cdbd2cSJim Jagielski class SwFmtAnchor;
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski /** wrapper class for the positioning of Writer fly frames and drawing objects
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski     OD 2004-03-22 #i26791#
46*b1cdbd2cSJim Jagielski     Purpose of this class is to provide a unified interface for the positioning
47*b1cdbd2cSJim Jagielski     of Writer fly frames (derived classes of <SwFlyFrm>) and of drawing objects
48*b1cdbd2cSJim Jagielski     (derived classes of <SwDrawFrm>).
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski     @author OD
51*b1cdbd2cSJim Jagielski */
52*b1cdbd2cSJim Jagielski class SW_DLLPUBLIC SwAnchoredObject
53*b1cdbd2cSJim Jagielski {
54*b1cdbd2cSJim Jagielski     private:
55*b1cdbd2cSJim Jagielski         // drawing object representing the anchored object in the drawing layer
56*b1cdbd2cSJim Jagielski         SdrObject* mpDrawObj;
57*b1cdbd2cSJim Jagielski         // frame the object is anchored at
58*b1cdbd2cSJim Jagielski         SwFrm* mpAnchorFrm;
59*b1cdbd2cSJim Jagielski         // --> OD 2004-06-30 #i28701# - page frame the object is registered at
60*b1cdbd2cSJim Jagielski         // note: no page frame for as-character anchored objects
61*b1cdbd2cSJim Jagielski         SwPageFrm* mpPageFrm;
62*b1cdbd2cSJim Jagielski         // <--
63*b1cdbd2cSJim Jagielski         // current relative position (relative to anchor position of anchor frame)
64*b1cdbd2cSJim Jagielski         Point maRelPos;
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski         // for to-character anchored objects:
67*b1cdbd2cSJim Jagielski         // Last known anchor character retangle.
68*b1cdbd2cSJim Jagielski         // Used to decide, if invalidation has to been performed, if anchor position
69*b1cdbd2cSJim Jagielski         // has changed, and used to position object.
70*b1cdbd2cSJim Jagielski         SwRect maLastCharRect;
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski         // for to-character anchored objects:
73*b1cdbd2cSJim Jagielski         // Last known top of line, in which the anchor character is in.
74*b1cdbd2cSJim Jagielski         // Used to decide, if invalidation has to been performed, if anchor position
75*b1cdbd2cSJim Jagielski         // has changed, and used to position object.
76*b1cdbd2cSJim Jagielski         SwTwips mnLastTopOfLine;
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski         // for to-paragraph and to-character anchored objects:
79*b1cdbd2cSJim Jagielski         // Layout frame vertical position is orient at - typically its the upper
80*b1cdbd2cSJim Jagielski         // of the anchor frame, but it could also by the upper of a follow or
81*b1cdbd2cSJim Jagielski         // a following layout frame in the text flow.
82*b1cdbd2cSJim Jagielski         const SwLayoutFrm* mpVertPosOrientFrm;
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski         // --> OD 2004-06-30 #i28701# - boolean, indicating that the object
85*b1cdbd2cSJim Jagielski         // positioning algorithm is in progress.
86*b1cdbd2cSJim Jagielski         bool mbPositioningInProgress;
87*b1cdbd2cSJim Jagielski         // <--
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski         // --> OD 2004-06-29 #i28701# - Booleans needed for the layout process.
90*b1cdbd2cSJim Jagielski         // Values only of relevance for to-paragraph and to-character anchored
91*b1cdbd2cSJim Jagielski         // floating screen object, for whose the 'straight-forward positioning
92*b1cdbd2cSJim Jagielski         // process are applied
93*b1cdbd2cSJim Jagielski         // Otherwise value of <mbConsiderForTextWrap> is treated as <true>,
94*b1cdbd2cSJim Jagielski         // value of <mbPositionLocked> is treated as <false> and
95*b1cdbd2cSJim Jagielski         // value of <mbRestartLayoutProcess> is treated as <false>.
96*b1cdbd2cSJim Jagielski         // --> OD 2004-10-22 #i35911# - add boolean <mbClearEnvironment>
97*b1cdbd2cSJim Jagielski         // Indicates that due to its position and wrapping style its layout
98*b1cdbd2cSJim Jagielski         // environment is cleared - all content is moved forward.
99*b1cdbd2cSJim Jagielski         // Treated as <false>, if not the 'straight-forward positioning process"
100*b1cdbd2cSJim Jagielski         // is applied.
101*b1cdbd2cSJim Jagielski         bool mbConsiderForTextWrap;
102*b1cdbd2cSJim Jagielski         bool mbPositionLocked;
103*b1cdbd2cSJim Jagielski         // --> OD 2005-01-10 #i40147# - boolean needed to keep position of
104*b1cdbd2cSJim Jagielski         // anchored object locked due to special object positioning for sections.
105*b1cdbd2cSJim Jagielski         bool mbKeepPositionLockedForSection;
106*b1cdbd2cSJim Jagielski         // <--
107*b1cdbd2cSJim Jagielski         bool mbRestartLayoutProcess;
108*b1cdbd2cSJim Jagielski         bool mbClearedEnvironment;
109*b1cdbd2cSJim Jagielski         // <--
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski         // --> OD 2004-08-25 #i3317# - boolean, indicating that temporarly
112*b1cdbd2cSJim Jagielski         // the wrapping style influence of the anchored object has to be
113*b1cdbd2cSJim Jagielski         // considered during its positioning.
114*b1cdbd2cSJim Jagielski         // This boolean is used, if compatibility option 'Consider wrapping style
115*b1cdbd2cSJim Jagielski         // influence on object positioning' is OFF and a positioning loop is
116*b1cdbd2cSJim Jagielski         // detected in method <SwFlyAtCntFrm::MakeAll()> or method
117*b1cdbd2cSJim Jagielski         // <SwAnchoredDrawObject::_MakeObjPosAnchoredAtPara()>.
118*b1cdbd2cSJim Jagielski         // The boolean is reset to <false>, when the layout process for a
119*b1cdbd2cSJim Jagielski         // page frame starts - see class <NotifyLayoutOfPageInProgress>.
120*b1cdbd2cSJim Jagielski         bool mbTmpConsiderWrapInfluence;
121*b1cdbd2cSJim Jagielski         // <--
122*b1cdbd2cSJim Jagielski 
123*b1cdbd2cSJim Jagielski         // --> OD 2006-06-21 #i68520#
124*b1cdbd2cSJim Jagielski         mutable SwRect maObjRectWithSpaces;
125*b1cdbd2cSJim Jagielski         mutable bool mbObjRectWithSpacesValid;
126*b1cdbd2cSJim Jagielski         mutable SwRect maLastObjRect;
127*b1cdbd2cSJim Jagielski         // <--
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski         /** method to indicate, that positioning of anchored object is in progress
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski             note: method is implemented empty
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski             @author OD
134*b1cdbd2cSJim Jagielski         */
135*b1cdbd2cSJim Jagielski         friend class SwObjPositioningInProgress;
SetPositioningInProgress(const bool _bPosInProgress)136*b1cdbd2cSJim Jagielski         inline void SetPositioningInProgress( const bool _bPosInProgress )
137*b1cdbd2cSJim Jagielski         {
138*b1cdbd2cSJim Jagielski             mbPositioningInProgress = _bPosInProgress;
139*b1cdbd2cSJim Jagielski         }
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski 
142*b1cdbd2cSJim Jagielski         /** check anchor character rectangle
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski             OD 2004-03-25 #i26791#
145*b1cdbd2cSJim Jagielski             helper method for method <CheckCharRectAndTopOfLine()>
146*b1cdbd2cSJim Jagielski             For to-character anchored Writer fly frames the member <maLastCharRect>
147*b1cdbd2cSJim Jagielski             is updated. This is checked for change and depending on the applied
148*b1cdbd2cSJim Jagielski             positioning, it's decided, if the Writer fly frame has to be invalidated.
149*b1cdbd2cSJim Jagielski             OD 2004-07-14 #117380#
150*b1cdbd2cSJim Jagielski             improvement - add second parameter <_rAnchorCharFrm>
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski             @author OD
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski             @param _rAnch
155*b1cdbd2cSJim Jagielski             input parameter - reference to anchor position
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski             @param _rAnchorCharFrm
158*b1cdbd2cSJim Jagielski             input parameter - reference to the text frame containing the anchor
159*b1cdbd2cSJim Jagielski             character.
160*b1cdbd2cSJim Jagielski         */
161*b1cdbd2cSJim Jagielski         void _CheckCharRect( const SwFmtAnchor& _rAnch,
162*b1cdbd2cSJim Jagielski                              const SwTxtFrm& _rAnchorCharFrm );
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski         /** check top of line
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski             OD 2004-03-25 #i26791#
167*b1cdbd2cSJim Jagielski             helper method for method <CheckCharRectAndTopOfLine()>
168*b1cdbd2cSJim Jagielski             For to-character anchored Writer fly frames the member <mnLastTopOfLine>
169*b1cdbd2cSJim Jagielski             is updated. This is checked for change and depending on the applied
170*b1cdbd2cSJim Jagielski             positioning, it's decided, if the Writer fly frame has to be invalidated.
171*b1cdbd2cSJim Jagielski             OD 2004-07-14 #117380#
172*b1cdbd2cSJim Jagielski             improvement - add second parameter <_rAnchorCharFrm>
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski             @author OD
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski             @param _rAnch
177*b1cdbd2cSJim Jagielski             input parameter - reference to anchor position
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski             @param _rAnchorCharFrm
180*b1cdbd2cSJim Jagielski             input parameter - reference to the text frame containing the anchor
181*b1cdbd2cSJim Jagielski             character.
182*b1cdbd2cSJim Jagielski         */
183*b1cdbd2cSJim Jagielski         void _CheckTopOfLine( const SwFmtAnchor& _rAnch,
184*b1cdbd2cSJim Jagielski                               const SwTxtFrm& _rAnchorCharFrm );
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski         // --> OD 2005-03-30 #120729# - needed for the hotfix
187*b1cdbd2cSJim Jagielski         // method <lcl_HideObj(..)> sets needed data structure values for the
188*b1cdbd2cSJim Jagielski         // object positioning
189*b1cdbd2cSJim Jagielski         friend bool lcl_HideObj( const SwTxtFrm& _rFrm,
190*b1cdbd2cSJim Jagielski                                  const RndStdIds _eAnchorType,
191*b1cdbd2cSJim Jagielski                                  const xub_StrLen _nObjAnchorPos,
192*b1cdbd2cSJim Jagielski                                  SwAnchoredObject* _pAnchoredObj );
193*b1cdbd2cSJim Jagielski         // <--
194*b1cdbd2cSJim Jagielski     protected:
195*b1cdbd2cSJim Jagielski         SwAnchoredObject();
196*b1cdbd2cSJim Jagielski 
197*b1cdbd2cSJim Jagielski         void SetVertPosOrientFrm( const SwLayoutFrm& _rVertPosOrientFrm );
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski         /** method to assure that anchored object is registered at the correct
200*b1cdbd2cSJim Jagielski             page frame
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski             OD 2004-07-02 #i28701#
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski             @author OD
205*b1cdbd2cSJim Jagielski         */
206*b1cdbd2cSJim Jagielski         virtual void RegisterAtCorrectPage() = 0;
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski         /** method to indicate, that anchored object is attached to a anchor frame
209*b1cdbd2cSJim Jagielski 
210*b1cdbd2cSJim Jagielski             @author OD
211*b1cdbd2cSJim Jagielski         */
212*b1cdbd2cSJim Jagielski         virtual void ObjectAttachedToAnchorFrame();
213*b1cdbd2cSJim Jagielski 
214*b1cdbd2cSJim Jagielski         /** method to determine, if other anchored objects, also attached at
215*b1cdbd2cSJim Jagielski             to the anchor frame, have to consider its wrap influence.
216*b1cdbd2cSJim Jagielski 
217*b1cdbd2cSJim Jagielski             // --> OD 2005-02-22 #i43255#
218*b1cdbd2cSJim Jagielski 
219*b1cdbd2cSJim Jagielski             @author OD
220*b1cdbd2cSJim Jagielski         */
221*b1cdbd2cSJim Jagielski         bool ConsiderObjWrapInfluenceOfOtherObjs() const;
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski         /** method to apply temporary consideration of wrapping style influence
224*b1cdbd2cSJim Jagielski             to the anchored objects, which are anchored at the same anchor frame
225*b1cdbd2cSJim Jagielski 
226*b1cdbd2cSJim Jagielski             OD 2006-07-24 #b6449874#
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski             @author OD
229*b1cdbd2cSJim Jagielski         */
230*b1cdbd2cSJim Jagielski         void SetTmpConsiderWrapInfluenceOfOtherObjs( const bool bTmpConsiderWrapInfluence );
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski         // --> OD 2006-08-10 #i68520#
233*b1cdbd2cSJim Jagielski         virtual bool _SetObjTop( const SwTwips _nTop) = 0;
234*b1cdbd2cSJim Jagielski         virtual bool _SetObjLeft( const SwTwips _nLeft) = 0;
235*b1cdbd2cSJim Jagielski         // <--
236*b1cdbd2cSJim Jagielski 
237*b1cdbd2cSJim Jagielski         // --> OD 2006-10-05 #i70122#
238*b1cdbd2cSJim Jagielski         virtual const SwRect GetObjBoundRect() const = 0;
239*b1cdbd2cSJim Jagielski         // <--
240*b1cdbd2cSJim Jagielski     public:
241*b1cdbd2cSJim Jagielski         TYPEINFO();
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski         virtual ~SwAnchoredObject();
244*b1cdbd2cSJim Jagielski 
245*b1cdbd2cSJim Jagielski         // accessors to member <mpDrawObj>
246*b1cdbd2cSJim Jagielski         void SetDrawObj( SdrObject& _rDrawObj );
247*b1cdbd2cSJim Jagielski         const SdrObject* GetDrawObj() const;
248*b1cdbd2cSJim Jagielski         SdrObject* DrawObj();
249*b1cdbd2cSJim Jagielski 
250*b1cdbd2cSJim Jagielski         // accessors to member <mpAnchorFrm>
251*b1cdbd2cSJim Jagielski         const SwFrm* GetAnchorFrm() const;
252*b1cdbd2cSJim Jagielski         SwFrm* AnchorFrm();
253*b1cdbd2cSJim Jagielski         void ChgAnchorFrm( SwFrm* _pNewAnchorFrm );
254*b1cdbd2cSJim Jagielski         /** determine anchor frame containing the anchor position
255*b1cdbd2cSJim Jagielski 
256*b1cdbd2cSJim Jagielski             OD 2004-10-08 #i26945#
257*b1cdbd2cSJim Jagielski             the anchor frame, which is determined, is <mpAnchorFrm>
258*b1cdbd2cSJim Jagielski             for an at-page, at-frame or at-paragraph anchored object
259*b1cdbd2cSJim Jagielski             and the anchor character frame for an at-character and as-character
260*b1cdbd2cSJim Jagielski             anchored object.
261*b1cdbd2cSJim Jagielski 
262*b1cdbd2cSJim Jagielski             @author OD
263*b1cdbd2cSJim Jagielski         */
264*b1cdbd2cSJim Jagielski         SwFrm* GetAnchorFrmContainingAnchPos();
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski         // --> OD 2004-06-30 #i28701# - accessors to member <mpPageFrm>
267*b1cdbd2cSJim Jagielski         SwPageFrm* GetPageFrm();
268*b1cdbd2cSJim Jagielski         const SwPageFrm* GetPageFrm() const;
269*b1cdbd2cSJim Jagielski         void SetPageFrm( SwPageFrm* _pNewPageFrm );
270*b1cdbd2cSJim Jagielski         // <--
271*b1cdbd2cSJim Jagielski 
272*b1cdbd2cSJim Jagielski         /** method to determine the page frame, on which the 'anchor' of
273*b1cdbd2cSJim Jagielski             the given anchored object is.
274*b1cdbd2cSJim Jagielski 
275*b1cdbd2cSJim Jagielski             OD 2004-07-02 #i28701#
276*b1cdbd2cSJim Jagielski             OD 2004-09-23 #i33751#, #i34060#
277*b1cdbd2cSJim Jagielski             Adjust meaning of method and thus its name: If the anchored object
278*b1cdbd2cSJim Jagielski             or its anchor isn't correctly inserted in the layout, no page frame
279*b1cdbd2cSJim Jagielski             can be found. Thus, the return type changed to be a pointer and can
280*b1cdbd2cSJim Jagielski             be NULL.
281*b1cdbd2cSJim Jagielski 
282*b1cdbd2cSJim Jagielski             @author OD
283*b1cdbd2cSJim Jagielski 
284*b1cdbd2cSJim Jagielski             @param _rAnchoredObj
285*b1cdbd2cSJim Jagielski             input parameter - anchored object, for which the page frame of its
286*b1cdbd2cSJim Jagielski             'anchor' has to be determined.
287*b1cdbd2cSJim Jagielski 
288*b1cdbd2cSJim Jagielski             @return SwPageFrm&
289*b1cdbd2cSJim Jagielski             page frame, the 'anchor' of the given anchored object is on
290*b1cdbd2cSJim Jagielski         */
291*b1cdbd2cSJim Jagielski         SwPageFrm* FindPageFrmOfAnchor();
292*b1cdbd2cSJim Jagielski 
293*b1cdbd2cSJim Jagielski         /** get frame, which contains the anchor character, if the object
294*b1cdbd2cSJim Jagielski             is anchored at-character or as-character.
295*b1cdbd2cSJim Jagielski 
296*b1cdbd2cSJim Jagielski             OD 2004-10-04 #i26945#
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski             @author OD
299*b1cdbd2cSJim Jagielski 
300*b1cdbd2cSJim Jagielski             @return SwTxtFrm*
301*b1cdbd2cSJim Jagielski             text frame containing the anchor character. It's NULL, if the object
302*b1cdbd2cSJim Jagielski             isn't anchored at-character resp. as-character.
303*b1cdbd2cSJim Jagielski         */
304*b1cdbd2cSJim Jagielski         SwTxtFrm* FindAnchorCharFrm();
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski         // accessors to data of position calculation:
307*b1cdbd2cSJim Jagielski         // frame vertical position is orient at
GetVertPosOrientFrm() const308*b1cdbd2cSJim Jagielski         inline const SwLayoutFrm* GetVertPosOrientFrm() const
309*b1cdbd2cSJim Jagielski         {
310*b1cdbd2cSJim Jagielski             return mpVertPosOrientFrm;
311*b1cdbd2cSJim Jagielski         }
312*b1cdbd2cSJim Jagielski         // --> OD 2004-11-29 #115759# - method to clear member <mpVertPosOrientFrm>
ClearVertPosOrientFrm()313*b1cdbd2cSJim Jagielski         inline void ClearVertPosOrientFrm()
314*b1cdbd2cSJim Jagielski         {
315*b1cdbd2cSJim Jagielski             mpVertPosOrientFrm = 0L;
316*b1cdbd2cSJim Jagielski         }
317*b1cdbd2cSJim Jagielski         // <--
318*b1cdbd2cSJim Jagielski 
319*b1cdbd2cSJim Jagielski         /** check anchor character rectangle and top of line
320*b1cdbd2cSJim Jagielski 
321*b1cdbd2cSJim Jagielski             OD 2004-03-25 #i26791#
322*b1cdbd2cSJim Jagielski             For to-character anchored Writer fly frames the members <maLastCharRect>
323*b1cdbd2cSJim Jagielski             and <maLastTopOfLine> are updated. These are checked for change and
324*b1cdbd2cSJim Jagielski             depending on the applied positioning, it's decided, if the Writer fly
325*b1cdbd2cSJim Jagielski             frame has to be invalidated.
326*b1cdbd2cSJim Jagielski             OD 2004-07-15 #117380#
327*b1cdbd2cSJim Jagielski             add parameter <_bCheckForParaPorInf>, default value <true>
328*b1cdbd2cSJim Jagielski 
329*b1cdbd2cSJim Jagielski             @author OD
330*b1cdbd2cSJim Jagielski 
331*b1cdbd2cSJim Jagielski             @param _bCheckForParaPorInf
332*b1cdbd2cSJim Jagielski             input parameter - boolean indicating, if check on paragraph portion
333*b1cdbd2cSJim Jagielski             information has to be done.
334*b1cdbd2cSJim Jagielski         */
335*b1cdbd2cSJim Jagielski         void CheckCharRectAndTopOfLine( const bool _bCheckForParaPorInf = true );
336*b1cdbd2cSJim Jagielski 
337*b1cdbd2cSJim Jagielski         // accessors to member <maLastCharRect>
338*b1cdbd2cSJim Jagielski         const SwRect& GetLastCharRect() const;
339*b1cdbd2cSJim Jagielski         SwTwips GetRelCharX( const SwFrm* pFrm ) const;
340*b1cdbd2cSJim Jagielski         SwTwips GetRelCharY( const SwFrm* pFrm ) const;
341*b1cdbd2cSJim Jagielski         void AddLastCharY( long nDiff );
342*b1cdbd2cSJim Jagielski         void ResetLastCharRectHeight();
343*b1cdbd2cSJim Jagielski 
344*b1cdbd2cSJim Jagielski         // accessor to member <nmLastTopOfLine>
345*b1cdbd2cSJim Jagielski         SwTwips GetLastTopOfLine() const;
346*b1cdbd2cSJim Jagielski         // OD 2004-05-18 #i28701# - follow-up of #i22341#
347*b1cdbd2cSJim Jagielski         void AddLastTopOfLineY( SwTwips _nDiff );
348*b1cdbd2cSJim Jagielski 
349*b1cdbd2cSJim Jagielski         /** reset members <maLastCharRect> and <mnLastTopOfLine>
350*b1cdbd2cSJim Jagielski 
351*b1cdbd2cSJim Jagielski             OD 2004-06-29 #i27801#
352*b1cdbd2cSJim Jagielski 
353*b1cdbd2cSJim Jagielski             @author OD
354*b1cdbd2cSJim Jagielski         */
355*b1cdbd2cSJim Jagielski         void ClearCharRectAndTopOfLine();
356*b1cdbd2cSJim Jagielski 
357*b1cdbd2cSJim Jagielski         /** method to determine position for the object and set the position
358*b1cdbd2cSJim Jagielski             at the object
359*b1cdbd2cSJim Jagielski 
360*b1cdbd2cSJim Jagielski             @author OD
361*b1cdbd2cSJim Jagielski         */
362*b1cdbd2cSJim Jagielski         virtual void MakeObjPos() = 0;
363*b1cdbd2cSJim Jagielski 
364*b1cdbd2cSJim Jagielski         /** is positioning of anchored object in progress
365*b1cdbd2cSJim Jagielski 
366*b1cdbd2cSJim Jagielski             @author OD
367*b1cdbd2cSJim Jagielski         */
IsPositioningInProgress() const368*b1cdbd2cSJim Jagielski         inline bool IsPositioningInProgress() const
369*b1cdbd2cSJim Jagielski         {
370*b1cdbd2cSJim Jagielski             return mbPositioningInProgress;
371*b1cdbd2cSJim Jagielski         }
372*b1cdbd2cSJim Jagielski 
373*b1cdbd2cSJim Jagielski         /** method to determine, if invalidation of position is allowed
374*b1cdbd2cSJim Jagielski 
375*b1cdbd2cSJim Jagielski             OD 2004-07-01 #i28701#
376*b1cdbd2cSJim Jagielski 
377*b1cdbd2cSJim Jagielski             @author OD
378*b1cdbd2cSJim Jagielski         */
379*b1cdbd2cSJim Jagielski         bool InvalidationOfPosAllowed() const;
380*b1cdbd2cSJim Jagielski 
381*b1cdbd2cSJim Jagielski         /** method to invalidate position of the anchored object
382*b1cdbd2cSJim Jagielski 
383*b1cdbd2cSJim Jagielski             @author OD
384*b1cdbd2cSJim Jagielski         */
385*b1cdbd2cSJim Jagielski         virtual void InvalidateObjPos() = 0;
386*b1cdbd2cSJim Jagielski 
387*b1cdbd2cSJim Jagielski         /** method to perform necessary invalidations for the positioning of
388*b1cdbd2cSJim Jagielski             objects, for whose the wrapping style influence has to be considered
389*b1cdbd2cSJim Jagielski             on the object positioning.
390*b1cdbd2cSJim Jagielski 
391*b1cdbd2cSJim Jagielski             OD 2004-06-30 #i28701#
392*b1cdbd2cSJim Jagielski 
393*b1cdbd2cSJim Jagielski             @author OD
394*b1cdbd2cSJim Jagielski         */
395*b1cdbd2cSJim Jagielski         void InvalidateObjPosForConsiderWrapInfluence( const bool _bNotifyBackgrd );
396*b1cdbd2cSJim Jagielski 
397*b1cdbd2cSJim Jagielski         /** method to trigger notification of 'background'
398*b1cdbd2cSJim Jagielski 
399*b1cdbd2cSJim Jagielski             OD 2004-07-01 #i28701#
400*b1cdbd2cSJim Jagielski 
401*b1cdbd2cSJim Jagielski             @author OD
402*b1cdbd2cSJim Jagielski         */
403*b1cdbd2cSJim Jagielski         virtual void NotifyBackground( SwPageFrm* _pPageFrm,
404*b1cdbd2cSJim Jagielski                                        const SwRect& _rRect,
405*b1cdbd2cSJim Jagielski                                        PrepareHint _eHint ) = 0;
406*b1cdbd2cSJim Jagielski 
407*b1cdbd2cSJim Jagielski         // accessors to the current relative position (relative to anchor
408*b1cdbd2cSJim Jagielski         // position of anchor frame)
409*b1cdbd2cSJim Jagielski         const Point GetCurrRelPos() const;
410*b1cdbd2cSJim Jagielski         void SetCurrRelPos( Point _aRelPos );
411*b1cdbd2cSJim Jagielski 
412*b1cdbd2cSJim Jagielski         // accessors to the format
413*b1cdbd2cSJim Jagielski         virtual SwFrmFmt& GetFrmFmt() = 0;
414*b1cdbd2cSJim Jagielski         virtual const SwFrmFmt& GetFrmFmt() const = 0;
415*b1cdbd2cSJim Jagielski 
416*b1cdbd2cSJim Jagielski         // accessors to the object area and its position
417*b1cdbd2cSJim Jagielski         virtual const SwRect GetObjRect() const = 0;
418*b1cdbd2cSJim Jagielski         // --> OD 2006-08-10 #i68520#
419*b1cdbd2cSJim Jagielski         void SetObjTop( const SwTwips _nTop);
420*b1cdbd2cSJim Jagielski         void SetObjLeft( const SwTwips _nLeft);
421*b1cdbd2cSJim Jagielski         // <--
422*b1cdbd2cSJim Jagielski 
423*b1cdbd2cSJim Jagielski         /** method update layout direction the layout direction, the anchored
424*b1cdbd2cSJim Jagielski             object is assigned to
425*b1cdbd2cSJim Jagielski 
426*b1cdbd2cSJim Jagielski             OD 2004-07-27 #i31698#
427*b1cdbd2cSJim Jagielski             method has typically to be called, if the anchored object gets its
428*b1cdbd2cSJim Jagielski             anchor frame assigned and if the anchor frame changes its layout direction
429*b1cdbd2cSJim Jagielski             OD 2006-03-17 #i62875#
430*b1cdbd2cSJim Jagielski             made virtual, because it's needed to be overloaded by <SwAnchoredDrawObject>
431*b1cdbd2cSJim Jagielski 
432*b1cdbd2cSJim Jagielski             @author OD
433*b1cdbd2cSJim Jagielski         */
434*b1cdbd2cSJim Jagielski         virtual void UpdateLayoutDir();
435*b1cdbd2cSJim Jagielski 
436*b1cdbd2cSJim Jagielski         /** method to determine object area inclusive its spacing
437*b1cdbd2cSJim Jagielski 
438*b1cdbd2cSJim Jagielski             OD 2004-06-30 #i28701#
439*b1cdbd2cSJim Jagielski             OD 2006-08-10 #i68520# - return constant reference
440*b1cdbd2cSJim Jagielski 
441*b1cdbd2cSJim Jagielski             @author OD
442*b1cdbd2cSJim Jagielski         */
443*b1cdbd2cSJim Jagielski         const SwRect& GetObjRectWithSpaces() const;
444*b1cdbd2cSJim Jagielski 
445*b1cdbd2cSJim Jagielski         // --> OD 2006-08-10 #i68520#
InvalidateObjRectWithSpaces() const446*b1cdbd2cSJim Jagielski         inline void InvalidateObjRectWithSpaces() const
447*b1cdbd2cSJim Jagielski         {
448*b1cdbd2cSJim Jagielski             mbObjRectWithSpacesValid = false;
449*b1cdbd2cSJim Jagielski         }
450*b1cdbd2cSJim Jagielski         // <--
451*b1cdbd2cSJim Jagielski 
452*b1cdbd2cSJim Jagielski         /** method to determine, if wrapping style influence of the anchored
453*b1cdbd2cSJim Jagielski             object has to be considered on the object positioning
454*b1cdbd2cSJim Jagielski 
455*b1cdbd2cSJim Jagielski             OD 2004-06-30 #i28701#
456*b1cdbd2cSJim Jagielski             Note: result of this method also decides, if the boolean for the
457*b1cdbd2cSJim Jagielski             layout process are of relevance.
458*b1cdbd2cSJim Jagielski 
459*b1cdbd2cSJim Jagielski             @author OD
460*b1cdbd2cSJim Jagielski         */
461*b1cdbd2cSJim Jagielski         bool ConsiderObjWrapInfluenceOnObjPos() const;
462*b1cdbd2cSJim Jagielski 
463*b1cdbd2cSJim Jagielski         // --> OD 2004-06-29 #i28701# - accessors to booleans for layout process
464*b1cdbd2cSJim Jagielski         bool ConsiderForTextWrap() const;
465*b1cdbd2cSJim Jagielski         void SetConsiderForTextWrap( const bool _bConsiderForTextWrap );
466*b1cdbd2cSJim Jagielski         bool PositionLocked() const;
LockPosition()467*b1cdbd2cSJim Jagielski         inline void LockPosition()
468*b1cdbd2cSJim Jagielski         {
469*b1cdbd2cSJim Jagielski             mbPositionLocked = true;
470*b1cdbd2cSJim Jagielski         }
UnlockPosition()471*b1cdbd2cSJim Jagielski         inline void UnlockPosition()
472*b1cdbd2cSJim Jagielski         {
473*b1cdbd2cSJim Jagielski             if ( !mbKeepPositionLockedForSection )
474*b1cdbd2cSJim Jagielski             {
475*b1cdbd2cSJim Jagielski                 mbPositionLocked = false;
476*b1cdbd2cSJim Jagielski             }
477*b1cdbd2cSJim Jagielski         }
478*b1cdbd2cSJim Jagielski         // --> OD 2005-01-10 #i40147#
SetKeepPosLocked(const bool _bKeepPosLocked)479*b1cdbd2cSJim Jagielski         inline void SetKeepPosLocked( const bool _bKeepPosLocked )
480*b1cdbd2cSJim Jagielski         {
481*b1cdbd2cSJim Jagielski             mbKeepPositionLockedForSection = _bKeepPosLocked;
482*b1cdbd2cSJim Jagielski         }
483*b1cdbd2cSJim Jagielski         // <--
484*b1cdbd2cSJim Jagielski         bool RestartLayoutProcess() const;
485*b1cdbd2cSJim Jagielski         void SetRestartLayoutProcess( const bool _bRestartLayoutProcess );
486*b1cdbd2cSJim Jagielski         // --> OD 2004-10-22 #i35911# - accessors for <mbClearedEnvironment>
487*b1cdbd2cSJim Jagielski         bool ClearedEnvironment() const;
488*b1cdbd2cSJim Jagielski         void SetClearedEnvironment( const bool _bClearedEnvironment );
489*b1cdbd2cSJim Jagielski         // <--
490*b1cdbd2cSJim Jagielski         // --> OD 2005-03-03 #i43913# - reset booleans for layout process
ResetLayoutProcessBools()491*b1cdbd2cSJim Jagielski         inline void ResetLayoutProcessBools()
492*b1cdbd2cSJim Jagielski         {
493*b1cdbd2cSJim Jagielski             mbPositioningInProgress = false;
494*b1cdbd2cSJim Jagielski             mbConsiderForTextWrap = false;
495*b1cdbd2cSJim Jagielski             mbPositionLocked = false;
496*b1cdbd2cSJim Jagielski             mbKeepPositionLockedForSection = false;
497*b1cdbd2cSJim Jagielski             mbRestartLayoutProcess = false;
498*b1cdbd2cSJim Jagielski             mbClearedEnvironment = false;
499*b1cdbd2cSJim Jagielski             mbTmpConsiderWrapInfluence = false;
500*b1cdbd2cSJim Jagielski         }
501*b1cdbd2cSJim Jagielski         // <--
502*b1cdbd2cSJim Jagielski 
503*b1cdbd2cSJim Jagielski         /** method to determine, if due to anchored object size and wrapping
504*b1cdbd2cSJim Jagielski             style, its layout environment is cleared.
505*b1cdbd2cSJim Jagielski 
506*b1cdbd2cSJim Jagielski             OD 2004-10-22 #i35911#
507*b1cdbd2cSJim Jagielski 
508*b1cdbd2cSJim Jagielski             @author OD
509*b1cdbd2cSJim Jagielski         */
510*b1cdbd2cSJim Jagielski         bool HasClearedEnvironment() const;
511*b1cdbd2cSJim Jagielski 
512*b1cdbd2cSJim Jagielski         /** method to update anchored object in the <SwSortedObjs> lists
513*b1cdbd2cSJim Jagielski 
514*b1cdbd2cSJim Jagielski             OD 2004-07-01 #i28701#
515*b1cdbd2cSJim Jagielski             Method is not proposed to be called during a layout process is
516*b1cdbd2cSJim Jagielski             running. It has been used on the change of the anchored object
517*b1cdbd2cSJim Jagielski             attributes, which belongs the sort criteria of <SwSortedObjs>.
518*b1cdbd2cSJim Jagielski             If document compatibility option 'Consider wrapping style influence
519*b1cdbd2cSJim Jagielski             on object positioning' is ON, additionally all anchored objects
520*b1cdbd2cSJim Jagielski             at the anchor frame and all following anchored objects on the page
521*b1cdbd2cSJim Jagielski             frame are invalidated.
522*b1cdbd2cSJim Jagielski 
523*b1cdbd2cSJim Jagielski             @author OD
524*b1cdbd2cSJim Jagielski         */
525*b1cdbd2cSJim Jagielski         void UpdateObjInSortedList();
526*b1cdbd2cSJim Jagielski 
527*b1cdbd2cSJim Jagielski         /** method to determine, if a format on the anchored object is possible
528*b1cdbd2cSJim Jagielski 
529*b1cdbd2cSJim Jagielski             OD 2004-07-23 #i28701#
530*b1cdbd2cSJim Jagielski             A format isn't possible, if anchored object is in an invisible layer.
531*b1cdbd2cSJim Jagielski             Note: method is virtual to refine the conditions for the sub-classes.
532*b1cdbd2cSJim Jagielski 
533*b1cdbd2cSJim Jagielski             @author OD
534*b1cdbd2cSJim Jagielski         */
535*b1cdbd2cSJim Jagielski         virtual bool IsFormatPossible() const;
536*b1cdbd2cSJim Jagielski 
537*b1cdbd2cSJim Jagielski         // --> OD 2004-08-25 #i3317# - accessors to member <mbTmpConsiderWrapInfluence>
538*b1cdbd2cSJim Jagielski         void SetTmpConsiderWrapInfluence( const bool _bTmpConsiderWrapInfluence );
539*b1cdbd2cSJim Jagielski         bool IsTmpConsiderWrapInfluence() const;
540*b1cdbd2cSJim Jagielski         // <--
541*b1cdbd2cSJim Jagielski 
542*b1cdbd2cSJim Jagielski         /** method to determine, if the anchored object is overlapping with a
543*b1cdbd2cSJim Jagielski             previous column
544*b1cdbd2cSJim Jagielski 
545*b1cdbd2cSJim Jagielski             OD 2004-08-25 #i3317#
546*b1cdbd2cSJim Jagielski             overlapping with a previous column means, that the object overlaps
547*b1cdbd2cSJim Jagielski             with a column, which is a previous one of the column its anchor
548*b1cdbd2cSJim Jagielski             frame is in.
549*b1cdbd2cSJim Jagielski             Only applied for at-paragraph and at-character anchored objects.
550*b1cdbd2cSJim Jagielski 
551*b1cdbd2cSJim Jagielski             @author OD
552*b1cdbd2cSJim Jagielski         */
553*b1cdbd2cSJim Jagielski         bool OverlapsPrevColumn() const;
554*b1cdbd2cSJim Jagielski 
555*b1cdbd2cSJim Jagielski         /** method to determine position of anchored object relative to
556*b1cdbd2cSJim Jagielski             anchor frame
557*b1cdbd2cSJim Jagielski 
558*b1cdbd2cSJim Jagielski             OD 2005-01-06 #i30669#
559*b1cdbd2cSJim Jagielski             Usage: Needed layout information for WW8 export
560*b1cdbd2cSJim Jagielski 
561*b1cdbd2cSJim Jagielski             @author OD
562*b1cdbd2cSJim Jagielski 
563*b1cdbd2cSJim Jagielski             @return Point - determined relative position
564*b1cdbd2cSJim Jagielski         */
565*b1cdbd2cSJim Jagielski         Point GetRelPosToAnchorFrm() const;
566*b1cdbd2cSJim Jagielski 
567*b1cdbd2cSJim Jagielski         /** method to determine position of anchored object relative to
568*b1cdbd2cSJim Jagielski             page frame
569*b1cdbd2cSJim Jagielski 
570*b1cdbd2cSJim Jagielski             OD 2005-01-06 #i30669#
571*b1cdbd2cSJim Jagielski             Usage: Needed layout information for WW8 export
572*b1cdbd2cSJim Jagielski             OD 2005-01-27 #i33818# - add parameters <_bFollowTextFlow> and
573*b1cdbd2cSJim Jagielski             <_obRelToTableCell>
574*b1cdbd2cSJim Jagielski             If <_bFollowTextFlow> is set and object is anchored inside table,
575*b1cdbd2cSJim Jagielski             the position relative to the table cell is determined. Output
576*b1cdbd2cSJim Jagielski             parameter <_obRelToTableCell> reflects this situation
577*b1cdbd2cSJim Jagielski 
578*b1cdbd2cSJim Jagielski             @author OD
579*b1cdbd2cSJim Jagielski 
580*b1cdbd2cSJim Jagielski             @param _bFollowTextFlow
581*b1cdbd2cSJim Jagielski             input parameter - boolean indicating, if the anchored object has to
582*b1cdbd2cSJim Jagielski             follow the text flow.
583*b1cdbd2cSJim Jagielski 
584*b1cdbd2cSJim Jagielski             @param _obRelToTableCell
585*b1cdbd2cSJim Jagielski             output parameter - boolean indicating, the determine position is
586*b1cdbd2cSJim Jagielski             relative to the table cell
587*b1cdbd2cSJim Jagielski 
588*b1cdbd2cSJim Jagielski             @return Point - determined relative position
589*b1cdbd2cSJim Jagielski         */
590*b1cdbd2cSJim Jagielski         Point GetRelPosToPageFrm( const bool _bFollowTextFlow,
591*b1cdbd2cSJim Jagielski                                   bool& _obRelToTableCell ) const;
592*b1cdbd2cSJim Jagielski 
593*b1cdbd2cSJim Jagielski         /** method to determine position of anchored object relative to
594*b1cdbd2cSJim Jagielski             anchor character
595*b1cdbd2cSJim Jagielski 
596*b1cdbd2cSJim Jagielski             OD 2005-01-06 #i30669#
597*b1cdbd2cSJim Jagielski             Usage: Needed layout information for WW8 export
598*b1cdbd2cSJim Jagielski 
599*b1cdbd2cSJim Jagielski             @author OD
600*b1cdbd2cSJim Jagielski 
601*b1cdbd2cSJim Jagielski             @return Point - determined relative position
602*b1cdbd2cSJim Jagielski         */
603*b1cdbd2cSJim Jagielski         Point GetRelPosToChar() const;
604*b1cdbd2cSJim Jagielski 
605*b1cdbd2cSJim Jagielski         /** method to determine position of anchored object relative to
606*b1cdbd2cSJim Jagielski             top of line
607*b1cdbd2cSJim Jagielski 
608*b1cdbd2cSJim Jagielski             OD 2005-01-06 #i30669#
609*b1cdbd2cSJim Jagielski             Usage: Needed layout information for WW8 export
610*b1cdbd2cSJim Jagielski 
611*b1cdbd2cSJim Jagielski             @author OD
612*b1cdbd2cSJim Jagielski 
613*b1cdbd2cSJim Jagielski             @return Point - determined relative position
614*b1cdbd2cSJim Jagielski         */
615*b1cdbd2cSJim Jagielski         Point GetRelPosToLine() const;
616*b1cdbd2cSJim Jagielski };
617*b1cdbd2cSJim Jagielski 
618*b1cdbd2cSJim Jagielski // ============================================================================
619*b1cdbd2cSJim Jagielski // OD 2004-04-13 #i26791#, #i28701#
620*b1cdbd2cSJim Jagielski // helper class for notify that positioning of an anchored object is in progress
621*b1cdbd2cSJim Jagielski // ============================================================================
622*b1cdbd2cSJim Jagielski class SwObjPositioningInProgress
623*b1cdbd2cSJim Jagielski {
624*b1cdbd2cSJim Jagielski     private:
625*b1cdbd2cSJim Jagielski         SwAnchoredObject* mpAnchoredObj;
626*b1cdbd2cSJim Jagielski         // --> OD 2005-08-09 #i52904# - introduce boolean indicating old state
627*b1cdbd2cSJim Jagielski         // of anchored object regarding positioning in progress in order to
628*b1cdbd2cSJim Jagielski         // consider nested usage of class <SwObjPositioningInProgress>
629*b1cdbd2cSJim Jagielski         bool mbOldObjPositioningInProgress;
630*b1cdbd2cSJim Jagielski         // <--
631*b1cdbd2cSJim Jagielski 
632*b1cdbd2cSJim Jagielski     public:
633*b1cdbd2cSJim Jagielski         SwObjPositioningInProgress( SdrObject& _rSdrObj );
634*b1cdbd2cSJim Jagielski         SwObjPositioningInProgress( SwAnchoredObject& _rAnchoredObj );
635*b1cdbd2cSJim Jagielski         ~SwObjPositioningInProgress();
636*b1cdbd2cSJim Jagielski };
637*b1cdbd2cSJim Jagielski 
638*b1cdbd2cSJim Jagielski #endif
639