1efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file
5efeef26fSAndrew Rist * distributed with this work for additional information
6efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the
8efeef26fSAndrew Rist * "License"); you may not use this file except in compliance
9efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at
10efeef26fSAndrew Rist *
11efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12efeef26fSAndrew Rist *
13efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing,
14efeef26fSAndrew Rist * software distributed under the License is distributed on an
15efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16efeef26fSAndrew Rist * KIND, either express or implied. See the License for the
17efeef26fSAndrew Rist * specific language governing permissions and limitations
18efeef26fSAndrew Rist * under the License.
19efeef26fSAndrew Rist *
20efeef26fSAndrew Rist *************************************************************/
21efeef26fSAndrew Rist
22efeef26fSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir
28cdf0e10cSrcweir #define _SVSTDARR_STRINGSDTOR
29cdf0e10cSrcweir #define _SVSTDARR_USHORTS
30cdf0e10cSrcweir #define _SVSTDARR_LONGS
31cdf0e10cSrcweir #define _SVSTDARR_ULONGS
32cdf0e10cSrcweir #include <hintids.hxx>
33cdf0e10cSrcweir
34cdf0e10cSrcweir #include <svl/svstdarr.hxx>
35cdf0e10cSrcweir #include <editeng/unolingu.hxx>
36cdf0e10cSrcweir #include <editeng/langitem.hxx>
37cdf0e10cSrcweir #include <swtypes.hxx>
38cdf0e10cSrcweir #include <tools/resid.hxx>
39cdf0e10cSrcweir #include <comcore.hrc>
40cdf0e10cSrcweir #include <authfld.hxx>
41cdf0e10cSrcweir #include <expfld.hxx>
42cdf0e10cSrcweir #include <pam.hxx>
43cdf0e10cSrcweir #include <cntfrm.hxx>
44cdf0e10cSrcweir #include <tox.hxx>
45cdf0e10cSrcweir #include <txmsrt.hxx>
46cdf0e10cSrcweir #include <doctxm.hxx>
47cdf0e10cSrcweir #include <fmtfld.hxx>
48cdf0e10cSrcweir #include <txtfld.hxx>
49cdf0e10cSrcweir #include <ndtxt.hxx>
50cdf0e10cSrcweir #include <doc.hxx>
51cdf0e10cSrcweir #include <unofldmid.h>
52cdf0e10cSrcweir #include <unoprnms.hxx>
53cdf0e10cSrcweir #include <switerator.hxx>
54cdf0e10cSrcweir #include <unomid.h>
55cdf0e10cSrcweir
56cdf0e10cSrcweir using namespace ::com::sun::star::uno;
57cdf0e10cSrcweir using namespace ::com::sun::star::beans;
58cdf0e10cSrcweir using namespace ::com::sun::star::lang;
59cdf0e10cSrcweir using rtl::OUString;
60cdf0e10cSrcweir
61cdf0e10cSrcweir
62cdf0e10cSrcweir typedef SwAuthEntry* SwAuthEntryPtr;
63cdf0e10cSrcweir SV_DECL_PTRARR_DEL( SwAuthDataArr, SwAuthEntryPtr, 5, 5 )
64cdf0e10cSrcweir SV_IMPL_PTRARR( SwAuthDataArr, SwAuthEntryPtr )
65cdf0e10cSrcweir
66cdf0e10cSrcweir
67cdf0e10cSrcweir typedef SwTOXSortKey* TOXSortKeyPtr;
68cdf0e10cSrcweir SV_DECL_PTRARR_DEL( SortKeyArr, TOXSortKeyPtr, 5, 5 )
SV_IMPL_PTRARR(SortKeyArr,TOXSortKeyPtr)69cdf0e10cSrcweir SV_IMPL_PTRARR( SortKeyArr, TOXSortKeyPtr )
70cdf0e10cSrcweir
71cdf0e10cSrcweir
72cdf0e10cSrcweir SwAuthEntry::SwAuthEntry(const SwAuthEntry& rCopy)
73cdf0e10cSrcweir : nRefCount(0)
74cdf0e10cSrcweir {
75cdf0e10cSrcweir for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++)
76cdf0e10cSrcweir aAuthFields[i] = rCopy.aAuthFields[i];
77cdf0e10cSrcweir }
78cdf0e10cSrcweir // --------------------------------------------------------
operator ==(const SwAuthEntry & rComp)79cdf0e10cSrcweir sal_Bool SwAuthEntry::operator==(const SwAuthEntry& rComp)
80cdf0e10cSrcweir {
81cdf0e10cSrcweir for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++)
82cdf0e10cSrcweir if(aAuthFields[i] != rComp.aAuthFields[i])
83cdf0e10cSrcweir return sal_False;
84cdf0e10cSrcweir return sal_True;
85cdf0e10cSrcweir }
86cdf0e10cSrcweir // --------------------------------------------------------
SwAuthorityFieldType(SwDoc * pDoc)87cdf0e10cSrcweir SwAuthorityFieldType::SwAuthorityFieldType(SwDoc* pDoc)
88cdf0e10cSrcweir : SwFieldType( RES_AUTHORITY ),
89cdf0e10cSrcweir m_pDoc(pDoc),
90cdf0e10cSrcweir m_pDataArr(new SwAuthDataArr ),
91cdf0e10cSrcweir m_pSequArr(new SvLongs(5, 5)),
92cdf0e10cSrcweir m_pSortKeyArr(new SortKeyArr(3, 3)),
93cdf0e10cSrcweir m_cPrefix('['),
94cdf0e10cSrcweir m_cSuffix(']'),
95cdf0e10cSrcweir m_bIsSequence(sal_False),
96cdf0e10cSrcweir m_bSortByDocument(sal_True),
97cdf0e10cSrcweir m_eLanguage((LanguageType)::GetAppLanguage())
98cdf0e10cSrcweir {
99cdf0e10cSrcweir }
100cdf0e10cSrcweir
SwAuthorityFieldType(const SwAuthorityFieldType & rFType)101cdf0e10cSrcweir SwAuthorityFieldType::SwAuthorityFieldType( const SwAuthorityFieldType& rFType)
102cdf0e10cSrcweir : SwFieldType( RES_AUTHORITY ),
103cdf0e10cSrcweir m_pDataArr(new SwAuthDataArr ),
104cdf0e10cSrcweir m_pSequArr(new SvLongs(5, 5)),
105cdf0e10cSrcweir m_pSortKeyArr(new SortKeyArr(3, 3)),
106cdf0e10cSrcweir m_cPrefix(rFType.m_cPrefix),
107cdf0e10cSrcweir m_cSuffix(rFType.m_cSuffix),
108cdf0e10cSrcweir m_bIsSequence(rFType.m_bIsSequence),
109cdf0e10cSrcweir m_bSortByDocument(rFType.m_bSortByDocument),
110cdf0e10cSrcweir m_eLanguage(rFType.m_eLanguage),
111cdf0e10cSrcweir m_sSortAlgorithm(rFType.m_sSortAlgorithm)
112cdf0e10cSrcweir {
113cdf0e10cSrcweir for(sal_uInt16 i = 0; i < rFType.m_pSortKeyArr->Count(); i++)
114cdf0e10cSrcweir m_pSortKeyArr->Insert((*rFType.m_pSortKeyArr)[i], i);
115cdf0e10cSrcweir }
116cdf0e10cSrcweir
~SwAuthorityFieldType()117cdf0e10cSrcweir SwAuthorityFieldType::~SwAuthorityFieldType()
118cdf0e10cSrcweir {
119cdf0e10cSrcweir // DBG_ASSERT(!m_pDataArr->Count(), "Array is not empty");
120cdf0e10cSrcweir m_pSortKeyArr->DeleteAndDestroy(0, m_pSortKeyArr->Count());
121cdf0e10cSrcweir delete m_pSortKeyArr;
122cdf0e10cSrcweir delete m_pSequArr;
123cdf0e10cSrcweir delete m_pDataArr;
124cdf0e10cSrcweir }
125cdf0e10cSrcweir
Copy() const126cdf0e10cSrcweir SwFieldType* SwAuthorityFieldType::Copy() const
127cdf0e10cSrcweir {
128cdf0e10cSrcweir return new SwAuthorityFieldType(m_pDoc);
129cdf0e10cSrcweir }
130cdf0e10cSrcweir
RemoveField(long nHandle)131cdf0e10cSrcweir void SwAuthorityFieldType::RemoveField(long nHandle)
132cdf0e10cSrcweir {
133cdf0e10cSrcweir #ifdef DBG_UTIL
134cdf0e10cSrcweir sal_Bool bRemoved = sal_False;
135cdf0e10cSrcweir #endif
136cdf0e10cSrcweir for(sal_uInt16 j = 0; j < m_pDataArr->Count(); j++)
137cdf0e10cSrcweir {
138cdf0e10cSrcweir SwAuthEntry* pTemp = m_pDataArr->GetObject(j);
139cdf0e10cSrcweir long nRet = (long)(void*)pTemp;
140cdf0e10cSrcweir if(nRet == nHandle)
141cdf0e10cSrcweir {
142cdf0e10cSrcweir #ifdef DBG_UTIL
143cdf0e10cSrcweir bRemoved = sal_True;
144cdf0e10cSrcweir #endif
145cdf0e10cSrcweir pTemp->RemoveRef();
146cdf0e10cSrcweir if(!pTemp->GetRefCount())
147cdf0e10cSrcweir {
148cdf0e10cSrcweir m_pDataArr->DeleteAndDestroy(j, 1);
149cdf0e10cSrcweir //re-generate positions of the fields
150cdf0e10cSrcweir DelSequenceArray();
151cdf0e10cSrcweir }
152cdf0e10cSrcweir break;
153cdf0e10cSrcweir }
154cdf0e10cSrcweir }
155cdf0e10cSrcweir #ifdef DBG_UTIL
156cdf0e10cSrcweir DBG_ASSERT(bRemoved, "Field unknown" );
157cdf0e10cSrcweir #endif
158cdf0e10cSrcweir }
159cdf0e10cSrcweir
AddField(const String & rFieldContents)160cdf0e10cSrcweir long SwAuthorityFieldType::AddField(const String& rFieldContents)
161cdf0e10cSrcweir {
162cdf0e10cSrcweir long nRet = 0;
163cdf0e10cSrcweir SwAuthEntry* pEntry = new SwAuthEntry;
164cdf0e10cSrcweir for( sal_uInt16 i = 0; i < AUTH_FIELD_END; ++i )
165cdf0e10cSrcweir pEntry->SetAuthorField( (ToxAuthorityField)i,
166cdf0e10cSrcweir rFieldContents.GetToken( i, TOX_STYLE_DELIMITER ));
167cdf0e10cSrcweir
168cdf0e10cSrcweir for(sal_uInt16 j = 0; j < m_pDataArr->Count() && pEntry; j++)
169cdf0e10cSrcweir {
170cdf0e10cSrcweir SwAuthEntry* pTemp = m_pDataArr->GetObject(j);
171cdf0e10cSrcweir if(*pTemp == *pEntry)
172cdf0e10cSrcweir {
173cdf0e10cSrcweir DELETEZ(pEntry);
174cdf0e10cSrcweir nRet = (long)(void*)pTemp;
175cdf0e10cSrcweir pTemp->AddRef();
176cdf0e10cSrcweir }
177cdf0e10cSrcweir }
178cdf0e10cSrcweir //if it is a new Entry - insert
179cdf0e10cSrcweir if(pEntry)
180cdf0e10cSrcweir {
181cdf0e10cSrcweir nRet = (long)(void*)pEntry;
182cdf0e10cSrcweir pEntry->AddRef();
183cdf0e10cSrcweir m_pDataArr->Insert(pEntry, m_pDataArr->Count());
184cdf0e10cSrcweir //re-generate positions of the fields
185cdf0e10cSrcweir DelSequenceArray();
186cdf0e10cSrcweir }
187cdf0e10cSrcweir return nRet;
188cdf0e10cSrcweir }
189cdf0e10cSrcweir
AddField(long nHandle)190cdf0e10cSrcweir sal_Bool SwAuthorityFieldType::AddField(long nHandle)
191cdf0e10cSrcweir {
192cdf0e10cSrcweir sal_Bool bRet = sal_False;
193cdf0e10cSrcweir for( sal_uInt16 j = 0; j < m_pDataArr->Count(); j++ )
194cdf0e10cSrcweir {
195cdf0e10cSrcweir SwAuthEntry* pTemp = m_pDataArr->GetObject(j);
196cdf0e10cSrcweir long nTmp = (long)(void*)pTemp;
197cdf0e10cSrcweir if( nTmp == nHandle )
198cdf0e10cSrcweir {
199cdf0e10cSrcweir bRet = sal_True;
200cdf0e10cSrcweir pTemp->AddRef();
201cdf0e10cSrcweir //re-generate positions of the fields
202cdf0e10cSrcweir DelSequenceArray();
203cdf0e10cSrcweir break;
204cdf0e10cSrcweir }
205cdf0e10cSrcweir }
206cdf0e10cSrcweir DBG_ASSERT(bRet, "::AddField(long) failed");
207cdf0e10cSrcweir return bRet;
208cdf0e10cSrcweir }
209cdf0e10cSrcweir
GetEntryByHandle(long nHandle) const210cdf0e10cSrcweir const SwAuthEntry* SwAuthorityFieldType::GetEntryByHandle(long nHandle) const
211cdf0e10cSrcweir {
212cdf0e10cSrcweir const SwAuthEntry* pRet = 0;
213cdf0e10cSrcweir for(sal_uInt16 j = 0; j < m_pDataArr->Count(); j++)
214cdf0e10cSrcweir {
215cdf0e10cSrcweir const SwAuthEntry* pTemp = m_pDataArr->GetObject(j);
216cdf0e10cSrcweir long nTmp = (long)(void*)pTemp;
217cdf0e10cSrcweir if( nTmp == nHandle )
218cdf0e10cSrcweir {
219cdf0e10cSrcweir pRet = pTemp;
220cdf0e10cSrcweir break;
221cdf0e10cSrcweir }
222cdf0e10cSrcweir }
223cdf0e10cSrcweir ASSERT( pRet, "invalid Handle" );
224cdf0e10cSrcweir return pRet;
225cdf0e10cSrcweir }
226cdf0e10cSrcweir
GetAllEntryIdentifiers(SvStringsDtor & rToFill) const227cdf0e10cSrcweir void SwAuthorityFieldType::GetAllEntryIdentifiers(
228cdf0e10cSrcweir SvStringsDtor& rToFill )const
229cdf0e10cSrcweir {
230cdf0e10cSrcweir for(sal_uInt16 j = 0; j < m_pDataArr->Count(); j++)
231cdf0e10cSrcweir {
232cdf0e10cSrcweir SwAuthEntry* pTemp = m_pDataArr->GetObject(j);
233cdf0e10cSrcweir rToFill.Insert( new String( pTemp->GetAuthorField(
234cdf0e10cSrcweir AUTH_FIELD_IDENTIFIER )), rToFill.Count() );
235cdf0e10cSrcweir }
236cdf0e10cSrcweir }
237cdf0e10cSrcweir
GetEntryByIdentifier(const String & rIdentifier) const238cdf0e10cSrcweir const SwAuthEntry* SwAuthorityFieldType::GetEntryByIdentifier(
239cdf0e10cSrcweir const String& rIdentifier)const
240cdf0e10cSrcweir {
241cdf0e10cSrcweir const SwAuthEntry* pRet = 0;
242cdf0e10cSrcweir for( sal_uInt16 j = 0; j < m_pDataArr->Count(); ++j )
243cdf0e10cSrcweir {
244cdf0e10cSrcweir const SwAuthEntry* pTemp = m_pDataArr->GetObject(j);
245cdf0e10cSrcweir if( rIdentifier == pTemp->GetAuthorField( AUTH_FIELD_IDENTIFIER ))
246cdf0e10cSrcweir {
247cdf0e10cSrcweir pRet = pTemp;
248cdf0e10cSrcweir break;
249cdf0e10cSrcweir }
250cdf0e10cSrcweir }
251cdf0e10cSrcweir return pRet;
252cdf0e10cSrcweir }
253cdf0e10cSrcweir
ChangeEntryContent(const SwAuthEntry * pNewEntry)254cdf0e10cSrcweir bool SwAuthorityFieldType::ChangeEntryContent(const SwAuthEntry* pNewEntry)
255cdf0e10cSrcweir {
256cdf0e10cSrcweir bool bChanged = false;
257cdf0e10cSrcweir for( sal_uInt16 j = 0; j < m_pDataArr->Count(); ++j )
258cdf0e10cSrcweir {
259cdf0e10cSrcweir SwAuthEntry* pTemp = m_pDataArr->GetObject(j);
260cdf0e10cSrcweir if(pTemp->GetAuthorField(AUTH_FIELD_IDENTIFIER) ==
261cdf0e10cSrcweir pNewEntry->GetAuthorField(AUTH_FIELD_IDENTIFIER))
262cdf0e10cSrcweir {
263cdf0e10cSrcweir for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++)
264cdf0e10cSrcweir pTemp->SetAuthorField((ToxAuthorityField) i,
265cdf0e10cSrcweir pNewEntry->GetAuthorField((ToxAuthorityField)i));
266cdf0e10cSrcweir bChanged = true;
267cdf0e10cSrcweir break;
268cdf0e10cSrcweir }
269cdf0e10cSrcweir }
270cdf0e10cSrcweir return bChanged;
271cdf0e10cSrcweir }
272cdf0e10cSrcweir
273cdf0e10cSrcweir /*-------------------------------------------------------------------------
274cdf0e10cSrcweir appends a new entry (if new) and returns the array position
275cdf0e10cSrcweir -----------------------------------------------------------------------*/
AppendField(const SwAuthEntry & rInsert)276cdf0e10cSrcweir sal_uInt16 SwAuthorityFieldType::AppendField( const SwAuthEntry& rInsert )
277cdf0e10cSrcweir {
278cdf0e10cSrcweir sal_uInt16 nRet = 0;
279cdf0e10cSrcweir for( nRet = 0; nRet < m_pDataArr->Count(); ++nRet )
280cdf0e10cSrcweir {
281cdf0e10cSrcweir SwAuthEntry* pTemp = m_pDataArr->GetObject( nRet );
282cdf0e10cSrcweir if( *pTemp == rInsert )
283cdf0e10cSrcweir {
284cdf0e10cSrcweir break;
285cdf0e10cSrcweir //ref count unchanged
286cdf0e10cSrcweir }
287cdf0e10cSrcweir }
288cdf0e10cSrcweir
289cdf0e10cSrcweir //if it is a new Entry - insert
290cdf0e10cSrcweir if( nRet == m_pDataArr->Count() )
291cdf0e10cSrcweir m_pDataArr->Insert( new SwAuthEntry( rInsert ), nRet );
292cdf0e10cSrcweir
293cdf0e10cSrcweir return nRet;
294cdf0e10cSrcweir }
295cdf0e10cSrcweir
GetHandle(sal_uInt16 nPos)296cdf0e10cSrcweir long SwAuthorityFieldType::GetHandle(sal_uInt16 nPos)
297cdf0e10cSrcweir {
298cdf0e10cSrcweir long nRet = 0;
299cdf0e10cSrcweir if( nPos < m_pDataArr->Count() )
300cdf0e10cSrcweir {
301cdf0e10cSrcweir SwAuthEntry* pTemp = m_pDataArr->GetObject(nPos);
302cdf0e10cSrcweir nRet = (long)(void*)pTemp;
303cdf0e10cSrcweir }
304cdf0e10cSrcweir return nRet;
305cdf0e10cSrcweir }
306cdf0e10cSrcweir
GetSequencePos(long nHandle)307cdf0e10cSrcweir sal_uInt16 SwAuthorityFieldType::GetSequencePos(long nHandle)
308cdf0e10cSrcweir {
309cdf0e10cSrcweir //find the field in a sorted array of handles,
310cdf0e10cSrcweir #ifdef DBG_UTIL
311cdf0e10cSrcweir sal_Bool bCurrentFieldWithoutTextNode = sal_False;
312cdf0e10cSrcweir #endif
313cdf0e10cSrcweir if(m_pSequArr->Count() && m_pSequArr->Count() != m_pDataArr->Count())
314cdf0e10cSrcweir DelSequenceArray();
315cdf0e10cSrcweir if(!m_pSequArr->Count())
316cdf0e10cSrcweir {
317cdf0e10cSrcweir SwTOXSortTabBases aSortArr;
318cdf0e10cSrcweir SwIterator<SwFmtFld,SwFieldType> aIter( *this );
319cdf0e10cSrcweir
320cdf0e10cSrcweir SwTOXInternational aIntl(m_eLanguage, 0, m_sSortAlgorithm);
321cdf0e10cSrcweir
322cdf0e10cSrcweir for( SwFmtFld* pFmtFld = aIter.First(); pFmtFld; pFmtFld = aIter.Next() )
323cdf0e10cSrcweir {
324cdf0e10cSrcweir const SwTxtFld* pTxtFld = pFmtFld->GetTxtFld();
325cdf0e10cSrcweir if(!pTxtFld || !pTxtFld->GetpTxtNode())
326cdf0e10cSrcweir {
327cdf0e10cSrcweir #ifdef DBG_UTIL
328*c0286415SOliver-Rainer Wittmann if(nHandle == ((SwAuthorityField*)pFmtFld->GetField())->GetHandle())
329cdf0e10cSrcweir bCurrentFieldWithoutTextNode = sal_True;
330cdf0e10cSrcweir #endif
331cdf0e10cSrcweir continue;
332cdf0e10cSrcweir }
333cdf0e10cSrcweir const SwTxtNode& rFldTxtNode = pTxtFld->GetTxtNode();
334cdf0e10cSrcweir SwPosition aFldPos(rFldTxtNode);
335cdf0e10cSrcweir SwDoc& rDoc = *(SwDoc*)rFldTxtNode.GetDoc();
336cdf0e10cSrcweir SwCntntFrm *pFrm = rFldTxtNode.getLayoutFrm( rDoc.GetCurrentLayout() );
337cdf0e10cSrcweir const SwTxtNode* pTxtNode = 0;
338cdf0e10cSrcweir if(pFrm && !pFrm->IsInDocBody())
339cdf0e10cSrcweir pTxtNode = GetBodyTxtNode( rDoc, aFldPos, *pFrm );
340cdf0e10cSrcweir //if no text node could be found or the field is in the document
341cdf0e10cSrcweir //body the directly available text node will be used
342cdf0e10cSrcweir if(!pTxtNode)
343cdf0e10cSrcweir pTxtNode = &rFldTxtNode;
344cdf0e10cSrcweir if( pTxtNode->GetTxt().Len() && pTxtNode->getLayoutFrm( rDoc.GetCurrentLayout() ) &&
345cdf0e10cSrcweir pTxtNode->GetNodes().IsDocNodes() )
346cdf0e10cSrcweir {
347cdf0e10cSrcweir SwTOXAuthority* pNew = new SwTOXAuthority( *pTxtNode,
348cdf0e10cSrcweir *pFmtFld, aIntl );
349cdf0e10cSrcweir
350cdf0e10cSrcweir for(short i = 0; i < aSortArr.Count(); ++i)
351cdf0e10cSrcweir {
352cdf0e10cSrcweir SwTOXSortTabBase* pOld = aSortArr[i];
353cdf0e10cSrcweir if(*pOld == *pNew)
354cdf0e10cSrcweir {
355cdf0e10cSrcweir //only the first occurence in the document
356cdf0e10cSrcweir //has to be in the array
357cdf0e10cSrcweir if(*pOld < *pNew)
358cdf0e10cSrcweir DELETEZ(pNew);
359cdf0e10cSrcweir else // remove the old content
360cdf0e10cSrcweir aSortArr.DeleteAndDestroy( i, 1 );
361cdf0e10cSrcweir break;
362cdf0e10cSrcweir }
363cdf0e10cSrcweir }
364cdf0e10cSrcweir //if it still exists - insert at the correct position
365cdf0e10cSrcweir if(pNew)
366cdf0e10cSrcweir {
367cdf0e10cSrcweir short j;
368cdf0e10cSrcweir
369cdf0e10cSrcweir for( j = 0; j < aSortArr.Count(); ++j)
370cdf0e10cSrcweir {
371cdf0e10cSrcweir SwTOXSortTabBase* pOld = aSortArr[j];
372cdf0e10cSrcweir if(*pNew < *pOld)
373cdf0e10cSrcweir break;
374cdf0e10cSrcweir }
375cdf0e10cSrcweir aSortArr.Insert(pNew, j );
376cdf0e10cSrcweir }
377cdf0e10cSrcweir }
378cdf0e10cSrcweir }
379cdf0e10cSrcweir
380cdf0e10cSrcweir for(sal_uInt16 i = 0; i < aSortArr.Count(); i++)
381cdf0e10cSrcweir {
382cdf0e10cSrcweir const SwTOXSortTabBase& rBase = *aSortArr[i];
383cdf0e10cSrcweir SwFmtFld& rFmtFld = ((SwTOXAuthority&)rBase).GetFldFmt();
384*c0286415SOliver-Rainer Wittmann SwAuthorityField* pAFld = (SwAuthorityField*)rFmtFld.GetField();
385cdf0e10cSrcweir m_pSequArr->Insert(pAFld->GetHandle(), i);
386cdf0e10cSrcweir }
387cdf0e10cSrcweir aSortArr.DeleteAndDestroy(0, aSortArr.Count());
388cdf0e10cSrcweir }
389cdf0e10cSrcweir //find nHandle
390cdf0e10cSrcweir sal_uInt16 nRet = 0;
391cdf0e10cSrcweir for(sal_uInt16 i = 0; i < m_pSequArr->Count(); i++)
392cdf0e10cSrcweir {
393cdf0e10cSrcweir if((*m_pSequArr)[i] == nHandle)
394cdf0e10cSrcweir {
395cdf0e10cSrcweir nRet = i + 1;
396cdf0e10cSrcweir break;
397cdf0e10cSrcweir }
398cdf0e10cSrcweir }
399cdf0e10cSrcweir ASSERT(bCurrentFieldWithoutTextNode || nRet, "Handle not found")
400cdf0e10cSrcweir return nRet;
401cdf0e10cSrcweir }
402cdf0e10cSrcweir
QueryValue(Any & rVal,sal_uInt16 nWhichId) const403cdf0e10cSrcweir sal_Bool SwAuthorityFieldType::QueryValue( Any& rVal, sal_uInt16 nWhichId ) const
404cdf0e10cSrcweir {
405cdf0e10cSrcweir switch( nWhichId )
406cdf0e10cSrcweir {
407cdf0e10cSrcweir case FIELD_PROP_PAR1:
408cdf0e10cSrcweir case FIELD_PROP_PAR2:
409cdf0e10cSrcweir {
410cdf0e10cSrcweir OUString sVal;
411cdf0e10cSrcweir sal_Unicode uRet = FIELD_PROP_PAR1 == nWhichId ? m_cPrefix : m_cSuffix;
412cdf0e10cSrcweir if(uRet)
413cdf0e10cSrcweir sVal = OUString(uRet);
414cdf0e10cSrcweir rVal <<= sVal;
415cdf0e10cSrcweir }
416cdf0e10cSrcweir break;
417cdf0e10cSrcweir case FIELD_PROP_PAR3:
418cdf0e10cSrcweir rVal <<= OUString(GetSortAlgorithm());
419cdf0e10cSrcweir break;
420cdf0e10cSrcweir
421cdf0e10cSrcweir case FIELD_PROP_BOOL1:
422cdf0e10cSrcweir case FIELD_PROP_BOOL2:
423cdf0e10cSrcweir {
424cdf0e10cSrcweir sal_Bool bVal = FIELD_PROP_BOOL1 == nWhichId ? m_bIsSequence: m_bSortByDocument;
425cdf0e10cSrcweir rVal.setValue(&bVal, ::getBooleanCppuType());
426cdf0e10cSrcweir }
427cdf0e10cSrcweir break;
428cdf0e10cSrcweir
429cdf0e10cSrcweir case FIELD_PROP_LOCALE:
430cdf0e10cSrcweir rVal <<= SvxCreateLocale(GetLanguage());
431cdf0e10cSrcweir break;
432cdf0e10cSrcweir
433cdf0e10cSrcweir case FIELD_PROP_PROP_SEQ:
434cdf0e10cSrcweir {
435cdf0e10cSrcweir Sequence<PropertyValues> aRet(m_pSortKeyArr->Count());
436cdf0e10cSrcweir PropertyValues* pValues = aRet.getArray();
437cdf0e10cSrcweir OUString sProp1( C2U(SW_PROP_NAME_STR(UNO_NAME_SORT_KEY)) ),
438cdf0e10cSrcweir sProp2( C2U(SW_PROP_NAME_STR(UNO_NAME_IS_SORT_ASCENDING)));
439cdf0e10cSrcweir for(sal_uInt16 i = 0; i < m_pSortKeyArr->Count(); i++)
440cdf0e10cSrcweir {
441cdf0e10cSrcweir const SwTOXSortKey* pKey = (*m_pSortKeyArr)[i];
442cdf0e10cSrcweir pValues[i].realloc(2);
443cdf0e10cSrcweir PropertyValue* pValue = pValues[i].getArray();
444cdf0e10cSrcweir pValue[0].Name = sProp1;
445cdf0e10cSrcweir pValue[0].Value <<= sal_Int16(pKey->eField);
446cdf0e10cSrcweir pValue[1].Name = sProp2;
447cdf0e10cSrcweir pValue[1].Value.setValue(&pKey->bSortAscending, ::getBooleanCppuType());
448cdf0e10cSrcweir }
449cdf0e10cSrcweir rVal <<= aRet;
450cdf0e10cSrcweir }
451cdf0e10cSrcweir break;
452cdf0e10cSrcweir default:
453cdf0e10cSrcweir DBG_ERROR("illegal property");
454cdf0e10cSrcweir }
455cdf0e10cSrcweir return sal_True;
456cdf0e10cSrcweir }
457cdf0e10cSrcweir
PutValue(const Any & rAny,sal_uInt16 nWhichId)458cdf0e10cSrcweir sal_Bool SwAuthorityFieldType::PutValue( const Any& rAny, sal_uInt16 nWhichId )
459cdf0e10cSrcweir {
460cdf0e10cSrcweir sal_Bool bRet = sal_True;
461cdf0e10cSrcweir String sTmp;
462cdf0e10cSrcweir switch( nWhichId )
463cdf0e10cSrcweir {
464cdf0e10cSrcweir case FIELD_PROP_PAR1:
465cdf0e10cSrcweir case FIELD_PROP_PAR2:
466cdf0e10cSrcweir {
467cdf0e10cSrcweir ::GetString( rAny, sTmp );
468cdf0e10cSrcweir sal_Unicode uSet = sTmp.GetChar(0);
469cdf0e10cSrcweir if( FIELD_PROP_PAR1 == nWhichId )
470cdf0e10cSrcweir m_cPrefix = uSet;
471cdf0e10cSrcweir else
472cdf0e10cSrcweir m_cSuffix = uSet;
473cdf0e10cSrcweir }
474cdf0e10cSrcweir break;
475cdf0e10cSrcweir case FIELD_PROP_PAR3:
476cdf0e10cSrcweir SetSortAlgorithm( ::GetString( rAny, sTmp ));
477cdf0e10cSrcweir break;
478cdf0e10cSrcweir
479cdf0e10cSrcweir case FIELD_PROP_BOOL1:
480cdf0e10cSrcweir m_bIsSequence = *(sal_Bool*)rAny.getValue();
481cdf0e10cSrcweir break;
482cdf0e10cSrcweir case FIELD_PROP_BOOL2:
483cdf0e10cSrcweir m_bSortByDocument = *(sal_Bool*)rAny.getValue();
484cdf0e10cSrcweir break;
485cdf0e10cSrcweir
486cdf0e10cSrcweir case FIELD_PROP_LOCALE:
487cdf0e10cSrcweir {
488cdf0e10cSrcweir Locale aLocale;
489cdf0e10cSrcweir if( 0 != (bRet = rAny >>= aLocale ))
490cdf0e10cSrcweir SetLanguage( SvxLocaleToLanguage( aLocale ));
491cdf0e10cSrcweir }
492cdf0e10cSrcweir break;
493cdf0e10cSrcweir
494cdf0e10cSrcweir case FIELD_PROP_PROP_SEQ:
495cdf0e10cSrcweir {
496cdf0e10cSrcweir Sequence<PropertyValues> aSeq;
497cdf0e10cSrcweir if( 0 != (bRet = rAny >>= aSeq) )
498cdf0e10cSrcweir {
499cdf0e10cSrcweir m_pSortKeyArr->DeleteAndDestroy(0, m_pSortKeyArr->Count());
500cdf0e10cSrcweir const PropertyValues* pValues = aSeq.getConstArray();
501cdf0e10cSrcweir for(sal_Int32 i = 0; i < aSeq.getLength() && i < USHRT_MAX / 4; i++)
502cdf0e10cSrcweir {
503cdf0e10cSrcweir const PropertyValue* pValue = pValues[i].getConstArray();
504cdf0e10cSrcweir SwTOXSortKey* pSortKey = new SwTOXSortKey;
505cdf0e10cSrcweir for(sal_Int32 j = 0; j < pValues[i].getLength(); j++)
506cdf0e10cSrcweir {
507cdf0e10cSrcweir if(pValue[j].Name.equalsAsciiL(SW_PROP_NAME(UNO_NAME_SORT_KEY)))
508cdf0e10cSrcweir {
509cdf0e10cSrcweir sal_Int16 nVal = -1; pValue[j].Value >>= nVal;
510cdf0e10cSrcweir if(nVal >= 0 && nVal < AUTH_FIELD_END)
511cdf0e10cSrcweir pSortKey->eField = (ToxAuthorityField) nVal;
512cdf0e10cSrcweir else
513cdf0e10cSrcweir bRet = sal_False;
514cdf0e10cSrcweir }
515cdf0e10cSrcweir else if(pValue[j].Name.equalsAsciiL(SW_PROP_NAME(UNO_NAME_IS_SORT_ASCENDING)))
516cdf0e10cSrcweir {
517cdf0e10cSrcweir pSortKey->bSortAscending = *(sal_Bool*)pValue[j].Value.getValue();
518cdf0e10cSrcweir }
519cdf0e10cSrcweir }
520cdf0e10cSrcweir m_pSortKeyArr->Insert(pSortKey, m_pSortKeyArr->Count());
521cdf0e10cSrcweir }
522cdf0e10cSrcweir }
523cdf0e10cSrcweir }
524cdf0e10cSrcweir break;
525cdf0e10cSrcweir default:
526cdf0e10cSrcweir DBG_ERROR("illegal property");
527cdf0e10cSrcweir }
528cdf0e10cSrcweir return bRet;
529cdf0e10cSrcweir }
530cdf0e10cSrcweir
Modify(const SfxPoolItem * pOld,const SfxPoolItem * pNew)531cdf0e10cSrcweir void SwAuthorityFieldType::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew )
532cdf0e10cSrcweir {
533cdf0e10cSrcweir //re-generate positions of the fields
534cdf0e10cSrcweir DelSequenceArray();
535cdf0e10cSrcweir NotifyClients( pOld, pNew );
536cdf0e10cSrcweir }
537cdf0e10cSrcweir
GetSortKeyCount() const538cdf0e10cSrcweir sal_uInt16 SwAuthorityFieldType::GetSortKeyCount() const
539cdf0e10cSrcweir {
540cdf0e10cSrcweir return m_pSortKeyArr->Count();
541cdf0e10cSrcweir }
542cdf0e10cSrcweir
GetSortKey(sal_uInt16 nIdx) const543cdf0e10cSrcweir const SwTOXSortKey* SwAuthorityFieldType::GetSortKey(sal_uInt16 nIdx) const
544cdf0e10cSrcweir {
545cdf0e10cSrcweir SwTOXSortKey* pRet = 0;
546cdf0e10cSrcweir if(m_pSortKeyArr->Count() > nIdx)
547cdf0e10cSrcweir pRet = (*m_pSortKeyArr)[nIdx];
548cdf0e10cSrcweir DBG_ASSERT(pRet, "Sort key not found");
549cdf0e10cSrcweir return pRet;
550cdf0e10cSrcweir }
551cdf0e10cSrcweir
SetSortKeys(sal_uInt16 nKeyCount,SwTOXSortKey aKeys[])552cdf0e10cSrcweir void SwAuthorityFieldType::SetSortKeys(sal_uInt16 nKeyCount, SwTOXSortKey aKeys[])
553cdf0e10cSrcweir {
554cdf0e10cSrcweir m_pSortKeyArr->DeleteAndDestroy(0, m_pSortKeyArr->Count());
555cdf0e10cSrcweir sal_uInt16 nArrIdx = 0;
556cdf0e10cSrcweir for(sal_uInt16 i = 0; i < nKeyCount; i++)
557cdf0e10cSrcweir if(aKeys[i].eField < AUTH_FIELD_END)
558cdf0e10cSrcweir m_pSortKeyArr->Insert(new SwTOXSortKey(aKeys[i]), nArrIdx++);
559cdf0e10cSrcweir }
560cdf0e10cSrcweir
SwAuthorityField(SwAuthorityFieldType * pInitType,const String & rFieldContents)561cdf0e10cSrcweir SwAuthorityField::SwAuthorityField( SwAuthorityFieldType* pInitType,
562cdf0e10cSrcweir const String& rFieldContents )
563cdf0e10cSrcweir : SwField(pInitType),
564cdf0e10cSrcweir m_nTempSequencePos( -1 )
565cdf0e10cSrcweir {
566cdf0e10cSrcweir m_nHandle = pInitType->AddField( rFieldContents );
567cdf0e10cSrcweir }
568cdf0e10cSrcweir
SwAuthorityField(SwAuthorityFieldType * pInitType,long nSetHandle)569cdf0e10cSrcweir SwAuthorityField::SwAuthorityField( SwAuthorityFieldType* pInitType,
570cdf0e10cSrcweir long nSetHandle )
571cdf0e10cSrcweir : SwField( pInitType ),
572cdf0e10cSrcweir m_nHandle( nSetHandle ),
573cdf0e10cSrcweir m_nTempSequencePos( -1 )
574cdf0e10cSrcweir {
575cdf0e10cSrcweir pInitType->AddField( m_nHandle );
576cdf0e10cSrcweir }
577cdf0e10cSrcweir
~SwAuthorityField()578cdf0e10cSrcweir SwAuthorityField::~SwAuthorityField()
579cdf0e10cSrcweir {
580cdf0e10cSrcweir ((SwAuthorityFieldType* )GetTyp())->RemoveField(m_nHandle);
581cdf0e10cSrcweir }
582cdf0e10cSrcweir
Expand() const583cdf0e10cSrcweir String SwAuthorityField::Expand() const
584cdf0e10cSrcweir {
585cdf0e10cSrcweir SwAuthorityFieldType* pAuthType = (SwAuthorityFieldType*)GetTyp();
586cdf0e10cSrcweir String sRet;
587cdf0e10cSrcweir if(pAuthType->GetPrefix())
588cdf0e10cSrcweir sRet.Assign(pAuthType->GetPrefix());
589cdf0e10cSrcweir
590cdf0e10cSrcweir if( pAuthType->IsSequence() )
591cdf0e10cSrcweir {
592cdf0e10cSrcweir if(!pAuthType->GetDoc()->IsExpFldsLocked())
593cdf0e10cSrcweir m_nTempSequencePos = pAuthType->GetSequencePos( m_nHandle );
594cdf0e10cSrcweir if( m_nTempSequencePos >= 0 )
595cdf0e10cSrcweir sRet += String::CreateFromInt32( m_nTempSequencePos );
596cdf0e10cSrcweir }
597cdf0e10cSrcweir else
598cdf0e10cSrcweir {
599cdf0e10cSrcweir const SwAuthEntry* pEntry = pAuthType->GetEntryByHandle(m_nHandle);
600cdf0e10cSrcweir //TODO: Expand to: identifier, number sequence, ...
601cdf0e10cSrcweir if(pEntry)
602cdf0e10cSrcweir sRet += pEntry->GetAuthorField(AUTH_FIELD_IDENTIFIER);
603cdf0e10cSrcweir }
604cdf0e10cSrcweir if(pAuthType->GetSuffix())
605cdf0e10cSrcweir sRet += pAuthType->GetSuffix();
606cdf0e10cSrcweir return sRet;
607cdf0e10cSrcweir }
608cdf0e10cSrcweir
Copy() const609cdf0e10cSrcweir SwField* SwAuthorityField::Copy() const
610cdf0e10cSrcweir {
611cdf0e10cSrcweir SwAuthorityFieldType* pAuthType = (SwAuthorityFieldType*)GetTyp();
612cdf0e10cSrcweir return new SwAuthorityField(pAuthType, m_nHandle);
613cdf0e10cSrcweir }
614cdf0e10cSrcweir
GetFieldText(ToxAuthorityField eField) const615cdf0e10cSrcweir const String& SwAuthorityField::GetFieldText(ToxAuthorityField eField) const
616cdf0e10cSrcweir {
617cdf0e10cSrcweir SwAuthorityFieldType* pAuthType = (SwAuthorityFieldType*)GetTyp();
618cdf0e10cSrcweir const SwAuthEntry* pEntry = pAuthType->GetEntryByHandle( m_nHandle );
619cdf0e10cSrcweir return pEntry->GetAuthorField( eField );
620cdf0e10cSrcweir }
621cdf0e10cSrcweir
SetPar1(const String & rStr)622cdf0e10cSrcweir void SwAuthorityField::SetPar1(const String& rStr)
623cdf0e10cSrcweir {
624cdf0e10cSrcweir SwAuthorityFieldType* pInitType = (SwAuthorityFieldType* )GetTyp();
625cdf0e10cSrcweir pInitType->RemoveField(m_nHandle);
626cdf0e10cSrcweir m_nHandle = pInitType->AddField(rStr);
627cdf0e10cSrcweir }
628cdf0e10cSrcweir
GetDescription() const629cdf0e10cSrcweir String SwAuthorityField::GetDescription() const
630cdf0e10cSrcweir {
631cdf0e10cSrcweir return SW_RES(STR_AUTHORITY_ENTRY);
632cdf0e10cSrcweir }
633cdf0e10cSrcweir
634cdf0e10cSrcweir
635cdf0e10cSrcweir const char* aFieldNames[] =
636cdf0e10cSrcweir {
637cdf0e10cSrcweir "Identifier",
638cdf0e10cSrcweir "BibiliographicType",
639cdf0e10cSrcweir "Address",
640cdf0e10cSrcweir "Annote",
641cdf0e10cSrcweir "Author",
642cdf0e10cSrcweir "Booktitle",
643cdf0e10cSrcweir "Chapter",
644cdf0e10cSrcweir "Edition",
645cdf0e10cSrcweir "Editor",
646cdf0e10cSrcweir "Howpublished",
647cdf0e10cSrcweir "Institution",
648cdf0e10cSrcweir "Journal",
649cdf0e10cSrcweir "Month",
650cdf0e10cSrcweir "Note",
651cdf0e10cSrcweir "Number",
652cdf0e10cSrcweir "Organizations",
653cdf0e10cSrcweir "Pages",
654cdf0e10cSrcweir "Publisher",
655cdf0e10cSrcweir "School",
656cdf0e10cSrcweir "Series",
657cdf0e10cSrcweir "Title",
658cdf0e10cSrcweir "Report_Type",
659cdf0e10cSrcweir "Volume",
660cdf0e10cSrcweir "Year",
661cdf0e10cSrcweir "URL",
662cdf0e10cSrcweir "Custom1",
663cdf0e10cSrcweir "Custom2",
664cdf0e10cSrcweir "Custom3",
665cdf0e10cSrcweir "Custom4",
666cdf0e10cSrcweir "Custom5",
667cdf0e10cSrcweir "ISBN"
668cdf0e10cSrcweir };
669cdf0e10cSrcweir
QueryValue(Any & rAny,sal_uInt16) const670cdf0e10cSrcweir sal_Bool SwAuthorityField::QueryValue( Any& rAny, sal_uInt16 /*nWhichId*/ ) const
671cdf0e10cSrcweir {
672cdf0e10cSrcweir if(!GetTyp())
673cdf0e10cSrcweir return sal_False;
674cdf0e10cSrcweir const SwAuthEntry* pAuthEntry = ((SwAuthorityFieldType*)GetTyp())->GetEntryByHandle(m_nHandle);
675cdf0e10cSrcweir if(!pAuthEntry)
676cdf0e10cSrcweir return sal_False;
677cdf0e10cSrcweir Sequence <PropertyValue> aRet(AUTH_FIELD_END);
678cdf0e10cSrcweir PropertyValue* pValues = aRet.getArray();
679cdf0e10cSrcweir for(sal_Int16 i = 0; i < AUTH_FIELD_END; i++)
680cdf0e10cSrcweir {
681cdf0e10cSrcweir pValues[i].Name = C2U(aFieldNames[i]);
682cdf0e10cSrcweir const String& rField = pAuthEntry->GetAuthorField((ToxAuthorityField) i);
683cdf0e10cSrcweir if(i == AUTH_FIELD_AUTHORITY_TYPE)
684cdf0e10cSrcweir pValues[i].Value <<= sal_Int16(rField.ToInt32());
685cdf0e10cSrcweir else
686cdf0e10cSrcweir pValues[i].Value <<= OUString(rField);
687cdf0e10cSrcweir }
688cdf0e10cSrcweir rAny <<= aRet;
689cdf0e10cSrcweir return sal_False;
690cdf0e10cSrcweir }
691cdf0e10cSrcweir
lcl_Find(const OUString & rFieldName)692cdf0e10cSrcweir sal_Int16 lcl_Find(const OUString& rFieldName)
693cdf0e10cSrcweir {
694cdf0e10cSrcweir for(sal_Int16 i = 0; i < AUTH_FIELD_END; i++)
695cdf0e10cSrcweir if(!rFieldName.compareToAscii(aFieldNames[i]))
696cdf0e10cSrcweir return i;
697cdf0e10cSrcweir return -1;
698cdf0e10cSrcweir }
699cdf0e10cSrcweir //----------------------------------------------------------------------------
PutValue(const Any & rAny,sal_uInt16)700cdf0e10cSrcweir sal_Bool SwAuthorityField::PutValue( const Any& rAny, sal_uInt16 /*nWhichId*/ )
701cdf0e10cSrcweir {
702cdf0e10cSrcweir if(!GetTyp() || !((SwAuthorityFieldType*)GetTyp())->GetEntryByHandle(m_nHandle))
703cdf0e10cSrcweir return sal_False;
704cdf0e10cSrcweir
705cdf0e10cSrcweir Sequence <PropertyValue> aParam;
706cdf0e10cSrcweir if(!(rAny >>= aParam))
707cdf0e10cSrcweir return sal_False;
708cdf0e10cSrcweir
709cdf0e10cSrcweir String sToSet;
710cdf0e10cSrcweir sToSet.Fill(AUTH_FIELD_ISBN, TOX_STYLE_DELIMITER);
711cdf0e10cSrcweir const PropertyValue* pParam = aParam.getConstArray();
712cdf0e10cSrcweir for(sal_Int32 i = 0; i < aParam.getLength(); i++)
713cdf0e10cSrcweir {
714cdf0e10cSrcweir sal_Int16 nFound = lcl_Find(pParam[i].Name);
715cdf0e10cSrcweir if(nFound >= 0)
716cdf0e10cSrcweir {
717cdf0e10cSrcweir OUString sContent;
718cdf0e10cSrcweir if(AUTH_FIELD_AUTHORITY_TYPE == nFound)
719cdf0e10cSrcweir {
720cdf0e10cSrcweir sal_Int16 nVal = 0;
721cdf0e10cSrcweir pParam[i].Value >>= nVal;
722cdf0e10cSrcweir sContent = OUString::valueOf((sal_Int32)nVal);
723cdf0e10cSrcweir }
724cdf0e10cSrcweir else
725cdf0e10cSrcweir pParam[i].Value >>= sContent;
726cdf0e10cSrcweir sToSet.SetToken(nFound, TOX_STYLE_DELIMITER, sContent);
727cdf0e10cSrcweir }
728cdf0e10cSrcweir }
729cdf0e10cSrcweir
730cdf0e10cSrcweir ((SwAuthorityFieldType*)GetTyp())->RemoveField(m_nHandle);
731cdf0e10cSrcweir m_nHandle = ((SwAuthorityFieldType*)GetTyp())->AddField(sToSet);
732cdf0e10cSrcweir
733cdf0e10cSrcweir return sal_False;
734cdf0e10cSrcweir }
735cdf0e10cSrcweir
ChgTyp(SwFieldType * pFldTyp)736cdf0e10cSrcweir SwFieldType* SwAuthorityField::ChgTyp( SwFieldType* pFldTyp )
737cdf0e10cSrcweir {
738cdf0e10cSrcweir SwAuthorityFieldType* pSrcTyp = (SwAuthorityFieldType*)GetTyp(),
739cdf0e10cSrcweir * pDstTyp = (SwAuthorityFieldType*)pFldTyp;
740cdf0e10cSrcweir if( pSrcTyp != pDstTyp )
741cdf0e10cSrcweir {
742cdf0e10cSrcweir
743cdf0e10cSrcweir const SwAuthEntry* pEntry = pSrcTyp->GetEntryByHandle( m_nHandle );
744cdf0e10cSrcweir sal_uInt16 nHdlPos = pDstTyp->AppendField( *pEntry );
745cdf0e10cSrcweir pSrcTyp->RemoveField( m_nHandle );
746cdf0e10cSrcweir m_nHandle = pDstTyp->GetHandle( nHdlPos );
747cdf0e10cSrcweir pDstTyp->AddField( m_nHandle );
748cdf0e10cSrcweir SwField::ChgTyp( pFldTyp );
749cdf0e10cSrcweir }
750cdf0e10cSrcweir return pSrcTyp;
751cdf0e10cSrcweir }
752cdf0e10cSrcweir
753