| /************************************************************** |
| * |
| * 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 <list> |
| #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 <anchoredobject.hxx> |
| |
| //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 <SwAnchoredFlyFrm> |
| 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 <SwAnchoredObject> |
| // 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: |
| //Bug 120881:Modify here for Directly Page Numbering |
| sal_Bool IsPageNumberingFrm(); |
| //Bug 120881(End) |
| // 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 <SwAnchoredObject> |
| 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 |
| <SwAnchoredObject::IsFormatPossible()> 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<SwAnchoredObject*>&, 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 |