summaryrefslogtreecommitdiff
path: root/sw/source/core/inc/flyfrm.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/inc/flyfrm.hxx')
-rw-r--r--sw/source/core/inc/flyfrm.hxx288
1 files changed, 288 insertions, 0 deletions
diff --git a/sw/source/core/inc/flyfrm.hxx b/sw/source/core/inc/flyfrm.hxx
new file mode 100644
index 000000000000..04525e1c0fd5
--- /dev/null
+++ b/sw/source/core/inc/flyfrm.hxx
@@ -0,0 +1,288 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 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
+// #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
+
+ // #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 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
+
+ #i28701#
+ */
+ 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* );
+
+ virtual const IDocumentDrawModelAccess* getIDocumentDrawModelAccess( );
+
+public:
+ // #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();
+#if OSL_DEBUG_LEVEL > 1
+ 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 );
+
+ // #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();
+
+ // #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
+
+ determines, if background of fly frame has to be drawn transparent
+ definition found in /core/layout/paintfrm.cxx
+
+ @return true, if background color is transparent or a existing background
+ graphic is transparent.
+ */
+ sal_Bool IsBackgroundTransparent() const;
+
+ /** SwFlyFrm::IsShadowTransparent
+
+ determine, if shadow color of fly frame has to be drawn transparent
+ definition found in /core/layout/paintfrm.cxx
+
+ @return true, if shadow color is transparent.
+ */
+ sal_Bool IsShadowTransparent() const;
+
+ void Chain( SwFrm* _pAnchor );
+ void Unchain();
+ void InsertCnt();
+ void DeleteCnt();
+ void InsertColumns();
+
+ // #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
+
+ #i28701#
+ refine 'IsFormatPossible'-conditions of method
+ <SwAnchoredObject::IsFormatPossible()> by:
+ format isn't possible, if Writer fly frame is locked resp. col-locked.
+ */
+ 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
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */