1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_svx.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include <unotools/ucbstreamhelper.hxx> 32*cdf0e10cSrcweir #include <unotools/localfilehelper.hxx> 33*cdf0e10cSrcweir #include <ucbhelper/content.hxx> 34*cdf0e10cSrcweir #include <ucbhelper/contentbroker.hxx> 35*cdf0e10cSrcweir #include <unotools/datetime.hxx> 36*cdf0e10cSrcweir #include <svx/svdotext.hxx> 37*cdf0e10cSrcweir #include "svx/svditext.hxx" 38*cdf0e10cSrcweir #include <svx/svdmodel.hxx> 39*cdf0e10cSrcweir #include <editeng/editdata.hxx> 40*cdf0e10cSrcweir #include <sfx2/lnkbase.hxx> 41*cdf0e10cSrcweir #include <sfx2/linkmgr.hxx> 42*cdf0e10cSrcweir #include <tools/urlobj.hxx> 43*cdf0e10cSrcweir #include <svl/urihelper.hxx> 44*cdf0e10cSrcweir 45*cdf0e10cSrcweir // #90477# 46*cdf0e10cSrcweir #include <tools/tenccvt.hxx> 47*cdf0e10cSrcweir 48*cdf0e10cSrcweir #ifndef SVX_LIGHT 49*cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////// 50*cdf0e10cSrcweir // 51*cdf0e10cSrcweir // @@@@ @@@@@ @@@@@@ @@@@@@ @@@@@@ @@ @@ @@@@@@ @@ @@ @@ @@ @@ @@ 52*cdf0e10cSrcweir // @@ @@ @@ @@ @@ @@ @@ @@@@ @@ @@ @@ @@@ @@ @@ @@ 53*cdf0e10cSrcweir // @@ @@ @@@@@ @@ @@ @@@@@ @@ @@ @@ @@ @@@@@@ @@@@ 54*cdf0e10cSrcweir // @@ @@ @@ @@ @@ @@ @@ @@ @@@@ @@ @@ @@ @@ @@@ @@ @@ 55*cdf0e10cSrcweir // @@@@ @@@@@ @@@@ @@ @@@@@@ @@ @@ @@ @@@@@ @@ @@ @@ @@ @@ 56*cdf0e10cSrcweir // 57*cdf0e10cSrcweir // ImpSdrObjTextLink zur Verbindung von SdrTextObj und LinkManager 58*cdf0e10cSrcweir // 59*cdf0e10cSrcweir // Einem solchen Link merke ich mir als SdrObjUserData am Objekt. Im Gegensatz 60*cdf0e10cSrcweir // zum Grafik-Link werden die ObjektDaten jedoch kopiert (fuer Paint, etc.). 61*cdf0e10cSrcweir // Die Information ob das Objekt ein Link ist besteht genau darin, dass dem 62*cdf0e10cSrcweir // Objekt ein entsprechender UserData-Record angehaengt ist oder nicht. 63*cdf0e10cSrcweir // 64*cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////// 65*cdf0e10cSrcweir 66*cdf0e10cSrcweir class ImpSdrObjTextLink: public ::sfx2::SvBaseLink 67*cdf0e10cSrcweir { 68*cdf0e10cSrcweir SdrTextObj* pSdrObj; 69*cdf0e10cSrcweir 70*cdf0e10cSrcweir public: 71*cdf0e10cSrcweir ImpSdrObjTextLink( SdrTextObj* pObj1 ) 72*cdf0e10cSrcweir : ::sfx2::SvBaseLink( ::sfx2::LINKUPDATE_ONCALL, FORMAT_FILE ), 73*cdf0e10cSrcweir pSdrObj( pObj1 ) 74*cdf0e10cSrcweir {} 75*cdf0e10cSrcweir virtual ~ImpSdrObjTextLink(); 76*cdf0e10cSrcweir 77*cdf0e10cSrcweir virtual void Closed(); 78*cdf0e10cSrcweir virtual void DataChanged( const String& rMimeType, 79*cdf0e10cSrcweir const ::com::sun::star::uno::Any & rValue ); 80*cdf0e10cSrcweir 81*cdf0e10cSrcweir sal_Bool Connect() { return 0 != SvBaseLink::GetRealObject(); } 82*cdf0e10cSrcweir }; 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir ImpSdrObjTextLink::~ImpSdrObjTextLink() 85*cdf0e10cSrcweir { 86*cdf0e10cSrcweir } 87*cdf0e10cSrcweir 88*cdf0e10cSrcweir void ImpSdrObjTextLink::Closed() 89*cdf0e10cSrcweir { 90*cdf0e10cSrcweir if (pSdrObj ) 91*cdf0e10cSrcweir { 92*cdf0e10cSrcweir // pLink des Objekts auf NULL setzen, da die Link-Instanz ja gerade destruiert wird. 93*cdf0e10cSrcweir ImpSdrObjTextLinkUserData* pData=pSdrObj->GetLinkUserData(); 94*cdf0e10cSrcweir if (pData!=NULL) pData->pLink=NULL; 95*cdf0e10cSrcweir pSdrObj->ReleaseTextLink(); 96*cdf0e10cSrcweir } 97*cdf0e10cSrcweir SvBaseLink::Closed(); 98*cdf0e10cSrcweir } 99*cdf0e10cSrcweir 100*cdf0e10cSrcweir 101*cdf0e10cSrcweir void ImpSdrObjTextLink::DataChanged( const String& /*rMimeType*/, 102*cdf0e10cSrcweir const ::com::sun::star::uno::Any & /*rValue */) 103*cdf0e10cSrcweir { 104*cdf0e10cSrcweir FASTBOOL bForceReload=sal_False; 105*cdf0e10cSrcweir SdrModel* pModel = pSdrObj ? pSdrObj->GetModel() : 0; 106*cdf0e10cSrcweir sfx2::LinkManager* pLinkManager= pModel ? pModel->GetLinkManager() : 0; 107*cdf0e10cSrcweir if( pLinkManager ) 108*cdf0e10cSrcweir { 109*cdf0e10cSrcweir ImpSdrObjTextLinkUserData* pData=pSdrObj->GetLinkUserData(); 110*cdf0e10cSrcweir if( pData ) 111*cdf0e10cSrcweir { 112*cdf0e10cSrcweir String aFile; 113*cdf0e10cSrcweir String aFilter; 114*cdf0e10cSrcweir pLinkManager->GetDisplayNames( this, 0,&aFile, 0, &aFilter ); 115*cdf0e10cSrcweir 116*cdf0e10cSrcweir if( !pData->aFileName.Equals( aFile ) || 117*cdf0e10cSrcweir !pData->aFilterName.Equals( aFilter )) 118*cdf0e10cSrcweir { 119*cdf0e10cSrcweir pData->aFileName = aFile; 120*cdf0e10cSrcweir pData->aFilterName = aFilter; 121*cdf0e10cSrcweir pSdrObj->SetChanged(); 122*cdf0e10cSrcweir bForceReload = sal_True; 123*cdf0e10cSrcweir } 124*cdf0e10cSrcweir } 125*cdf0e10cSrcweir } 126*cdf0e10cSrcweir if (pSdrObj ) 127*cdf0e10cSrcweir pSdrObj->ReloadLinkedText( bForceReload ); 128*cdf0e10cSrcweir } 129*cdf0e10cSrcweir #endif // SVX_LIGHT 130*cdf0e10cSrcweir 131*cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////// 132*cdf0e10cSrcweir // 133*cdf0e10cSrcweir // @@ @@ @@ @@ @@ @@ @@ @@ @@@@@ @@@@@@ @@@@@ @@@@@ @@@@ @@@@@@ @@@@ 134*cdf0e10cSrcweir // @@ @@ @@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ 135*cdf0e10cSrcweir // @@ @@ @@@@@@ @@@@ @@ @@ @@@@ @@@@@ @@@@@ @@ @@ @@@@@@ @@ @@@@@@ 136*cdf0e10cSrcweir // @@ @@ @@ @@@ @@@@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ 137*cdf0e10cSrcweir // @@@@@ @@ @@ @@ @@ @@ @@@@ @@@@@ @@@@@@ @@ @@ @@@@@ @@ @@ @@ @@ @@ 138*cdf0e10cSrcweir // 139*cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////// 140*cdf0e10cSrcweir 141*cdf0e10cSrcweir TYPEINIT1(ImpSdrObjTextLinkUserData,SdrObjUserData); 142*cdf0e10cSrcweir 143*cdf0e10cSrcweir ImpSdrObjTextLinkUserData::ImpSdrObjTextLinkUserData(SdrTextObj* pObj1): 144*cdf0e10cSrcweir SdrObjUserData(SdrInventor,SDRUSERDATA_OBJTEXTLINK,0), 145*cdf0e10cSrcweir pObj(pObj1), 146*cdf0e10cSrcweir pLink(NULL), 147*cdf0e10cSrcweir eCharSet(RTL_TEXTENCODING_DONTKNOW) 148*cdf0e10cSrcweir { 149*cdf0e10cSrcweir } 150*cdf0e10cSrcweir 151*cdf0e10cSrcweir ImpSdrObjTextLinkUserData::~ImpSdrObjTextLinkUserData() 152*cdf0e10cSrcweir { 153*cdf0e10cSrcweir #ifndef SVX_LIGHT 154*cdf0e10cSrcweir delete pLink; 155*cdf0e10cSrcweir #endif 156*cdf0e10cSrcweir } 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir SdrObjUserData* ImpSdrObjTextLinkUserData::Clone(SdrObject* pObj1) const 159*cdf0e10cSrcweir { 160*cdf0e10cSrcweir ImpSdrObjTextLinkUserData* pData=new ImpSdrObjTextLinkUserData((SdrTextObj*)pObj1); 161*cdf0e10cSrcweir pData->aFileName =aFileName; 162*cdf0e10cSrcweir pData->aFilterName=aFilterName; 163*cdf0e10cSrcweir pData->aFileDate0 =aFileDate0; 164*cdf0e10cSrcweir pData->eCharSet =eCharSet; 165*cdf0e10cSrcweir pData->pLink=NULL; 166*cdf0e10cSrcweir return pData; 167*cdf0e10cSrcweir } 168*cdf0e10cSrcweir 169*cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////// 170*cdf0e10cSrcweir // 171*cdf0e10cSrcweir // @@@@@@ @@@@@ @@ @@ @@@@@@ @@@@ @@@@@ @@@@@@ 172*cdf0e10cSrcweir // @@ @@ @@@ @@@ @@ @@ @@ @@ @@ @@ 173*cdf0e10cSrcweir // @@ @@ @@@@@ @@ @@ @@ @@ @@ @@ 174*cdf0e10cSrcweir // @@ @@@@ @@@ @@ @@ @@ @@@@@ @@ 175*cdf0e10cSrcweir // @@ @@ @@@@@ @@ @@ @@ @@ @@ @@ 176*cdf0e10cSrcweir // @@ @@ @@@ @@@ @@ @@ @@ @@ @@ @@ @@ 177*cdf0e10cSrcweir // @@ @@@@@ @@ @@ @@ @@@@ @@@@@ @@@@ 178*cdf0e10cSrcweir // 179*cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////// 180*cdf0e10cSrcweir 181*cdf0e10cSrcweir void SdrTextObj::SetTextLink(const String& rFileName, const String& rFilterName, rtl_TextEncoding eCharSet) 182*cdf0e10cSrcweir { 183*cdf0e10cSrcweir if(eCharSet == RTL_TEXTENCODING_DONTKNOW) 184*cdf0e10cSrcweir eCharSet = gsl_getSystemTextEncoding(); 185*cdf0e10cSrcweir 186*cdf0e10cSrcweir ImpSdrObjTextLinkUserData* pData=GetLinkUserData(); 187*cdf0e10cSrcweir if (pData!=NULL) { 188*cdf0e10cSrcweir ReleaseTextLink(); 189*cdf0e10cSrcweir } 190*cdf0e10cSrcweir pData=new ImpSdrObjTextLinkUserData(this); 191*cdf0e10cSrcweir pData->aFileName=rFileName; 192*cdf0e10cSrcweir pData->aFilterName=rFilterName; 193*cdf0e10cSrcweir pData->eCharSet=eCharSet; 194*cdf0e10cSrcweir InsertUserData(pData); 195*cdf0e10cSrcweir ImpLinkAnmeldung(); 196*cdf0e10cSrcweir } 197*cdf0e10cSrcweir 198*cdf0e10cSrcweir void SdrTextObj::ReleaseTextLink() 199*cdf0e10cSrcweir { 200*cdf0e10cSrcweir ImpLinkAbmeldung(); 201*cdf0e10cSrcweir sal_uInt16 nAnz=GetUserDataCount(); 202*cdf0e10cSrcweir for (sal_uInt16 nNum=nAnz; nNum>0;) { 203*cdf0e10cSrcweir nNum--; 204*cdf0e10cSrcweir SdrObjUserData* pData=GetUserData(nNum); 205*cdf0e10cSrcweir if (pData->GetInventor()==SdrInventor && pData->GetId()==SDRUSERDATA_OBJTEXTLINK) { 206*cdf0e10cSrcweir DeleteUserData(nNum); 207*cdf0e10cSrcweir } 208*cdf0e10cSrcweir } 209*cdf0e10cSrcweir } 210*cdf0e10cSrcweir 211*cdf0e10cSrcweir FASTBOOL SdrTextObj::ReloadLinkedText( FASTBOOL bForceLoad) 212*cdf0e10cSrcweir { 213*cdf0e10cSrcweir ImpSdrObjTextLinkUserData* pData = GetLinkUserData(); 214*cdf0e10cSrcweir FASTBOOL bRet = sal_True; 215*cdf0e10cSrcweir 216*cdf0e10cSrcweir if( pData ) 217*cdf0e10cSrcweir { 218*cdf0e10cSrcweir ::ucbhelper::ContentBroker* pBroker = ::ucbhelper::ContentBroker::get(); 219*cdf0e10cSrcweir DateTime aFileDT; 220*cdf0e10cSrcweir sal_Bool bExists = sal_False, bLoad = sal_False; 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir if( pBroker ) 223*cdf0e10cSrcweir { 224*cdf0e10cSrcweir bExists = sal_True; 225*cdf0e10cSrcweir 226*cdf0e10cSrcweir try 227*cdf0e10cSrcweir { 228*cdf0e10cSrcweir INetURLObject aURL( pData->aFileName ); 229*cdf0e10cSrcweir DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" ); 230*cdf0e10cSrcweir 231*cdf0e10cSrcweir ::ucbhelper::Content aCnt( aURL.GetMainURL( INetURLObject::NO_DECODE ), ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XCommandEnvironment >() ); 232*cdf0e10cSrcweir ::com::sun::star::uno::Any aAny( aCnt.getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DateModified" ) ) ) ); 233*cdf0e10cSrcweir ::com::sun::star::util::DateTime aDateTime; 234*cdf0e10cSrcweir 235*cdf0e10cSrcweir aAny >>= aDateTime; 236*cdf0e10cSrcweir ::utl::typeConvert( aDateTime, aFileDT ); 237*cdf0e10cSrcweir } 238*cdf0e10cSrcweir catch( ... ) 239*cdf0e10cSrcweir { 240*cdf0e10cSrcweir bExists = sal_False; 241*cdf0e10cSrcweir } 242*cdf0e10cSrcweir } 243*cdf0e10cSrcweir 244*cdf0e10cSrcweir if( bExists ) 245*cdf0e10cSrcweir { 246*cdf0e10cSrcweir if( bForceLoad ) 247*cdf0e10cSrcweir bLoad = sal_True; 248*cdf0e10cSrcweir else 249*cdf0e10cSrcweir bLoad = ( aFileDT > pData->aFileDate0 ); 250*cdf0e10cSrcweir 251*cdf0e10cSrcweir if( bLoad ) 252*cdf0e10cSrcweir { 253*cdf0e10cSrcweir bRet = LoadText( pData->aFileName, pData->aFilterName, pData->eCharSet ); 254*cdf0e10cSrcweir } 255*cdf0e10cSrcweir 256*cdf0e10cSrcweir pData->aFileDate0 = aFileDT; 257*cdf0e10cSrcweir } 258*cdf0e10cSrcweir } 259*cdf0e10cSrcweir 260*cdf0e10cSrcweir return bRet; 261*cdf0e10cSrcweir } 262*cdf0e10cSrcweir 263*cdf0e10cSrcweir FASTBOOL SdrTextObj::LoadText(const String& rFileName, const String& /*rFilterName*/, rtl_TextEncoding eCharSet) 264*cdf0e10cSrcweir { 265*cdf0e10cSrcweir INetURLObject aFileURL( rFileName ); 266*cdf0e10cSrcweir sal_Bool bRet = sal_False; 267*cdf0e10cSrcweir 268*cdf0e10cSrcweir if( aFileURL.GetProtocol() == INET_PROT_NOT_VALID ) 269*cdf0e10cSrcweir { 270*cdf0e10cSrcweir String aFileURLStr; 271*cdf0e10cSrcweir 272*cdf0e10cSrcweir if( ::utl::LocalFileHelper::ConvertPhysicalNameToURL( rFileName, aFileURLStr ) ) 273*cdf0e10cSrcweir aFileURL = INetURLObject( aFileURLStr ); 274*cdf0e10cSrcweir else 275*cdf0e10cSrcweir aFileURL.SetSmartURL( rFileName ); 276*cdf0e10cSrcweir } 277*cdf0e10cSrcweir 278*cdf0e10cSrcweir DBG_ASSERT( aFileURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" ); 279*cdf0e10cSrcweir 280*cdf0e10cSrcweir SvStream* pIStm = ::utl::UcbStreamHelper::CreateStream( aFileURL.GetMainURL( INetURLObject::NO_DECODE ), STREAM_READ ); 281*cdf0e10cSrcweir 282*cdf0e10cSrcweir if( pIStm ) 283*cdf0e10cSrcweir { 284*cdf0e10cSrcweir // #90477# pIStm->SetStreamCharSet( eCharSet ); 285*cdf0e10cSrcweir pIStm->SetStreamCharSet(GetSOLoadTextEncoding(eCharSet, (sal_uInt16)pIStm->GetVersion())); 286*cdf0e10cSrcweir 287*cdf0e10cSrcweir char cRTF[5]; 288*cdf0e10cSrcweir cRTF[4] = 0; 289*cdf0e10cSrcweir pIStm->Read(cRTF, 5); 290*cdf0e10cSrcweir 291*cdf0e10cSrcweir sal_Bool bRTF = cRTF[0] == '{' && cRTF[1] == '\\' && cRTF[2] == 'r' && cRTF[3] == 't' && cRTF[4] == 'f'; 292*cdf0e10cSrcweir 293*cdf0e10cSrcweir pIStm->Seek(0); 294*cdf0e10cSrcweir 295*cdf0e10cSrcweir if( !pIStm->GetError() ) 296*cdf0e10cSrcweir { 297*cdf0e10cSrcweir SetText( *pIStm, aFileURL.GetMainURL( INetURLObject::NO_DECODE ), sal::static_int_cast< sal_uInt16 >( bRTF ? EE_FORMAT_RTF : EE_FORMAT_TEXT ) ); 298*cdf0e10cSrcweir bRet = sal_True; 299*cdf0e10cSrcweir } 300*cdf0e10cSrcweir 301*cdf0e10cSrcweir delete pIStm; 302*cdf0e10cSrcweir } 303*cdf0e10cSrcweir 304*cdf0e10cSrcweir return bRet; 305*cdf0e10cSrcweir } 306*cdf0e10cSrcweir 307*cdf0e10cSrcweir ImpSdrObjTextLinkUserData* SdrTextObj::GetLinkUserData() const 308*cdf0e10cSrcweir { 309*cdf0e10cSrcweir ImpSdrObjTextLinkUserData* pData=NULL; 310*cdf0e10cSrcweir sal_uInt16 nAnz=GetUserDataCount(); 311*cdf0e10cSrcweir for (sal_uInt16 nNum=nAnz; nNum>0 && pData==NULL;) { 312*cdf0e10cSrcweir nNum--; 313*cdf0e10cSrcweir pData=(ImpSdrObjTextLinkUserData*)GetUserData(nNum); 314*cdf0e10cSrcweir if (pData->GetInventor()!=SdrInventor || pData->GetId()!=SDRUSERDATA_OBJTEXTLINK) { 315*cdf0e10cSrcweir pData=NULL; 316*cdf0e10cSrcweir } 317*cdf0e10cSrcweir } 318*cdf0e10cSrcweir return pData; 319*cdf0e10cSrcweir } 320*cdf0e10cSrcweir 321*cdf0e10cSrcweir void SdrTextObj::ImpLinkAnmeldung() 322*cdf0e10cSrcweir { 323*cdf0e10cSrcweir ImpSdrObjTextLinkUserData* pData=GetLinkUserData(); 324*cdf0e10cSrcweir sfx2::LinkManager* pLinkManager=pModel!=NULL ? pModel->GetLinkManager() : NULL; 325*cdf0e10cSrcweir if (pLinkManager!=NULL && pData!=NULL && pData->pLink==NULL) { // Nicht 2x Anmelden 326*cdf0e10cSrcweir pData->pLink=new ImpSdrObjTextLink(this); 327*cdf0e10cSrcweir #ifdef GCC 328*cdf0e10cSrcweir pLinkManager->InsertFileLink(*pData->pLink,OBJECT_CLIENT_FILE,pData->aFileName, 329*cdf0e10cSrcweir pData->aFilterName.Len() ? 330*cdf0e10cSrcweir &pData->aFilterName : (const String *)NULL, 331*cdf0e10cSrcweir (const String *)NULL); 332*cdf0e10cSrcweir #else 333*cdf0e10cSrcweir pLinkManager->InsertFileLink(*pData->pLink,OBJECT_CLIENT_FILE,pData->aFileName, 334*cdf0e10cSrcweir pData->aFilterName.Len() ? &pData->aFilterName : NULL,NULL); 335*cdf0e10cSrcweir #endif 336*cdf0e10cSrcweir pData->pLink->Connect(); 337*cdf0e10cSrcweir } 338*cdf0e10cSrcweir } 339*cdf0e10cSrcweir 340*cdf0e10cSrcweir void SdrTextObj::ImpLinkAbmeldung() 341*cdf0e10cSrcweir { 342*cdf0e10cSrcweir ImpSdrObjTextLinkUserData* pData=GetLinkUserData(); 343*cdf0e10cSrcweir sfx2::LinkManager* pLinkManager=pModel!=NULL ? pModel->GetLinkManager() : NULL; 344*cdf0e10cSrcweir if (pLinkManager!=NULL && pData!=NULL && pData->pLink!=NULL) { // Nicht 2x Abmelden 345*cdf0e10cSrcweir // Bei Remove wird *pLink implizit deleted 346*cdf0e10cSrcweir pLinkManager->Remove( pData->pLink ); 347*cdf0e10cSrcweir pData->pLink=NULL; 348*cdf0e10cSrcweir } 349*cdf0e10cSrcweir } 350*cdf0e10cSrcweir 351