xref: /aoo41x/main/sw/source/core/fields/authfld.cxx (revision c0286415)
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