/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef SW_FLYFRM_HXX #define SW_FLYFRM_HXX #include "layfrm.hxx" #include #include "frmfmt.hxx" class SwPageFrm; class SwFmtFrmSize; struct SwCrsrMoveState; class SwBorderAttrs; class SwVirtFlyDrawObj; class SwSpzFrmFmts; class SwAttrSetChg; class PolyPolygon; class SwFlyDrawContact; class SwDrawContact; class SwFmt; #include //Sucht ausgehend von pOldAnch einen Anker fuer Absatzgebundene Rahmen. //Wird beim Draggen von Absatzgebundenen Objekten zur Ankeranzeige sowie //fuer Ankerwechsel benoetigt. //implementiert in layout/flycnt.cxx const SwCntntFrm *FindAnchor( const SwFrm *pOldAnch, const Point &rNew, const sal_Bool bBody = sal_False ); // berechnet das Rechteck, in dem das Objekt bewegt bzw. resized werden darf sal_Bool CalcClipRect( const SdrObject *pSdrObj, SwRect &rRect, sal_Bool bMove = sal_True ); //allg. Basisklasse fuer alle Freifliegenden Rahmen // OD 2004-03-22 #i26791# - inherit also from class SwFlyFrm : public SwLayoutFrm, public SwAnchoredObject { //darf Locken. Definiert in frmtool.cxx friend void AppendObjs ( const SwSpzFrmFmts *, sal_uLong, SwFrm *, SwPageFrm * ); friend void Notify( SwFlyFrm *, SwPageFrm *pOld, const SwRect &rOld, const SwRect* pOldPrt ); void InitDrawObj( sal_Bool bNotify ); //Wird von den CToren gerufen. void FinitDrawObj(); //Wird vom CTor gerufen. void _UpdateAttr( const SfxPoolItem*, const SfxPoolItem*, sal_uInt8 &, SwAttrSetChg *pa = 0, SwAttrSetChg *pb = 0 ); using SwLayoutFrm::CalcRel; sal_uInt32 _GetOrdNumForNewRef( const SwFlyDrawContact* ); SwVirtFlyDrawObj* CreateNewRef( SwFlyDrawContact* ); protected: SwFlyFrm *pPrevLink, // Vorgaenger/Nachfolger fuer Verkettung mit *pNextLink; // Textfluss // OD 2004-05-27 #i26791# - moved to // Point aRelPos; //Die Relative Position zum Master private: sal_Bool bLocked :1; //Cntnt-gebundene Flys muessen derart blockiert werden //koennen, dass sie nicht Formatiert werden; :MakeAll //returnt dann sofort. Dies ist bei Seitenwechseln //waehrend der Formatierung notwendig. //Auch wahrend des RootCTors ist dies notwendig da //sonst der Anker formatiert wird obwohl die Root noch //nicht korrekt an der Shell haengt und weil sonst //initial zuviel Formatiert wuerde. sal_Bool bNotifyBack:1; //sal_True wenn am Ende eines MakeAll() der Background //vom NotifyDTor benachrichtigt werden muss. protected: sal_Bool bInvalid :1; //Pos, PrtArea od. SSize wurden Invalidiert, sie werden //gleich wieder Validiert, denn sie muessen _immer_ //gueltig sein. Damit in LayAction korrekt gearbeitet //werden kann muss hier festgehalten werden, dass sie //invalidiert wurden. Ausnahmen bestaetigen die Regelt! sal_Bool bMinHeight:1; //sal_True wenn die vom Attribut vorgegebene Hoehe eine //eine Minimalhoehe ist (der Frm also bei Bedarf //darueberhinaus wachsen kann). sal_Bool bHeightClipped :1; //sal_True wenn der Fly nicht die Pos/Size anhand der Attrs sal_Bool bWidthClipped :1; //formatieren konnte, weil z.B. nicht genug Raum vorh. //war. sal_Bool bFormatHeightOnly :1; //Damit nach einer Anpassung der Breite //(CheckClip) nur das Format aufgerufen wird; //nicht aber die Breite anhand der Attribute //wieder bestimmt wird. sal_Bool bInCnt :1; // FLY_AS_CHAR, anchored as character sal_Bool bAtCnt :1; // FLY_AT_PARA, anchored at paragraph sal_Bool bLayout :1; // FLY_AT_PAGE, FLY_AT_FLY, at page or at frame sal_Bool bAutoPosition :1; // FLY_AT_CHAR, anchored at character sal_Bool bNoShrink :1; // temporary forbud of shrinking to avoid loops sal_Bool bLockDeleteContent :1; // If the flag is set, the content of the // fly frame is not deleted if moved to // invisible layer. friend class SwNoTxtFrm; // Darf NotifyBackground rufen // virtual void NotifyBackground( SwPageFrm *pPage, // const SwRect& rRect, PrepareHint eHint) = 0; virtual void Format( const SwBorderAttrs *pAttrs = 0 ); void MakePrtArea( const SwBorderAttrs &rAttrs ); void Lock() { bLocked = sal_True; } void Unlock() { bLocked = sal_False; } void SetMinHeight() { bMinHeight = sal_True; } void ResetMinHeight(){ bMinHeight = sal_False; } Size CalcRel( const SwFmtFrmSize &rSz ) const; SwTwips CalcAutoWidth() const; SwFlyFrm( SwFlyFrmFmt*, SwFrm*, SwFrm *pAnchor ); /** method to assure that anchored object is registered at the correct page frame OD 2004-07-02 #i28701# @author OD */ virtual void RegisterAtCorrectPage(); virtual bool _SetObjTop( const SwTwips _nTop ); virtual bool _SetObjLeft( const SwTwips _nLeft ); virtual const SwRect GetObjBoundRect() const; virtual void Modify( const SfxPoolItem*, const SfxPoolItem* ); public: // OD 2004-03-23 #i26791# TYPEINFO(); virtual ~SwFlyFrm(); // erfrage vom Client Informationen virtual sal_Bool GetInfo( SfxPoolItem& ) const; virtual void Paint( SwRect const&, SwPrintData const*const pPrintData = NULL ) const; virtual Size ChgSize( const Size& aNewSize ); virtual sal_Bool GetCrsrOfst( SwPosition *, Point&, SwCrsrMoveState* = 0 ) const; virtual void CheckDirection( sal_Bool bVert ); virtual void Cut(); #ifdef DBG_UTIL virtual void Paste( SwFrm* pParent, SwFrm* pSibling = 0 ); #endif SwTwips _Shrink( SwTwips, sal_Bool bTst ); SwTwips _Grow ( SwTwips, sal_Bool bTst ); void _Invalidate( SwPageFrm *pPage = 0 ); sal_Bool FrmSizeChg( const SwFmtFrmSize & ); SwFlyFrm *GetPrevLink() const { return pPrevLink; } SwFlyFrm *GetNextLink() const { return pNextLink; } static void ChainFrames( SwFlyFrm *pMaster, SwFlyFrm *pFollow ); static void UnchainFrames( SwFlyFrm *pMaster, SwFlyFrm *pFollow ); SwFlyFrm *FindChainNeighbour( SwFrmFmt &rFmt, SwFrm *pAnch = 0 ); // OD 2004-03-24 #i26791# const SwVirtFlyDrawObj* GetVirtDrawObj() const; SwVirtFlyDrawObj *GetVirtDrawObj(); void NotifyDrawObj(); void ChgRelPos( const Point &rAbsPos ); sal_Bool IsInvalid() const { return bInvalid; } void Invalidate() const { ((SwFlyFrm*)this)->bInvalid = sal_True; } void Validate() const { ((SwFlyFrm*)this)->bInvalid = sal_False; } sal_Bool IsMinHeight() const { return bMinHeight; } sal_Bool IsLocked() const { return bLocked; } sal_Bool IsAutoPos() const { return bAutoPosition; } sal_Bool IsFlyInCntFrm() const { return bInCnt; } sal_Bool IsFlyFreeFrm() const { return bAtCnt || bLayout; } sal_Bool IsFlyLayFrm() const { return bLayout; } sal_Bool IsFlyAtCntFrm() const { return bAtCnt; } sal_Bool IsNotifyBack() const { return bNotifyBack; } void SetNotifyBack() { bNotifyBack = sal_True; } void ResetNotifyBack() { bNotifyBack = sal_False; } sal_Bool IsNoShrink() const { return bNoShrink; } void SetNoShrink( sal_Bool bNew ) { bNoShrink = bNew; } sal_Bool IsLockDeleteContent() const { return bLockDeleteContent; } void SetLockDeleteContent( sal_Bool bNew ) { bLockDeleteContent = bNew; } sal_Bool IsClipped() const { return bHeightClipped || bWidthClipped; } sal_Bool IsHeightClipped() const { return bHeightClipped; } sal_Bool IsWidthClipped() const { return bWidthClipped; } sal_Bool IsLowerOf( const SwLayoutFrm* pUpper ) const; inline sal_Bool IsUpperOf( const SwFlyFrm& _rLower ) const { return _rLower.IsLowerOf( this ); } SwFrm *FindLastLower(); // OD 16.04.2003 #i13147# - add parameter <_bForPaint> to avoid load of // the graphic during paint. Default value: sal_False sal_Bool GetContour( PolyPolygon& rContour, const sal_Bool _bForPaint = sal_False ) const; //Auf dieser Shell painten (PreView, Print-Flag usw. rekursiv beachten)?. static sal_Bool IsPaint( SdrObject *pObj, const ViewShell *pSh ); /** SwFlyFrm::IsBackgroundTransparent - for feature #99657# OD 12.08.2002 determines, if background of fly frame has to be drawn transparent definition found in /core/layout/paintfrm.cxx @author OD @return true, if background color is transparent or a existing background graphic is transparent. */ sal_Bool IsBackgroundTransparent() const; /** SwFlyFrm::IsShadowTransparent - for feature #99657# OD 05.08.2002 determine, if shadow color of fly frame has to be drawn transparent definition found in /core/layout/paintfrm.cxx @author OD @return true, if shadow color is transparent. */ sal_Bool IsShadowTransparent() const; // OD 2004-01-19 #110582# void Chain( SwFrm* _pAnchor ); void Unchain(); void InsertCnt(); void DeleteCnt(); // OD 2004-02-12 #110582#-2 void InsertColumns(); // OD 2004-03-23 #i26791# - pure virtual methods of base class virtual void MakeObjPos(); virtual void InvalidateObjPos(); virtual SwFrmFmt& GetFrmFmt(); virtual const SwFrmFmt& GetFrmFmt() const; virtual const SwRect GetObjRect() const; /** method to determine, if a format on the Writer fly frame is possible OD 2004-05-11 #i28701# refine 'IsFormatPossible'-conditions of method by: format isn't possible, if Writer fly frame is locked resp. col-locked. @author OD */ virtual bool IsFormatPossible() const; static void GetAnchoredObjects( std::list&, const SwFmt& rFmt ); // overwriting "SwFrmFmt *SwLayoutFrm::GetFmt" to provide the correct derived return type. // (This is in order to skip on the otherwise necessary casting of the result to // 'SwFlyFrmFmt *' after calls to this function. The casting is now done in this function.) virtual const SwFlyFrmFmt *GetFmt() const; virtual SwFlyFrmFmt *GetFmt(); }; #endif