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