Update ooo320-m1
[ooovba.git] / sw / source / core / inc / flyfrm.hxx
blob8312125fc6582c66d53755f80274026cf1dc5f76
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
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 ************************************************************************/
30 #ifndef _FLYFRM_HXX
31 #define _FLYFRM_HXX
33 #include "layfrm.hxx"
35 class SwPageFrm;
36 class SwFlyFrmFmt;
37 class SwFmtFrmSize;
38 struct SwCrsrMoveState;
39 class SwBorderAttrs;
40 class SwVirtFlyDrawObj;
41 class SwSpzFrmFmts;
42 class SwAttrSetChg;
43 class PolyPolygon;
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;
76 protected:
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
84 private:
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.
95 protected:
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.
107 //war.
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
119 // invisible layer.
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
140 page frame
142 OD 2004-07-02 #i28701#
144 @author OD
146 virtual void RegisterAtCorrectPage();
148 // --> OD 2006-08-10 #i68520#
149 virtual bool _SetObjTop( const SwTwips _nTop );
150 virtual bool _SetObjLeft( const SwTwips _nLeft );
151 // <--
153 // --> OD 2006-10-05 #i70122#
154 virtual const SwRect GetObjBoundRect() const;
155 // <--
156 public:
157 // OD 2004-03-23 #i26791#
158 TYPEINFO();
160 virtual ~SwFlyFrm();
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 );
170 virtual void Cut();
171 #ifndef PRODUCT
172 virtual void Paste( SwFrm* pParent, SwFrm* pSibling = 0 );
173 #endif
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#
239 OD 12.08.2002
240 determines, if background of fly frame has to be drawn transparent
241 definition found in /core/layout/paintfrm.cxx
243 @author OD
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#
252 OD 05.08.2002
253 determine, if shadow color of fly frame has to be drawn transparent
254 definition found in /core/layout/paintfrm.cxx
256 @author OD
258 @return true, if shadow color is transparent.
260 sal_Bool IsShadowTransparent() const;
262 // OD 2004-01-19 #110582#
263 void Chain( SwFrm* _pAnchor );
264 void Unchain();
265 void InsertCnt();
266 void DeleteCnt();
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.
286 @author OD
288 virtual bool IsFormatPossible() const;
290 #endif