1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: flyfrm.hxx,v $
10 * $Revision: 1.24.212.1 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
38 struct SwCrsrMoveState
;
40 class SwVirtFlyDrawObj
;
45 // OD 2004-03-22 #i26791#
46 #include <anchoredobject.hxx>
48 //Sucht ausgehend von pOldAnch einen Anker fuer Absatzgebundene Rahmen.
49 //Wird beim Draggen von Absatzgebundenen Objekten zur Ankeranzeige sowie
50 //fuer Ankerwechsel benoetigt.
51 //implementiert in layout/flycnt.cxx
52 const SwCntntFrm
*FindAnchor( const SwFrm
*pOldAnch
, const Point
&rNew
,
53 const BOOL bBody
= FALSE
);
55 // berechnet das Rechteck, in dem das Objekt bewegt bzw. resized werden darf
56 BOOL
CalcClipRect( const SdrObject
*pSdrObj
, SwRect
&rRect
, BOOL bMove
= TRUE
);
58 //allg. Basisklasse fuer alle Freifliegenden Rahmen
59 // OD 2004-03-22 #i26791# - inherit also from <SwAnchoredFlyFrm>
60 class SwFlyFrm
: public SwLayoutFrm
, public SwAnchoredObject
62 //darf Locken. Definiert in frmtool.cxx
63 friend void AppendObjs ( const SwSpzFrmFmts
*, ULONG
, SwFrm
*, SwPageFrm
* );
64 friend void AppendAllObjs( const SwSpzFrmFmts
* );
65 friend void Notify( SwFlyFrm
*, SwPageFrm
*pOld
, const SwRect
&rOld
,
66 const SwRect
* pOldPrt
);
68 void InitDrawObj( BOOL bNotify
); //Wird von den CToren gerufen.
69 void FinitDrawObj(); //Wird vom CTor gerufen.
71 void _UpdateAttr( SfxPoolItem
*, SfxPoolItem
*, BYTE
&,
72 SwAttrSetChg
*pa
= 0, SwAttrSetChg
*pb
= 0 );
74 using SwLayoutFrm::CalcRel
;
78 SwFlyFrm
*pPrevLink
, // Vorgaenger/Nachfolger fuer Verkettung mit
79 *pNextLink
; // Textfluss
81 // OD 2004-05-27 #i26791# - moved to <SwAnchoredObject>
82 // Point aRelPos; //Die Relative Position zum Master
85 BOOL bLocked
:1; //Cntnt-gebundene Flys muessen derart blockiert werden
86 //koennen, dass sie nicht Formatiert werden; :MakeAll
87 //returnt dann sofort. Dies ist bei Seitenwechseln
88 //waehrend der Formatierung notwendig.
89 //Auch wahrend des RootCTors ist dies notwendig da
90 //sonst der Anker formatiert wird obwohl die Root noch
91 //nicht korrekt an der Shell haengt und weil sonst
92 //initial zuviel Formatiert wuerde.
93 BOOL bNotifyBack
:1; //TRUE wenn am Ende eines MakeAll() der Background
94 //vom NotifyDTor benachrichtigt werden muss.
97 BOOL bInvalid
:1; //Pos, PrtArea od. SSize wurden Invalidiert, sie werden
98 //gleich wieder Validiert, denn sie muessen _immer_
99 //gueltig sein. Damit in LayAction korrekt gearbeitet
100 //werden kann muss hier festgehalten werden, dass sie
101 //invalidiert wurden. Ausnahmen bestaetigen die Regelt!
102 BOOL bMinHeight
:1; //TRUE wenn die vom Attribut vorgegebene Hoehe eine
103 //eine Minimalhoehe ist (der Frm also bei Bedarf
104 //darueberhinaus wachsen kann).
105 BOOL bHeightClipped
:1; //TRUE wenn der Fly nicht die Pos/Size anhand der Attrs
106 BOOL bWidthClipped
:1; //formatieren konnte, weil z.B. nicht genug Raum vorh.
108 BOOL bFormatHeightOnly
:1; //Damit nach einer Anpassung der Breite
109 //(CheckClip) nur das Format aufgerufen wird;
110 //nicht aber die Breite anhand der Attribute
111 //wieder bestimmt wird.
112 BOOL bInCnt
:1; // FLY_IN_CNTNT, als Zeichen verankert
113 BOOL bAtCnt
:1; // FLY_AT_CNTNT, am Absatz verankert
114 BOOL bLayout
:1; // FLY_PAGE, FLY_AT_FLY, an Seite oder Rahmen
115 BOOL bAutoPosition
:1; // FLY_AUTO_CNTNT, im Text verankerter Rahmen
116 BOOL bNoShrink
:1; // temporary forbud of shrinking to avoid loops
117 BOOL bLockDeleteContent
:1; // If the flag is set, the content of the
118 // fly frame is not deleted if moved to
121 friend class SwNoTxtFrm
; // Darf NotifyBackground rufen
122 // virtual void NotifyBackground( SwPageFrm *pPage,
123 // const SwRect& rRect, PrepareHint eHint) = 0;
125 virtual void Format( const SwBorderAttrs
*pAttrs
= 0 );
126 void MakePrtArea( const SwBorderAttrs
&rAttrs
);
128 void Lock() { bLocked
= TRUE
; }
129 void Unlock() { bLocked
= FALSE
; }
131 void SetMinHeight() { bMinHeight
= TRUE
; }
132 void ResetMinHeight(){ bMinHeight
= FALSE
; }
134 Size
CalcRel( const SwFmtFrmSize
&rSz
) const;
135 SwTwips
CalcAutoWidth() const;
137 SwFlyFrm( SwFlyFrmFmt
*, SwFrm
*pAnchor
);
139 /** method to assure that anchored object is registered at the correct
142 OD 2004-07-02 #i28701#
146 virtual void RegisterAtCorrectPage();
148 // --> OD 2006-08-10 #i68520#
149 virtual bool _SetObjTop( const SwTwips _nTop
);
150 virtual bool _SetObjLeft( const SwTwips _nLeft
);
153 // --> OD 2006-10-05 #i70122#
154 virtual const SwRect
GetObjBoundRect() const;
157 // OD 2004-03-23 #i26791#
161 virtual void Modify( SfxPoolItem
*, SfxPoolItem
* );
162 // erfrage vom Client Informationen
163 virtual BOOL
GetInfo( SfxPoolItem
& ) const;
164 virtual void Paint( const SwRect
& ) const;
165 virtual Size
ChgSize( const Size
& aNewSize
);
166 virtual BOOL
GetCrsrOfst( SwPosition
*, Point
&,
167 SwCrsrMoveState
* = 0 ) const;
169 virtual void CheckDirection( BOOL bVert
);
172 virtual void Paste( SwFrm
* pParent
, SwFrm
* pSibling
= 0 );
175 SwTwips
_Shrink( SwTwips
, BOOL bTst
);
176 SwTwips
_Grow ( SwTwips
, BOOL bTst
);
177 void _Invalidate( SwPageFrm
*pPage
= 0 );
179 BOOL
FrmSizeChg( const SwFmtFrmSize
& );
181 SwFlyFrm
*GetPrevLink() const { return pPrevLink
; }
182 SwFlyFrm
*GetNextLink() const { return pNextLink
; }
184 static void ChainFrames( SwFlyFrm
*pMaster
, SwFlyFrm
*pFollow
);
185 static void UnchainFrames( SwFlyFrm
*pMaster
, SwFlyFrm
*pFollow
);
187 SwFlyFrm
*FindChainNeighbour( SwFrmFmt
&rFmt
, SwFrm
*pAnch
= 0 );
189 // OD 2004-03-24 #i26791#
190 const SwVirtFlyDrawObj
* GetVirtDrawObj() const;
191 SwVirtFlyDrawObj
*GetVirtDrawObj();
192 void NotifyDrawObj();
194 void ChgRelPos( const Point
&rAbsPos
);
195 BOOL
IsInvalid() const { return bInvalid
; }
196 void Invalidate() const { ((SwFlyFrm
*)this)->bInvalid
= TRUE
; }
197 void Validate() const { ((SwFlyFrm
*)this)->bInvalid
= FALSE
; }
199 BOOL
IsMinHeight() const { return bMinHeight
; }
200 BOOL
IsLocked() const { return bLocked
; }
201 BOOL
IsAutoPos() const { return bAutoPosition
; }
202 BOOL
IsFlyInCntFrm() const { return bInCnt
; }
203 BOOL
IsFlyFreeFrm() const { return bAtCnt
|| bLayout
; }
204 BOOL
IsFlyLayFrm() const { return bLayout
; }
205 BOOL
IsFlyAtCntFrm() const { return bAtCnt
; }
207 BOOL
IsNotifyBack() const { return bNotifyBack
; }
208 void SetNotifyBack() { bNotifyBack
= TRUE
; }
209 void ResetNotifyBack() { bNotifyBack
= FALSE
; }
210 BOOL
IsNoShrink() const { return bNoShrink
; }
211 void SetNoShrink( BOOL bNew
) { bNoShrink
= bNew
; }
212 BOOL
IsLockDeleteContent() const { return bLockDeleteContent
; }
213 void SetLockDeleteContent( BOOL bNew
) { bLockDeleteContent
= bNew
; }
216 BOOL
IsClipped() const { return bHeightClipped
|| bWidthClipped
; }
217 BOOL
IsHeightClipped() const { return bHeightClipped
; }
218 BOOL
IsWidthClipped() const { return bWidthClipped
; }
220 BOOL
IsLowerOf( const SwLayoutFrm
* pUpper
) const;
221 inline BOOL
IsUpperOf( const SwFlyFrm
& _rLower
) const
223 return _rLower
.IsLowerOf( this );
226 SwFrm
*FindLastLower();
228 // OD 16.04.2003 #i13147# - add parameter <_bForPaint> to avoid load of
229 // the graphic during paint. Default value: sal_False
230 BOOL
GetContour( PolyPolygon
& rContour
,
231 const sal_Bool _bForPaint
= sal_False
) const;
234 //Auf dieser Shell painten (PreView, Print-Flag usw. rekursiv beachten)?.
235 static BOOL
IsPaint( SdrObject
*pObj
, const ViewShell
*pSh
);
237 /** SwFlyFrm::IsBackgroundTransparent - for feature #99657#
240 determines, if background of fly frame has to be drawn transparent
241 definition found in /core/layout/paintfrm.cxx
245 @return true, if background color is transparent or a existing background
246 graphic is transparent.
248 sal_Bool
IsBackgroundTransparent() const;
250 /** SwFlyFrm::IsShadowTransparent - for feature #99657#
253 determine, if shadow color of fly frame has to be drawn transparent
254 definition found in /core/layout/paintfrm.cxx
258 @return true, if shadow color is transparent.
260 sal_Bool
IsShadowTransparent() const;
262 // OD 2004-01-19 #110582#
263 void Chain( SwFrm
* _pAnchor
);
267 // OD 2004-02-12 #110582#-2
268 void InsertColumns();
270 // OD 2004-03-23 #i26791# - pure virtual methods of base class <SwAnchoredObject>
271 virtual void MakeObjPos();
272 virtual void InvalidateObjPos();
274 virtual SwFrmFmt
& GetFrmFmt();
275 virtual const SwFrmFmt
& GetFrmFmt() const;
277 virtual const SwRect
GetObjRect() const;
279 /** method to determine, if a format on the Writer fly frame is possible
281 OD 2004-05-11 #i28701#
282 refine 'IsFormatPossible'-conditions of method
283 <SwAnchoredObject::IsFormatPossible()> by:
284 format isn't possible, if Writer fly frame is locked resp. col-locked.
288 virtual bool IsFormatPossible() const;