1*efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*efeef26fSAndrew Rist * distributed with this work for additional information
6*efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*efeef26fSAndrew Rist * "License"); you may not use this file except in compliance
9*efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11*efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13*efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*efeef26fSAndrew Rist * software distributed under the License is distributed on an
15*efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*efeef26fSAndrew Rist * KIND, either express or implied. See the License for the
17*efeef26fSAndrew Rist * specific language governing permissions and limitations
18*efeef26fSAndrew Rist * under the License.
19cdf0e10cSrcweir *
20*efeef26fSAndrew Rist *************************************************************/
21*efeef26fSAndrew Rist
22*efeef26fSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir
28cdf0e10cSrcweir #include <sfx2/linkmgr.hxx>
29cdf0e10cSrcweir #include <doc.hxx>
30cdf0e10cSrcweir #include <editsh.hxx>
31cdf0e10cSrcweir #include <errhdl.hxx>
32cdf0e10cSrcweir #include <ndtxt.hxx>
33cdf0e10cSrcweir #include <fmtfld.hxx>
34cdf0e10cSrcweir #include <txtfld.hxx>
35cdf0e10cSrcweir #include <ddefld.hxx>
36cdf0e10cSrcweir #include <swtable.hxx>
37cdf0e10cSrcweir #include <swbaslnk.hxx>
38cdf0e10cSrcweir #include <swddetbl.hxx>
39cdf0e10cSrcweir #include <unofldmid.h>
40cdf0e10cSrcweir #include <hints.hxx>
41cdf0e10cSrcweir
42cdf0e10cSrcweir using rtl::OUString;
43cdf0e10cSrcweir using namespace ::com::sun::star;
44cdf0e10cSrcweir
45cdf0e10cSrcweir #define DDE_TXT_ENCODING gsl_getSystemTextEncoding()
46cdf0e10cSrcweir
47cdf0e10cSrcweir /*--------------------------------------------------------------------
48cdf0e10cSrcweir Beschreibung: Globale Variablen
49cdf0e10cSrcweir --------------------------------------------------------------------*/
50cdf0e10cSrcweir
51cdf0e10cSrcweir class SwIntrnlRefLink : public SwBaseLink
52cdf0e10cSrcweir {
53cdf0e10cSrcweir SwDDEFieldType& rFldType;
54cdf0e10cSrcweir public:
SwIntrnlRefLink(SwDDEFieldType & rType,sal_uInt16 nUpdateType,sal_uInt16 nFmt)55cdf0e10cSrcweir SwIntrnlRefLink( SwDDEFieldType& rType, sal_uInt16 nUpdateType, sal_uInt16 nFmt )
56cdf0e10cSrcweir : SwBaseLink( nUpdateType, nFmt ),
57cdf0e10cSrcweir rFldType( rType )
58cdf0e10cSrcweir {}
59cdf0e10cSrcweir
60cdf0e10cSrcweir virtual void Closed();
61cdf0e10cSrcweir virtual void DataChanged( const String& rMimeType,
62cdf0e10cSrcweir const uno::Any & rValue );
63cdf0e10cSrcweir
64cdf0e10cSrcweir virtual const SwNode* GetAnchor() const;
65cdf0e10cSrcweir virtual sal_Bool IsInRange( sal_uLong nSttNd, sal_uLong nEndNd, xub_StrLen nStt = 0,
66cdf0e10cSrcweir xub_StrLen nEnd = STRING_NOTFOUND ) const;
67cdf0e10cSrcweir };
68cdf0e10cSrcweir
69cdf0e10cSrcweir
DataChanged(const String & rMimeType,const uno::Any & rValue)70cdf0e10cSrcweir void SwIntrnlRefLink::DataChanged( const String& rMimeType,
71cdf0e10cSrcweir const uno::Any & rValue )
72cdf0e10cSrcweir {
73cdf0e10cSrcweir switch( SotExchange::GetFormatIdFromMimeType( rMimeType ) )
74cdf0e10cSrcweir {
75cdf0e10cSrcweir case FORMAT_STRING:
76cdf0e10cSrcweir if( !IsNoDataFlag() )
77cdf0e10cSrcweir {
78cdf0e10cSrcweir uno::Sequence< sal_Int8 > aSeq;
79cdf0e10cSrcweir rValue >>= aSeq;
80cdf0e10cSrcweir String sStr( (sal_Char*)aSeq.getConstArray(), static_cast<xub_StrLen>(aSeq.getLength()),
81cdf0e10cSrcweir DDE_TXT_ENCODING );
82cdf0e10cSrcweir
83cdf0e10cSrcweir // CR-LF am Ende entfernen, ist ueberfluessig!
84cdf0e10cSrcweir xub_StrLen n = sStr.Len();
85cdf0e10cSrcweir while( n && 0 == sStr.GetChar( n-1 ) )
86cdf0e10cSrcweir --n;
87cdf0e10cSrcweir if( n && 0x0a == sStr.GetChar( n-1 ) )
88cdf0e10cSrcweir --n;
89cdf0e10cSrcweir if( n && 0x0d == sStr.GetChar( n-1 ) )
90cdf0e10cSrcweir --n;
91cdf0e10cSrcweir
92cdf0e10cSrcweir sal_Bool bDel = n != sStr.Len();
93cdf0e10cSrcweir if( bDel )
94cdf0e10cSrcweir sStr.Erase( n );
95cdf0e10cSrcweir
96cdf0e10cSrcweir rFldType.SetExpansion( sStr );
97cdf0e10cSrcweir // erst Expansion setzen! (sonst wird das Flag geloescht!)
98cdf0e10cSrcweir rFldType.SetCRLFDelFlag( bDel );
99cdf0e10cSrcweir }
100cdf0e10cSrcweir break;
101cdf0e10cSrcweir
102cdf0e10cSrcweir // weitere Formate ...
103cdf0e10cSrcweir default:
104cdf0e10cSrcweir return;
105cdf0e10cSrcweir }
106cdf0e10cSrcweir
107cdf0e10cSrcweir ASSERT( rFldType.GetDoc(), "Kein pDoc" );
108cdf0e10cSrcweir
109cdf0e10cSrcweir // keine Abhaengigen mehr?
110cdf0e10cSrcweir if( rFldType.GetDepends() && !rFldType.IsModifyLocked() && !ChkNoDataFlag() )
111cdf0e10cSrcweir {
112cdf0e10cSrcweir ViewShell* pSh;
113cdf0e10cSrcweir SwEditShell* pESh = rFldType.GetDoc()->GetEditShell( &pSh );
114cdf0e10cSrcweir
115cdf0e10cSrcweir // dann suchen wir uns mal alle Felder. Wird kein gueltiges
116cdf0e10cSrcweir // gefunden, dann Disconnecten wir uns!
117cdf0e10cSrcweir SwMsgPoolItem aUpdateDDE( RES_UPDATEDDETBL );
118cdf0e10cSrcweir int bCallModify = sal_False;
119cdf0e10cSrcweir rFldType.LockModify();
120cdf0e10cSrcweir
121cdf0e10cSrcweir SwClientIter aIter( rFldType ); // TODO
122cdf0e10cSrcweir SwClient * pLast = aIter.GoStart();
123cdf0e10cSrcweir if( pLast ) // konnte zum Anfang gesprungen werden ??
124cdf0e10cSrcweir do {
125cdf0e10cSrcweir // eine DDE-Tabelle oder ein DDE-FeldAttribut im Text
126cdf0e10cSrcweir if( !pLast->IsA( TYPE( SwFmtFld ) ) ||
127cdf0e10cSrcweir ((SwFmtFld*)pLast)->GetTxtFld() )
128cdf0e10cSrcweir {
129cdf0e10cSrcweir if( !bCallModify )
130cdf0e10cSrcweir {
131cdf0e10cSrcweir if( pESh )
132cdf0e10cSrcweir pESh->StartAllAction();
133cdf0e10cSrcweir else if( pSh )
134cdf0e10cSrcweir pSh->StartAction();
135cdf0e10cSrcweir }
136cdf0e10cSrcweir pLast->ModifyNotification( 0, &aUpdateDDE );
137cdf0e10cSrcweir bCallModify = sal_True;
138cdf0e10cSrcweir }
1392f121198SMathias Bauer } while( 0 != ( pLast = ++aIter ));
140cdf0e10cSrcweir
141cdf0e10cSrcweir rFldType.UnlockModify();
142cdf0e10cSrcweir
143cdf0e10cSrcweir if( bCallModify )
144cdf0e10cSrcweir {
145cdf0e10cSrcweir if( pESh )
146cdf0e10cSrcweir pESh->EndAllAction();
147cdf0e10cSrcweir else if( pSh )
148cdf0e10cSrcweir pSh->EndAction();
149cdf0e10cSrcweir
150cdf0e10cSrcweir if( pSh )
151cdf0e10cSrcweir pSh->GetDoc()->SetModified();
152cdf0e10cSrcweir }
153cdf0e10cSrcweir }
154cdf0e10cSrcweir }
155cdf0e10cSrcweir
Closed()156cdf0e10cSrcweir void SwIntrnlRefLink::Closed()
157cdf0e10cSrcweir {
158cdf0e10cSrcweir if( rFldType.GetDoc() && !rFldType.GetDoc()->IsInDtor() )
159cdf0e10cSrcweir {
160cdf0e10cSrcweir // Advise verabschiedet sich, alle Felder in Text umwandeln ?
161cdf0e10cSrcweir ViewShell* pSh;
162cdf0e10cSrcweir SwEditShell* pESh = rFldType.GetDoc()->GetEditShell( &pSh );
163cdf0e10cSrcweir if( pESh )
164cdf0e10cSrcweir {
165cdf0e10cSrcweir pESh->StartAllAction();
166cdf0e10cSrcweir pESh->FieldToText( &rFldType );
167cdf0e10cSrcweir pESh->EndAllAction();
168cdf0e10cSrcweir }
169cdf0e10cSrcweir else
170cdf0e10cSrcweir {
171cdf0e10cSrcweir pSh->StartAction();
172cdf0e10cSrcweir // am Doc aufrufen ??
173cdf0e10cSrcweir pSh->EndAction();
174cdf0e10cSrcweir }
175cdf0e10cSrcweir }
176cdf0e10cSrcweir SvBaseLink::Closed();
177cdf0e10cSrcweir }
178cdf0e10cSrcweir
GetAnchor() const179cdf0e10cSrcweir const SwNode* SwIntrnlRefLink::GetAnchor() const
180cdf0e10cSrcweir {
181cdf0e10cSrcweir // hier sollte irgend ein Anchor aus dem normalen Nodes-Array reichen
182cdf0e10cSrcweir const SwNode* pNd = 0;
183cdf0e10cSrcweir SwClientIter aIter( rFldType ); // TODO
184cdf0e10cSrcweir SwClient * pLast = aIter.GoStart();
185cdf0e10cSrcweir if( pLast ) // konnte zum Anfang gesprungen werden ??
186cdf0e10cSrcweir do {
187cdf0e10cSrcweir // eine DDE-Tabelle oder ein DDE-FeldAttribut im Text
188cdf0e10cSrcweir if( !pLast->IsA( TYPE( SwFmtFld ) ))
189cdf0e10cSrcweir {
190cdf0e10cSrcweir SwDepend* pDep = (SwDepend*)pLast;
191cdf0e10cSrcweir SwDDETable* pDDETbl = (SwDDETable*)pDep->GetToTell();
192cdf0e10cSrcweir pNd = pDDETbl->GetTabSortBoxes()[0]->GetSttNd();
193cdf0e10cSrcweir }
194cdf0e10cSrcweir else if( ((SwFmtFld*)pLast)->GetTxtFld() )
195cdf0e10cSrcweir pNd = ((SwFmtFld*)pLast)->GetTxtFld()->GetpTxtNode();
196cdf0e10cSrcweir
197cdf0e10cSrcweir if( pNd && &rFldType.GetDoc()->GetNodes() == &pNd->GetNodes() )
198cdf0e10cSrcweir break;
199cdf0e10cSrcweir pNd = 0;
2002f121198SMathias Bauer } while( 0 != ( pLast = ++aIter ));
201cdf0e10cSrcweir
202cdf0e10cSrcweir return pNd;
203cdf0e10cSrcweir }
204cdf0e10cSrcweir
IsInRange(sal_uLong nSttNd,sal_uLong nEndNd,xub_StrLen nStt,xub_StrLen nEnd) const205cdf0e10cSrcweir sal_Bool SwIntrnlRefLink::IsInRange( sal_uLong nSttNd, sal_uLong nEndNd,
206cdf0e10cSrcweir xub_StrLen nStt, xub_StrLen nEnd ) const
207cdf0e10cSrcweir {
208cdf0e10cSrcweir // hier sollte irgend ein Anchor aus dem normalen Nodes-Array reichen
209cdf0e10cSrcweir SwNodes* pNds = &rFldType.GetDoc()->GetNodes();
210cdf0e10cSrcweir SwClientIter aIter( rFldType ); // TODO
211cdf0e10cSrcweir SwClient * pLast = aIter.GoStart();
212cdf0e10cSrcweir if( pLast ) // konnte zum Anfang gesprungen werden ??
213cdf0e10cSrcweir do {
214cdf0e10cSrcweir // eine DDE-Tabelle oder ein DDE-FeldAttribut im Text
215cdf0e10cSrcweir if( !pLast->IsA( TYPE( SwFmtFld ) ))
216cdf0e10cSrcweir {
217cdf0e10cSrcweir SwDepend* pDep = (SwDepend*)pLast;
218cdf0e10cSrcweir SwDDETable* pDDETbl = (SwDDETable*)pDep->GetToTell();
219cdf0e10cSrcweir const SwTableNode* pTblNd = pDDETbl->GetTabSortBoxes()[0]->
220cdf0e10cSrcweir GetSttNd()->FindTableNode();
221cdf0e10cSrcweir if( pTblNd->GetNodes().IsDocNodes() &&
222cdf0e10cSrcweir nSttNd < pTblNd->EndOfSectionIndex() &&
223cdf0e10cSrcweir nEndNd > pTblNd->GetIndex() )
224cdf0e10cSrcweir return sal_True;
225cdf0e10cSrcweir }
226cdf0e10cSrcweir else if( ((SwFmtFld*)pLast)->GetTxtFld() )
227cdf0e10cSrcweir {
228cdf0e10cSrcweir const SwTxtFld* pTFld = ((SwFmtFld*)pLast)->GetTxtFld();
229cdf0e10cSrcweir const SwTxtNode* pNd = pTFld->GetpTxtNode();
230cdf0e10cSrcweir if( pNd && pNds == &pNd->GetNodes() )
231cdf0e10cSrcweir {
232cdf0e10cSrcweir sal_uLong nNdPos = pNd->GetIndex();
233cdf0e10cSrcweir if( nSttNd <= nNdPos && nNdPos <= nEndNd &&
234cdf0e10cSrcweir ( nNdPos != nSttNd || *pTFld->GetStart() >= nStt ) &&
235cdf0e10cSrcweir ( nNdPos != nEndNd || *pTFld->GetStart() < nEnd ))
236cdf0e10cSrcweir return sal_True;
237cdf0e10cSrcweir }
238cdf0e10cSrcweir }
2392f121198SMathias Bauer } while( 0 != ( pLast = ++aIter ));
240cdf0e10cSrcweir
241cdf0e10cSrcweir return sal_False;
242cdf0e10cSrcweir }
243cdf0e10cSrcweir
SwDDEFieldType(const String & rName,const String & rCmd,sal_uInt16 nUpdateType)244cdf0e10cSrcweir SwDDEFieldType::SwDDEFieldType(const String& rName,
245cdf0e10cSrcweir const String& rCmd, sal_uInt16 nUpdateType )
246cdf0e10cSrcweir : SwFieldType( RES_DDEFLD ),
247cdf0e10cSrcweir aName( rName ), pDoc( 0 ), nRefCnt( 0 )
248cdf0e10cSrcweir {
249cdf0e10cSrcweir bCRLFFlag = bDeleted = sal_False;
250cdf0e10cSrcweir refLink = new SwIntrnlRefLink( *this, nUpdateType, FORMAT_STRING );
251cdf0e10cSrcweir SetCmd( rCmd );
252cdf0e10cSrcweir }
253cdf0e10cSrcweir
~SwDDEFieldType()254cdf0e10cSrcweir SwDDEFieldType::~SwDDEFieldType()
255cdf0e10cSrcweir {
256cdf0e10cSrcweir if( pDoc && !pDoc->IsInDtor() )
257cdf0e10cSrcweir pDoc->GetLinkManager().Remove( refLink );
258cdf0e10cSrcweir refLink->Disconnect();
259cdf0e10cSrcweir }
260cdf0e10cSrcweir
Copy() const261cdf0e10cSrcweir SwFieldType* SwDDEFieldType::Copy() const
262cdf0e10cSrcweir {
263cdf0e10cSrcweir SwDDEFieldType* pType = new SwDDEFieldType( aName, GetCmd(), GetType() );
264cdf0e10cSrcweir pType->aExpansion = aExpansion;
265cdf0e10cSrcweir pType->bCRLFFlag = bCRLFFlag;
266cdf0e10cSrcweir pType->bDeleted = bDeleted;
267cdf0e10cSrcweir pType->SetDoc( pDoc );
268cdf0e10cSrcweir return pType;
269cdf0e10cSrcweir }
270cdf0e10cSrcweir
GetName() const271cdf0e10cSrcweir const String& SwDDEFieldType::GetName() const
272cdf0e10cSrcweir {
273cdf0e10cSrcweir return aName;
274cdf0e10cSrcweir }
275cdf0e10cSrcweir
SetCmd(const String & rStr)276cdf0e10cSrcweir void SwDDEFieldType::SetCmd( const String& rStr )
277cdf0e10cSrcweir {
278cdf0e10cSrcweir String sCmd( rStr );
279cdf0e10cSrcweir xub_StrLen nPos;
280cdf0e10cSrcweir while( STRING_NOTFOUND != (nPos = sCmd.SearchAscii( " " )) )
281cdf0e10cSrcweir sCmd.Erase( nPos, 1 );
282cdf0e10cSrcweir refLink->SetLinkSourceName( sCmd );
283cdf0e10cSrcweir }
284cdf0e10cSrcweir
GetCmd() const285cdf0e10cSrcweir String SwDDEFieldType::GetCmd() const
286cdf0e10cSrcweir {
287cdf0e10cSrcweir return refLink->GetLinkSourceName();
288cdf0e10cSrcweir }
289cdf0e10cSrcweir
SetDoc(SwDoc * pNewDoc)290cdf0e10cSrcweir void SwDDEFieldType::SetDoc( SwDoc* pNewDoc )
291cdf0e10cSrcweir {
292cdf0e10cSrcweir if( pNewDoc == pDoc )
293cdf0e10cSrcweir return;
294cdf0e10cSrcweir
295cdf0e10cSrcweir if( pDoc && refLink.Is() )
296cdf0e10cSrcweir {
297cdf0e10cSrcweir ASSERT( !nRefCnt, "wie kommen die Referenzen rueber?" );
298cdf0e10cSrcweir pDoc->GetLinkManager().Remove( refLink );
299cdf0e10cSrcweir }
300cdf0e10cSrcweir
301cdf0e10cSrcweir pDoc = pNewDoc;
302cdf0e10cSrcweir if( pDoc && nRefCnt )
303cdf0e10cSrcweir {
304cdf0e10cSrcweir refLink->SetVisible( pDoc->IsVisibleLinks() );
305cdf0e10cSrcweir pDoc->GetLinkManager().InsertDDELink( refLink );
306cdf0e10cSrcweir }
307cdf0e10cSrcweir }
308cdf0e10cSrcweir
309cdf0e10cSrcweir
_RefCntChgd()310cdf0e10cSrcweir void SwDDEFieldType::_RefCntChgd()
311cdf0e10cSrcweir {
312cdf0e10cSrcweir if( nRefCnt )
313cdf0e10cSrcweir {
314cdf0e10cSrcweir refLink->SetVisible( pDoc->IsVisibleLinks() );
315cdf0e10cSrcweir pDoc->GetLinkManager().InsertDDELink( refLink );
316cdf0e10cSrcweir if( pDoc->GetCurrentViewShell() ) //swmod 071108//swmod 071225
317cdf0e10cSrcweir UpdateNow();
318cdf0e10cSrcweir }
319cdf0e10cSrcweir else
320cdf0e10cSrcweir {
321cdf0e10cSrcweir Disconnect();
322cdf0e10cSrcweir pDoc->GetLinkManager().Remove( refLink );
323cdf0e10cSrcweir }
324cdf0e10cSrcweir }
325cdf0e10cSrcweir /* -----------------------------28.08.00 16:23--------------------------------
326cdf0e10cSrcweir
327cdf0e10cSrcweir ---------------------------------------------------------------------------*/
QueryValue(uno::Any & rVal,sal_uInt16 nWhichId) const328cdf0e10cSrcweir sal_Bool SwDDEFieldType::QueryValue( uno::Any& rVal, sal_uInt16 nWhichId ) const
329cdf0e10cSrcweir {
330cdf0e10cSrcweir sal_uInt8 nPart = 0;
331cdf0e10cSrcweir switch( nWhichId )
332cdf0e10cSrcweir {
333cdf0e10cSrcweir case FIELD_PROP_PAR2: nPart = 3; break;
334cdf0e10cSrcweir case FIELD_PROP_PAR4: nPart = 2; break;
335cdf0e10cSrcweir case FIELD_PROP_SUBTYPE: nPart = 1; break;
336cdf0e10cSrcweir case FIELD_PROP_BOOL1:
337cdf0e10cSrcweir {
338cdf0e10cSrcweir sal_Bool bSet = GetType() == sfx2::LINKUPDATE_ALWAYS ? sal_True : sal_False;
339cdf0e10cSrcweir rVal.setValue(&bSet, ::getBooleanCppuType());
340cdf0e10cSrcweir }
341cdf0e10cSrcweir break;
342cdf0e10cSrcweir case FIELD_PROP_PAR5:
343cdf0e10cSrcweir rVal <<= ::rtl::OUString(aExpansion);
344cdf0e10cSrcweir break;
345cdf0e10cSrcweir default:
346cdf0e10cSrcweir DBG_ERROR("illegal property");
347cdf0e10cSrcweir }
348cdf0e10cSrcweir if( nPart )
349cdf0e10cSrcweir rVal <<= OUString(GetCmd().GetToken(nPart-1, sfx2::cTokenSeperator));
350cdf0e10cSrcweir return sal_True;
351cdf0e10cSrcweir }
352cdf0e10cSrcweir /* -----------------------------28.08.00 16:23--------------------------------
353cdf0e10cSrcweir
354cdf0e10cSrcweir ---------------------------------------------------------------------------*/
PutValue(const uno::Any & rVal,sal_uInt16 nWhichId)355cdf0e10cSrcweir sal_Bool SwDDEFieldType::PutValue( const uno::Any& rVal, sal_uInt16 nWhichId )
356cdf0e10cSrcweir {
357cdf0e10cSrcweir sal_uInt8 nPart = 0;
358cdf0e10cSrcweir switch( nWhichId )
359cdf0e10cSrcweir {
360cdf0e10cSrcweir case FIELD_PROP_PAR2: nPart = 3; break;
361cdf0e10cSrcweir case FIELD_PROP_PAR4: nPart = 2; break;
362cdf0e10cSrcweir case FIELD_PROP_SUBTYPE: nPart = 1; break;
363cdf0e10cSrcweir case FIELD_PROP_BOOL1:
364cdf0e10cSrcweir SetType( static_cast<sal_uInt16>(*(sal_Bool*)rVal.getValue() ?
365cdf0e10cSrcweir sfx2::LINKUPDATE_ALWAYS :
366cdf0e10cSrcweir sfx2::LINKUPDATE_ONCALL ) );
367cdf0e10cSrcweir break;
368cdf0e10cSrcweir case FIELD_PROP_PAR5:
369cdf0e10cSrcweir {
370cdf0e10cSrcweir ::rtl::OUString sTemp;
371cdf0e10cSrcweir rVal >>= sTemp;
372cdf0e10cSrcweir aExpansion = sTemp;
373cdf0e10cSrcweir }
374cdf0e10cSrcweir break;
375cdf0e10cSrcweir default:
376cdf0e10cSrcweir DBG_ERROR("illegal property");
377cdf0e10cSrcweir }
378cdf0e10cSrcweir if( nPart )
379cdf0e10cSrcweir {
380cdf0e10cSrcweir String sTmp, sCmd( GetCmd() );
381cdf0e10cSrcweir while(3 > sCmd.GetTokenCount(sfx2::cTokenSeperator))
382cdf0e10cSrcweir sCmd += sfx2::cTokenSeperator;
383cdf0e10cSrcweir sCmd.SetToken( nPart-1, sfx2::cTokenSeperator, ::GetString( rVal, sTmp ) );
384cdf0e10cSrcweir SetCmd( sCmd );
385cdf0e10cSrcweir }
386cdf0e10cSrcweir return sal_True;
387cdf0e10cSrcweir }
388cdf0e10cSrcweir /* ---------------------------------------------------------------------------
389cdf0e10cSrcweir
390cdf0e10cSrcweir ---------------------------------------------------------------------------*/
SwDDEField(SwDDEFieldType * pInitType)391cdf0e10cSrcweir SwDDEField::SwDDEField( SwDDEFieldType* pInitType )
392cdf0e10cSrcweir : SwField(pInitType)
393cdf0e10cSrcweir {
394cdf0e10cSrcweir }
395cdf0e10cSrcweir
~SwDDEField()396cdf0e10cSrcweir SwDDEField::~SwDDEField()
397cdf0e10cSrcweir {
398cdf0e10cSrcweir if( GetTyp()->IsLastDepend() )
399cdf0e10cSrcweir ((SwDDEFieldType*)GetTyp())->Disconnect();
400cdf0e10cSrcweir }
401cdf0e10cSrcweir
Expand() const402cdf0e10cSrcweir String SwDDEField::Expand() const
403cdf0e10cSrcweir {
404cdf0e10cSrcweir xub_StrLen nPos;
405cdf0e10cSrcweir String aStr( ((SwDDEFieldType*)GetTyp())->GetExpansion() );
406cdf0e10cSrcweir
407cdf0e10cSrcweir aStr.EraseAllChars( '\r' );
408cdf0e10cSrcweir while( (nPos = aStr.Search( '\t' )) != STRING_NOTFOUND )
409cdf0e10cSrcweir aStr.SetChar( nPos, ' ' );
410cdf0e10cSrcweir while( (nPos = aStr.Search( '\n' )) != STRING_NOTFOUND )
411cdf0e10cSrcweir aStr.SetChar( nPos, '|' );
412cdf0e10cSrcweir if( aStr.Len() && ( aStr.GetChar( aStr.Len()-1 ) == '|') )
413cdf0e10cSrcweir aStr.Erase( aStr.Len()-1, 1 );
414cdf0e10cSrcweir return aStr;
415cdf0e10cSrcweir }
416cdf0e10cSrcweir
Copy() const417cdf0e10cSrcweir SwField* SwDDEField::Copy() const
418cdf0e10cSrcweir {
419cdf0e10cSrcweir return new SwDDEField((SwDDEFieldType*)GetTyp());
420cdf0e10cSrcweir }
421cdf0e10cSrcweir
422cdf0e10cSrcweir /*--------------------------------------------------------------------
423cdf0e10cSrcweir Beschreibung: Parameter des Typen erfragen
424cdf0e10cSrcweir Name
425cdf0e10cSrcweir --------------------------------------------------------------------*/
GetPar1() const426cdf0e10cSrcweir const String& SwDDEField::GetPar1() const
427cdf0e10cSrcweir {
428cdf0e10cSrcweir return ((SwDDEFieldType*)GetTyp())->GetName();
429cdf0e10cSrcweir }
430cdf0e10cSrcweir
431cdf0e10cSrcweir /*--------------------------------------------------------------------
432cdf0e10cSrcweir Beschreibung: Parameter des Typen erfragen
433cdf0e10cSrcweir Commando
434cdf0e10cSrcweir --------------------------------------------------------------------*/
GetPar2() const435cdf0e10cSrcweir String SwDDEField::GetPar2() const
436cdf0e10cSrcweir {
437cdf0e10cSrcweir return ((SwDDEFieldType*)GetTyp())->GetCmd();
438cdf0e10cSrcweir }
439cdf0e10cSrcweir
SetPar2(const String & rStr)440cdf0e10cSrcweir void SwDDEField::SetPar2(const String& rStr)
441cdf0e10cSrcweir {
442cdf0e10cSrcweir ((SwDDEFieldType*)GetTyp())->SetCmd(rStr);
443cdf0e10cSrcweir }
444cdf0e10cSrcweir
445