diff options
Diffstat (limited to 'sw/source/core/unocore/unoframe.cxx')
-rw-r--r-- | sw/source/core/unocore/unoframe.cxx | 3433 |
1 files changed, 3433 insertions, 0 deletions
diff --git a/sw/source/core/unocore/unoframe.cxx b/sw/source/core/unocore/unoframe.cxx new file mode 100644 index 000000000000..3a3df506b457 --- /dev/null +++ b/sw/source/core/unocore/unoframe.cxx @@ -0,0 +1,3433 @@ + /************************************************************************* + * + * 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. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sw.hxx" + +#include <com/sun/star/embed/NoVisualAreaSizeException.hpp> +#include <com/sun/star/container/XChild.hpp> +#include <com/sun/star/embed/XClassifiedObject.hpp> +#include <com/sun/star/embed/XVisualObject.hpp> +#include <com/sun/star/embed/XComponentSupplier.hpp> +#include <com/sun/star/embed/EmbedStates.hpp> +#include <com/sun/star/embed/Aspects.hpp> +#include <com/sun/star/graphic/XGraphicProvider.hpp> +#include <svx/svxids.hrc> +#include <editeng/memberids.hrc> + +#include <swtypes.hxx> +#include <cmdid.h> + +#include <memory> +#include <hints.hxx> +#include <doc.hxx> +#include <docsh.hxx> +#include <editsh.hxx> +#include <swcli.hxx> +#include <ndindex.hxx> +#include <pam.hxx> +#include <ndnotxt.hxx> +#include <svx/unomid.hxx> +#include <unocrsr.hxx> +#include <unocrsrhelper.hxx> +#include <docstyle.hxx> +#include <dcontact.hxx> +#include <fmtcnct.hxx> +#include <ndole.hxx> +#include <frmfmt.hxx> +#include <frame.hxx> +#include <unotextrange.hxx> +#include <unotextcursor.hxx> +#include <unoparagraph.hxx> +#include <unomap.hxx> +#include <unoprnms.hxx> +#include <unoevent.hxx> +#include <com/sun/star/table/BorderLine.hpp> +#include <com/sun/star/util/XModifyBroadcaster.hpp> +#include <com/sun/star/table/ShadowFormat.hpp> +#include <com/sun/star/style/GraphicLocation.hpp> +#include <com/sun/star/text/GraphicCrop.hpp> +#include <com/sun/star/text/TextContentAnchorType.hpp> +#include <com/sun/star/text/XTextColumns.hpp> +#include <com/sun/star/text/WrapTextMode.hpp> +#include <com/sun/star/beans/PropertyAttribute.hpp> +#include <com/sun/star/drawing/PointSequenceSequence.hpp> +#include <com/sun/star/drawing/PointSequence.hpp> +#include <com/sun/star/drawing/ColorMode.hpp> +#include <tools/poly.hxx> +#include <swundo.hxx> +#include <unostyle.hxx> +#include <svx/svdmodel.hxx> +#include <svx/svdpage.hxx> +#include <editeng/brshitem.hxx> +#include <editeng/protitem.hxx> +#include <fmtornt.hxx> +#include <fmturl.hxx> +#include <editeng/lrspitem.hxx> +#include <editeng/ulspitem.hxx> +#include <editeng/boxitem.hxx> +#include <editeng/opaqitem.hxx> +#include <editeng/prntitem.hxx> +#include <editeng/shaditem.hxx> +#include <fmtsrnd.hxx> +#include <fmtfsize.hxx> +#include <grfatr.hxx> +#include <unoframe.hxx> +#include <fmtanchr.hxx> +#include <fmtclds.hxx> +#include <fmtcntnt.hxx> +#include <frmatr.hxx> +#include <ndtxt.hxx> +#include <ndgrf.hxx> +#include <vos/mutex.hxx> +#include <vcl/svapp.hxx> +#include <sfx2/printer.hxx> +#include <SwStyleNameMapper.hxx> +#include <xmloff/xmlcnitm.hxx> +#include <poolfmt.hxx> +#include <pagedesc.hxx> +#include <com/sun/star/style/XStyleFamiliesSupplier.hpp> +#include <tools/urlobj.hxx> +#include <editeng/frmdiritem.hxx> +// DVO, OD 01.10.2003 #i18732# +#include <fmtfollowtextflow.hxx> +// OD 2004-05-05 #i28701# +#include <fmtwrapinfluenceonobjpos.hxx> + +#include <toolkit/helper/vclunohelper.hxx> + +// from fefly1.cxx +extern sal_Bool lcl_ChkAndSetNewAnchor( const SwFlyFrm& rFly, SfxItemSet& rSet ); + +using namespace ::com::sun::star; +using ::rtl::OUString; + +using ::com::sun::star::frame::XModel; +using ::com::sun::star::container::XNameAccess; +using ::com::sun::star::style::XStyleFamiliesSupplier; + +const sal_Char __FAR_DATA sPackageProtocol[] = "vnd.sun.star.Package:"; +const sal_Char __FAR_DATA sGraphicObjectProtocol[] = "vnd.sun.star.GraphicObject:"; + +/**************************************************************************** + Rahmenbeschreibung +****************************************************************************/ +class BaseFrameProperties_Impl +{ + SwUnoCursorHelper::SwAnyMapHelper aAnyMap; + +public: + virtual ~BaseFrameProperties_Impl(); + + void SetProperty(USHORT nWID, BYTE nMemberId, const uno::Any& rVal); + sal_Bool GetProperty(USHORT nWID, BYTE nMemberId, const uno::Any*& pAny ); +// void GetProperty(const OUString &rPropertyName, const uno::Reference < beans::XPropertySet > &rxPropertySet, uno::Any& rAny ); + +// const SfxItemPropertyMap* GetMap() const {return _pMap;} + sal_Bool FillBaseProperties(SfxItemSet& rToSet, const SfxItemSet &rFromSet, sal_Bool& rSizeFound); + + virtual sal_Bool AnyToItemSet( SwDoc* pDoc, SfxItemSet& rFrmSet, SfxItemSet& rSet, sal_Bool& rSizeFound) = 0; + +}; +/* -----------------------------12.06.01 15:46-------------------------------- + + ---------------------------------------------------------------------------*/ +BaseFrameProperties_Impl::~BaseFrameProperties_Impl() +{ +} +/* -----------------------------12.06.01 15:43-------------------------------- + + ---------------------------------------------------------------------------*/ +void BaseFrameProperties_Impl::SetProperty(USHORT nWID, BYTE nMemberId, const uno::Any& rVal) +{ + aAnyMap.SetValue( nWID, nMemberId, rVal ); +} +/* -----------------------------12.06.01 15:43-------------------------------- + + ---------------------------------------------------------------------------*/ +sal_Bool BaseFrameProperties_Impl::GetProperty(USHORT nWID, BYTE nMemberId, const uno::Any*& rpAny) +{ + return aAnyMap.FillValue( nWID, nMemberId, rpAny ); +} +//void BaseFrameProperties_Impl::GetProperty( const OUString &rPropertyName, const uno::Reference < beans::XPropertySet > &rxPropertySet, uno::Any & rAny ) +//{ +// rAny = rxPropertySet->getPropertyValue( rPropertyName ); +//} +/* -----------------29.06.98 09:55------------------- + * + * --------------------------------------------------*/ +sal_Bool BaseFrameProperties_Impl::FillBaseProperties(SfxItemSet& rToSet, const SfxItemSet& rFromSet, sal_Bool& rSizeFound) +{ + sal_Bool bRet = sal_True; + //Anker kommt auf jeden Fall in den Set + SwFmtAnchor aAnchor ( static_cast < const SwFmtAnchor & > ( rFromSet.Get ( RES_ANCHOR ) ) ); + { + const ::uno::Any* pAnchorPgNo; + if(GetProperty(RES_ANCHOR, MID_ANCHOR_PAGENUM, pAnchorPgNo)) + bRet &= ((SfxPoolItem&)aAnchor).PutValue(*pAnchorPgNo, MID_ANCHOR_PAGENUM); + const ::uno::Any* pAnchorType; + if(GetProperty(RES_ANCHOR, MID_ANCHOR_ANCHORTYPE, pAnchorType)) + bRet &= ((SfxPoolItem&)aAnchor).PutValue(*pAnchorType, MID_ANCHOR_ANCHORTYPE); + } + rToSet.Put(aAnchor); + { + const ::uno::Any* pCol = 0; + GetProperty(RES_BACKGROUND, MID_BACK_COLOR, pCol ); + const ::uno::Any* pRGBCol = 0; + GetProperty(RES_BACKGROUND, MID_BACK_COLOR_R_G_B, pRGBCol ); + const ::uno::Any* pColTrans = 0; + GetProperty(RES_BACKGROUND, MID_BACK_COLOR_TRANSPARENCY, pColTrans); + const ::uno::Any* pTrans = 0; + GetProperty(RES_BACKGROUND, MID_GRAPHIC_TRANSPARENT, pTrans ); + const ::uno::Any* pGrLoc = 0; + GetProperty(RES_BACKGROUND, MID_GRAPHIC_POSITION, pGrLoc ); + const ::uno::Any* pGrURL = 0; + GetProperty(RES_BACKGROUND, MID_GRAPHIC_URL, pGrURL ); + const ::uno::Any* pGrFilter = 0; + GetProperty(RES_BACKGROUND, MID_GRAPHIC_FILTER, pGrFilter ); + const ::uno::Any* pGrTranparency = 0; + GetProperty(RES_BACKGROUND, MID_GRAPHIC_TRANSPARENCY, pGrTranparency ); + + if(pCol || pTrans || pGrURL || pGrFilter || pGrLoc || + pGrTranparency || pColTrans || pRGBCol) + { + SvxBrushItem aBrush ( static_cast < const :: SvxBrushItem & > ( rFromSet.Get ( RES_BACKGROUND ) ) ); + if(pCol ) + bRet &= ((SfxPoolItem&)aBrush).PutValue(*pCol,MID_BACK_COLOR ); + if(pColTrans) + bRet &= ((SfxPoolItem&)aBrush).PutValue(*pColTrans, MID_BACK_COLOR_TRANSPARENCY); + if(pRGBCol) + bRet &= ((SfxPoolItem&)aBrush).PutValue(*pRGBCol, MID_BACK_COLOR_R_G_B); + if(pTrans) + { + // don't overwrite transparency with a non-transparence flag + if(!pColTrans || Any2Bool( *pTrans )) + bRet &= ((SfxPoolItem&)aBrush).PutValue(*pTrans, MID_GRAPHIC_TRANSPARENT); + } + if(pGrURL) + bRet &= ((SfxPoolItem&)aBrush).PutValue(*pGrURL, MID_GRAPHIC_URL); + if(pGrFilter) + bRet &= ((SfxPoolItem&)aBrush).PutValue(*pGrFilter, MID_GRAPHIC_FILTER); + if(pGrLoc) + bRet &= ((SfxPoolItem&)aBrush).PutValue(*pGrLoc, MID_GRAPHIC_POSITION); + if(pGrTranparency) + bRet &= ((SfxPoolItem&)aBrush).PutValue(*pGrTranparency, MID_GRAPHIC_TRANSPARENCY); + + rToSet.Put(aBrush); + } + } + { + const ::uno::Any* pCont = 0; + GetProperty(RES_PROTECT, MID_PROTECT_CONTENT, pCont ); + const ::uno::Any* pPos = 0; + GetProperty(RES_PROTECT,MID_PROTECT_POSITION, pPos ); + const ::uno::Any* pName = 0; + GetProperty(RES_PROTECT, MID_PROTECT_SIZE, pName ); + if(pCont||pPos||pName) + { + SvxProtectItem aProt ( static_cast < const :: SvxProtectItem & > ( rFromSet.Get ( RES_PROTECT ) ) ); + if(pCont) + bRet &= ((SfxPoolItem&)aProt).PutValue(*pCont, MID_PROTECT_CONTENT); + if(pPos ) + bRet &= ((SfxPoolItem&)aProt).PutValue(*pPos, MID_PROTECT_POSITION); + if(pName) + bRet &= ((SfxPoolItem&)aProt).PutValue(*pName, MID_PROTECT_SIZE); + rToSet.Put(aProt); + } + } + { + const ::uno::Any* pHori = 0; + GetProperty(RES_HORI_ORIENT, MID_HORIORIENT_ORIENT, pHori ); + const ::uno::Any* pHoriP = 0; + GetProperty(RES_HORI_ORIENT, MID_HORIORIENT_POSITION|CONVERT_TWIPS, pHoriP ); + const ::uno::Any* pHoriR = 0; + GetProperty(RES_HORI_ORIENT, MID_HORIORIENT_RELATION, pHoriR ); + const ::uno::Any* pPageT = 0; + GetProperty(RES_HORI_ORIENT, MID_HORIORIENT_PAGETOGGLE, pPageT); + if(pHori||pHoriP||pHoriR||pPageT) + { + SwFmtHoriOrient aOrient ( static_cast < const :: SwFmtHoriOrient & > ( rFromSet.Get ( RES_HORI_ORIENT ) ) ); + if(pHori ) + bRet &= ((SfxPoolItem&)aOrient).PutValue(*pHori, MID_HORIORIENT_ORIENT); + if(pHoriP) + bRet &= ((SfxPoolItem&)aOrient).PutValue(*pHoriP, MID_HORIORIENT_POSITION|CONVERT_TWIPS); + if(pHoriR) + bRet &= ((SfxPoolItem&)aOrient).PutValue(*pHoriR, MID_HORIORIENT_RELATION); + if(pPageT) + bRet &= ((SfxPoolItem&)aOrient).PutValue(*pPageT, MID_HORIORIENT_PAGETOGGLE); + rToSet.Put(aOrient); + } + } + + { + const ::uno::Any* pVert = 0; + GetProperty(RES_VERT_ORIENT, MID_VERTORIENT_ORIENT, pVert); + const ::uno::Any* pVertP = 0; + GetProperty(RES_VERT_ORIENT, MID_VERTORIENT_POSITION|CONVERT_TWIPS, pVertP ); + const ::uno::Any* pVertR = 0; + GetProperty(RES_VERT_ORIENT, MID_VERTORIENT_RELATION, pVertR ); + if(pVert||pVertP||pVertR) + { + SwFmtVertOrient aOrient ( static_cast < const :: SwFmtVertOrient & > ( rFromSet.Get ( RES_VERT_ORIENT ) ) ); + if(pVert ) + bRet &= ((SfxPoolItem&)aOrient).PutValue(*pVert, MID_VERTORIENT_ORIENT); + if(pVertP) + bRet &= ((SfxPoolItem&)aOrient).PutValue(*pVertP, MID_VERTORIENT_POSITION|CONVERT_TWIPS); + if(pVertR) + bRet &= ((SfxPoolItem&)aOrient).PutValue(*pVertR, MID_VERTORIENT_RELATION); + rToSet.Put(aOrient); + } + } + { + const ::uno::Any* pURL = 0; + GetProperty(RES_URL, MID_URL_URL, pURL ); + const ::uno::Any* pTarget = 0; + GetProperty(RES_URL, MID_URL_TARGET, pTarget ); + const ::uno::Any* pHyLNm = 0; + GetProperty(RES_URL, MID_URL_HYPERLINKNAME, pHyLNm ); + const ::uno::Any* pHySMp = 0; + GetProperty(RES_URL, MID_URL_SERVERMAP, pHySMp ); + if(pURL||pTarget||pHyLNm||pHySMp) + { + SwFmtURL aURL ( static_cast < const :: SwFmtURL & > ( rFromSet.Get ( RES_URL ) ) ); + if(pURL) + bRet &= ((SfxPoolItem&)aURL).PutValue(*pURL, MID_URL_URL); + if(pTarget) + bRet &= ((SfxPoolItem&)aURL).PutValue(*pTarget, MID_URL_TARGET); + if(pHyLNm) + bRet &= ((SfxPoolItem&)aURL).PutValue(*pHyLNm, MID_URL_HYPERLINKNAME ); + if(pHySMp) + bRet &= ((SfxPoolItem&)aURL).PutValue(*pHySMp, MID_URL_SERVERMAP); + rToSet.Put(aURL); + } + } + const ::uno::Any* pL = 0; + GetProperty(RES_LR_SPACE, MID_L_MARGIN|CONVERT_TWIPS, pL ); + const ::uno::Any* pR = 0; + GetProperty(RES_LR_SPACE, MID_R_MARGIN|CONVERT_TWIPS, pR ); + if(pL||pR) + { + SvxLRSpaceItem aLR ( static_cast < const :: SvxLRSpaceItem & > ( rFromSet.Get ( RES_LR_SPACE ) ) ); + if(pL) + bRet &= ((SfxPoolItem&)aLR).PutValue(*pL, MID_L_MARGIN|CONVERT_TWIPS); + if(pR) + bRet &= ((SfxPoolItem&)aLR).PutValue(*pR, MID_R_MARGIN|CONVERT_TWIPS); + rToSet.Put(aLR); + } + const ::uno::Any* pT = 0; + GetProperty(RES_UL_SPACE, MID_UP_MARGIN|CONVERT_TWIPS, pT ); + const ::uno::Any* pB = 0; + GetProperty(RES_UL_SPACE, MID_LO_MARGIN|CONVERT_TWIPS, pB ); + if(pT||pB) + { + SvxULSpaceItem aTB ( static_cast < const :: SvxULSpaceItem &> ( rFromSet.Get ( RES_UL_SPACE ) ) ); + if(pT) + bRet &= ((SfxPoolItem&)aTB).PutValue(*pT, MID_UP_MARGIN|CONVERT_TWIPS); + if(pB) + bRet &= ((SfxPoolItem&)aTB).PutValue(*pB, MID_LO_MARGIN|CONVERT_TWIPS); + rToSet.Put(aTB); + } + const ::uno::Any* pOp; + if(GetProperty(RES_OPAQUE, 0, pOp)) + { + SvxOpaqueItem aOp ( static_cast < const :: SvxOpaqueItem& > ( rFromSet.Get ( RES_OPAQUE ) ) ); + bRet &= ((SfxPoolItem&)aOp).PutValue(*pOp, 0); + rToSet.Put(aOp); + } + const ::uno::Any* pPrt; + if(GetProperty(RES_PRINT, 0, pPrt)) + { + SvxPrintItem aPrt ( static_cast < const :: SvxPrintItem & > ( rFromSet.Get ( RES_PRINT ) ) ); + bRet &= ((SfxPoolItem&)aPrt).PutValue(*pPrt, 0); + rToSet.Put(aPrt); + } + const ::uno::Any* pSh; + if(GetProperty(RES_SHADOW, CONVERT_TWIPS, pSh)) + { + SvxShadowItem aSh ( static_cast < const :: SvxShadowItem& > ( rFromSet.Get ( RES_SHADOW ) ) ); + bRet &= ((SfxPoolItem&)aSh).PutValue(*pSh, CONVERT_TWIPS); + rToSet.Put(aSh); + } + const ::uno::Any* pSur = 0; + GetProperty(RES_SURROUND, MID_SURROUND_SURROUNDTYPE, pSur); + const ::uno::Any* pSurAnch = 0; + GetProperty(RES_SURROUND, MID_SURROUND_ANCHORONLY, pSurAnch); + if(pSur || pSurAnch) + { + SwFmtSurround aSrnd ( static_cast < const :: SwFmtSurround & > ( rFromSet.Get ( RES_SURROUND ) ) ); + if(pSur) + bRet &= ((SfxPoolItem&)aSrnd).PutValue(*pSur, MID_SURROUND_SURROUNDTYPE ); + if(pSurAnch) + bRet &= ((SfxPoolItem&)aSrnd).PutValue(*pSurAnch, MID_SURROUND_ANCHORONLY); + rToSet.Put(aSrnd); + } + const ::uno::Any* pLeft = 0; + GetProperty(RES_BOX, LEFT_BORDER |CONVERT_TWIPS, pLeft ); + const ::uno::Any* pRight = 0; + GetProperty(RES_BOX, CONVERT_TWIPS|RIGHT_BORDER , pRight ); + const ::uno::Any* pTop = 0; + GetProperty(RES_BOX, CONVERT_TWIPS|TOP_BORDER , pTop ); + const ::uno::Any* pBottom = 0; + GetProperty(RES_BOX, CONVERT_TWIPS|BOTTOM_BORDER, pBottom); + const ::uno::Any* pDistance = 0; + GetProperty(RES_BOX, CONVERT_TWIPS|BORDER_DISTANCE, pDistance); + const ::uno::Any* pLeftDistance = 0; + GetProperty(RES_BOX, CONVERT_TWIPS|LEFT_BORDER_DISTANCE, pLeftDistance); + const ::uno::Any* pRightDistance = 0; + GetProperty(RES_BOX, CONVERT_TWIPS|RIGHT_BORDER_DISTANCE, pRightDistance); + const ::uno::Any* pTopDistance = 0; + GetProperty(RES_BOX, CONVERT_TWIPS|TOP_BORDER_DISTANCE, pTopDistance); + const ::uno::Any* pBottomDistance = 0; + GetProperty(RES_BOX, CONVERT_TWIPS|BOTTOM_BORDER_DISTANCE, pBottomDistance); + if( pLeft || pRight || pTop || pBottom || pDistance || + pLeftDistance || pRightDistance || pTopDistance || pBottomDistance ) + { + SvxBoxItem aBox ( static_cast < const :: SvxBoxItem & > ( rFromSet.Get ( RES_BOX ) ) ); + if( pLeft ) + bRet &= ((SfxPoolItem&)aBox).PutValue(*pLeft, CONVERT_TWIPS|LEFT_BORDER ); + if( pRight ) + bRet &= ((SfxPoolItem&)aBox).PutValue(*pRight, CONVERT_TWIPS|RIGHT_BORDER ); + if( pTop ) + bRet &= ((SfxPoolItem&)aBox).PutValue(*pTop, CONVERT_TWIPS|TOP_BORDER); + if( pBottom ) + bRet &= ((SfxPoolItem&)aBox).PutValue(*pBottom, CONVERT_TWIPS|BOTTOM_BORDER); + if( pDistance ) + bRet &= ((SfxPoolItem&)aBox).PutValue(*pDistance, CONVERT_TWIPS|BORDER_DISTANCE); + if( pLeftDistance ) + bRet &= ((SfxPoolItem&)aBox).PutValue(*pLeftDistance, CONVERT_TWIPS|LEFT_BORDER_DISTANCE); + if( pRightDistance ) + bRet &= ((SfxPoolItem&)aBox).PutValue(*pRightDistance, CONVERT_TWIPS|RIGHT_BORDER_DISTANCE); + if( pTopDistance ) + bRet &= ((SfxPoolItem&)aBox).PutValue(*pTopDistance, CONVERT_TWIPS|TOP_BORDER_DISTANCE); + if( pBottomDistance ) + bRet &= ((SfxPoolItem&)aBox).PutValue(*pBottomDistance, CONVERT_TWIPS|BOTTOM_BORDER_DISTANCE); + rToSet.Put(aBox); + } + { + const ::uno::Any* pRelH = 0; + GetProperty(RES_FRM_SIZE, MID_FRMSIZE_REL_HEIGHT, pRelH); + const ::uno::Any* pRelW = 0; + GetProperty(RES_FRM_SIZE, MID_FRMSIZE_REL_WIDTH, pRelW); + const ::uno::Any* pSyncWidth = 0; + GetProperty(RES_FRM_SIZE, MID_FRMSIZE_IS_SYNC_WIDTH_TO_HEIGHT, pSyncWidth); + const ::uno::Any* pSyncHeight = 0; + GetProperty(RES_FRM_SIZE, MID_FRMSIZE_IS_SYNC_HEIGHT_TO_WIDTH, pSyncHeight); + const ::uno::Any* pWidth = 0; + GetProperty(RES_FRM_SIZE, MID_FRMSIZE_WIDTH|CONVERT_TWIPS, pWidth); + const ::uno::Any* pHeight = 0; + GetProperty(RES_FRM_SIZE, MID_FRMSIZE_HEIGHT|CONVERT_TWIPS, pHeight); + const ::uno::Any* pSize = 0; + GetProperty(RES_FRM_SIZE, MID_FRMSIZE_SIZE|CONVERT_TWIPS, pSize); + const ::uno::Any* pSizeType = 0; + GetProperty(RES_FRM_SIZE, MID_FRMSIZE_SIZE_TYPE, pSizeType); + const ::uno::Any* pWidthType = 0; + GetProperty(RES_FRM_SIZE, MID_FRMSIZE_WIDTH_TYPE, pWidthType); + if( pWidth || pHeight ||pRelH || pRelW || pSize ||pSizeType || + pWidthType ||pSyncWidth || pSyncHeight ) + { + rSizeFound = sal_True; + SwFmtFrmSize aFrmSz ( static_cast < const :: SwFmtFrmSize& > ( rFromSet.Get ( RES_FRM_SIZE ) ) ); + if(pWidth) + bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pWidth, MID_FRMSIZE_WIDTH|CONVERT_TWIPS); + if(pHeight) + bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pHeight, MID_FRMSIZE_HEIGHT|CONVERT_TWIPS); + if(pRelH ) + bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pRelH, MID_FRMSIZE_REL_HEIGHT); + if(pRelW ) + bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pRelW, MID_FRMSIZE_REL_WIDTH); + if(pSyncWidth) + bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pSyncWidth, MID_FRMSIZE_IS_SYNC_WIDTH_TO_HEIGHT); + if(pSyncHeight) + bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pSyncHeight, MID_FRMSIZE_IS_SYNC_HEIGHT_TO_WIDTH); + if(pSize) + bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pSize, MID_FRMSIZE_SIZE|CONVERT_TWIPS); + if(pSizeType) + bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pSizeType, MID_FRMSIZE_SIZE_TYPE); + if(pWidthType) + bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pWidthType, MID_FRMSIZE_WIDTH_TYPE); + if(!aFrmSz.GetWidth()) + aFrmSz.SetWidth(MINFLY); + if(!aFrmSz.GetHeight()) + aFrmSz.SetHeight(MINFLY); + rToSet.Put(aFrmSz); + } + else + { + rSizeFound = sal_False; + SwFmtFrmSize aFrmSz; + awt::Size aSize; + aSize.Width = 2 * MM50; + aSize.Height = 2 * MM50; + ::uno::Any aSizeVal; + aSizeVal <<= aSize; + ((SfxPoolItem&)aFrmSz).PutValue(aSizeVal, MID_FRMSIZE_SIZE|CONVERT_TWIPS); + rToSet.Put(aFrmSz); + } + } + const ::uno::Any* pFrameDirection = 0; + GetProperty(RES_FRAMEDIR, 0, pFrameDirection); + if(pFrameDirection) + { + SvxFrameDirectionItem aAttr(FRMDIR_HORI_LEFT_TOP, RES_FRAMEDIR); + aAttr.PutValue(*pFrameDirection, 0); + rToSet.Put(aAttr); + } + const ::uno::Any* pUnknown = 0; + GetProperty(RES_UNKNOWNATR_CONTAINER, 0, pUnknown); + if(pUnknown) + { + SvXMLAttrContainerItem aAttr(RES_UNKNOWNATR_CONTAINER); + aAttr.PutValue(*pUnknown, 0); + rToSet.Put(aAttr); + } + + // DVO, OD 01.10.2003 #i18732# + const ::uno::Any* pFollowTextFlow = 0; + GetProperty(RES_FOLLOW_TEXT_FLOW, 0, pFollowTextFlow); + if ( pFollowTextFlow ) + { + SwFmtFollowTextFlow aFmtFollowTextFlow; + aFmtFollowTextFlow.PutValue(*pFollowTextFlow, 0); + rToSet.Put(aFmtFollowTextFlow); + } + + // OD 2004-05-04 #i28701# - RES_WRAP_INFLUENCE_ON_OBJPOS + const ::uno::Any* pWrapInfluenceOnObjPos = 0; + GetProperty(RES_WRAP_INFLUENCE_ON_OBJPOS, MID_WRAP_INFLUENCE, pWrapInfluenceOnObjPos); + if ( pWrapInfluenceOnObjPos ) + { + SwFmtWrapInfluenceOnObjPos aFmtWrapInfluenceOnObjPos; + aFmtWrapInfluenceOnObjPos.PutValue( *pWrapInfluenceOnObjPos, MID_WRAP_INFLUENCE ); + rToSet.Put(aFmtWrapInfluenceOnObjPos); + } + + return bRet; +} +/* -----------------22.06.98 09:17------------------- + * + * --------------------------------------------------*/ + +class SwFrameProperties_Impl : public BaseFrameProperties_Impl +{ +protected: +// SwFrameProperties_Impl(/*const :: SfxItemPropertyMap* pMap*/) : +// BaseFrameProperties_Impl(/*pMap*/){} +public: + SwFrameProperties_Impl(); + virtual ~SwFrameProperties_Impl(){} + + virtual sal_Bool AnyToItemSet( SwDoc* pDoc, SfxItemSet& rFrmSet, SfxItemSet& rSet, sal_Bool& rSizeFound); +}; +/* -----------------22.06.98 09:17------------------- + * + * --------------------------------------------------*/ +SwFrameProperties_Impl::SwFrameProperties_Impl(): + BaseFrameProperties_Impl(/*aSwMapProvider.GetPropertyMap(PROPERTY_MAP_TEXT_FRAME)*/ ) +{ +} +/* -----------------22.06.98 11:27------------------- + * + * --------------------------------------------------*/ +inline void lcl_FillCol ( SfxItemSet &rToSet, const :: SfxItemSet &rFromSet, const :: uno::Any *pAny) +{ + if ( pAny ) + { + SwFmtCol aCol ( static_cast < const :: SwFmtCol & > ( rFromSet.Get ( RES_COL ) ) ); + ((SfxPoolItem&)aCol).PutValue( *pAny, MID_COLUMNS); + rToSet.Put(aCol); + } +} +sal_Bool SwFrameProperties_Impl::AnyToItemSet(SwDoc *pDoc, SfxItemSet& rSet, SfxItemSet&, sal_Bool& rSizeFound) +{ + //Properties fuer alle Frames + const ::uno::Any *pStyleName; + SwDocStyleSheet* pStyle = NULL; + sal_Bool bRet; + + if ( GetProperty ( FN_UNO_FRAME_STYLE_NAME, 0, pStyleName ) ) + { + OUString sStyle; + *pStyleName >>= sStyle; + pStyle = (SwDocStyleSheet*)pDoc->GetDocShell()->GetStyleSheetPool()->Find(sStyle, + SFX_STYLE_FAMILY_FRAME); + } + + const ::uno::Any* pColumns = NULL; + GetProperty (RES_COL, MID_COLUMNS, pColumns); + if ( pStyle ) + { + rtl::Reference< SwDocStyleSheet > xStyle( new SwDocStyleSheet( *pStyle ) ); + const :: SfxItemSet *pItemSet = &xStyle->GetItemSet(); + bRet = FillBaseProperties( rSet, *pItemSet, rSizeFound ); + lcl_FillCol ( rSet, *pItemSet, pColumns ); + } + else + { + const :: SfxItemSet *pItemSet = &pDoc->GetFrmFmtFromPool( RES_POOLFRM_FRAME )->GetAttrSet(); + bRet = FillBaseProperties( rSet, *pItemSet, rSizeFound ); + lcl_FillCol ( rSet, *pItemSet, pColumns ); + } + const ::uno::Any* pEdit; + if(GetProperty(RES_EDIT_IN_READONLY, 0, pEdit)) + { + SfxBoolItem aBool(RES_EDIT_IN_READONLY); + ((SfxPoolItem&)aBool).PutValue(*pEdit, 0); + rSet.Put(aBool); + } + return bRet; +} +/**************************************************************************** + Grafik-Descriptor +****************************************************************************/ +class SwGraphicProperties_Impl : public BaseFrameProperties_Impl +{ +public: + SwGraphicProperties_Impl(); + virtual ~SwGraphicProperties_Impl(){} + + virtual sal_Bool AnyToItemSet( SwDoc* pDoc, SfxItemSet& rFrmSet, SfxItemSet& rSet, sal_Bool& rSizeFound); +}; +/* -----------------27.06.98 14:53------------------- + * + * --------------------------------------------------*/ +SwGraphicProperties_Impl::SwGraphicProperties_Impl( ) : + BaseFrameProperties_Impl(/*aSwMapProvider.GetPropertyMap(PROPERTY_MAP_TEXT_GRAPHIC)*/ ) +{ +} + +/* -----------------27.06.98 14:40------------------- + * + * --------------------------------------------------*/ +inline void lcl_FillMirror ( SfxItemSet &rToSet, const :: SfxItemSet &rFromSet, const ::uno::Any *pHEvenMirror, const ::uno::Any *pHOddMirror, const ::uno::Any *pVMirror, sal_Bool &rRet ) +{ + if(pHEvenMirror || pHOddMirror || pVMirror ) + { + SwMirrorGrf aMirror ( static_cast < const :: SwMirrorGrf& > ( rFromSet.Get ( RES_GRFATR_MIRRORGRF ) ) ); + if(pHEvenMirror) + rRet &= ((SfxPoolItem&)aMirror).PutValue(*pHEvenMirror, MID_MIRROR_HORZ_EVEN_PAGES); + if(pHOddMirror) + rRet &= ((SfxPoolItem&)aMirror).PutValue(*pHOddMirror, MID_MIRROR_HORZ_ODD_PAGES); + if(pVMirror) + rRet &= ((SfxPoolItem&)aMirror).PutValue(*pVMirror, MID_MIRROR_VERT); + rToSet.Put(aMirror); + } +} + +sal_Bool SwGraphicProperties_Impl::AnyToItemSet( + SwDoc* pDoc, + SfxItemSet& rFrmSet, + SfxItemSet& rGrSet, + sal_Bool& rSizeFound) +{ + //Properties fuer alle Frames + sal_Bool bRet; + const ::uno::Any *pStyleName; + SwDocStyleSheet* pStyle = NULL; + + if ( GetProperty ( FN_UNO_FRAME_STYLE_NAME, 0, pStyleName ) ) + { + OUString sStyle; + *pStyleName >>= sStyle; + pStyle = (SwDocStyleSheet*)pDoc->GetDocShell()->GetStyleSheetPool()->Find(sStyle, + SFX_STYLE_FAMILY_FRAME); + } + + const ::uno::Any* pHEvenMirror = 0; + const ::uno::Any* pHOddMirror = 0; + const ::uno::Any* pVMirror = 0; + GetProperty(RES_GRFATR_MIRRORGRF, MID_MIRROR_HORZ_EVEN_PAGES, pHEvenMirror); + GetProperty(RES_GRFATR_MIRRORGRF, MID_MIRROR_HORZ_ODD_PAGES, pHOddMirror); + GetProperty(RES_GRFATR_MIRRORGRF, MID_MIRROR_VERT, pVMirror); + + if ( pStyle ) + { + rtl::Reference< SwDocStyleSheet > xStyle( new SwDocStyleSheet(*pStyle) ); + const :: SfxItemSet *pItemSet = &xStyle->GetItemSet(); + bRet = FillBaseProperties(rFrmSet, *pItemSet, rSizeFound); + lcl_FillMirror ( rGrSet, *pItemSet, pHEvenMirror, pHOddMirror, pVMirror, bRet ); + } + else + { + const :: SfxItemSet *pItemSet = &pDoc->GetFrmFmtFromPool( RES_POOLFRM_GRAPHIC )->GetAttrSet(); + bRet = FillBaseProperties(rFrmSet, *pItemSet, rSizeFound); + lcl_FillMirror ( rGrSet, *pItemSet, pHEvenMirror, pHOddMirror, pVMirror, bRet ); + } + + + static const :: USHORT nIDs[] = + { + RES_GRFATR_CROPGRF, + RES_GRFATR_ROTATION, + RES_GRFATR_LUMINANCE, + RES_GRFATR_CONTRAST, + RES_GRFATR_CHANNELR, + RES_GRFATR_CHANNELG, + RES_GRFATR_CHANNELB, + RES_GRFATR_GAMMA, + RES_GRFATR_INVERT, + RES_GRFATR_TRANSPARENCY, + RES_GRFATR_DRAWMODE, + 0 + }; + const ::uno::Any* pAny; + for(sal_Int16 nIndex = 0; nIDs[nIndex]; nIndex++) + { + BYTE nMId = RES_GRFATR_CROPGRF == nIDs[nIndex] ? CONVERT_TWIPS : 0; + if(GetProperty(nIDs[nIndex], nMId, pAny )) + { + SfxPoolItem* pItem = ::GetDfltAttr( nIDs[nIndex] )->Clone(); + bRet &= pItem->PutValue(*pAny, nMId ); + rGrSet.Put(*pItem); + delete pItem; + } + } + + return bRet; +} +/* -----------------4/1/2003 13:54------------------- + + --------------------------------------------------*/ + +class SwOLEProperties_Impl : public SwFrameProperties_Impl +{ +public: + SwOLEProperties_Impl() : + SwFrameProperties_Impl(/*aSwMapProvider.GetPropertyMap(PROPERTY_MAP_EMBEDDED_OBJECT)*/ ){} + virtual ~SwOLEProperties_Impl(){} + + virtual sal_Bool AnyToItemSet( SwDoc* pDoc, SfxItemSet& rFrmSet, SfxItemSet& rSet, sal_Bool& rSizeFound); +}; +/* -----------------4/1/2003 15:32------------------- + + --------------------------------------------------*/ + +sal_Bool SwOLEProperties_Impl::AnyToItemSet( + SwDoc* pDoc, SfxItemSet& rFrmSet, SfxItemSet& rSet, sal_Bool& rSizeFound) +{ + const ::uno::Any* pTemp; + if(!GetProperty(FN_UNO_CLSID, 0, pTemp) && !GetProperty(FN_UNO_STREAM_NAME, 0, pTemp) ) + return FALSE; + SwFrameProperties_Impl::AnyToItemSet( pDoc, rFrmSet, rSet, rSizeFound); + // + return TRUE; +} + +/****************************************************************** + * SwXFrame + ******************************************************************/ +/* -----------------------------10.03.00 18:02-------------------------------- + + ---------------------------------------------------------------------------*/ +const :: uno::Sequence< sal_Int8 > & SwXFrame::getUnoTunnelId() +{ + static uno::Sequence< sal_Int8 > aSeq = ::CreateUnoTunnelId(); + return aSeq; +} +/* -----------------------------10.03.00 18:04-------------------------------- + + ---------------------------------------------------------------------------*/ +sal_Int64 SAL_CALL SwXFrame::getSomething( const :: uno::Sequence< sal_Int8 >& rId ) + throw(uno::RuntimeException) +{ + if( rId.getLength() == 16 + && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return sal::static_int_cast< sal_Int64 >( reinterpret_cast< sal_IntPtr >(this) ); + } + return 0; +} +/*-----------------24.03.98 14:49------------------- + +--------------------------------------------------*/ + +TYPEINIT1(SwXFrame, SwClient); +/* -----------------------------06.04.00 14:20-------------------------------- + + ---------------------------------------------------------------------------*/ +OUString SwXFrame::getImplementationName(void) throw( uno::RuntimeException ) +{ + return C2U("SwXFrame"); +} +/* -----------------------------06.04.00 14:20-------------------------------- + + ---------------------------------------------------------------------------*/ +BOOL SwXFrame::supportsService(const :: OUString& rServiceName) throw( uno::RuntimeException ) +{ + return !rServiceName.compareToAscii("com.sun.star.text.BaseFrame")|| + !rServiceName.compareToAscii("com.sun.star.text.TextContent") || + !rServiceName.compareToAscii("com.sun.star.document.LinkTarget"); +} +/* -----------------------------06.04.00 14:20-------------------------------- + + ---------------------------------------------------------------------------*/ +uno::Sequence< OUString > SwXFrame::getSupportedServiceNames(void) throw( uno::RuntimeException ) +{ + uno::Sequence< OUString > aRet(3); + OUString* pArray = aRet.getArray(); + pArray[0] = C2U("com.sun.star.text.BaseFrame"); + pArray[1] = C2U("com.sun.star.text.TextContent"); + pArray[2] = C2U("com.sun.star.document.LinkTarget"); + return aRet; +} + + +/*-- 14.01.99 11:31:52--------------------------------------------------- + Dieser CTor legt den Frame als Descriptor an + -----------------------------------------------------------------------*/ +SwXFrame::SwXFrame(FlyCntType eSet, const :: SfxItemPropertySet* pSet, SwDoc *pDoc) : + aLstnrCntnr( (container::XNamed*)this), + m_pPropSet(pSet), + m_pDoc ( pDoc ), + eType(eSet), + bIsDescriptor(sal_True), + m_pCopySource( 0 ) +{ + // Register ourselves as a listener to the document (via the page descriptor) + pDoc->GetPageDescFromPool(RES_POOLPAGE_STANDARD)->Add(this); + // get the property set for the default style data + // First get the model + uno::Reference < XModel > xModel = pDoc->GetDocShell()->GetBaseModel(); + // Ask the model for it's family supplier interface + uno::Reference < XStyleFamiliesSupplier > xFamilySupplier ( xModel, uno::UNO_QUERY ); + // Get the style families + uno::Reference < XNameAccess > xFamilies = xFamilySupplier->getStyleFamilies(); + // Get the Frame family (and keep it for later) + const ::uno::Any aAny = xFamilies->getByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "FrameStyles" ) ) ); + aAny >>= mxStyleFamily; + // In the derived class, we'll ask mxStyleFamily for the relevant default style + // mxStyleFamily is initialised in the SwXFrame constructor + switch(eType) + { + case FLYCNTTYPE_FRM: + { + uno::Any aAny2 = mxStyleFamily->getByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Frame" ) ) ); + aAny2 >>= mxStyleData; + pProps = new SwFrameProperties_Impl( ); + } + break; + case FLYCNTTYPE_GRF: + { + uno::Any aAny2 = mxStyleFamily->getByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Graphics" ) ) ); + aAny2 >>= mxStyleData; + pProps = new SwGraphicProperties_Impl( ); + } + break; + case FLYCNTTYPE_OLE: + { + uno::Any aAny2 = mxStyleFamily->getByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "OLE" ) ) ); + aAny2 >>= mxStyleData; + pProps = new SwOLEProperties_Impl( ); + } + break; + + default: + ; + } +} + +/*-- 11.12.98 15:05:01--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXFrame::SwXFrame(SwFrmFmt& rFrmFmt, FlyCntType eSet, const :: SfxItemPropertySet* pSet) : + SwClient( &rFrmFmt ), + aLstnrCntnr( (container::XNamed*)this), + m_pPropSet(pSet), + m_pDoc( 0 ), + eType(eSet), + pProps(0), + bIsDescriptor(sal_False), + m_pCopySource(0) +{ + +} +/*-- 11.12.98 15:05:02--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXFrame::~SwXFrame() +{ + delete m_pCopySource; + delete pProps; +} +/*-- 11.12.98 15:05:03--------------------------------------------------- + + -----------------------------------------------------------------------*/ +/*-- 11.12.98 15:05:03--------------------------------------------------- + + -----------------------------------------------------------------------*/ +OUString SwXFrame::getName(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + String sRet; + SwFrmFmt* pFmt = GetFrmFmt(); + if(pFmt) + sRet = pFmt->GetName(); + else if(bIsDescriptor) + sRet = sName; + else + throw uno::RuntimeException(); + return sRet; +} +/*-- 11.12.98 15:05:03--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXFrame::setName(const :: OUString& rName) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + SwFrmFmt* pFmt = GetFrmFmt(); + String sTmpName(rName); + if(pFmt) + { + pFmt->GetDoc()->SetFlyName((SwFlyFrmFmt&)*pFmt, sTmpName); + if(pFmt->GetName() != sTmpName) + { + throw uno::RuntimeException(); + } + } + else if(bIsDescriptor) + sName = sTmpName; + else + throw uno::RuntimeException(); +} +/*-- 11.12.98 15:05:03--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Reference< beans::XPropertySetInfo > SwXFrame::getPropertySetInfo(void) throw( uno::RuntimeException ) +{ + uno::Reference< beans::XPropertySetInfo > xRef; + static uno::Reference< beans::XPropertySetInfo > xFrmRef; + static uno::Reference< beans::XPropertySetInfo > xGrfRef; + static uno::Reference< beans::XPropertySetInfo > xOLERef; + switch(eType) + { + case FLYCNTTYPE_FRM: + if( !xFrmRef.is() ) + xFrmRef = m_pPropSet->getPropertySetInfo(); + xRef = xFrmRef; + break; + case FLYCNTTYPE_GRF: + if( !xGrfRef.is() ) + xGrfRef = m_pPropSet->getPropertySetInfo(); + xRef = xGrfRef; + break; + case FLYCNTTYPE_OLE: + if( !xOLERef.is() ) + xOLERef = m_pPropSet->getPropertySetInfo(); + xRef = xOLERef; + break; + default: + ; + } + return xRef; +} +/*-- 15.05.06 12:21:43--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXFrame::SetSelection(SwPaM& rCopySource) +{ + if(m_pCopySource) + delete m_pCopySource; + m_pCopySource = new SwPaM( *rCopySource.Start() ); + m_pCopySource->SetMark(); + *m_pCopySource->GetMark() = *rCopySource.End(); +} +/*-- 11.12.98 15:05:04--------------------------------------------------- + + -----------------------------------------------------------------------*/ + +SdrObject *SwXFrame::GetOrCreateSdrObject( SwFlyFrmFmt *pFmt ) +{ + SdrObject* pObject = pFmt->FindSdrObject(); + if( !pObject ) + { + SwDoc *pDoc = pFmt->GetDoc(); + // --> OD 2005-08-08 #i52858# - method name changed + SdrModel *pDrawModel = pDoc->GetOrCreateDrawModel(); + // <-- + SwFlyDrawContact* pContactObject + = new SwFlyDrawContact( pFmt, pDrawModel ); + pObject = pContactObject->GetMaster(); + + const :: SwFmtSurround& rSurround = pFmt->GetSurround(); + pObject->SetLayer( + ( SURROUND_THROUGHT == rSurround.GetSurround() && + !pFmt->GetOpaque().GetValue() ) ? pDoc->GetHellId() + : pDoc->GetHeavenId() ); + + pDrawModel->GetPage(0)->InsertObject( pObject ); + } + + return pObject; +} + +SwFrmFmt *lcl_GetFrmFmt( const :: uno::Any& rValue, SwDoc *pDoc ) +{ + SwFrmFmt *pRet = 0; + SwDocShell* pDocSh = pDoc->GetDocShell(); + if(pDocSh) + { + OUString uTemp; + rValue >>= uTemp; + String sStyle; + SwStyleNameMapper::FillUIName(String (uTemp), sStyle, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT, sal_True ); + SwDocStyleSheet* pStyle = + (SwDocStyleSheet*)pDocSh->GetStyleSheetPool()->Find(sStyle, + SFX_STYLE_FAMILY_FRAME); + if(pStyle) + pRet = pStyle->GetFrmFmt(); + } + + return pRet; +} + +void SwXFrame::setPropertyValue(const :: OUString& rPropertyName, const :: uno::Any& aValue) + throw( beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + SwFrmFmt* pFmt = GetFrmFmt(); + const :: SfxItemPropertySimpleEntry* pEntry = m_pPropSet->getPropertyMap()->getByName(rPropertyName); + + if (!pEntry) + throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) ); + + if(pFmt) + { + sal_Bool bNextFrame = sal_False; + if ( pEntry->nFlags & beans::PropertyAttribute::READONLY) + throw beans::PropertyVetoException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Property is read-only: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) ); + + SwDoc* pDoc = pFmt->GetDoc(); + if ((eType == FLYCNTTYPE_GRF) && isGRFATR(pEntry->nWID) || + (FN_PARAM_COUNTOUR_PP == pEntry->nWID) || + (FN_UNO_IS_AUTOMATIC_CONTOUR == pEntry->nWID) || + (FN_UNO_IS_PIXEL_CONTOUR == pEntry->nWID) ) + { + const :: SwNodeIndex* pIdx = pFmt->GetCntnt().GetCntntIdx(); + if(pIdx) + { + SwNodeIndex aIdx(*pIdx, 1); + SwNoTxtNode* pNoTxt = aIdx.GetNode().GetNoTxtNode(); + if(pEntry->nWID == FN_PARAM_COUNTOUR_PP) + { + drawing::PointSequenceSequence aParam; + if(!aValue.hasValue()) + pNoTxt->SetContour(0); + else if(aValue >>= aParam) + { + PolyPolygon aPoly((USHORT)aParam.getLength()); + for(sal_Int32 i = 0; i < aParam.getLength(); i++) + { + const :: drawing::PointSequence* pPointSeq = aParam.getConstArray(); + sal_Int32 nPoints = pPointSeq[i].getLength(); + const :: awt::Point* pPoints = pPointSeq[i].getConstArray(); + Polygon aSet( (USHORT)nPoints ); + for(sal_Int32 j = 0; j < nPoints; j++) + { + Point aPoint(pPoints[j].X, pPoints[j].Y); + aSet.SetPoint(aPoint, (USHORT)j); + } + // Close polygon if it isn't closed already. + aSet.Optimize( POLY_OPTIMIZE_CLOSE ); + aPoly.Insert( aSet ); + } + pNoTxt->SetContourAPI( &aPoly ); + } + else + throw lang::IllegalArgumentException(); + } + else if(pEntry->nWID == FN_UNO_IS_AUTOMATIC_CONTOUR ) + { + pNoTxt->SetAutomaticContour( *(sal_Bool *)aValue.getValue() ); + } + else if(pEntry->nWID == FN_UNO_IS_PIXEL_CONTOUR ) + { + // The IsPixelContour property can only be set if there + // is no contour, or if the contour has been set by the + // API itself (or in other words, if the contour isn't + // used already). + if( !pNoTxt->_HasContour() || + !pNoTxt->IsContourMapModeValid() ) + pNoTxt->SetPixelContour( *(sal_Bool *)aValue.getValue() ); + else + throw lang::IllegalArgumentException(); + } + else + { + SfxItemSet aSet(pNoTxt->GetSwAttrSet()); + m_pPropSet->setPropertyValue(*pEntry, aValue, aSet); + pNoTxt->SetAttr(aSet); + } + } + } + // --> OD 2009-07-13 #i73249# + // Attribute AlternativeText was never published. + // Now it has been replaced by Attribute Title - valid for all <SwXFrame> instances +// else if( FN_UNO_ALTERNATIVE_TEXT == pEntry->nWID && eType != FLYCNTTYPE_FRM ) +// { +// const :: SwNodeIndex* pIdx = pFmt->GetCntnt().GetCntntIdx(); +// if(pIdx) +// { +// SwNodeIndex aIdx(*pIdx, 1); +// SwNoTxtNode* pNoTxt = aIdx.GetNode().GetNoTxtNode(); +// OUString uTemp; +// aValue >>= uTemp; +// pNoTxt->SetAlternateText(uTemp); +// } +// } + // New attribute Title + else if( FN_UNO_TITLE == pEntry->nWID ) + { + SwFlyFrmFmt* pFlyFmt = dynamic_cast<SwFlyFrmFmt*>(pFmt); + ASSERT( pFmt, + "unexpected type of <pFmt> --> crash" ); + OUString uTemp; + aValue >>= uTemp; + const String sTitle(uTemp); + // assure that <SdrObject> instance exists. + GetOrCreateSdrObject( pFlyFmt ); + pFlyFmt->GetDoc()->SetFlyFrmTitle( *(pFlyFmt), sTitle ); + } + // New attribute Description + else if( FN_UNO_DESCRIPTION == pEntry->nWID ) + { + SwFlyFrmFmt* pFlyFmt = dynamic_cast<SwFlyFrmFmt*>(pFmt); + ASSERT( pFmt, + "unexpected type of <pFmt> --> crash" ); + OUString uTemp; + aValue >>= uTemp; + const String sDescription(uTemp); + // assure that <SdrObject> instance exists. + GetOrCreateSdrObject( pFlyFmt ); + pFlyFmt->GetDoc()->SetFlyFrmDescription( *(pFlyFmt), sDescription ); + } + // <-- + else if(FN_UNO_FRAME_STYLE_NAME == pEntry->nWID) + { + SwFrmFmt *pFrmFmt = lcl_GetFrmFmt( aValue, pFmt->GetDoc() ); + if( pFrmFmt ) + { + UnoActionContext aAction(pFmt->GetDoc()); + + SfxItemSet* pSet = 0; + // --> OD 2004-08-13 #i31771#, #i25798# - No adjustment of + // anchor ( no call of method <::lcl_ChkAndSetNewAnchor(..)> ), + // if document is currently in reading mode. + if ( !pFmt->GetDoc()->IsInReading() ) + { + // see SwFEShell::SetFrmFmt( SwFrmFmt *pNewFmt, sal_Bool bKeepOrient, Point* pDocPos ) + SwFlyFrm *pFly = 0; + { + const :: SwFrmFmt* pFmtXX = pFmt; + if (PTR_CAST(SwFlyFrmFmt, pFmtXX)) + pFly = ((SwFlyFrmFmt*)pFmtXX)->GetFrm(); + } + if ( pFly ) + { + const :: SfxPoolItem* pItem; + if( SFX_ITEM_SET == pFrmFmt->GetItemState( RES_ANCHOR, sal_False, &pItem )) + { + pSet = new SfxItemSet( pDoc->GetAttrPool(), aFrmFmtSetRange ); + pSet->Put( *pItem ); + if ( !::lcl_ChkAndSetNewAnchor( *pFly, *pSet ) ) + delete pSet, pSet = 0; + } + } + } + // <-- + + pFmt->GetDoc()->SetFrmFmtToFly( *pFmt, *pFrmFmt, pSet, FALSE ); + delete pSet; + } + else + throw lang::IllegalArgumentException(); + } + else if( FN_UNO_GRAPHIC_U_R_L == pEntry->nWID || + FN_UNO_GRAPHIC_FILTER == pEntry->nWID) + { + String sGrfName, sFltName; + GraphicObject *pGrfObj = 0; + pFmt->GetDoc()->GetGrfNms( *(SwFlyFrmFmt*)pFmt, &sGrfName, &sFltName ); + OUString uTemp; + aValue >>= uTemp; + String sTmp(uTemp); + UnoActionContext aAction(pFmt->GetDoc()); + if(FN_UNO_GRAPHIC_U_R_L == pEntry->nWID) + { + if( sTmp.EqualsAscii( sPackageProtocol, + 0, sizeof( sPackageProtocol )-1 ) ) + { + pGrfObj = new GraphicObject; + pGrfObj->SetUserData( sTmp ); + pGrfObj->SetSwapState(); + sGrfName.Erase(); + } + else if( sTmp.EqualsAscii( sGraphicObjectProtocol, + 0, sizeof(sGraphicObjectProtocol)-1 ) ) + { + ByteString sId( sTmp.Copy(sizeof(sGraphicObjectProtocol)-1), + RTL_TEXTENCODING_ASCII_US ); + pGrfObj = new GraphicObject( sId ); + sGrfName.Erase(); + } + else + { + sGrfName = sTmp; + } + } + else + { + sFltName = sTmp; + } + + const :: SwNodeIndex* pIdx = pFmt->GetCntnt().GetCntntIdx(); + if(pIdx) + { + SwNodeIndex aIdx(*pIdx, 1); +// SwNoTxtNode* pNoTxt = aIdx.GetNode().GetNoTxtNode(); + SwGrfNode* pGrfNode = aIdx.GetNode().GetGrfNode(); + if(!pGrfNode) + { + delete pGrfObj; + throw uno::RuntimeException(); + } + SwPaM aGrfPaM(*pGrfNode); + pFmt->GetDoc()->ReRead( aGrfPaM, sGrfName, sFltName, 0, + pGrfObj ); + } + delete pGrfObj; + } + else if( FN_UNO_GRAPHIC == pEntry->nWID ) + { + uno::Reference< graphic::XGraphic > xGraphic; + aValue >>= xGraphic; + if(xGraphic.is()) + { + const :: SwNodeIndex* pIdx = pFmt->GetCntnt().GetCntntIdx(); + if(pIdx) + { + SwNodeIndex aIdx(*pIdx, 1); + SwGrfNode* pGrfNode = aIdx.GetNode().GetGrfNode(); + if(!pGrfNode) + { + throw uno::RuntimeException(); + } + SwPaM aGrfPaM(*pGrfNode); + Graphic aGraphic( xGraphic ); + pFmt->GetDoc()->ReRead( aGrfPaM, String(), String(), &aGraphic, 0 ); + } + } + } + else if( FN_UNO_REPLACEMENT_GRAPHIC_URL == pEntry->nWID || FN_UNO_REPLACEMENT_GRAPHIC == pEntry->nWID ) + { + bool bURL = FN_UNO_REPLACEMENT_GRAPHIC_URL == pEntry->nWID; + bool bApply = false; + Graphic aGraphic; + if( bURL ) + { + GraphicObject *pGrfObj = 0; + OUString aGrfUrl; + aValue >>= aGrfUrl; + + // the package URL based graphics are handled in different way currently + // TODO/LATER: actually this is the correct place to handle them + ::rtl::OUString aGraphicProtocol( RTL_CONSTASCII_USTRINGPARAM( sGraphicObjectProtocol ) ); + if( aGrfUrl.compareTo( aGraphicProtocol, aGraphicProtocol.getLength() ) == 0 ) + { + ByteString sId( aGrfUrl.copy(sizeof(sGraphicObjectProtocol)-1).getStr(), RTL_TEXTENCODING_ASCII_US ); + pGrfObj = new GraphicObject( sId ); + aGraphic = pGrfObj->GetGraphic(); + bApply = true; + } + } + else + { + uno::Reference< graphic::XGraphic > xGraphic; + aValue >>= xGraphic; + if( xGraphic.is() ) + { + aGraphic = Graphic( xGraphic ); + bApply = true; + } + } + + if ( bApply ) + { + const :: SwFmtCntnt* pCnt = &pFmt->GetCntnt(); + if ( pCnt->GetCntntIdx() && pDoc->GetNodes()[ pCnt->GetCntntIdx()->GetIndex() + 1 ] ) + { + SwOLENode* pOleNode = pDoc->GetNodes()[ pCnt->GetCntntIdx()->GetIndex() + 1 ]->GetOLENode(); + + if ( pOleNode ) + { + svt::EmbeddedObjectRef xObj = pOleNode->GetOLEObj().GetObject(); + + ::rtl::OUString aMediaType; + xObj.SetGraphic( aGraphic, aMediaType ); + } + } + } + } + else if(0 != (bNextFrame = (rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_CHAIN_NEXT_NAME)))) + || rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_CHAIN_PREV_NAME))) + { + OUString uTemp; + aValue >>= uTemp; + String sChainName(uTemp); + if(!sChainName.Len()) + { + if(bNextFrame) + pDoc->Unchain(*pFmt); + else + { + SwFmtChain aChain( pFmt->GetChain() ); + SwFrmFmt *pPrev = aChain.GetPrev(); + if(pPrev) + pDoc->Unchain(*pPrev); + } + } + else + { + sal_uInt16 nCount = pDoc->GetFlyCount(FLYCNTTYPE_FRM); + + SwFrmFmt* pChain = 0; + for( sal_uInt16 i = 0; i < nCount; i++) + { + SwFrmFmt* pFmt2 = pDoc->GetFlyNum(i, FLYCNTTYPE_FRM); + if(sChainName == pFmt2->GetName() ) + { + pChain = pFmt2; + break; + } + } + if(pChain) + { + SwFrmFmt* pSource = bNextFrame ? pFmt : pChain; + SwFrmFmt* pDest = bNextFrame ? pChain: pFmt; + pDoc->Chain(*pSource, *pDest); + } + } + } + else if(FN_UNO_Z_ORDER == pEntry->nWID) + { + sal_Int32 nZOrder = - 1; + aValue >>= nZOrder; + if( nZOrder >= 0) + { + SdrObject* pObject = + GetOrCreateSdrObject( (SwFlyFrmFmt*)pFmt ); + SdrModel *pDrawModel = pDoc->GetDrawModel(); + pDrawModel->GetPage(0)-> + SetObjectOrdNum(pObject->GetOrdNum(), nZOrder); + } + } + else if(RES_ANCHOR == pEntry->nWID && MID_ANCHOR_ANCHORFRAME == pEntry->nMemberId) + { + sal_Bool bDone = sal_False; + uno::Reference<text::XTextFrame> xFrame; + if(aValue >>= xFrame) + { + uno::Reference<lang::XUnoTunnel> xTunnel(xFrame, uno::UNO_QUERY); + SwXFrame* pFrame = xTunnel.is() ? + reinterpret_cast< SwXFrame * >( sal::static_int_cast< sal_IntPtr >( xTunnel->getSomething(SwXFrame::getUnoTunnelId()) )) + : 0; + if(pFrame && this != pFrame && pFrame->GetFrmFmt() && pFrame->GetFrmFmt()->GetDoc() == pDoc) + { + SfxItemSet aSet( pDoc->GetAttrPool(), + RES_FRMATR_BEGIN, RES_FRMATR_END - 1 ); + aSet.SetParent(&pFmt->GetAttrSet()); + SwFmtAnchor aAnchor = (const :: SwFmtAnchor&)aSet.Get(pEntry->nWID); + + + SwPosition aPos(*pFrame->GetFrmFmt()->GetCntnt().GetCntntIdx()); + aAnchor.SetAnchor(&aPos); + aAnchor.SetType(FLY_AT_FLY); + aSet.Put(aAnchor); + pDoc->SetFlyFrmAttr( *pFmt, aSet ); + bDone = sal_True; + } + } + if(!bDone) + throw lang::IllegalArgumentException(); + } + else + { + SfxItemSet aSet( pDoc->GetAttrPool(), + RES_FRMATR_BEGIN, RES_FRMATR_END - 1, + RES_UNKNOWNATR_CONTAINER, RES_UNKNOWNATR_CONTAINER, + 0L); + + aSet.SetParent(&pFmt->GetAttrSet()); + m_pPropSet->setPropertyValue(*pEntry, aValue, aSet); + if(RES_ANCHOR == pEntry->nWID && MID_ANCHOR_ANCHORTYPE == pEntry->nMemberId) + { + SwFmtAnchor aAnchor = (const :: SwFmtAnchor&)aSet.Get(pEntry->nWID); + if(aAnchor.GetAnchorId() == FLY_AT_FLY) + { + const :: SwPosition* pPosition = aAnchor.GetCntntAnchor(); + SwFrmFmt* pFlyFmt = pPosition ? pPosition->nNode.GetNode().GetFlyFmt() : 0; + if(!pFlyFmt || pFlyFmt->Which() == RES_DRAWFRMFMT) + { + lang::IllegalArgumentException aExcept; + aExcept.Message = C2U("Anchor to frame: no frame found"); + throw aExcept; + } + else + { + SwPosition aPos = *pPosition; + aPos.nNode = *pFlyFmt->GetCntnt().GetCntntIdx(); + aAnchor.SetAnchor(&aPos); + aSet.Put(aAnchor); + } + } + else if ((aAnchor.GetAnchorId() != FLY_AT_PAGE) && + !aAnchor.GetCntntAnchor()) + { + SwNode& rNode = pDoc->GetNodes().GetEndOfContent(); + SwPaM aPam(rNode); + aPam.Move( fnMoveBackward, fnGoDoc ); + aAnchor.SetAnchor( aPam.Start() ); + aSet.Put(aAnchor); + } + + // --> OD 2004-08-13 #i31771#, #i25798# - No adjustment of + // anchor ( no call of method <::lcl_ChkAndSetNewAnchor(..)> ), + // if document is currently in reading mode. + if ( !pFmt->GetDoc()->IsInReading() ) + { + // see SwFEShell::SetFlyFrmAttr( SfxItemSet& rSet ) + SwFlyFrm *pFly = 0; + if (PTR_CAST(SwFlyFrmFmt, pFmt)) + pFly = ((SwFlyFrmFmt*)pFmt)->GetFrm(); + if (pFly) + { + const :: SfxPoolItem* pItem; + if( SFX_ITEM_SET == aSet.GetItemState( RES_ANCHOR, sal_False, &pItem )) + { + aSet.Put( *pItem ); + ::lcl_ChkAndSetNewAnchor( *pFly, aSet ); + } + } + } + // <-- + + pFmt->GetDoc()->SetFlyFrmAttr( *pFmt, aSet ); + } + else if(FN_UNO_CLSID == pEntry->nWID || FN_UNO_STREAM_NAME == pEntry->nWID) + { + throw lang::IllegalArgumentException(); + } + else + pFmt->SetFmtAttr(aSet); + } + } + else if(IsDescriptor()) + { + pProps->SetProperty(pEntry->nWID, pEntry->nMemberId, aValue); + if( FN_UNO_FRAME_STYLE_NAME == pEntry->nWID ) + { + OUString sStyleName; + aValue >>= sStyleName; + try + { + uno::Any aAny = mxStyleFamily->getByName ( sStyleName ); + aAny >>= mxStyleData; + } + catch ( container::NoSuchElementException const & ) + { + } + catch ( lang::WrappedTargetException const & ) + { + } + catch ( uno::RuntimeException const & ) + { + } + } + } + else + throw uno::RuntimeException(); +} +/*-- 11.12.98 15:05:04--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Any SwXFrame::getPropertyValue(const OUString& rPropertyName) + throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + uno::Any aAny; + SwFrmFmt* pFmt = GetFrmFmt(); + const SfxItemPropertySimpleEntry* pEntry = m_pPropSet->getPropertyMap()->getByName(rPropertyName); + if (!pEntry) + throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) ); + + if(FN_UNO_ANCHOR_TYPES == pEntry->nWID) + { + uno::Sequence<text::TextContentAnchorType> aTypes(5); + text::TextContentAnchorType* pArray = aTypes.getArray(); + pArray[0] = text::TextContentAnchorType_AT_PARAGRAPH; + pArray[1] = text::TextContentAnchorType_AS_CHARACTER; + pArray[2] = text::TextContentAnchorType_AT_PAGE; + pArray[3] = text::TextContentAnchorType_AT_FRAME; + pArray[4] = text::TextContentAnchorType_AT_CHARACTER; + aAny.setValue(&aTypes, ::getCppuType(static_cast<uno::Sequence<text::TextContentAnchorType>*>(0))); + } + else if(pFmt) + { + if( ((eType == FLYCNTTYPE_GRF) || (eType == FLYCNTTYPE_OLE)) && + pEntry && + (isGRFATR(pEntry->nWID) || + pEntry->nWID == FN_PARAM_COUNTOUR_PP || + pEntry->nWID == FN_UNO_IS_AUTOMATIC_CONTOUR || + pEntry->nWID == FN_UNO_IS_PIXEL_CONTOUR )) + { + const SwNodeIndex* pIdx = pFmt->GetCntnt().GetCntntIdx(); + if(pIdx) + { + SwNodeIndex aIdx(*pIdx, 1); + SwNoTxtNode* pNoTxt = aIdx.GetNode().GetNoTxtNode(); + if(pEntry->nWID == FN_PARAM_COUNTOUR_PP) + { + PolyPolygon aContour; + if( pNoTxt->GetContourAPI( aContour ) ) + { + drawing::PointSequenceSequence aPtSeq(aContour.Count()); + drawing::PointSequence* pPSeq = aPtSeq.getArray(); + for(USHORT i = 0; i < aContour.Count(); i++) + { + const Polygon& rPoly = aContour.GetObject(i); + pPSeq[i].realloc(rPoly.GetSize()); + awt::Point* pPoints = pPSeq[i].getArray(); + for(USHORT j = 0; j < rPoly.GetSize(); j++) + { + const Point& rPoint = rPoly.GetPoint(j); + pPoints[j].X = rPoint.X(); + pPoints[j].Y = rPoint.Y(); + } + } + aAny <<= aPtSeq; + } + } + else if(pEntry->nWID == FN_UNO_IS_AUTOMATIC_CONTOUR ) + { + BOOL bValue = pNoTxt->HasAutomaticContour(); + aAny.setValue( &bValue, ::getBooleanCppuType() ); + } + else if(pEntry->nWID == FN_UNO_IS_PIXEL_CONTOUR ) + { + BOOL bValue = pNoTxt->IsPixelContour(); + aAny.setValue( &bValue, ::getBooleanCppuType() ); + } + else + { + SfxItemSet aSet(pNoTxt->GetSwAttrSet()); + m_pPropSet->getPropertyValue(*pEntry, aSet, aAny); + } + } + } + else if( FN_UNO_GRAPHIC_U_R_L == pEntry->nWID) + { + String sGrfName; + const SwNodeIndex* pIdx = pFmt->GetCntnt().GetCntntIdx(); + if(pIdx) + { + SwNodeIndex aIdx(*pIdx, 1); +// SwNoTxtNode* pNoTxt = aIdx.GetNode().GetNoTxtNode(); + SwGrfNode* pGrfNode = aIdx.GetNode().GetGrfNode(); + if(!pGrfNode) + throw uno::RuntimeException(); + if( pGrfNode->IsGrfLink() ) + { + pFmt->GetDoc()->GetGrfNms( *(SwFlyFrmFmt*)pFmt, &sGrfName, 0 ); + } + else + { + String sPrefix( RTL_CONSTASCII_STRINGPARAM(sGraphicObjectProtocol) ); + String sId( pGrfNode->GetGrfObj().GetUniqueID(), + RTL_TEXTENCODING_ASCII_US ); + (sGrfName = sPrefix) += sId; + } + } + aAny <<= OUString(sGrfName); + } + else if( FN_UNO_GRAPHIC_FILTER == pEntry->nWID ) + { + String sFltName; + pFmt->GetDoc()->GetGrfNms( *(SwFlyFrmFmt*)pFmt, 0, &sFltName ); + aAny <<= OUString(sFltName); + } + else if( FN_UNO_GRAPHIC == pEntry->nWID ) + { + const SwNodeIndex* pIdx = pFmt->GetCntnt().GetCntntIdx(); + if(pIdx) + { + SwNodeIndex aIdx(*pIdx, 1); + SwGrfNode* pGrfNode = aIdx.GetNode().GetGrfNode(); + if(!pGrfNode) + throw uno::RuntimeException(); + aAny <<= pGrfNode->GetGrf().GetXGraphic(); + } + } + else if(FN_UNO_FRAME_STYLE_NAME == pEntry->nWID) + { + aAny <<= OUString(SwStyleNameMapper::GetProgName(pFmt->DerivedFrom()->GetName(), nsSwGetPoolIdFromName::GET_POOLID_FRMFMT ) ); + } + // --> OD 2009-07-13 #i73249# + // Attribute AlternativeText was never published. + // Now it has been replaced by Attribute Title - valid for all <SwXFrame> instances +// else if(eType != FLYCNTTYPE_FRM && +// FN_UNO_ALTERNATIVE_TEXT == pEntry->nWID) +// { +// const SwNodeIndex* pIdx = pFmt->GetCntnt().GetCntntIdx(); +// if(pIdx) +// { +// SwNodeIndex aIdx(*pIdx, 1); +// SwNoTxtNode* pNoTxt = aIdx.GetNode().GetNoTxtNode(); +// aAny <<= OUString(pNoTxt->GetAlternateText()); +// } +// } + else if( FN_UNO_TITLE == pEntry->nWID ) + { + SwFlyFrmFmt* pFlyFmt = dynamic_cast<SwFlyFrmFmt*>(pFmt); + ASSERT( pFmt, + "unexpected type of <pFmt> --> crash" ); + // assure that <SdrObject> instance exists. + GetOrCreateSdrObject( pFlyFmt ); + aAny <<= OUString(pFlyFmt->GetObjTitle()); + } + // New attribute Description + else if( FN_UNO_DESCRIPTION == pEntry->nWID ) + { + SwFlyFrmFmt* pFlyFmt = dynamic_cast<SwFlyFrmFmt*>(pFmt); + ASSERT( pFmt, + "unexpected type of <pFmt> --> crash" ); + // assure that <SdrObject> instance exists. + GetOrCreateSdrObject( pFlyFmt ); + aAny <<= OUString(pFlyFmt->GetObjDescription()); + } + // <-- + else if(eType == FLYCNTTYPE_GRF && + (rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_ACTUAL_SIZE)))) + { + const SwNodeIndex* pIdx = pFmt->GetCntnt().GetCntntIdx(); + if(pIdx) + { + SwNodeIndex aIdx(*pIdx, 1); + SwNoTxtNode* pNoTxt = aIdx.GetNode().GetNoTxtNode(); + Size aActSize = ((SwGrfNode*)pNoTxt)->GetTwipSize(); + awt::Size aTmp; + aTmp.Width = TWIP_TO_MM100(aActSize.Width()); + aTmp.Height = TWIP_TO_MM100(aActSize.Height()); + aAny.setValue(&aTmp, ::getCppuType(static_cast<const awt::Size*>(0))); + } + } + else if(FN_PARAM_LINK_DISPLAY_NAME == pEntry->nWID) + { + aAny <<= OUString(pFmt->GetName()); + } + else if(FN_UNO_Z_ORDER == pEntry->nWID) + { + const SdrObject* pObj = pFmt->FindRealSdrObject(); + if( pObj ) + { + aAny <<= (sal_Int32)pObj->GetOrdNum(); + } + } + else if(FN_UNO_CLSID == pEntry->nWID || FN_UNO_MODEL == pEntry->nWID|| + FN_UNO_COMPONENT == pEntry->nWID ||FN_UNO_STREAM_NAME == pEntry->nWID) + { + SwDoc* pDoc = pFmt->GetDoc(); + const SwFmtCntnt* pCnt = &pFmt->GetCntnt(); + DBG_ASSERT( pCnt->GetCntntIdx() && + pDoc->GetNodes()[ pCnt->GetCntntIdx()-> + GetIndex() + 1 ]->GetOLENode(), "kein OLE-Node?"); + + SwOLENode* pOleNode = pDoc->GetNodes()[ pCnt->GetCntntIdx() + ->GetIndex() + 1 ]->GetOLENode(); + uno::Reference < embed::XEmbeddedObject > xIP = pOleNode->GetOLEObj().GetOleRef(); + OUString aHexCLSID; + { + SvGlobalName aClassName( xIP->getClassID() ); + aHexCLSID = aClassName.GetHexName(); + if(FN_UNO_CLSID != pEntry->nWID) + { + if ( svt::EmbeddedObjectRef::TryRunningState( xIP ) ) + { + uno::Reference < lang::XComponent > xComp( xIP->getComponent(), uno::UNO_QUERY ); + uno::Reference < frame::XModel > xModel( xComp, uno::UNO_QUERY ); + if ( xModel.is() ) + aAny <<= xModel; + else if ( FN_UNO_COMPONENT == pEntry->nWID ) + aAny <<= xComp; + } + } + } + + if(FN_UNO_CLSID == pEntry->nWID) + aAny <<= aHexCLSID; + else if(FN_UNO_STREAM_NAME == pEntry->nWID) + { + aAny <<= ::rtl::OUString(pOleNode->GetOLEObj().GetCurrentPersistName()); + } + } + else if(WID_LAYOUT_SIZE == pEntry->nWID) + { + // format document completely in order to get correct value + pFmt->GetDoc()->GetEditShell()->CalcLayout(); + + SwClientIter aIter( *pFmt ); + SwClient* pC = aIter.First( TYPE( SwFrm ) ); + if (pC) + { + SwFrm *pTmpFrm = static_cast< SwFrm * >(pC); + DBG_ASSERT( pTmpFrm->IsValid(), "frame not valid" ); + const SwRect &rRect = pTmpFrm->Frm(); + Size aMM100Size = OutputDevice::LogicToLogic( + Size( rRect.Width(), rRect.Height() ), + MapMode( MAP_TWIP ), MapMode( MAP_100TH_MM )); + aAny <<= awt::Size( aMM100Size.Width(), aMM100Size.Height() ); + } + } + else + { + const SwAttrSet& rSet = pFmt->GetAttrSet(); + m_pPropSet->getPropertyValue(*pEntry, rSet, aAny); + } + } + else if(IsDescriptor()) + { + if ( ! m_pDoc ) + throw uno::RuntimeException(); + if(WID_LAYOUT_SIZE != pEntry->nWID) // there is no LayoutSize in a descriptor + { + const uno::Any* pAny = 0; + if( !pProps->GetProperty( pEntry->nWID, pEntry->nMemberId, pAny ) ) + aAny = mxStyleData->getPropertyValue( rPropertyName ); + else if ( pAny ) + aAny = *pAny; + } + } + else + throw uno::RuntimeException(); + return aAny; +} +/*-- 11.12.98 15:05:04--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXFrame::addPropertyChangeListener(const OUString& /*PropertyName*/, + const uno::Reference< beans::XPropertyChangeListener > & /*aListener*/) + throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) +{ + DBG_WARNING("not implemented"); +} +/*-- 11.12.98 15:05:05--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXFrame::removePropertyChangeListener(const OUString& /*PropertyName*/, + const uno::Reference< beans::XPropertyChangeListener > & /*aListener*/) + throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) +{ + DBG_WARNING("not implemented"); +} +/*-- 11.12.98 15:05:05--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXFrame::addVetoableChangeListener(const OUString& /*PropertyName*/, + const uno::Reference< beans::XVetoableChangeListener > & /*aListener*/) + throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) +{ + DBG_WARNING("not implemented"); +} +/*-- 11.12.98 15:05:05--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXFrame::removeVetoableChangeListener( + const OUString& /*PropertyName*/, const uno::Reference< beans::XVetoableChangeListener > & /*aListener*/) + throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) +{ + DBG_WARNING("not implemented"); +} +/*-- 12.09.00 14:04:53--------------------------------------------------- + + -----------------------------------------------------------------------*/ +beans::PropertyState SwXFrame::getPropertyState( const OUString& rPropertyName ) + throw(beans::UnknownPropertyException, uno::RuntimeException) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + uno::Sequence< OUString > aPropertyNames(1); + OUString* pNames = aPropertyNames.getArray(); + pNames[0] = rPropertyName; + uno::Sequence< beans::PropertyState > aStates = getPropertyStates(aPropertyNames); + return aStates.getConstArray()[0]; +} +/*-- 12.09.00 14:04:54--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Sequence< beans::PropertyState > SwXFrame::getPropertyStates( + const uno::Sequence< OUString >& aPropertyNames ) + throw(beans::UnknownPropertyException, uno::RuntimeException) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + uno::Sequence< beans::PropertyState > aStates(aPropertyNames.getLength()); + beans::PropertyState* pStates = aStates.getArray(); + SwFrmFmt* pFmt = GetFrmFmt(); + if(pFmt) + { + const OUString* pNames = aPropertyNames.getConstArray(); + const SwAttrSet& rFmtSet = pFmt->GetAttrSet(); + for(int i = 0; i < aPropertyNames.getLength(); i++) + { + const SfxItemPropertySimpleEntry* pEntry = m_pPropSet->getPropertyMap()->getByName(pNames[i]); + if (!pEntry) + throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + pNames[i], static_cast < cppu::OWeakObject * > ( this ) ); + + if(pEntry->nWID == FN_UNO_ANCHOR_TYPES|| + pEntry->nWID == FN_PARAM_LINK_DISPLAY_NAME|| + FN_UNO_FRAME_STYLE_NAME == pEntry->nWID|| + FN_UNO_GRAPHIC_U_R_L == pEntry->nWID|| + FN_UNO_GRAPHIC_FILTER == pEntry->nWID|| + FN_UNO_ACTUAL_SIZE == pEntry->nWID|| + FN_UNO_ALTERNATIVE_TEXT == pEntry->nWID) + { + pStates[i] = beans::PropertyState_DIRECT_VALUE; + } + else + { + if ((eType == FLYCNTTYPE_GRF) && + pEntry && isGRFATR(pEntry->nWID)) + { + const SwNodeIndex* pIdx = pFmt->GetCntnt().GetCntntIdx(); + if(pIdx) + { + SwNodeIndex aIdx(*pIdx, 1); + SwNoTxtNode* pNoTxt = aIdx.GetNode().GetNoTxtNode(); + SfxItemSet aSet(pNoTxt->GetSwAttrSet()); + aSet.GetItemState(pEntry->nWID); + if(SFX_ITEM_SET == aSet.GetItemState( pEntry->nWID, FALSE )) + pStates[i] = beans::PropertyState_DIRECT_VALUE; + } + } + else + { + if(SFX_ITEM_SET == rFmtSet.GetItemState( pEntry->nWID, FALSE )) + pStates[i] = beans::PropertyState_DIRECT_VALUE; + else + pStates[i] = beans::PropertyState_DEFAULT_VALUE; + } + } + } + } + else if(IsDescriptor()) + { + for(int i = 0; i < aPropertyNames.getLength(); i++) + pStates[i] = beans::PropertyState_DIRECT_VALUE; + } + else + throw uno::RuntimeException(); + return aStates; +} +/*-- 12.09.00 14:04:54--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXFrame::setPropertyToDefault( const OUString& rPropertyName ) + throw(beans::UnknownPropertyException, uno::RuntimeException) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + SwFrmFmt* pFmt = GetFrmFmt(); + if(pFmt) + { + const SfxItemPropertySimpleEntry* pEntry = m_pPropSet->getPropertyMap()->getByName(rPropertyName); + if (!pEntry) + throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) ); + if ( pEntry->nFlags & beans::PropertyAttribute::READONLY) + throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "setPropertyToDefault: property is read-only: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) ); + + BOOL bNextFrame; + if( pEntry->nWID && + pEntry->nWID != FN_UNO_ANCHOR_TYPES && + pEntry->nWID != FN_PARAM_LINK_DISPLAY_NAME) + { + if ( (eType == FLYCNTTYPE_GRF) && isGRFATR(pEntry->nWID) ) + { + const SwNodeIndex* pIdx = pFmt->GetCntnt().GetCntntIdx(); + if(pIdx) + { + SwNodeIndex aIdx(*pIdx, 1); + SwNoTxtNode* pNoTxt = aIdx.GetNode().GetNoTxtNode(); + { + SfxItemSet aSet(pNoTxt->GetSwAttrSet()); + aSet.ClearItem(pEntry->nWID); + pNoTxt->SetAttr(aSet); + } + } + } + // --> OD 2009-07-13 #i73249# + // Attribute AlternativeText was never published. + // Now it has been replaced by Attribute Title - valid for all <SwXFrame> instances +// else if( eType != FLYCNTTYPE_FRM && FN_UNO_ALTERNATIVE_TEXT == pEntry->nWID ) +// { +// const SwNodeIndex* pIdx = pFmt->GetCntnt().GetCntntIdx(); +// if(pIdx) +// { +// SwNodeIndex aIdx(*pIdx, 1); +// SwNoTxtNode* pNoTxt = aIdx.GetNode().GetNoTxtNode(); +// pNoTxt->SetAlternateText(aEmptyStr); +// } +// } + // New attribute Title + else if( FN_UNO_TITLE == pEntry->nWID ) + { + SwFlyFrmFmt* pFlyFmt = dynamic_cast<SwFlyFrmFmt*>(pFmt); + ASSERT( pFmt, + "unexpected type of <pFmt> --> crash" ); + // assure that <SdrObject> instance exists. + GetOrCreateSdrObject( pFlyFmt ); + pFlyFmt->GetDoc()->SetFlyFrmTitle( *(pFlyFmt), aEmptyStr ); + } + // New attribute Description + else if( FN_UNO_DESCRIPTION == pEntry->nWID ) + { + SwFlyFrmFmt* pFlyFmt = dynamic_cast<SwFlyFrmFmt*>(pFmt); + ASSERT( pFmt, + "unexpected type of <pFmt> --> crash" ); + // assure that <SdrObject> instance exists. + GetOrCreateSdrObject( pFlyFmt ); + pFlyFmt->GetDoc()->SetFlyFrmDescription( *(pFlyFmt), aEmptyStr ); + } + // <-- + else + { + SwDoc* pDoc = pFmt->GetDoc(); + SfxItemSet aSet( pDoc->GetAttrPool(), + RES_FRMATR_BEGIN, RES_FRMATR_END - 1 ); + aSet.SetParent(&pFmt->GetAttrSet()); + aSet.ClearItem(pEntry->nWID); + if(!rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_ANCHOR_TYPE))) + pFmt->SetFmtAttr(aSet); + } + } + else if(0 != (bNextFrame = (rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_CHAIN_NEXT_NAME)))) + || rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_CHAIN_PREV_NAME))) + { + SwDoc* pDoc = pFmt->GetDoc(); + if(bNextFrame) + pDoc->Unchain(*pFmt); + else + { + SwFmtChain aChain( pFmt->GetChain() ); + SwFrmFmt *pPrev = aChain.GetPrev(); + if(pPrev) + pDoc->Unchain(*pPrev); + } + } + } + else if(!IsDescriptor()) + throw uno::RuntimeException(); + +} +/*-- 12.09.00 14:04:55--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Any SwXFrame::getPropertyDefault( const OUString& rPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + uno::Any aRet; + SwFrmFmt* pFmt = GetFrmFmt(); + if(pFmt) + { + const SfxItemPropertySimpleEntry* pEntry = m_pPropSet->getPropertyMap()->getByName(rPropertyName); + if(pEntry) + { + if ( pEntry->nWID < RES_FRMATR_END ) + { + const SfxPoolItem& rDefItem = + pFmt->GetDoc()->GetAttrPool().GetDefaultItem(pEntry->nWID); + rDefItem.QueryValue(aRet, pEntry->nMemberId); + } + } + else + throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) ); + } + else if(!IsDescriptor()) + throw uno::RuntimeException(); + return aRet; +} +/* -----------------22.04.99 14:59------------------- + * + * --------------------------------------------------*/ +void SwXFrame::addEventListener(const uno::Reference< lang::XEventListener > & aListener) throw( uno::RuntimeException ) +{ + if(!GetRegisteredIn()) + throw uno::RuntimeException(); + aLstnrCntnr.AddListener(aListener); +} +/* -----------------22.04.99 14:59------------------- + * + * --------------------------------------------------*/ +void SwXFrame::removeEventListener(const uno::Reference< lang::XEventListener > & aListener) throw( uno::RuntimeException ) +{ + if(!GetRegisteredIn() || !aLstnrCntnr.RemoveListener(aListener)) + throw uno::RuntimeException(); +} +/*-- 11.12.98 15:05:06--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXFrame::Modify( SfxPoolItem *pOld, SfxPoolItem *pNew) +{ + ClientModify(this, pOld, pNew); + if(!GetRegisteredIn()) + { + mxStyleData.clear(); + mxStyleFamily.clear(); + m_pDoc = 0; + aLstnrCntnr.Disposing(); + } +} + +/*-- 11.12.98 15:23:05--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXFrame::dispose(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + SwFrmFmt* pFmt = GetFrmFmt(); + if ( pFmt ) + { + SdrObject* pObj = pFmt->FindSdrObject(); + // OD 11.09.2003 #112039# - add condition to perform delete of + // format/anchor sign, not only if the object is inserted, but also + // if a contact object is registered, which isn't in the destruction. + if ( pObj && + ( pObj->IsInserted() || + ( pObj->GetUserCall() && + !static_cast<SwContact*>(pObj->GetUserCall())->IsInDTOR() ) ) ) + { + if (pFmt->GetAnchor().GetAnchorId() == FLY_AS_CHAR) + { + const SwPosition &rPos = *(pFmt->GetAnchor().GetCntntAnchor()); + SwTxtNode *pTxtNode = rPos.nNode.GetNode().GetTxtNode(); + const xub_StrLen nIdx = rPos.nContent.GetIndex(); + pTxtNode->DeleteAttributes( RES_TXTATR_FLYCNT, nIdx, nIdx ); + } + else + pFmt->GetDoc()->DelLayoutFmt(pFmt); + } + } + +} +/*-- 11.12.98 16:02:27--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Reference< text::XTextRange > SwXFrame::getAnchor(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + uno::Reference< text::XTextRange > aRef; + SwFrmFmt* pFmt = GetFrmFmt(); + if(pFmt) + { + const SwFmtAnchor& rAnchor = pFmt->GetAnchor(); + // return an anchor for non-page bound frames + // and for page bound frames that have a page no == NULL and a content position + if ((rAnchor.GetAnchorId() != FLY_AT_PAGE) || + (rAnchor.GetCntntAnchor() && !rAnchor.GetPageNum())) + { + const SwPosition &rPos = *(rAnchor.GetCntntAnchor()); + aRef = SwXTextRange::CreateXTextRange(*pFmt->GetDoc(), rPos, 0); + } + } + else + throw uno::RuntimeException(); + return aRef; +} +/* -----------------14.01.99 12:02------------------- + * + * --------------------------------------------------*/ +void SwXFrame::ResetDescriptor() +{ + bIsDescriptor = sal_False; + mxStyleData.clear(); + mxStyleFamily.clear(); + DELETEZ(pProps); +} +/* -----------------18.02.99 13:34------------------- + * + * --------------------------------------------------*/ +void SwXFrame::attachToRange(const uno::Reference< text::XTextRange > & xTextRange) + throw( lang::IllegalArgumentException, uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsDescriptor()) + throw uno::RuntimeException(); + uno::Reference<lang::XUnoTunnel> xRangeTunnel( xTextRange, uno::UNO_QUERY); + SwXTextRange* pRange = 0; + OTextCursorHelper* pCursor = 0; + if(xRangeTunnel.is()) + { + pRange = reinterpret_cast< SwXTextRange * >( + sal::static_int_cast< sal_IntPtr >( xRangeTunnel->getSomething( SwXTextRange::getUnoTunnelId()) )); + pCursor = reinterpret_cast< OTextCursorHelper * >( + sal::static_int_cast< sal_IntPtr >( xRangeTunnel->getSomething( OTextCursorHelper::getUnoTunnelId()) )); + } + + SwDoc* pDoc = pRange ? (SwDoc*)pRange->GetDoc() : pCursor ? (SwDoc*)pCursor->GetDoc() : 0; + if(pDoc) + { + SwUnoInternalPaM aIntPam(*pDoc); + //das muss jetzt sal_True liefern + ::sw::XTextRangeToSwPaM(aIntPam, xTextRange); + + SwNode& rNode = pDoc->GetNodes().GetEndOfContent(); + SwPaM aPam(rNode); + aPam.Move( fnMoveBackward, fnGoDoc ); + static sal_uInt16 __READONLY_DATA aFrmAttrRange[] = + { + RES_FRMATR_BEGIN, RES_FRMATR_END-1, + SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, + RES_UNKNOWNATR_CONTAINER, RES_UNKNOWNATR_CONTAINER, + 0 + }; + static sal_uInt16 __READONLY_DATA aGrAttrRange[] = + { + RES_GRFATR_BEGIN, RES_GRFATR_END-1, + 0 + }; + SfxItemSet aGrSet(pDoc->GetAttrPool(), aGrAttrRange ); + + SfxItemSet aFrmSet(pDoc->GetAttrPool(), aFrmAttrRange ); + //jetzt muessen die passenden Items in den Set + sal_Bool bSizeFound; + if(!pProps->AnyToItemSet( pDoc, aFrmSet, aGrSet, bSizeFound)) + throw lang::IllegalArgumentException(); + //der TextRange wird einzeln behandelt + *aPam.GetPoint() = *aIntPam.GetPoint(); + if(aIntPam.HasMark()) + { + aPam.SetMark(); + *aPam.GetMark() = *aIntPam.GetMark(); + } + + const SfxPoolItem* pItem; + RndStdIds eAnchorId = FLY_AT_PARA; + if(SFX_ITEM_SET == aFrmSet.GetItemState(RES_ANCHOR, sal_False, &pItem) ) + { + eAnchorId = ((const SwFmtAnchor*)pItem)->GetAnchorId(); + if( FLY_AT_FLY == eAnchorId && + !aPam.GetNode()->FindFlyStartNode()) + { + //rahmengebunden geht nur dort, wo ein Rahmen ist! + SwFmtAnchor aAnchor(FLY_AT_PARA); + aFrmSet.Put(aAnchor); + } + else if ((FLY_AT_PAGE == eAnchorId) && + 0 == ((const SwFmtAnchor*)pItem)->GetPageNum() ) + { + SwFmtAnchor aAnchor( *((const SwFmtAnchor*)pItem) ); + aAnchor.SetAnchor( aPam.GetPoint() ); + aFrmSet.Put(aAnchor); + } + } + + const ::uno::Any* pStyle; + SwFrmFmt *pParentFrmFmt = 0; + if(pProps->GetProperty(FN_UNO_FRAME_STYLE_NAME, 0, pStyle)) + pParentFrmFmt = lcl_GetFrmFmt( *pStyle, pDoc ); + + SwFlyFrmFmt* pFmt = 0; + if( eType == FLYCNTTYPE_FRM) + { + UnoActionContext aCont(pDoc); + if(m_pCopySource) + { + SwFmtAnchor* pAnchorItem = 0; + // the frame is inserted bound to page + // to prevent conflicts if the to-be-anchored position is part of the to-be-copied text + if (eAnchorId != FLY_AT_PAGE) + { + pAnchorItem = static_cast<SwFmtAnchor*>(aFrmSet.Get(RES_ANCHOR).Clone()); + aFrmSet.Put( SwFmtAnchor( FLY_AT_PAGE, 1 )); + } + + pFmt = pDoc->MakeFlyAndMove( *m_pCopySource, aFrmSet, + 0, + pParentFrmFmt ); + if(pAnchorItem && pFmt) + { + pFmt->DelFrms(); + pAnchorItem->SetAnchor( m_pCopySource->Start() ); + SfxItemSet aAnchorSet( pDoc->GetAttrPool(), RES_ANCHOR, RES_ANCHOR ); + aAnchorSet.Put( *pAnchorItem ); + pDoc->SetFlyFrmAttr( *pFmt, aAnchorSet ); + delete pAnchorItem; + } + DELETEZ( m_pCopySource ); + } + else + { + pFmt = pDoc->MakeFlySection( FLY_AT_PARA, aPam.GetPoint(), + &aFrmSet, pParentFrmFmt ); + } + if(pFmt) + { + pFmt->Add(this); + if(sName.Len()) + pDoc->SetFlyName((SwFlyFrmFmt&)*pFmt, sName); + } + //den SwXText wecken + ((SwXTextFrame*)this)->SetDoc( bIsDescriptor ? m_pDoc : GetFrmFmt()->GetDoc() ); + } + else if( eType == FLYCNTTYPE_GRF) + { + UnoActionContext aCont(pDoc); + const ::uno::Any* pGraphicURL; + String sGraphicURL; + GraphicObject *pGrfObj = 0; + if(pProps->GetProperty(FN_UNO_GRAPHIC_U_R_L, 0, pGraphicURL)) + { + OUString uTemp; + (*pGraphicURL) >>= uTemp; + sGraphicURL = String(uTemp); + if( sGraphicURL.EqualsAscii( sPackageProtocol, + 0, sizeof( sPackageProtocol )-1 ) ) + { + pGrfObj = new GraphicObject; + pGrfObj->SetUserData( sGraphicURL ); + pGrfObj->SetSwapState(); + sGraphicURL.Erase(); + } + else if( sGraphicURL.EqualsAscii( sGraphicObjectProtocol, + 0, sizeof(sGraphicObjectProtocol)-1 ) ) + { + ByteString sId( sGraphicURL.Copy( sizeof(sGraphicObjectProtocol)-1 ), + RTL_TEXTENCODING_ASCII_US ); + pGrfObj = new GraphicObject( sId ); + sGraphicURL.Erase(); + } + } + Graphic aGraphic; + const ::uno::Any* pGraphic; + if( pProps->GetProperty( FN_UNO_GRAPHIC, 0, pGraphic )) + { + uno::Reference< graphic::XGraphic > xGraphic; + (*pGraphic) >>= xGraphic; + aGraphic = Graphic( xGraphic ); + } + + String sFltName; + const ::uno::Any* pFilter; + if(pProps->GetProperty(FN_UNO_GRAPHIC_FILTER, 0, pFilter)) + { + OUString uTemp; + (*pFilter) >>= uTemp; + sFltName = String(uTemp); + } + + pFmt = + pGrfObj ? pDoc->Insert( aPam, *pGrfObj, &aFrmSet, &aGrSet, + pParentFrmFmt ) + : pDoc->Insert( aPam, sGraphicURL, sFltName, &aGraphic, + &aFrmSet, &aGrSet, pParentFrmFmt ); + delete pGrfObj; + if(pFmt) + { + SwGrfNode *pGrfNd = pDoc->GetNodes()[ pFmt->GetCntnt().GetCntntIdx() + ->GetIndex()+1 ]->GetGrfNode(); + pGrfNd->SetChgTwipSize( !bSizeFound ); + pFmt->Add(this); + if(sName.Len()) + pDoc->SetFlyName((SwFlyFrmFmt&)*pFmt, sName); + + } + const ::uno::Any* pSurroundContour; + if(pProps->GetProperty(RES_SURROUND, MID_SURROUND_CONTOUR, pSurroundContour)) + setPropertyValue(C2U(SW_PROP_NAME_STR(UNO_NAME_SURROUND_CONTOUR)), *pSurroundContour); + const ::uno::Any* pContourOutside; + if(pProps->GetProperty(RES_SURROUND, MID_SURROUND_CONTOUROUTSIDE, pContourOutside)) + setPropertyValue(C2U(SW_PROP_NAME_STR(UNO_NAME_CONTOUR_OUTSIDE)), *pContourOutside); + const ::uno::Any* pContourPoly; + if(pProps->GetProperty(FN_PARAM_COUNTOUR_PP, 0, pContourPoly)) + setPropertyValue(C2U(SW_PROP_NAME_STR(UNO_NAME_CONTOUR_POLY_POLYGON)), *pContourPoly); + const ::uno::Any* pPixelContour; + if(pProps->GetProperty(FN_UNO_IS_PIXEL_CONTOUR, 0, pPixelContour)) + setPropertyValue(C2U(SW_PROP_NAME_STR(UNO_NAME_IS_PIXEL_CONTOUR)), *pPixelContour); + const ::uno::Any* pAutoContour; + if(pProps->GetProperty(FN_UNO_IS_AUTOMATIC_CONTOUR, 0, pAutoContour)) + setPropertyValue(C2U(SW_PROP_NAME_STR(UNO_NAME_IS_AUTOMATIC_CONTOUR)), *pAutoContour); +// const ::uno::Any* pAltText; +// if(pProps->GetProperty(FN_UNO_ALTERNATIVE_TEXT, 0, pAltText)) +// setPropertyValue(C2U(SW_PROP_NAME_STR(UNO_NAME_ALTERNATIVE_TEXT)), *pAltText); + } + else + { + const ::uno::Any* pCLSID = 0; + const ::uno::Any* pStreamName = 0; + if(!pProps->GetProperty(FN_UNO_CLSID, 0, pCLSID) && !pProps->GetProperty( FN_UNO_STREAM_NAME, 0, pStreamName )) + throw uno::RuntimeException(); + if(pCLSID) + { + OUString aCLSID; + SvGlobalName aClassName; + uno::Reference < embed::XEmbeddedObject > xIPObj; + std::auto_ptr < comphelper::EmbeddedObjectContainer > pCnt; + if( (*pCLSID) >>= aCLSID ) + { + if( !aClassName.MakeId( aCLSID ) ) + { + lang::IllegalArgumentException aExcept; + aExcept.Message = OUString::createFromAscii("CLSID invalid"); + throw aExcept; + } + + pCnt.reset( new comphelper::EmbeddedObjectContainer ); + ::rtl::OUString aName; + xIPObj = pCnt->CreateEmbeddedObject( aClassName.GetByteSequence(), aName ); + } + if ( xIPObj.is() ) + { + //TODO/LATER: MISCSTATUS_RESIZEONPRINTERCHANGE + //if( SVOBJ_MISCSTATUS_RESIZEONPRINTERCHANGE & xIPObj->GetMiscStatus() && pDoc->getPrinter( false ) ) + // xIPObj->OnDocumentPrinterChanged( pDoc->getPrinter( false ) ); + + UnoActionContext aAction(pDoc); + pDoc->StartUndo(UNDO_INSERT, NULL); + if(!bSizeFound) + { + //TODO/LATER: from where do I get a ViewAspect? And how do I transport it to the OLENode? + sal_Int64 nAspect = embed::Aspects::MSOLE_CONTENT; + + // TODO/LEAN: VisualArea still needs running state + svt::EmbeddedObjectRef::TryRunningState( xIPObj ); + + // set parent to get correct VisArea(in case of object needing parent printer) + uno::Reference < container::XChild > xChild( xIPObj, uno::UNO_QUERY ); + if ( xChild.is() ) + xChild->setParent( pDoc->GetDocShell()->GetModel() ); + + //The Size should be suggested by the OLE server if not manually set + MapUnit aRefMap = VCLUnoHelper::UnoEmbed2VCLMapUnit( xIPObj->getMapUnit( nAspect ) ); + awt::Size aSize; + try + { + aSize = xIPObj->getVisualAreaSize( nAspect ); + } + catch ( embed::NoVisualAreaSizeException& ) + { + // the default size will be set later + } + + Size aSz( aSize.Width, aSize.Height ); + if ( !aSz.Width() || !aSz.Height() ) + { + aSz.Width() = aSz.Height() = 5000; + aSz = OutputDevice::LogicToLogic + ( aSz, MapMode( MAP_100TH_MM ), aRefMap ); + } + MapMode aMyMap( MAP_TWIP ); + aSz = OutputDevice::LogicToLogic( aSz, aRefMap, aMyMap ); + SwFmtFrmSize aFrmSz; + aFrmSz.SetSize(aSz); + aFrmSet.Put(aFrmSz); + } + SwFlyFrmFmt* pFmt2 = 0; + + // TODO/LATER: Is it the only possible aspect here? + sal_Int64 nAspect = embed::Aspects::MSOLE_CONTENT; + ::svt::EmbeddedObjectRef xObjRef( xIPObj, nAspect ); + pFmt2 = pDoc->Insert(aPam, xObjRef, &aFrmSet, NULL, NULL ); + ASSERT( pFmt2, "Doc->Insert(notxt) failed." ); + + pDoc->EndUndo(UNDO_INSERT, NULL); + pFmt2->Add(this); + if(sName.Len()) + pDoc->SetFlyName((SwFlyFrmFmt&)*pFmt2, sName); + } + } + else if( pStreamName ) + { + ::rtl::OUString sStreamName; + (*pStreamName) >>= sStreamName; + pDoc->StartUndo(UNDO_INSERT, NULL); + + SwFlyFrmFmt* pFrmFmt = 0; + pFrmFmt = pDoc->InsertOLE( aPam, sStreamName, embed::Aspects::MSOLE_CONTENT, &aFrmSet, NULL, NULL ); + pDoc->EndUndo(UNDO_INSERT, NULL); + pFrmFmt->Add(this); + if(sName.Len()) + pDoc->SetFlyName((SwFlyFrmFmt&)*pFrmFmt, sName); + } + } + if( pFmt && pDoc->GetDrawModel() ) + GetOrCreateSdrObject( pFmt ); + const ::uno::Any* pOrder; + if( pProps->GetProperty(FN_UNO_Z_ORDER, 0, pOrder) ) + setPropertyValue(C2U(SW_PROP_NAME_STR(UNO_NAME_Z_ORDER)), *pOrder); + const ::uno::Any* pReplacement; + if( pProps->GetProperty(FN_UNO_REPLACEMENT_GRAPHIC, 0, pReplacement) ) + setPropertyValue(C2U(SW_PROP_NAME_STR(UNO_NAME_GRAPHIC)), *pReplacement); + // --> OD 2009-07-13 #i73249# + // new attribute Title + const ::uno::Any* pTitle; + if ( pProps->GetProperty(FN_UNO_TITLE, 0, pTitle) ) + { + setPropertyValue(C2U(SW_PROP_NAME_STR(UNO_NAME_TITLE)), *pTitle); + } + // new attribute Description + const ::uno::Any* pDescription; + if ( pProps->GetProperty(FN_UNO_DESCRIPTION, 0, pDescription) ) + { + setPropertyValue(C2U(SW_PROP_NAME_STR(UNO_NAME_DESCRIPTION)), *pDescription); + } + // <-- + } + else + throw lang::IllegalArgumentException(); + //setzt das Flag zurueck und loescht den Descriptor-Pointer + ResetDescriptor(); +} +/* -----------------------------04.04.01 14:27-------------------------------- + + ---------------------------------------------------------------------------*/ +void SwXFrame::attach(const uno::Reference< text::XTextRange > & xTextRange) + throw( lang::IllegalArgumentException, uno::RuntimeException ) +{ + SwFrmFmt* pFmt; + if(IsDescriptor()) + attachToRange(xTextRange); + else if(0 != (pFmt = GetFrmFmt())) + { + uno::Reference<lang::XUnoTunnel> xRangeTunnel( xTextRange, uno::UNO_QUERY); + SwXTextRange* pRange = 0; + OTextCursorHelper* pCursor = 0; + if(xRangeTunnel.is()) + { + pRange = reinterpret_cast< SwXTextRange * >( + sal::static_int_cast< sal_IntPtr >( xRangeTunnel->getSomething( SwXTextRange::getUnoTunnelId()) )); + pCursor = reinterpret_cast< OTextCursorHelper * >( + sal::static_int_cast< sal_IntPtr >( xRangeTunnel->getSomething( OTextCursorHelper::getUnoTunnelId()) )); + } + SwDoc* pDoc = pFmt->GetDoc(); + SwUnoInternalPaM aIntPam(*pDoc); + if (::sw::XTextRangeToSwPaM(aIntPam, xTextRange)) + { + SfxItemSet aSet( pDoc->GetAttrPool(), + RES_ANCHOR, RES_ANCHOR ); + aSet.SetParent(&pFmt->GetAttrSet()); + SwFmtAnchor aAnchor = (const SwFmtAnchor&)aSet.Get(RES_ANCHOR); + aAnchor.SetAnchor( aIntPam.Start() ); + aSet.Put(aAnchor); + pDoc->SetFlyFrmAttr( *pFmt, aSet ); + } + else + throw lang::IllegalArgumentException(); + } +} +/*-- 22.04.99 08:03:20--------------------------------------------------- + + -----------------------------------------------------------------------*/ +awt::Point SwXFrame::getPosition(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + uno::RuntimeException aRuntime; + aRuntime.Message = C2U("position cannot be determined with this method"); + throw aRuntime; +} +/*-- 22.04.99 08:03:21--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXFrame::setPosition(const awt::Point& /*aPosition*/) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + uno::RuntimeException aRuntime; + aRuntime.Message = C2U("position cannot be changed with this method"); + throw aRuntime; +} +/*-- 22.04.99 08:03:21--------------------------------------------------- + + -----------------------------------------------------------------------*/ +awt::Size SwXFrame::getSize(void) throw( uno::RuntimeException ) +{ + const ::uno::Any aVal = getPropertyValue(C2U("Size")); + awt::Size* pRet = (awt::Size*)aVal.getValue(); + return *pRet; +} +/*-- 22.04.99 08:03:21--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXFrame::setSize(const awt::Size& aSize) + throw( beans::PropertyVetoException, uno::RuntimeException ) +{ + const ::uno::Any aVal(&aSize, ::getCppuType(static_cast<const awt::Size*>(0))); + setPropertyValue(C2U("Size"), aVal); +} +/*-- 22.04.99 08:03:21--------------------------------------------------- + + -----------------------------------------------------------------------*/ +OUString SwXFrame::getShapeType(void) throw( uno::RuntimeException ) +{ + return C2U("FrameShape"); +} + + +/****************************************************************** + * SwXTextFrame + ******************************************************************/ +/*-- 14.01.99 11:27:51--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextFrame::SwXTextFrame( SwDoc *_pDoc ) : + SwXText(0, CURSOR_FRAME), + SwXFrame(FLYCNTTYPE_FRM, aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT_FRAME), _pDoc ) +{ +} +/*-- 11.12.98 15:23:01--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextFrame::SwXTextFrame(SwFrmFmt& rFmt) : + SwXText(rFmt.GetDoc(), CURSOR_FRAME), + SwXFrame(rFmt, FLYCNTTYPE_FRM, aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT_FRAME)) +{ + +} +/*-- 11.12.98 15:23:02--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextFrame::~SwXTextFrame() +{ +} +/* -----------------------------15.03.00 16:30-------------------------------- + + ---------------------------------------------------------------------------*/ +void SAL_CALL SwXTextFrame::acquire( )throw() +{ + SwXFrame::acquire(); +} +/* -----------------------------15.03.00 16:30-------------------------------- + + ---------------------------------------------------------------------------*/ +void SAL_CALL SwXTextFrame::release( )throw() +{ + SwXFrame::release(); +} +/* -----------------------------15.03.00 16:30-------------------------------- + + ---------------------------------------------------------------------------*/ +::uno::Any SAL_CALL SwXTextFrame::queryInterface( const uno::Type& aType ) + throw (uno::RuntimeException) +{ + ::uno::Any aRet = SwXFrame::queryInterface(aType); + if(aRet.getValueType() == ::getCppuVoidType()) + aRet = SwXText::queryInterface(aType); + if(aRet.getValueType() == ::getCppuVoidType()) + aRet = SwXTextFrameBaseClass::queryInterface(aType); + return aRet; +} +/* -----------------------------15.03.00 16:30-------------------------------- + + ---------------------------------------------------------------------------*/ +uno::Sequence< uno::Type > SAL_CALL SwXTextFrame::getTypes( ) throw(uno::RuntimeException) +{ + uno::Sequence< uno::Type > aTextFrameTypes = SwXTextFrameBaseClass::getTypes(); + uno::Sequence< uno::Type > aFrameTypes = SwXFrame::getTypes(); + uno::Sequence< uno::Type > aTextTypes = SwXText::getTypes(); + + long nIndex = aTextFrameTypes.getLength(); + aTextFrameTypes.realloc( + aTextFrameTypes.getLength() + + aFrameTypes.getLength() + + aTextTypes.getLength()); + + uno::Type* pTextFrameTypes = aTextFrameTypes.getArray(); + const uno::Type* pFrameTypes = aFrameTypes.getConstArray(); + long nPos; + for(nPos = 0; nPos <aFrameTypes.getLength(); nPos++) + pTextFrameTypes[nIndex++] = pFrameTypes[nPos]; + + const uno::Type* pTextTypes = aTextTypes.getConstArray(); + for(nPos = 0; nPos <aTextTypes.getLength(); nPos++) + pTextFrameTypes[nIndex++] = pTextTypes[nPos]; + + return aTextFrameTypes; +} +/* -----------------------------15.03.00 16:30-------------------------------- + + ---------------------------------------------------------------------------*/ +uno::Sequence< sal_Int8 > SAL_CALL SwXTextFrame::getImplementationId( ) throw(uno::RuntimeException) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + static uno::Sequence< sal_Int8 > aId( 16 ); + static sal_Bool bInit = sal_False; + if(!bInit) + { + rtl_createUuid( (sal_uInt8 *)(aId.getArray() ), 0, sal_True ); + bInit = sal_True; + } + return aId; +} +/*-- 11.12.98 15:23:03--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Reference< text::XText > SwXTextFrame::getText(void) throw( uno::RuntimeException ) +{ + return this; +} +/*-- 11.12.98 15:23:03--------------------------------------------------- + + -----------------------------------------------------------------------*/ +const SwStartNode *SwXTextFrame::GetStartNode() const +{ + const SwStartNode *pSttNd = 0; + + SwFrmFmt* pFmt = GetFrmFmt(); + if(pFmt) + { + const SwFmtCntnt& rFlyCntnt = pFmt->GetCntnt(); + if( rFlyCntnt.GetCntntIdx() ) + pSttNd = rFlyCntnt.GetCntntIdx()->GetNode().GetStartNode(); + } + + return pSttNd; +} + +uno::Reference< text::XTextCursor > +SwXTextFrame::CreateCursor() throw (uno::RuntimeException) +{ + return createTextCursor(); +} +/*-- 11.12.98 15:23:03--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Reference< text::XTextCursor > SwXTextFrame::createTextCursor(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + uno::Reference< text::XTextCursor > aRef; + SwFrmFmt* pFmt = GetFrmFmt(); + if(pFmt) + { + //save current start node to be able to check if there is content after the table - + //otherwise the cursor would be in the body text! + const SwNode& rNode = pFmt->GetCntnt().GetCntntIdx()->GetNode(); + const SwStartNode* pOwnStartNode = rNode.FindSttNodeByType(SwFlyStartNode); + + SwPaM aPam(rNode); + aPam.Move(fnMoveForward, fnGoNode); + SwTableNode* pTblNode = aPam.GetNode()->FindTableNode(); + SwCntntNode* pCont = 0; + while( pTblNode ) + { + aPam.GetPoint()->nNode = *pTblNode->EndOfSectionNode(); + pCont = GetDoc()->GetNodes().GoNext(&aPam.GetPoint()->nNode); + pTblNode = pCont->FindTableNode(); + } + if(pCont) + aPam.GetPoint()->nContent.Assign(pCont, 0); + + const SwStartNode* pNewStartNode = + aPam.GetNode()->FindSttNodeByType(SwFlyStartNode); + if(!pNewStartNode || pNewStartNode != pOwnStartNode) + { + uno::RuntimeException aExcept; + aExcept.Message = S2U("no text available"); + throw aExcept; + } + + SwXTextCursor *const pXCursor = new SwXTextCursor( + *pFmt->GetDoc(), this, CURSOR_FRAME, *aPam.GetPoint()); + aRef = static_cast<text::XWordCursor*>(pXCursor); +#if OSL_DEBUG_LEVEL > 1 + SwUnoCrsr *const pUnoCrsr = pXCursor->GetCursor(); + (void) pUnoCrsr; +#endif + } + else + throw uno::RuntimeException(); + return aRef; +} +/*-- 11.12.98 15:23:03--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Reference< text::XTextCursor > SwXTextFrame::createTextCursorByRange(const uno::Reference< text::XTextRange > & aTextPosition) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + uno::Reference< text::XTextCursor > aRef; + SwFrmFmt* pFmt = GetFrmFmt(); + SwUnoInternalPaM aPam(*GetDoc()); + if (pFmt && ::sw::XTextRangeToSwPaM(aPam, aTextPosition)) + { + SwNode& rNode = pFmt->GetCntnt().GetCntntIdx()->GetNode(); +#if OSL_DEBUG_LEVEL > 1 + const SwStartNode* p1 = aPam.GetNode()->FindFlyStartNode(); + const SwStartNode* p2 = rNode.FindFlyStartNode(); + (void)p1; + (void)p2; +#endif + if(aPam.GetNode()->FindFlyStartNode() == rNode.FindFlyStartNode()) + { + aRef = static_cast<text::XWordCursor*>( + new SwXTextCursor(*pFmt->GetDoc(), this, CURSOR_FRAME, + *aPam.GetPoint(), aPam.GetMark())); + } + } + else + throw uno::RuntimeException(); + return aRef; +} +/*-- 11.12.98 15:23:03--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Reference< container::XEnumeration > SwXTextFrame::createEnumeration(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + uno::Reference< container::XEnumeration > aRef; + SwFrmFmt* pFmt = GetFrmFmt(); + if(pFmt) + { + SwPosition aPos(pFmt->GetCntnt().GetCntntIdx()->GetNode()); + ::std::auto_ptr<SwUnoCrsr> pUnoCursor( + GetDoc()->CreateUnoCrsr(aPos, sal_False)); + pUnoCursor->Move(fnMoveForward, fnGoNode); +// // no Cursor in protected sections +// SwCrsrSaveState aSave( *pUnoCrsr ); +// if(pUnoCrsr->IsInProtectTable( sal_True ) || +// pUnoCrsr->IsSelOvr( SELOVER_TOGGLE | SELOVER_CHANGEPOS )) +// throw uno::RuntimeException() ); + aRef = new SwXParagraphEnumeration(this, pUnoCursor, CURSOR_FRAME); + } + return aRef; +} +/*-- 11.12.98 15:23:04--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Type SwXTextFrame::getElementType(void) throw( uno::RuntimeException ) +{ + return ::getCppuType(static_cast<uno::Reference<text::XTextRange>*>(0)); +} +/*-- 11.12.98 15:23:04--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Bool SwXTextFrame::hasElements(void) throw( uno::RuntimeException ) +{ + return sal_True; +} +/*-- 11.12.98 15:23:04--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXTextFrame::attach(const uno::Reference< text::XTextRange > & xTextRange) + throw( lang::IllegalArgumentException, uno::RuntimeException ) +{ + SwXFrame::attach(xTextRange); +} +/*-- 11.12.98 15:23:04--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Reference< text::XTextRange > SwXTextFrame::getAnchor(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + return SwXFrame::getAnchor(); +} +/*-- 11.12.98 15:23:05--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXTextFrame::dispose(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + SwXFrame::dispose(); +} +/*-- 11.12.98 15:23:05--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXTextFrame::addEventListener(const uno::Reference< lang::XEventListener > & aListener) throw( uno::RuntimeException ) +{ + SwXFrame::addEventListener(aListener); +} +/*-- 11.12.98 15:23:05--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXTextFrame::removeEventListener(const uno::Reference< lang::XEventListener > & aListener) throw( uno::RuntimeException ) +{ + SwXFrame::removeEventListener(aListener); +} +/* -----------------03.05.99 12:28------------------- + * + * --------------------------------------------------*/ +OUString SwXTextFrame::getImplementationName(void) throw( uno::RuntimeException ) +{ + return C2U("SwXTextFrame"); +} +/* -----------------03.05.99 12:28------------------- + * + * --------------------------------------------------*/ +sal_Bool SwXTextFrame::supportsService(const OUString& rServiceName) throw( uno::RuntimeException ) +{ + return COMPARE_EQUAL == rServiceName.compareToAscii("com.sun.star.text.Text")|| + COMPARE_EQUAL == rServiceName.compareToAscii("com.sun.star.text.TextFrame")|| + SwXFrame::supportsService(rServiceName); +} +/* -----------------03.05.99 12:28------------------- + * + * --------------------------------------------------*/ +uno::Sequence< OUString > SwXTextFrame::getSupportedServiceNames(void) throw( uno::RuntimeException ) +{ + uno::Sequence < OUString > aRet = SwXFrame::getSupportedServiceNames(); + aRet.realloc(aRet.getLength() + 2); + OUString* pArray = aRet.getArray(); + pArray[aRet.getLength() - 2] = C2U("com.sun.star.text.TextFrame"); + pArray[aRet.getLength() - 1] = C2U("com.sun.star.text.Text"); + return aRet; +} +/* -----------------------------20.06.00 10:02-------------------------------- + + ---------------------------------------------------------------------------*/ +void * SAL_CALL SwXTextFrame::operator new( size_t t) throw() +{ + return SwXTextFrameBaseClass::operator new( t); +} +/* -----------------------------20.06.00 10:02-------------------------------- + + ---------------------------------------------------------------------------*/ +void SAL_CALL SwXTextFrame::operator delete( void * p) throw() +{ + SwXTextFrameBaseClass::operator delete(p); +} + +uno::Reference<container::XNameReplace > SAL_CALL SwXTextFrame::getEvents() + throw(uno::RuntimeException) +{ + return new SwFrameEventDescriptor( *this ); +} +/* -----------------------------10.01.01 13:27-------------------------------- + + ---------------------------------------------------------------------------*/ +sal_Int64 SAL_CALL SwXTextFrame::getSomething( const uno::Sequence< sal_Int8 >& rId ) + throw(uno::RuntimeException) +{ + sal_Int64 nRet = SwXFrame::getSomething( rId ); + if( !nRet ) + nRet = SwXText::getSomething( rId ); + + return nRet; +} +/* -----------------------------19.03.2002 16:43------------------------------ + + ---------------------------------------------------------------------------*/ +::uno::Any SwXTextFrame::getPropertyValue(const OUString& rPropertyName) + throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + ::uno::Any aRet; + if(rPropertyName.equalsAsciiL(SW_PROP_NAME(UNO_NAME_START_REDLINE))|| + rPropertyName.equalsAsciiL(SW_PROP_NAME(UNO_NAME_END_REDLINE))) + { + //redline can only be returned if it's a living object + if(!IsDescriptor()) + aRet = SwXText::getPropertyValue(rPropertyName); + } + else + aRet = SwXFrame::getPropertyValue(rPropertyName); + return aRet; +} +/****************************************************************** + * SwXTextGraphicObject + ******************************************************************/ +/*-- 14.01.99 11:27:51--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextGraphicObject::SwXTextGraphicObject( SwDoc *pDoc ) : + SwXFrame(FLYCNTTYPE_GRF, aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT_GRAPHIC), pDoc) +{ +} +/*-- 11.12.98 16:02:25--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextGraphicObject::SwXTextGraphicObject(SwFrmFmt& rFmt) : + SwXFrame(rFmt, FLYCNTTYPE_GRF, aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT_GRAPHIC)) +{ + +} +/*-- 11.12.98 16:02:26--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextGraphicObject::~SwXTextGraphicObject() +{ + +} +/* -----------------------------15.03.00 16:30-------------------------------- + + ---------------------------------------------------------------------------*/ +void SAL_CALL SwXTextGraphicObject::acquire( )throw() +{ + SwXFrame::acquire(); +} +/* -----------------------------15.03.00 16:30-------------------------------- + + ---------------------------------------------------------------------------*/ +void SAL_CALL SwXTextGraphicObject::release( )throw() +{ + SwXFrame::release(); +} +/* -----------------------------15.03.00 16:30-------------------------------- + + ---------------------------------------------------------------------------*/ +::uno::Any SAL_CALL SwXTextGraphicObject::queryInterface( const uno::Type& aType ) + throw(uno::RuntimeException) +{ + ::uno::Any aRet = SwXFrame::queryInterface(aType); + if(aRet.getValueType() == ::getCppuVoidType()) + aRet = SwXTextGraphicObjectBaseClass::queryInterface(aType); + return aRet; +} +/* -----------------------------15.03.00 16:30-------------------------------- + + ---------------------------------------------------------------------------*/ +uno::Sequence< uno::Type > SAL_CALL + SwXTextGraphicObject::getTypes( ) throw(uno::RuntimeException) +{ + uno::Sequence< uno::Type > aGraphicTypes = SwXTextGraphicObjectBaseClass::getTypes(); + uno::Sequence< uno::Type > aFrameTypes = SwXFrame::getTypes(); + + long nIndex = aGraphicTypes.getLength(); + aGraphicTypes.realloc( + aGraphicTypes.getLength() + + aFrameTypes.getLength()); + + uno::Type* pGraphicTypes = aGraphicTypes.getArray(); + const uno::Type* pFrameTypes = aFrameTypes.getConstArray(); + long nPos; + for(nPos = 0; nPos <aFrameTypes.getLength(); nPos++) + pGraphicTypes[nIndex++] = pFrameTypes[nPos]; + + return aGraphicTypes; +} +/* -----------------------------15.03.00 16:30-------------------------------- + + ---------------------------------------------------------------------------*/ +uno::Sequence< sal_Int8 > SAL_CALL SwXTextGraphicObject::getImplementationId( ) throw(uno::RuntimeException) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + static uno::Sequence< sal_Int8 > aId( 16 ); + static sal_Bool bInit = sal_False; + if(!bInit) + { + rtl_createUuid( (sal_uInt8 *)(aId.getArray() ), 0, sal_True ); + bInit = sal_True; + } + return aId; +} +/*-- 11.12.98 16:02:27--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXTextGraphicObject::attach(const uno::Reference< text::XTextRange > & xTextRange) throw( lang::IllegalArgumentException, uno::RuntimeException ) +{ + SwXFrame::attach(xTextRange); +} +/*-- 11.12.98 16:02:27--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Reference< text::XTextRange > SwXTextGraphicObject::getAnchor(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + return SwXFrame::getAnchor(); +} +/*-- 11.12.98 16:02:28--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXTextGraphicObject::dispose(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + SwXFrame::dispose(); +} +/*-- 11.12.98 16:02:29--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXTextGraphicObject::addEventListener(const uno::Reference< lang::XEventListener > & aListener) + throw( uno::RuntimeException ) +{ + SwXFrame::addEventListener(aListener); +} +/*-- 11.12.98 16:02:29--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXTextGraphicObject::removeEventListener(const uno::Reference< lang::XEventListener > & aListener) + throw( uno::RuntimeException ) +{ + SwXFrame::removeEventListener(aListener); +} +/* -----------------03.05.99 12:28------------------- + * + * --------------------------------------------------*/ +OUString SwXTextGraphicObject::getImplementationName(void) throw( uno::RuntimeException ) +{ + return C2U("SwXTextGraphicObject"); +} +/* -----------------03.05.99 12:28------------------- + * + * --------------------------------------------------*/ +sal_Bool SwXTextGraphicObject::supportsService(const OUString& rServiceName) throw( uno::RuntimeException ) +{ + return COMPARE_EQUAL == rServiceName.compareToAscii("com.sun.star.text.TextGraphicObject") || + SwXFrame::supportsService(rServiceName); +} +/* -----------------03.05.99 12:28------------------- + * + * --------------------------------------------------*/ +uno::Sequence< OUString > SwXTextGraphicObject::getSupportedServiceNames(void) + throw( uno::RuntimeException ) +{ + uno::Sequence < OUString > aRet = SwXFrame::getSupportedServiceNames(); + aRet.realloc(aRet.getLength() + 1); + OUString* pArray = aRet.getArray(); + pArray[aRet.getLength() - 1] = C2U("com.sun.star.text.TextGraphicObject"); + return aRet; +} +/* -----------------------------20.06.00 10:02-------------------------------- + + ---------------------------------------------------------------------------*/ +void * SAL_CALL SwXTextGraphicObject::operator new( size_t t) throw() +{ + return SwXTextGraphicObjectBaseClass::operator new(t); +} +/* -----------------------------20.06.00 10:02-------------------------------- + + ---------------------------------------------------------------------------*/ +void SAL_CALL SwXTextGraphicObject::operator delete( void * p) throw() +{ + SwXTextGraphicObjectBaseClass::operator delete(p); +} +/* -----------------------------15.12.00 12:45-------------------------------- + + ---------------------------------------------------------------------------*/ +uno::Reference<container::XNameReplace> SAL_CALL + SwXTextGraphicObject::getEvents() + throw(uno::RuntimeException) +{ + return new SwFrameEventDescriptor( *this ); +} + +/****************************************************************** + * + ******************************************************************/ +/*-- 11.12.98 16:16:53--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextEmbeddedObject::SwXTextEmbeddedObject( SwDoc *pDoc ) : + SwXFrame(FLYCNTTYPE_OLE, aSwMapProvider.GetPropertySet(PROPERTY_MAP_EMBEDDED_OBJECT), pDoc) +{ +} +/*-- 11.12.98 16:16:53--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextEmbeddedObject::SwXTextEmbeddedObject(SwFrmFmt& rFmt) : + SwXFrame(rFmt, FLYCNTTYPE_OLE, aSwMapProvider.GetPropertySet(PROPERTY_MAP_EMBEDDED_OBJECT)) +{ + +} +/*-- 11.12.98 16:16:54--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextEmbeddedObject::~SwXTextEmbeddedObject() +{ + +} +/*-- 11.12.98 16:16:54--------------------------------------------------- + + -----------------------------------------------------------------------*/ +/* -----------------------------15.03.00 16:32-------------------------------- + + ---------------------------------------------------------------------------*/ +void SAL_CALL SwXTextEmbeddedObject::acquire()throw() +{ + SwXFrame::acquire(); +} +/* -----------------------------15.03.00 16:32-------------------------------- + + ---------------------------------------------------------------------------*/ +void SAL_CALL SwXTextEmbeddedObject::release()throw() +{ + SwXFrame::release(); +} +/* -----------------------------15.03.00 16:32-------------------------------- + + ---------------------------------------------------------------------------*/ +::uno::Any SAL_CALL SwXTextEmbeddedObject::queryInterface( const uno::Type& aType ) + throw( uno::RuntimeException) +{ + ::uno::Any aRet = SwXFrame::queryInterface(aType);; + if(aRet.getValueType() == ::getCppuVoidType()) + aRet = SwXTextEmbeddedObjectBaseClass::queryInterface(aType); + return aRet; +} +/* -----------------------------15.03.00 16:32-------------------------------- + + ---------------------------------------------------------------------------*/ +uno::Sequence< uno::Type > SAL_CALL SwXTextEmbeddedObject::getTypes( ) throw(uno::RuntimeException) +{ + uno::Sequence< uno::Type > aTextEmbeddedTypes = SwXTextEmbeddedObjectBaseClass::getTypes(); + uno::Sequence< uno::Type > aFrameTypes = SwXFrame::getTypes(); + + long nIndex = aTextEmbeddedTypes.getLength(); + aTextEmbeddedTypes.realloc( + aTextEmbeddedTypes.getLength() + + aFrameTypes.getLength()); + + uno::Type* pTextEmbeddedTypes = aTextEmbeddedTypes.getArray(); + + const uno::Type* pFrameTypes = aFrameTypes.getConstArray(); + long nPos; + for(nPos = 0; nPos <aFrameTypes.getLength(); nPos++) + pTextEmbeddedTypes[nIndex++] = pFrameTypes[nPos]; + + return aTextEmbeddedTypes; +} +/* -----------------------------15.03.00 16:32-------------------------------- + + ---------------------------------------------------------------------------*/ +uno::Sequence< sal_Int8 > SAL_CALL SwXTextEmbeddedObject::getImplementationId( ) throw(uno::RuntimeException) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + static uno::Sequence< sal_Int8 > aId( 16 ); + static sal_Bool bInit = sal_False; + if(!bInit) + { + rtl_createUuid( (sal_uInt8 *)(aId.getArray() ), 0, sal_True ); + bInit = sal_True; + } + return aId; +} +/*-- 11.12.98 16:16:54--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXTextEmbeddedObject::attach(const uno::Reference< text::XTextRange > & xTextRange) throw( lang::IllegalArgumentException, uno::RuntimeException ) +{ + SwXFrame::attach(xTextRange); +} +/*-- 11.12.98 16:16:54--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Reference< text::XTextRange > SwXTextEmbeddedObject::getAnchor(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + return SwXFrame::getAnchor(); +} +/*-- 11.12.98 16:16:54--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXTextEmbeddedObject::dispose(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + SwXFrame::dispose(); +} +/*-- 11.12.98 16:16:55--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXTextEmbeddedObject::addEventListener(const uno::Reference< lang::XEventListener > & aListener) throw( uno::RuntimeException ) +{ + SwXFrame::addEventListener(aListener); +} +/*-- 11.12.98 16:16:55--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwXTextEmbeddedObject::removeEventListener(const uno::Reference< lang::XEventListener > & aListener) throw( uno::RuntimeException ) +{ + SwXFrame::removeEventListener(aListener); +} +/*-- 11.12.98 16:16:55--------------------------------------------------- + + -----------------------------------------------------------------------*/ + +uno::Reference< lang::XComponent > SwXTextEmbeddedObject::getEmbeddedObject(void) throw( uno::RuntimeException ) +{ + uno::Reference< lang::XComponent > xRet; + SwFrmFmt* pFmt = GetFrmFmt(); + if(pFmt) + { + SwDoc* pDoc = pFmt->GetDoc(); + const SwFmtCntnt* pCnt = &pFmt->GetCntnt(); + DBG_ASSERT( pCnt->GetCntntIdx() && + pDoc->GetNodes()[ pCnt->GetCntntIdx()-> + GetIndex() + 1 ]->GetOLENode(), "kein OLE-Node?"); + + SwOLENode* pOleNode = pDoc->GetNodes()[ pCnt->GetCntntIdx() + ->GetIndex() + 1 ]->GetOLENode(); + uno::Reference < embed::XEmbeddedObject > xIP = pOleNode->GetOLEObj().GetOleRef(); + if ( svt::EmbeddedObjectRef::TryRunningState( xIP ) ) + { + // TODO/LATER: the listener registered after client creation should be able to handle scaling, after that the client is not necessary here + if ( pDoc->GetDocShell() ) + pDoc->GetDocShell()->GetIPClient( svt::EmbeddedObjectRef( xIP, embed::Aspects::MSOLE_CONTENT ) ); + + xRet = uno::Reference < lang::XComponent >( xIP->getComponent(), uno::UNO_QUERY ); + uno::Reference< util::XModifyBroadcaster > xBrdcst( xRet, uno::UNO_QUERY); + uno::Reference< frame::XModel > xModel( xRet, uno::UNO_QUERY); + if( xBrdcst.is() && xModel.is() ) + { + SwClientIter aIter( *pFmt ); + SwXOLEListener* pListener = (SwXOLEListener*)aIter. + First( TYPE( SwXOLEListener )); + //create a new one if the OLE object doesn't have one already + if( !pListener ) + { + uno::Reference< util::XModifyListener > xOLEListener = new SwXOLEListener(*pFmt, xModel); + xBrdcst->addModifyListener( xOLEListener ); + } + } + } + } + return xRet; +} + +/* --18.05.2006 16:39--------------------------------------------------- + + -----------------------------------------------------------------------*/ + + +uno::Reference< embed::XEmbeddedObject > SAL_CALL SwXTextEmbeddedObject::getExtendedControlOverEmbeddedObject() + throw( uno::RuntimeException ) +{ + uno::Reference< embed::XEmbeddedObject > xResult; + SwFrmFmt* pFmt = GetFrmFmt(); + if(pFmt) + { + SwDoc* pDoc = pFmt->GetDoc(); + const SwFmtCntnt* pCnt = &pFmt->GetCntnt(); + DBG_ASSERT( pCnt->GetCntntIdx() && + pDoc->GetNodes()[ pCnt->GetCntntIdx()-> + GetIndex() + 1 ]->GetOLENode(), "kein OLE-Node?"); + + SwOLENode* pOleNode = pDoc->GetNodes()[ pCnt->GetCntntIdx() + ->GetIndex() + 1 ]->GetOLENode(); + xResult = pOleNode->GetOLEObj().GetOleRef(); + if ( svt::EmbeddedObjectRef::TryRunningState( xResult ) ) + { + // TODO/LATER: the listener registered after client creation should be able to handle scaling, after that the client is not necessary here + if ( pDoc->GetDocShell() ) + pDoc->GetDocShell()->GetIPClient( svt::EmbeddedObjectRef( xResult, embed::Aspects::MSOLE_CONTENT ) ); + + uno::Reference < lang::XComponent > xComp( xResult->getComponent(), uno::UNO_QUERY ); + uno::Reference< util::XModifyBroadcaster > xBrdcst( xComp, uno::UNO_QUERY); + uno::Reference< frame::XModel > xModel( xComp, uno::UNO_QUERY); + if( xBrdcst.is() && xModel.is() ) + { + SwClientIter aIter( *pFmt ); + SwXOLEListener* pListener = (SwXOLEListener*)aIter. + First( TYPE( SwXOLEListener )); + //create a new one if the OLE object doesn't have one already + if( !pListener ) + { + uno::Reference< util::XModifyListener > xOLEListener = new SwXOLEListener(*pFmt, xModel); + xBrdcst->addModifyListener( xOLEListener ); + } + } + } + } + return xResult; +} + +sal_Int64 SAL_CALL SwXTextEmbeddedObject::getAspect() throw (uno::RuntimeException) +{ + SwFrmFmt* pFmt = GetFrmFmt(); + if(pFmt) + { + SwDoc* pDoc = pFmt->GetDoc(); + const SwFmtCntnt* pCnt = &pFmt->GetCntnt(); + DBG_ASSERT( pCnt->GetCntntIdx() && + pDoc->GetNodes()[ pCnt->GetCntntIdx()-> + GetIndex() + 1 ]->GetOLENode(), "kein OLE-Node?"); + + return pDoc->GetNodes()[ pCnt->GetCntntIdx()->GetIndex() + 1 ]->GetOLENode()->GetAspect(); + } + + return embed::Aspects::MSOLE_CONTENT; // return the default value +} + +void SAL_CALL SwXTextEmbeddedObject::setAspect( sal_Int64 nAspect ) throw (uno::RuntimeException) +{ + SwFrmFmt* pFmt = GetFrmFmt(); + if(pFmt) + { + SwDoc* pDoc = pFmt->GetDoc(); + const SwFmtCntnt* pCnt = &pFmt->GetCntnt(); + DBG_ASSERT( pCnt->GetCntntIdx() && + pDoc->GetNodes()[ pCnt->GetCntntIdx()-> + GetIndex() + 1 ]->GetOLENode(), "kein OLE-Node?"); + + pDoc->GetNodes()[ pCnt->GetCntntIdx()->GetIndex() + 1 ]->GetOLENode()->SetAspect( nAspect ); + } +} + +uno::Reference< graphic::XGraphic > SAL_CALL SwXTextEmbeddedObject::getReplacementGraphic() throw (uno::RuntimeException) +{ + SwFrmFmt* pFmt = GetFrmFmt(); + if(pFmt) + { + SwDoc* pDoc = pFmt->GetDoc(); + const SwFmtCntnt* pCnt = &pFmt->GetCntnt(); + DBG_ASSERT( pCnt->GetCntntIdx() && + pDoc->GetNodes()[ pCnt->GetCntntIdx()-> + GetIndex() + 1 ]->GetOLENode(), "kein OLE-Node?"); + + Graphic* pGraphic = pDoc->GetNodes()[ pCnt->GetCntntIdx()->GetIndex() + 1 ]->GetOLENode()->GetGraphic(); + if ( pGraphic ) + return pGraphic->GetXGraphic(); + } + + return uno::Reference< graphic::XGraphic >(); +} + +/* -----------------03.05.99 12:28------------------- + * + * --------------------------------------------------*/ +OUString SwXTextEmbeddedObject::getImplementationName(void) throw( uno::RuntimeException ) + +{ + return C2U("SwXTextEmbeddedObject"); +} +/* -----------------03.05.99 12:28------------------- + * + * --------------------------------------------------*/ +sal_Bool SwXTextEmbeddedObject::supportsService(const OUString& rServiceName) throw( uno::RuntimeException ) +{ + return COMPARE_EQUAL == rServiceName.compareToAscii("com.sun.star.text.TextEmbeddedObject")|| + SwXFrame::supportsService(rServiceName); +} +/* -----------------03.05.99 12:28------------------- + * + * --------------------------------------------------*/ +uno::Sequence< OUString > SwXTextEmbeddedObject::getSupportedServiceNames(void) + throw( uno::RuntimeException ) +{ + uno::Sequence < OUString > aRet = SwXFrame::getSupportedServiceNames(); + aRet.realloc(aRet.getLength() + 1); + OUString* pArray = aRet.getArray(); + pArray[aRet.getLength() - 1] = C2U("com.sun.star.text.TextEmbeddedObject"); + return aRet; +} +/* -----------------------------20.06.00 10:02-------------------------------- + + ---------------------------------------------------------------------------*/ +void * SAL_CALL SwXTextEmbeddedObject::operator new( size_t t) throw() +{ + return SwXTextEmbeddedObjectBaseClass::operator new(t); +} +/* -----------------------------20.06.00 10:02-------------------------------- + + ---------------------------------------------------------------------------*/ +void SAL_CALL SwXTextEmbeddedObject::operator delete( void * p) throw() +{ + SwXTextEmbeddedObjectBaseClass::operator delete(p); +} +/* -----------------------------15.12.00 12:45-------------------------------- + + ---------------------------------------------------------------------------*/ +uno::Reference<container::XNameReplace> SAL_CALL + SwXTextEmbeddedObject::getEvents() + throw(uno::RuntimeException) +{ + return new SwFrameEventDescriptor( *this ); +} + + +/****************************************************************** + * + ******************************************************************/ +TYPEINIT1(SwXOLEListener, SwClient); +/* -----------------------------18.01.2002 09:59------------------------------ + + ---------------------------------------------------------------------------*/ +SwXOLEListener::SwXOLEListener( SwFmt& rOLEFmt, uno::Reference< XModel > xOLE) : + SwClient(&rOLEFmt), + xOLEModel(xOLE) +{ +} +/* -----------------------------18.01.2002 09:59------------------------------ + + ---------------------------------------------------------------------------*/ +SwXOLEListener::~SwXOLEListener() +{} + +void SwXOLEListener::modified( const lang::EventObject& /*rEvent*/ ) + throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + + SwOLENode* pNd = 0; + SwFmt* pFmt = GetFmt(); + if(pFmt) + {const SwNodeIndex* pIdx = pFmt->GetCntnt().GetCntntIdx(); + if(pIdx) + { + SwNodeIndex aIdx(*pIdx, 1); + SwNoTxtNode* pNoTxt = aIdx.GetNode().GetNoTxtNode(); + pNd = pNoTxt->GetOLENode(); + } + } + if(!pNd) + throw uno::RuntimeException(); + + uno::Reference < embed::XEmbeddedObject > xIP = pNd->GetOLEObj().GetOleRef(); + if ( xIP.is() ) + { + sal_Int32 nState = xIP->getCurrentState(); + if ( nState == embed::EmbedStates::INPLACE_ACTIVE || nState == embed::EmbedStates::UI_ACTIVE ) + return; + } + + // if the OLE-Node is UI-Active do nothing + pNd->SetOLESizeInvalid( sal_True ); + pNd->GetDoc()->SetOLEObjModified(); +} + +/* --------------------------------------------------------------------------- + + ---------------------------------------------------------------------------*/ +void SwXOLEListener::disposing( const lang::EventObject& rEvent ) + throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + + uno::Reference< util::XModifyListener > xListener( this ); + + + uno::Reference< frame::XModel > xModel( rEvent.Source, uno::UNO_QUERY ); + uno::Reference< util::XModifyBroadcaster > xBrdcst(xModel, uno::UNO_QUERY); + + try + { + if( xBrdcst.is() ) + xBrdcst->removeModifyListener( xListener ); + } + catch(uno::Exception const &) + { + DBG_ERROR("OLE Listener couldn't be removed"); + } +} +/* --------------------------------------------------------------------------- + + ---------------------------------------------------------------------------*/ +void SwXOLEListener::Modify( SfxPoolItem* pOld, SfxPoolItem* pNew ) +{ + ClientModify(this, pOld, pNew); + if(!GetRegisteredIn()) + xOLEModel = 0; +} + |