#96512# SwXShape::attach implemented

This commit is contained in:
Thomas Lange
2002-02-04 13:24:39 +00:00
parent 5370903a27
commit 78b99f358b

View File

@@ -2,9 +2,9 @@
*
* $RCSfile: unodraw.cxx,v $
*
* $Revision: 1.34 $
* $Revision: 1.35 $
*
* last change: $Author: os $ $Date: 2001-12-20 09:50:38 $
* last change: $Author: tl $ $Date: 2002-02-04 14:24:39 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -90,9 +90,18 @@
#ifndef _DOC_HXX //autogen
#include <doc.hxx>
#endif
#ifndef _SWDOCSH_HXX
#include <docsh.hxx>
#endif
#ifndef _UNOMAP_HXX
#include <unomap.hxx>
#endif
#ifndef _UNOPORT_HXX
#include <unoport.hxx>
#endif
#ifndef _UNOCRSR_HXX
#include <unocrsr.hxx>
#endif
#ifndef _SWUNDO_HXX //autogen
#include <swundo.hxx>
#endif
@@ -151,6 +160,10 @@
#ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HPPP_
#include <com/sun/star/beans/PropertyAttribute.hpp>
#endif
#ifndef _COM_SUN_STAR_DRAWING_XDRAWPAGESUPPLIER_HPP_
#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
#endif
using namespace ::com::sun::star;
using namespace ::com::sun::star::container;
@@ -1474,7 +1487,57 @@ void SwXShape::Modify( SfxPoolItem *pOld, SfxPoolItem *pNew)
void SwXShape::attach(const Reference< XTextRange > & xTextRange)
throw( IllegalArgumentException, RuntimeException )
{
//hier passiert nichts
vos::OGuard aGuard(Application::GetSolarMutex());
// get access to SwDoc
// (see also SwXTextRange::XTextRangeToSwPaM)
SwDoc* pDoc = 0;
uno::Reference<lang::XUnoTunnel> xRangeTunnel( xTextRange, uno::UNO_QUERY);
if(xRangeTunnel.is())
{
SwXTextRange* pRange = 0;
SwXTextCursor* pCursor = 0;
SwXTextPortion* pPortion = 0;
SwXText* pText = 0;
pRange = (SwXTextRange*)xRangeTunnel->getSomething(
SwXTextRange::getUnoTunnelId());
pText = (SwXText*)xRangeTunnel->getSomething(
SwXText::getUnoTunnelId());
pCursor = (SwXTextCursor*)xRangeTunnel->getSomething(
SwXTextCursor::getUnoTunnelId());
pPortion = (SwXTextPortion*)xRangeTunnel->getSomething(
SwXTextPortion::getUnoTunnelId());
SwUnoCrsr* pUnoCrsr = pCursor? pCursor->GetCrsr() : pPortion ? pPortion->GetCrsr() : 0;
if (pRange)
pDoc = pRange->GetDoc();
if (!pDoc && pText)
pDoc = pText->GetDoc();
if (!pDoc && pUnoCrsr)
pDoc = pUnoCrsr->GetDoc();
}
if(!pDoc)
throw uno::RuntimeException();
SwDocShell *pDocSh = pDoc->GetDocShell();
if (pDocSh)
{
uno::Reference< frame::XModel > xModel;
xModel = pDocSh->GetModel();
uno::Reference< drawing::XDrawPageSupplier > xDPS(xModel, UNO_QUERY);
if (xDPS.is())
{
uno::Reference< drawing::XDrawPage > xDP( xDPS->getDrawPage() );
if (xDP.is())
{
Any aPos; aPos <<= xTextRange;
setPropertyValue(S2U("TextRange"), aPos);
Reference< drawing::XShape > xTemp( (cppu::OWeakObject*) this, UNO_QUERY );
xDP->add( xTemp );
}
}
}
}
/* -----------------14.04.99 13:02-------------------
*