xref: /aoo41x/main/sw/source/core/unocore/unofield.cxx (revision 6a85fc09)
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 #include <swtypes.hxx>
29cdf0e10cSrcweir #include <cmdid.h>
30cdf0e10cSrcweir #include <doc.hxx>
31cdf0e10cSrcweir #include <hints.hxx>
32cdf0e10cSrcweir #include <fmtfld.hxx>
33cdf0e10cSrcweir #include <txtfld.hxx>
34cdf0e10cSrcweir #include <ndtxt.hxx>
35cdf0e10cSrcweir #include <unomap.hxx>
36cdf0e10cSrcweir #include <unoprnms.hxx>
37cdf0e10cSrcweir #include <unotextrange.hxx>
38cdf0e10cSrcweir #include <unotextcursor.hxx>
39cdf0e10cSrcweir #include <unocoll.hxx>
40cdf0e10cSrcweir #include <sfx2/linkmgr.hxx>
41cdf0e10cSrcweir #include <docstat.hxx>
42cdf0e10cSrcweir #include <editsh.hxx>
43cdf0e10cSrcweir #include <viewsh.hxx>
44cdf0e10cSrcweir #include <comphelper/types.hxx>
45cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
46cdf0e10cSrcweir #include <com/sun/star/util/Time.hpp>
47cdf0e10cSrcweir #include <com/sun/star/util/DateTimeRange.hpp>
48cdf0e10cSrcweir #include <com/sun/star/util/DateTime.hpp>
49cdf0e10cSrcweir #include <com/sun/star/util/Date.hpp>
50cdf0e10cSrcweir #include <com/sun/star/beans/XFastPropertySet.hpp>
51cdf0e10cSrcweir #include <com/sun/star/beans/XPropertyStateChangeListener.hpp>
52cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp>
53cdf0e10cSrcweir #include <com/sun/star/beans/XPropertyContainer.hpp>
54cdf0e10cSrcweir 
55cdf0e10cSrcweir //undef to prevent error (from sfx2/docfile.cxx)
56cdf0e10cSrcweir #undef SEQUENCE
57cdf0e10cSrcweir #include <com/sun/star/text/SetVariableType.hpp>
58cdf0e10cSrcweir #include <com/sun/star/text/WrapTextMode.hpp>
59cdf0e10cSrcweir #include <com/sun/star/text/TextContentAnchorType.hpp>
60cdf0e10cSrcweir #include <com/sun/star/text/PageNumberType.hpp>
61cdf0e10cSrcweir #include <unofield.hxx>
62cdf0e10cSrcweir #include <unocrsr.hxx>
63cdf0e10cSrcweir #include <authfld.hxx>
64cdf0e10cSrcweir #include <flddat.hxx>
65cdf0e10cSrcweir #include <dbfld.hxx>
66cdf0e10cSrcweir #include <usrfld.hxx>
67cdf0e10cSrcweir #include <docufld.hxx>
68cdf0e10cSrcweir #include <expfld.hxx>
69cdf0e10cSrcweir #include <chpfld.hxx>
70cdf0e10cSrcweir #include <flddropdown.hxx>
71cdf0e10cSrcweir #include <poolfmt.hxx>
72cdf0e10cSrcweir #include <poolfmt.hrc>
73cdf0e10cSrcweir #include <pagedesc.hxx>
74cdf0e10cSrcweir #include <docary.hxx>
75cdf0e10cSrcweir #include <reffld.hxx>
76cdf0e10cSrcweir #include <ddefld.hxx>
77cdf0e10cSrcweir #include <SwStyleNameMapper.hxx>
78cdf0e10cSrcweir #include <swunohelper.hxx>
79cdf0e10cSrcweir #include <unofldmid.h>
80cdf0e10cSrcweir #include <scriptinfo.hxx>
81cdf0e10cSrcweir #include <tools/datetime.hxx>
82cdf0e10cSrcweir #include <tools/urlobj.hxx>
83cdf0e10cSrcweir #include <svx/dataaccessdescriptor.hxx>
84cdf0e10cSrcweir #define _SVSTDARR_STRINGS
85cdf0e10cSrcweir #include <svl/svstdarr.hxx>
86cdf0e10cSrcweir #include <vos/mutex.hxx>
87cdf0e10cSrcweir #include <vcl/svapp.hxx>
88cdf0e10cSrcweir #include <textapi.hxx>
89cdf0e10cSrcweir #include <editeng/outliner.hxx>
90cdf0e10cSrcweir #include <docsh.hxx>
91cdf0e10cSrcweir #include <fmtmeta.hxx> // MetaFieldManager
92cdf0e10cSrcweir #include <switerator.hxx>
933b32dd21SOliver-Rainer Wittmann 
94cdf0e10cSrcweir 
95cdf0e10cSrcweir using ::rtl::OUString;
96cdf0e10cSrcweir using namespace ::com::sun::star;
97cdf0e10cSrcweir using namespace nsSwDocInfoSubType;
98cdf0e10cSrcweir 
99cdf0e10cSrcweir #define COM_TEXT_FLDMASTER		"com.sun.star.text.FieldMaster."
100cdf0e10cSrcweir 
101cdf0e10cSrcweir // case-corrected version of the first part for the service names (see #i67811)
102cdf0e10cSrcweir #define COM_TEXT_FLDMASTER_CC   "com.sun.star.text.fieldmaster."
103cdf0e10cSrcweir 
104cdf0e10cSrcweir // note: this thing is indexed as an array, so do not insert/remove entries!
105cdf0e10cSrcweir static const sal_uInt16 aDocInfoSubTypeFromService[] =
106cdf0e10cSrcweir {
107cdf0e10cSrcweir 	DI_CHANGE | DI_SUB_AUTHOR,	//PROPERTY_MAP_FLDTYP_DOCINFO_CHANGE_AUTHOR
108cdf0e10cSrcweir 	DI_CHANGE | DI_SUB_DATE,	//PROPERTY_MAP_FLDTYP_DOCINFO_CHANGE_DATE_TIME
109cdf0e10cSrcweir 	DI_EDIT | DI_SUB_TIME,		//PROPERTY_MAP_FLDTYP_DOCINFO_EDIT_TIME
110cdf0e10cSrcweir 	DI_COMMENT,					//PROPERTY_MAP_FLDTYP_DOCINFO_DESCRIPTION
111cdf0e10cSrcweir 	DI_CREATE | DI_SUB_AUTHOR,	//PROPERTY_MAP_FLDTYP_DOCINFO_CREATE_AUTHOR
112cdf0e10cSrcweir 	DI_CREATE | DI_SUB_DATE,	//PROPERTY_MAP_FLDTYP_DOCINFO_CREATE_DATE_TIME
113cdf0e10cSrcweir 	0,       					//DUMMY
114cdf0e10cSrcweir 	0, 		        			//DUMMY
115cdf0e10cSrcweir 	0, 			        		//DUMMY
116cdf0e10cSrcweir 	0, 			        		//DUMMY
117cdf0e10cSrcweir 	DI_CUSTOM,					//PROPERTY_MAP_FLDTYP_DOCINFO_CUSTOM
118cdf0e10cSrcweir 	DI_PRINT | DI_SUB_AUTHOR,	//PROPERTY_MAP_FLDTYP_DOCINFO_PRINT_AUTHOR
119cdf0e10cSrcweir 	DI_PRINT | DI_SUB_DATE,		//PROPERTY_MAP_FLDTYP_DOCINFO_PRINT_DATE_TIME
120cdf0e10cSrcweir 	DI_KEYS,					//PROPERTY_MAP_FLDTYP_DOCINFO_KEY_WORDS
121cdf0e10cSrcweir 	DI_THEMA,					//PROPERTY_MAP_FLDTYP_DOCINFO_SUBJECT
122cdf0e10cSrcweir 	DI_TITEL,					//PROPERTY_MAP_FLDTYP_DOCINFO_TITLE
123cdf0e10cSrcweir 	DI_DOCNO					//PROPERTY_MAP_FLDTYP_DOCINFO_REVISION
124cdf0e10cSrcweir };
125cdf0e10cSrcweir struct ServiceIdResId
126cdf0e10cSrcweir {
127cdf0e10cSrcweir 	sal_uInt16 nResId;
128cdf0e10cSrcweir 	sal_uInt16 nServiceId;
129cdf0e10cSrcweir };
130cdf0e10cSrcweir static const ServiceIdResId aServiceToRes[] =
131cdf0e10cSrcweir {
132cdf0e10cSrcweir 	{RES_DATETIMEFLD, 	SW_SERVICE_FIELDTYPE_DATETIME				},
133cdf0e10cSrcweir 	{RES_USERFLD, 		SW_SERVICE_FIELDTYPE_USER                   },
134cdf0e10cSrcweir 	{RES_SETEXPFLD, 		SW_SERVICE_FIELDTYPE_SET_EXP            }    ,
135cdf0e10cSrcweir 	{RES_GETEXPFLD, 		SW_SERVICE_FIELDTYPE_GET_EXP            }    ,
136cdf0e10cSrcweir 	{RES_FILENAMEFLD, 	SW_SERVICE_FIELDTYPE_FILE_NAME              },
137cdf0e10cSrcweir 	{RES_PAGENUMBERFLD, 	SW_SERVICE_FIELDTYPE_PAGE_NUM           }    ,
138cdf0e10cSrcweir 	{RES_AUTHORFLD, 		SW_SERVICE_FIELDTYPE_AUTHOR             }    ,
139cdf0e10cSrcweir 	{RES_CHAPTERFLD, 	SW_SERVICE_FIELDTYPE_CHAPTER                },
140cdf0e10cSrcweir 	{RES_GETREFFLD, 		SW_SERVICE_FIELDTYPE_GET_REFERENCE      }    ,
141cdf0e10cSrcweir 	{RES_HIDDENTXTFLD, 	SW_SERVICE_FIELDTYPE_CONDITIONED_TEXT       },
142cdf0e10cSrcweir 	{RES_POSTITFLD, 		SW_SERVICE_FIELDTYPE_ANNOTATION         }    ,
143cdf0e10cSrcweir 	{RES_INPUTFLD, 		SW_SERVICE_FIELDTYPE_INPUT                  },
144cdf0e10cSrcweir 	{RES_MACROFLD, 		SW_SERVICE_FIELDTYPE_MACRO                  },
145cdf0e10cSrcweir 	{RES_DDEFLD, 		SW_SERVICE_FIELDTYPE_DDE                    },
146cdf0e10cSrcweir 	{RES_HIDDENPARAFLD, 	SW_SERVICE_FIELDTYPE_HIDDEN_PARA        }    ,
147cdf0e10cSrcweir 	{RES_DOCINFOFLD, 	SW_SERVICE_FIELDTYPE_DOC_INFO               },
148cdf0e10cSrcweir 	{RES_TEMPLNAMEFLD, 	SW_SERVICE_FIELDTYPE_TEMPLATE_NAME          },
149cdf0e10cSrcweir 	{RES_EXTUSERFLD, 	SW_SERVICE_FIELDTYPE_USER_EXT               },
150cdf0e10cSrcweir 	{RES_REFPAGESETFLD, 	SW_SERVICE_FIELDTYPE_REF_PAGE_SET       }    ,
151cdf0e10cSrcweir 	{RES_REFPAGEGETFLD, 	SW_SERVICE_FIELDTYPE_REF_PAGE_GET       }    ,
152cdf0e10cSrcweir 	{RES_JUMPEDITFLD, 	SW_SERVICE_FIELDTYPE_JUMP_EDIT              },
153cdf0e10cSrcweir 	{RES_SCRIPTFLD, 		SW_SERVICE_FIELDTYPE_SCRIPT             }    ,
154cdf0e10cSrcweir 	{RES_DBNEXTSETFLD, 	SW_SERVICE_FIELDTYPE_DATABASE_NEXT_SET      },
155cdf0e10cSrcweir 	{RES_DBNUMSETFLD, 	SW_SERVICE_FIELDTYPE_DATABASE_NUM_SET       },
156cdf0e10cSrcweir 	{RES_DBSETNUMBERFLD, SW_SERVICE_FIELDTYPE_DATABASE_SET_NUM      } ,
157cdf0e10cSrcweir 	{RES_DBFLD, 			SW_SERVICE_FIELDTYPE_DATABASE           }    ,
158cdf0e10cSrcweir 	{RES_DBNAMEFLD,		SW_SERVICE_FIELDTYPE_DATABASE_NAME          },
159cdf0e10cSrcweir 	{RES_DOCSTATFLD, 	SW_SERVICE_FIELDTYPE_PAGE_COUNT             },
160cdf0e10cSrcweir 	{RES_DOCSTATFLD, 	SW_SERVICE_FIELDTYPE_PARAGRAPH_COUNT        },
161cdf0e10cSrcweir 	{RES_DOCSTATFLD, 	SW_SERVICE_FIELDTYPE_WORD_COUNT             },
162cdf0e10cSrcweir 	{RES_DOCSTATFLD, 	SW_SERVICE_FIELDTYPE_CHARACTER_COUNT        },
163cdf0e10cSrcweir 	{RES_DOCSTATFLD, 	SW_SERVICE_FIELDTYPE_TABLE_COUNT            },
164cdf0e10cSrcweir 	{RES_DOCSTATFLD, 	SW_SERVICE_FIELDTYPE_GRAPHIC_OBJECT_COUNT   },
165cdf0e10cSrcweir 	{RES_DOCSTATFLD, 	SW_SERVICE_FIELDTYPE_EMBEDDED_OBJECT_COUNT  },
166cdf0e10cSrcweir 	{RES_DOCINFOFLD, 	SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_AUTHOR  },
167cdf0e10cSrcweir 	{RES_DOCINFOFLD,		SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_DATE_TIME},
168cdf0e10cSrcweir 	{RES_DOCINFOFLD,		SW_SERVICE_FIELDTYPE_DOCINFO_EDIT_TIME       },
169cdf0e10cSrcweir 	{RES_DOCINFOFLD,		SW_SERVICE_FIELDTYPE_DOCINFO_DESCRIPTION     },
170cdf0e10cSrcweir 	{RES_DOCINFOFLD,		SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_AUTHOR   },
171cdf0e10cSrcweir 	{RES_DOCINFOFLD,		SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_DATE_TIME},
172cdf0e10cSrcweir 	{RES_DOCINFOFLD,		SW_SERVICE_FIELDTYPE_DOCINFO_CUSTOM          },
173cdf0e10cSrcweir 	{RES_DOCINFOFLD,		SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_AUTHOR    },
174cdf0e10cSrcweir 	{RES_DOCINFOFLD,		SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_DATE_TIME },
175cdf0e10cSrcweir 	{RES_DOCINFOFLD,		SW_SERVICE_FIELDTYPE_DOCINFO_KEY_WORDS       },
176cdf0e10cSrcweir 	{RES_DOCINFOFLD,		SW_SERVICE_FIELDTYPE_DOCINFO_SUBJECT         },
177cdf0e10cSrcweir 	{RES_DOCINFOFLD,		SW_SERVICE_FIELDTYPE_DOCINFO_TITLE           },
178cdf0e10cSrcweir 	{RES_INPUTFLD, 		SW_SERVICE_FIELDTYPE_INPUT_USER                  },
179cdf0e10cSrcweir 	{RES_HIDDENTXTFLD, 	SW_SERVICE_FIELDTYPE_HIDDEN_TEXT                 },
180cdf0e10cSrcweir 	{RES_AUTHORITY, 	SW_SERVICE_FIELDTYPE_BIBLIOGRAPHY                },
181cdf0e10cSrcweir 	{RES_COMBINED_CHARS,	SW_SERVICE_FIELDTYPE_COMBINED_CHARACTERS	 },
182cdf0e10cSrcweir 	{RES_DROPDOWN,	SW_SERVICE_FIELDTYPE_DROPDOWN	                     },
183cdf0e10cSrcweir     {RES_TABLEFLD,      SW_SERVICE_FIELDTYPE_TABLE_FORMULA              },
184cdf0e10cSrcweir 	{USHRT_MAX,			USHRT_MAX                                        }
185cdf0e10cSrcweir };
186cdf0e10cSrcweir //-----------------------------------------------------------------
lcl_ServiceIdToResId(sal_uInt16 nServiceId)187cdf0e10cSrcweir sal_uInt16 lcl_ServiceIdToResId(sal_uInt16 nServiceId)
188cdf0e10cSrcweir {
189cdf0e10cSrcweir 	const ServiceIdResId* pMap = aServiceToRes;
190cdf0e10cSrcweir 	while( USHRT_MAX != pMap->nServiceId && nServiceId != pMap->nServiceId )
191cdf0e10cSrcweir 			++pMap;
192cdf0e10cSrcweir #ifdef DBG_UTIL
193cdf0e10cSrcweir 	if( USHRT_MAX == pMap->nServiceId )
194cdf0e10cSrcweir 		DBG_ERROR("service id not found");
195cdf0e10cSrcweir #endif
196cdf0e10cSrcweir 	return pMap->nResId;
197cdf0e10cSrcweir }
198cdf0e10cSrcweir //-----------------------------------------------------------------
lcl_GetServiceForField(const SwField & rFld)199cdf0e10cSrcweir sal_uInt16 lcl_GetServiceForField( const SwField& rFld )
200cdf0e10cSrcweir {
201cdf0e10cSrcweir 	sal_uInt16 nWhich = rFld.Which(), nSrvId = USHRT_MAX;
202cdf0e10cSrcweir 	//special handling for some fields
203cdf0e10cSrcweir 	switch( nWhich )
204cdf0e10cSrcweir 	{
205cdf0e10cSrcweir 	case RES_INPUTFLD:
206cdf0e10cSrcweir 		if( INP_USR == (rFld.GetSubType() & 0x00ff) )
207cdf0e10cSrcweir 			nSrvId = SW_SERVICE_FIELDTYPE_INPUT_USER;
208cdf0e10cSrcweir 		break;
209cdf0e10cSrcweir 
210cdf0e10cSrcweir 	case RES_DOCINFOFLD:
211cdf0e10cSrcweir 		{
212cdf0e10cSrcweir 			sal_uInt16 nSubType = rFld.GetSubType();
213cdf0e10cSrcweir 			switch( (nSubType & 0xff))
214cdf0e10cSrcweir 			{
215cdf0e10cSrcweir 			case DI_CHANGE:
216cdf0e10cSrcweir 				nSrvId = ((nSubType&0x300) == DI_SUB_AUTHOR)
217cdf0e10cSrcweir 						? SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_AUTHOR
218cdf0e10cSrcweir 						: SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_DATE_TIME;
219cdf0e10cSrcweir 				break;
220cdf0e10cSrcweir 			case DI_CREATE:
221cdf0e10cSrcweir 				nSrvId = ((nSubType&0x300) == DI_SUB_AUTHOR)
222cdf0e10cSrcweir 						? SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_AUTHOR
223cdf0e10cSrcweir 						: SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_DATE_TIME;
224cdf0e10cSrcweir 				break;
225cdf0e10cSrcweir 			case DI_PRINT:
226cdf0e10cSrcweir 				nSrvId = ((nSubType&0x300) == DI_SUB_AUTHOR)
227cdf0e10cSrcweir 						? SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_AUTHOR
228cdf0e10cSrcweir 						: SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_DATE_TIME;
229cdf0e10cSrcweir 				break;
230cdf0e10cSrcweir 			case DI_EDIT:	nSrvId = SW_SERVICE_FIELDTYPE_DOCINFO_EDIT_TIME;break;
231cdf0e10cSrcweir 			case DI_COMMENT:nSrvId = SW_SERVICE_FIELDTYPE_DOCINFO_DESCRIPTION;break;
232cdf0e10cSrcweir 			case DI_KEYS:   nSrvId = SW_SERVICE_FIELDTYPE_DOCINFO_KEY_WORDS;break;
233cdf0e10cSrcweir 			case DI_THEMA:  nSrvId = SW_SERVICE_FIELDTYPE_DOCINFO_SUBJECT;	break;
234cdf0e10cSrcweir 			case DI_TITEL:  nSrvId = SW_SERVICE_FIELDTYPE_DOCINFO_TITLE;	break;
235cdf0e10cSrcweir 			case DI_DOCNO:  nSrvId = SW_SERVICE_FIELDTYPE_DOCINFO_REVISION;	break;
236cdf0e10cSrcweir 			case DI_CUSTOM: nSrvId = SW_SERVICE_FIELDTYPE_DOCINFO_CUSTOM;	break;
237cdf0e10cSrcweir 			}
238cdf0e10cSrcweir 		}
239cdf0e10cSrcweir 		break;
240cdf0e10cSrcweir 
241cdf0e10cSrcweir 	case RES_HIDDENTXTFLD:
242cdf0e10cSrcweir 		nSrvId = TYP_CONDTXTFLD == rFld.GetSubType()
243cdf0e10cSrcweir 						? SW_SERVICE_FIELDTYPE_CONDITIONED_TEXT
244cdf0e10cSrcweir 						: SW_SERVICE_FIELDTYPE_HIDDEN_TEXT;
245cdf0e10cSrcweir 		break;
246cdf0e10cSrcweir 
247cdf0e10cSrcweir 	case RES_DOCSTATFLD:
248cdf0e10cSrcweir 		{
249cdf0e10cSrcweir 			switch( rFld.GetSubType() )
250cdf0e10cSrcweir 			{
251cdf0e10cSrcweir 			case DS_PAGE: nSrvId = SW_SERVICE_FIELDTYPE_PAGE_COUNT; break;
252cdf0e10cSrcweir 			case DS_PARA: nSrvId = SW_SERVICE_FIELDTYPE_PARAGRAPH_COUNT; break;
253cdf0e10cSrcweir 			case DS_WORD: nSrvId = SW_SERVICE_FIELDTYPE_WORD_COUNT     ; break;
254cdf0e10cSrcweir 			case DS_CHAR: nSrvId = SW_SERVICE_FIELDTYPE_CHARACTER_COUNT; break;
255cdf0e10cSrcweir 			case DS_TBL:  nSrvId = SW_SERVICE_FIELDTYPE_TABLE_COUNT    ; break;
256cdf0e10cSrcweir 			case DS_GRF:  nSrvId = SW_SERVICE_FIELDTYPE_GRAPHIC_OBJECT_COUNT; break;
257cdf0e10cSrcweir 			case DS_OLE:  nSrvId = SW_SERVICE_FIELDTYPE_EMBEDDED_OBJECT_COUNT; break;
258cdf0e10cSrcweir 			}
259cdf0e10cSrcweir 		}
260cdf0e10cSrcweir 		break;
261cdf0e10cSrcweir 	}
262cdf0e10cSrcweir 	if( USHRT_MAX == nSrvId )
263cdf0e10cSrcweir 	{
264cdf0e10cSrcweir 		for( const ServiceIdResId* pMap = aServiceToRes;
265cdf0e10cSrcweir 				USHRT_MAX != pMap->nResId; ++pMap )
266cdf0e10cSrcweir 			if( nWhich == pMap->nResId )
267cdf0e10cSrcweir 			{
268cdf0e10cSrcweir 				nSrvId = pMap->nServiceId;
269cdf0e10cSrcweir 				break;
270cdf0e10cSrcweir 			}
271cdf0e10cSrcweir 	}
272cdf0e10cSrcweir #ifdef DBG_UTIL
273cdf0e10cSrcweir 	if( USHRT_MAX == nSrvId )
274cdf0e10cSrcweir 		DBG_ERROR("resid not found");
275cdf0e10cSrcweir #endif
276cdf0e10cSrcweir 	return nSrvId;
277cdf0e10cSrcweir }
278cdf0e10cSrcweir 
lcl_GetPropMapIdForFieldType(sal_uInt16 nWhich)279cdf0e10cSrcweir sal_uInt16 lcl_GetPropMapIdForFieldType( sal_uInt16 nWhich )
280cdf0e10cSrcweir {
281cdf0e10cSrcweir 	sal_uInt16 nId;
282cdf0e10cSrcweir 	switch( nWhich )
283cdf0e10cSrcweir 	{
284cdf0e10cSrcweir 	case RES_USERFLD:	nId = PROPERTY_MAP_FLDMSTR_USER;			break;
285cdf0e10cSrcweir 	case RES_DBFLD:		nId = PROPERTY_MAP_FLDMSTR_DATABASE;		break;
286cdf0e10cSrcweir 	case RES_SETEXPFLD:	nId = PROPERTY_MAP_FLDMSTR_SET_EXP;			break;
287cdf0e10cSrcweir 	case RES_DDEFLD:	nId = PROPERTY_MAP_FLDMSTR_DDE;				break;
288cdf0e10cSrcweir 	case RES_AUTHORITY:	nId = PROPERTY_MAP_FLDMSTR_BIBLIOGRAPHY;	break;
289cdf0e10cSrcweir 	default:			nId = PROPERTY_MAP_FLDMSTR_DUMMY0;
290cdf0e10cSrcweir 	}
291cdf0e10cSrcweir 	return nId;
292cdf0e10cSrcweir }
293cdf0e10cSrcweir 
294cdf0e10cSrcweir 
GetFieldTypeMId(const OUString & rProperty,const SwFieldType & rTyp)295cdf0e10cSrcweir sal_uInt16 GetFieldTypeMId( const OUString& rProperty, const SwFieldType& rTyp )
296cdf0e10cSrcweir {
297cdf0e10cSrcweir 	sal_uInt16 nId = lcl_GetPropMapIdForFieldType( rTyp.Which() );
298cdf0e10cSrcweir     const SfxItemPropertySet* pSet = aSwMapProvider.GetPropertySet( nId );
299cdf0e10cSrcweir     if( !pSet )
300cdf0e10cSrcweir 		nId = USHRT_MAX;
301cdf0e10cSrcweir 	else
302cdf0e10cSrcweir     {
303cdf0e10cSrcweir         const SfxItemPropertySimpleEntry* pEntry = pSet->getPropertyMap()->getByName(rProperty);
304cdf0e10cSrcweir         nId = pEntry ? pEntry->nWID : USHRT_MAX;
305cdf0e10cSrcweir     }
306cdf0e10cSrcweir 	return nId;
307cdf0e10cSrcweir }
308cdf0e10cSrcweir 
lcl_GetPropertyMapOfService(sal_uInt16 nServiceId)309cdf0e10cSrcweir sal_uInt16 lcl_GetPropertyMapOfService( sal_uInt16 nServiceId )
310cdf0e10cSrcweir {
311cdf0e10cSrcweir 	sal_uInt16 nRet;
312cdf0e10cSrcweir 	switch ( nServiceId)
313cdf0e10cSrcweir 	{
314cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DATETIME: nRet = PROPERTY_MAP_FLDTYP_DATETIME; break;
315cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_USER: nRet = PROPERTY_MAP_FLDTYP_USER; break;
316cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_SET_EXP: nRet = PROPERTY_MAP_FLDTYP_SET_EXP; break;
317cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_GET_EXP: nRet = PROPERTY_MAP_FLDTYP_GET_EXP; break;
318cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_FILE_NAME: nRet = PROPERTY_MAP_FLDTYP_FILE_NAME; break;
319cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_PAGE_NUM: nRet = PROPERTY_MAP_FLDTYP_PAGE_NUM; break;
320cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_AUTHOR: nRet = PROPERTY_MAP_FLDTYP_AUTHOR; break;
321cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_CHAPTER: nRet = PROPERTY_MAP_FLDTYP_CHAPTER; break;
322cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_GET_REFERENCE: nRet = PROPERTY_MAP_FLDTYP_GET_REFERENCE; break;
323cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_CONDITIONED_TEXT: nRet = PROPERTY_MAP_FLDTYP_CONDITIONED_TEXT; break;
324cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_ANNOTATION: nRet = PROPERTY_MAP_FLDTYP_ANNOTATION; break;
325cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_INPUT_USER:
326cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_INPUT: nRet = PROPERTY_MAP_FLDTYP_INPUT; break;
327cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_MACRO: nRet = PROPERTY_MAP_FLDTYP_MACRO; break;
328cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DDE: nRet = PROPERTY_MAP_FLDTYP_DDE; break;
329cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_HIDDEN_PARA: nRet = PROPERTY_MAP_FLDTYP_HIDDEN_PARA; break;
330cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DOC_INFO: nRet = PROPERTY_MAP_FLDTYP_DOC_INFO; break;
331cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_TEMPLATE_NAME: nRet = PROPERTY_MAP_FLDTYP_TEMPLATE_NAME; break;
332cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_USER_EXT: nRet = PROPERTY_MAP_FLDTYP_USER_EXT; break;
333cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_REF_PAGE_SET: nRet = PROPERTY_MAP_FLDTYP_REF_PAGE_SET; break;
334cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_REF_PAGE_GET: nRet = PROPERTY_MAP_FLDTYP_REF_PAGE_GET; break;
335cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_JUMP_EDIT: nRet = PROPERTY_MAP_FLDTYP_JUMP_EDIT; break;
336cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_SCRIPT: nRet = PROPERTY_MAP_FLDTYP_SCRIPT; break;
337cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DATABASE_NEXT_SET: nRet = PROPERTY_MAP_FLDTYP_DATABASE_NEXT_SET; break;
338cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DATABASE_NUM_SET: nRet = PROPERTY_MAP_FLDTYP_DATABASE_NUM_SET; break;
339cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DATABASE_SET_NUM: nRet = PROPERTY_MAP_FLDTYP_DATABASE_SET_NUM; break;
340cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DATABASE: nRet = PROPERTY_MAP_FLDTYP_DATABASE; break;
341cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DATABASE_NAME: nRet = PROPERTY_MAP_FLDTYP_DATABASE_NAME; break;
342cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_TABLE_FORMULA: nRet = PROPERTY_MAP_FLDTYP_TABLE_FORMULA; break;
343cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_PAGE_COUNT:
344cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_PARAGRAPH_COUNT:
345cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_WORD_COUNT:
346cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_CHARACTER_COUNT:
347cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_TABLE_COUNT:
348cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_GRAPHIC_OBJECT_COUNT:
349cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_EMBEDDED_OBJECT_COUNT: nRet = PROPERTY_MAP_FLDTYP_DOCSTAT; break;
350cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_AUTHOR:
351cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_AUTHOR:
352cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_AUTHOR: nRet = PROPERTY_MAP_FLDTYP_DOCINFO_AUTHOR; break;
353cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_DATE_TIME:
354cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_DATE_TIME:
355cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_DATE_TIME: nRet = PROPERTY_MAP_FLDTYP_DOCINFO_DATE_TIME; break;
356cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DOCINFO_EDIT_TIME: nRet = PROPERTY_MAP_FLDTYP_DOCINFO_EDIT_TIME; break;
357cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DOCINFO_CUSTOM: nRet = PROPERTY_MAP_FLDTYP_DOCINFO_CUSTOM; break;
358cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DOCINFO_DESCRIPTION:
359cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DOCINFO_KEY_WORDS:
360cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DOCINFO_SUBJECT:
361cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DOCINFO_TITLE: nRet = PROPERTY_MAP_FLDTYP_DOCINFO_MISC; break;
362cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DOCINFO_REVISION: nRet = PROPERTY_MAP_FLDTYP_DOCINFO_REVISION; break;
363cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_BIBLIOGRAPHY: nRet = PROPERTY_MAP_FLDTYP_BIBLIOGRAPHY; break;
364cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DUMMY_0:
365cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_COMBINED_CHARACTERS: nRet = PROPERTY_MAP_FLDTYP_COMBINED_CHARACTERS; break;
366cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DROPDOWN: nRet = PROPERTY_MAP_FLDTYP_DROPDOWN; break;
367cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DUMMY_4:
368cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DUMMY_5:
369cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DUMMY_6:
370cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_DUMMY_7:
371cdf0e10cSrcweir                 nRet = PROPERTY_MAP_FLDTYP_DUMMY_0; break;
372cdf0e10cSrcweir 	case SW_SERVICE_FIELDMASTER_USER: nRet = PROPERTY_MAP_FLDMSTR_USER; break;
373cdf0e10cSrcweir 	case SW_SERVICE_FIELDMASTER_DDE: nRet = PROPERTY_MAP_FLDMSTR_DDE; break;
374cdf0e10cSrcweir 	case SW_SERVICE_FIELDMASTER_SET_EXP: nRet = PROPERTY_MAP_FLDMSTR_SET_EXP; break;
375cdf0e10cSrcweir 	case SW_SERVICE_FIELDMASTER_DATABASE: nRet = PROPERTY_MAP_FLDMSTR_DATABASE; break;
376cdf0e10cSrcweir 	case SW_SERVICE_FIELDMASTER_BIBLIOGRAPHY: nRet = PROPERTY_MAP_FLDMSTR_BIBLIOGRAPHY; break;
377cdf0e10cSrcweir 	case SW_SERVICE_FIELDMASTER_DUMMY2:
378cdf0e10cSrcweir 	case SW_SERVICE_FIELDMASTER_DUMMY3:
379cdf0e10cSrcweir 	case SW_SERVICE_FIELDMASTER_DUMMY4:
380cdf0e10cSrcweir 	case SW_SERVICE_FIELDMASTER_DUMMY5: nRet = PROPERTY_MAP_FLDMSTR_DUMMY0; break;
381cdf0e10cSrcweir 	case SW_SERVICE_FIELDTYPE_HIDDEN_TEXT: nRet = PROPERTY_MAP_FLDTYP_HIDDEN_TEXT; break;
382cdf0e10cSrcweir 	default:
383cdf0e10cSrcweir 		DBG_ERROR( "wrong service id" );
384cdf0e10cSrcweir 		nRet = USHRT_MAX;
385cdf0e10cSrcweir 	}
386cdf0e10cSrcweir 	return nRet;
387cdf0e10cSrcweir }
388cdf0e10cSrcweir 
389cdf0e10cSrcweir /******************************************************************
390cdf0e10cSrcweir  * SwXFieldMaster
391cdf0e10cSrcweir  ******************************************************************/
392cdf0e10cSrcweir TYPEINIT1(SwXFieldMaster, SwClient);
393cdf0e10cSrcweir 
getUnoTunnelId()394cdf0e10cSrcweir const uno::Sequence< sal_Int8 > & SwXFieldMaster::getUnoTunnelId()
395cdf0e10cSrcweir {
396cdf0e10cSrcweir     static uno::Sequence< sal_Int8 > aSeq = ::CreateUnoTunnelId();
397cdf0e10cSrcweir 	return aSeq;
398cdf0e10cSrcweir }
399cdf0e10cSrcweir 
getSomething(const uno::Sequence<sal_Int8> & rId)400cdf0e10cSrcweir sal_Int64 SAL_CALL SwXFieldMaster::getSomething( const uno::Sequence< sal_Int8 >& rId )
401cdf0e10cSrcweir 	throw(uno::RuntimeException)
402cdf0e10cSrcweir {
403cdf0e10cSrcweir     if( rId.getLength() == 16
404cdf0e10cSrcweir         && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
405cdf0e10cSrcweir 										rId.getConstArray(), 16 ) )
406cdf0e10cSrcweir     {
407cdf0e10cSrcweir 		return sal::static_int_cast< sal_Int64 >( reinterpret_cast< sal_IntPtr >(this) );
408cdf0e10cSrcweir     }
409cdf0e10cSrcweir 	return 0;
410cdf0e10cSrcweir }
411cdf0e10cSrcweir 
getImplementationName(void)412cdf0e10cSrcweir OUString SwXFieldMaster::getImplementationName(void) throw( uno::RuntimeException )
413cdf0e10cSrcweir {
414cdf0e10cSrcweir 	return C2U("SwXFieldMaster");
415cdf0e10cSrcweir }
416cdf0e10cSrcweir 
supportsService(const OUString & rServiceName)417cdf0e10cSrcweir sal_Bool SwXFieldMaster::supportsService(const OUString& rServiceName) throw( uno::RuntimeException )
418cdf0e10cSrcweir {
419cdf0e10cSrcweir     sal_Bool bRet = sal_False;
420cdf0e10cSrcweir     if(rServiceName.equalsAsciiL(
421cdf0e10cSrcweir 			RTL_CONSTASCII_STRINGPARAM("com.sun.star.text.TextFieldMaster")))
422cdf0e10cSrcweir         bRet = sal_True;
423cdf0e10cSrcweir     else
424cdf0e10cSrcweir     {
425cdf0e10cSrcweir 		const sal_Char* pEntry;
426cdf0e10cSrcweir         switch( nResTypeId )
427cdf0e10cSrcweir         {
428cdf0e10cSrcweir         case RES_USERFLD:	pEntry = "User"; 			break;
429cdf0e10cSrcweir         case RES_DBFLD:		pEntry = "Database"; 		break;
430cdf0e10cSrcweir         case RES_SETEXPFLD:	pEntry = "SetExpression";	break;
431cdf0e10cSrcweir         case RES_DDEFLD:	pEntry = "DDE";				break;
432cdf0e10cSrcweir         case RES_AUTHORITY:	pEntry = "Bibliography"; 	break;
433cdf0e10cSrcweir 		default: pEntry = 0;
434cdf0e10cSrcweir         }
435cdf0e10cSrcweir 		if( pEntry )
436cdf0e10cSrcweir 		{
437cdf0e10cSrcweir 			ByteString aTmp( RTL_CONSTASCII_STRINGPARAM(
438cdf0e10cSrcweir 							"com.sun.star.text.fieldmaster."));
439cdf0e10cSrcweir 			aTmp.Append( pEntry );
440cdf0e10cSrcweir 			bRet = rServiceName.equalsAsciiL(aTmp.GetBuffer(), aTmp.Len());
441cdf0e10cSrcweir 		}
442cdf0e10cSrcweir     }
443cdf0e10cSrcweir     return bRet;
444cdf0e10cSrcweir }
445cdf0e10cSrcweir 
getSupportedServiceNames(void)446cdf0e10cSrcweir uno::Sequence< OUString > SwXFieldMaster::getSupportedServiceNames(void) throw( uno::RuntimeException )
447cdf0e10cSrcweir {
448cdf0e10cSrcweir     uno::Sequence< OUString > aRet(2);
449cdf0e10cSrcweir 	OUString* pArray = aRet.getArray();
450cdf0e10cSrcweir     pArray[0] = C2U("com.sun.star.text.TextFieldMaster");
451cdf0e10cSrcweir 
452cdf0e10cSrcweir 	const sal_Char* pEntry1;
453cdf0e10cSrcweir 	switch( nResTypeId )
454cdf0e10cSrcweir 	{
455cdf0e10cSrcweir 	case RES_USERFLD: 	pEntry1 = "User"; 			break;
456cdf0e10cSrcweir     case RES_DBFLD:	  	pEntry1 = "Database";		break;
457cdf0e10cSrcweir     case RES_SETEXPFLD:	pEntry1 = "SetExpression";	break;
458cdf0e10cSrcweir     case RES_DDEFLD:	pEntry1 = "DDE"; 			break;
459cdf0e10cSrcweir     case RES_AUTHORITY:	pEntry1 = "Bibliography";	break;
460cdf0e10cSrcweir 	default: pEntry1 = 0;
461cdf0e10cSrcweir 	}
462cdf0e10cSrcweir 	if( pEntry1 )
463cdf0e10cSrcweir 	{
464cdf0e10cSrcweir 		String s;
465cdf0e10cSrcweir 		s.AppendAscii( "com.sun.star.text.fieldmaster." ).AppendAscii( pEntry1 );
466cdf0e10cSrcweir 	    pArray[1] = s;
467cdf0e10cSrcweir 	}
468cdf0e10cSrcweir 	return aRet;
469cdf0e10cSrcweir }
470cdf0e10cSrcweir 
SwXFieldMaster(SwDoc * pDoc,sal_uInt16 nResId)471cdf0e10cSrcweir SwXFieldMaster::SwXFieldMaster(SwDoc* pDoc, sal_uInt16 nResId) :
472cdf0e10cSrcweir 	aLstnrCntnr( (XPropertySet*)this),
473cdf0e10cSrcweir 	nResTypeId(nResId),
474cdf0e10cSrcweir 	m_pDoc(pDoc),
475cdf0e10cSrcweir 	m_bIsDescriptor(sal_True),
476cdf0e10cSrcweir 	fParam1(0.),
477cdf0e10cSrcweir 	nParam1(-1),
478cdf0e10cSrcweir 	bParam1(sal_False),
479cdf0e10cSrcweir 	nParam2(0)
480cdf0e10cSrcweir {
481cdf0e10cSrcweir     pDoc->GetPageDescFromPool(RES_POOLPAGE_STANDARD)->Add(this);
482cdf0e10cSrcweir }
483cdf0e10cSrcweir 
SwXFieldMaster(SwFieldType & rType,SwDoc * pDoc)484cdf0e10cSrcweir SwXFieldMaster::SwXFieldMaster(SwFieldType& rType, SwDoc* pDoc) :
485cdf0e10cSrcweir 	SwClient(&rType),
486cdf0e10cSrcweir 	aLstnrCntnr( (XPropertySet*)this),
487cdf0e10cSrcweir 	nResTypeId(rType.Which()),
488cdf0e10cSrcweir 	m_pDoc(pDoc),
489cdf0e10cSrcweir 	m_bIsDescriptor(sal_False),
490cdf0e10cSrcweir 	fParam1(0.),
491cdf0e10cSrcweir 	nParam1(-1),
492cdf0e10cSrcweir 	bParam1(sal_False)
493cdf0e10cSrcweir {
494cdf0e10cSrcweir 
495cdf0e10cSrcweir }
496cdf0e10cSrcweir 
~SwXFieldMaster()497cdf0e10cSrcweir SwXFieldMaster::~SwXFieldMaster()
498cdf0e10cSrcweir {
499cdf0e10cSrcweir 
500cdf0e10cSrcweir }
501cdf0e10cSrcweir 
getPropertySetInfo(void)502cdf0e10cSrcweir uno::Reference< beans::XPropertySetInfo >  SwXFieldMaster::getPropertySetInfo(void)
503cdf0e10cSrcweir 											throw( uno::RuntimeException )
504cdf0e10cSrcweir {
505cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
506cdf0e10cSrcweir     uno::Reference< beans::XPropertySetInfo >  aRef =
507cdf0e10cSrcweir                         aSwMapProvider.GetPropertySet(
508cdf0e10cSrcweir                                 lcl_GetPropMapIdForFieldType( nResTypeId ) )->getPropertySetInfo();
509cdf0e10cSrcweir 	return aRef;
510cdf0e10cSrcweir }
511cdf0e10cSrcweir 
setPropertyValue(const OUString & rPropertyName,const uno::Any & rValue)512cdf0e10cSrcweir void SwXFieldMaster::setPropertyValue( const OUString& rPropertyName,
513cdf0e10cSrcweir 									const uno::Any& rValue)
514cdf0e10cSrcweir 	throw( beans::UnknownPropertyException, beans::PropertyVetoException,
515cdf0e10cSrcweir 			lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException)
516cdf0e10cSrcweir {
517cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
518cdf0e10cSrcweir     SwFieldType* pType = GetFldType(sal_True);
519cdf0e10cSrcweir 	if(pType)
520cdf0e10cSrcweir 	{
521cdf0e10cSrcweir 		sal_Bool bSetValue = sal_True;
522cdf0e10cSrcweir 		if( rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_SUB_TYPE)))
523cdf0e10cSrcweir 		{
524cdf0e10cSrcweir 			const SvStringsDtor& rExtraArr = SwStyleNameMapper::GetExtraUINameArray();
525cdf0e10cSrcweir 			String sTypeName = pType->GetName();
526cdf0e10cSrcweir 			static sal_uInt16 nIds[] =
527cdf0e10cSrcweir 			{
528cdf0e10cSrcweir 				RES_POOLCOLL_LABEL_DRAWING - RES_POOLCOLL_EXTRA_BEGIN,
529cdf0e10cSrcweir 				RES_POOLCOLL_LABEL_ABB - RES_POOLCOLL_EXTRA_BEGIN,
530cdf0e10cSrcweir 				RES_POOLCOLL_LABEL_TABLE - RES_POOLCOLL_EXTRA_BEGIN,
531cdf0e10cSrcweir 				RES_POOLCOLL_LABEL_FRAME- RES_POOLCOLL_EXTRA_BEGIN,
532cdf0e10cSrcweir 				0
533cdf0e10cSrcweir 			};
534cdf0e10cSrcweir 			for(const sal_uInt16 * pIds = nIds; *pIds; ++pIds)
535cdf0e10cSrcweir 			{
536cdf0e10cSrcweir 				if(sTypeName ==	*rExtraArr[ *pIds ] )
537cdf0e10cSrcweir 				{
538cdf0e10cSrcweir 					bSetValue = sal_False;
539cdf0e10cSrcweir 					break;
540cdf0e10cSrcweir 				}
541cdf0e10cSrcweir 			}
542cdf0e10cSrcweir 		}
543bb9d84a5SOliver-Rainer Wittmann         if ( bSetValue )
544bb9d84a5SOliver-Rainer Wittmann         {
545cdf0e10cSrcweir             // nothing special to be done here for the properties
546cdf0e10cSrcweir             // UNO_NAME_DATA_BASE_NAME and UNO_NAME_DATA_BASE_URL.
547cdf0e10cSrcweir             // We just call PutValue (empty string is allowed).
548cdf0e10cSrcweir             // Thus the last property set will be used as Data Source.
549cdf0e10cSrcweir 
550bb9d84a5SOliver-Rainer Wittmann             const sal_uInt16 nMemberValueId = GetFieldTypeMId( rPropertyName, *pType );
551bb9d84a5SOliver-Rainer Wittmann             if ( USHRT_MAX != nMemberValueId )
552bb9d84a5SOliver-Rainer Wittmann             {
553bb9d84a5SOliver-Rainer Wittmann                 pType->PutValue( rValue, nMemberValueId );
554bb9d84a5SOliver-Rainer Wittmann                 if ( pType->Which() == RES_USERFLD )
555bb9d84a5SOliver-Rainer Wittmann                 {
556bb9d84a5SOliver-Rainer Wittmann                     // trigger update of User field in order to get depending Input Fields updated.
557bb9d84a5SOliver-Rainer Wittmann                     pType->UpdateFlds();
558bb9d84a5SOliver-Rainer Wittmann                 }
559bb9d84a5SOliver-Rainer Wittmann             }
560cdf0e10cSrcweir             else
561bb9d84a5SOliver-Rainer Wittmann             {
562bb9d84a5SOliver-Rainer Wittmann                 throw beans::UnknownPropertyException(
563bb9d84a5SOliver-Rainer Wittmann                     OUString( RTL_CONSTASCII_USTRINGPARAM( "Unknown property: " ) ) + rPropertyName,
564bb9d84a5SOliver-Rainer Wittmann                     static_cast< cppu::OWeakObject * >( this ) );
565bb9d84a5SOliver-Rainer Wittmann             }
566bb9d84a5SOliver-Rainer Wittmann         }
567bb9d84a5SOliver-Rainer Wittmann     }
568cdf0e10cSrcweir 	else if(!pType && m_pDoc &&
569cdf0e10cSrcweir         ( rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_NAME))) )
570cdf0e10cSrcweir 	{
571cdf0e10cSrcweir 		OUString uTmp;
572cdf0e10cSrcweir 		rValue >>= uTmp;
573cdf0e10cSrcweir 		String sTypeName(uTmp);
574cdf0e10cSrcweir 		SwFieldType* pType2 = m_pDoc->GetFldType(nResTypeId, sTypeName, sal_False);
575cdf0e10cSrcweir 
576cdf0e10cSrcweir         String sTable(SW_RES(STR_POOLCOLL_LABEL_TABLE));
577cdf0e10cSrcweir 		String sDrawing(SW_RES(STR_POOLCOLL_LABEL_DRAWING));
578cdf0e10cSrcweir 		String sFrame(SW_RES(STR_POOLCOLL_LABEL_FRAME));
579cdf0e10cSrcweir 		String sIllustration(SW_RES(STR_POOLCOLL_LABEL_ABB));
580cdf0e10cSrcweir 
581cdf0e10cSrcweir 		if(pType2 ||
582cdf0e10cSrcweir 			(RES_SETEXPFLD == nResTypeId &&
583cdf0e10cSrcweir 			( sTypeName == sTable || sTypeName == sDrawing ||
584cdf0e10cSrcweir 			  sTypeName == sFrame || sTypeName == sIllustration )))
585cdf0e10cSrcweir 		{
586cdf0e10cSrcweir 			throw lang::IllegalArgumentException();
587cdf0e10cSrcweir 		}
588cdf0e10cSrcweir 		else
589cdf0e10cSrcweir 		{
590cdf0e10cSrcweir 			switch(nResTypeId)
591cdf0e10cSrcweir 			{
592cdf0e10cSrcweir 				case RES_USERFLD :
593cdf0e10cSrcweir 				{
594cdf0e10cSrcweir 					SwUserFieldType aType(m_pDoc, sTypeName);
595cdf0e10cSrcweir 					pType2 = m_pDoc->InsertFldType(aType);
596cdf0e10cSrcweir 					((SwUserFieldType*)pType2)->SetContent(sParam1);
597cdf0e10cSrcweir 					((SwUserFieldType*)pType2)->SetValue(fParam1);
598cdf0e10cSrcweir 					((SwUserFieldType*)pType2)->SetType(bParam1 ? nsSwGetSetExpType::GSE_EXPR : nsSwGetSetExpType::GSE_STRING);
599cdf0e10cSrcweir 				}
600cdf0e10cSrcweir 				break;
601cdf0e10cSrcweir                 case RES_DDEFLD :
602cdf0e10cSrcweir 				{
603cdf0e10cSrcweir 					SwDDEFieldType aType(sTypeName, sParam1,
604cdf0e10cSrcweir                         sal::static_int_cast< sal_uInt16 >(bParam1 ? sfx2::LINKUPDATE_ALWAYS : sfx2::LINKUPDATE_ONCALL));
605cdf0e10cSrcweir 					pType2 = m_pDoc->InsertFldType(aType);
606cdf0e10cSrcweir 				}
607cdf0e10cSrcweir 				break;
608cdf0e10cSrcweir 				case RES_SETEXPFLD :
609cdf0e10cSrcweir 				{
610cdf0e10cSrcweir 					SwSetExpFieldType aType(m_pDoc, sTypeName);
611cdf0e10cSrcweir 					if(sParam1.Len())
612cdf0e10cSrcweir 						aType.SetDelimiter( sParam1.GetChar(0));
613cdf0e10cSrcweir 					if(nParam1 > -1 && nParam1 < MAXLEVEL)
614cdf0e10cSrcweir 						aType.SetOutlineLvl(nParam1);
615cdf0e10cSrcweir 					pType2 = m_pDoc->InsertFldType(aType);
616cdf0e10cSrcweir 				}
617cdf0e10cSrcweir 				break;
618cdf0e10cSrcweir                 case RES_DBFLD :
619cdf0e10cSrcweir                 {
620cdf0e10cSrcweir                     ::GetString( rValue, sParam3 );
621cdf0e10cSrcweir                     pType = GetFldType();
622cdf0e10cSrcweir                 }
623cdf0e10cSrcweir                 break;
624cdf0e10cSrcweir 			}
625cdf0e10cSrcweir 			if(pType2)
626cdf0e10cSrcweir 			{
627cdf0e10cSrcweir 				pType2->Add(this);
628cdf0e10cSrcweir 				m_bIsDescriptor = sal_False;
629cdf0e10cSrcweir 			}
630cdf0e10cSrcweir 			else
631cdf0e10cSrcweir 				throw uno::RuntimeException();
632cdf0e10cSrcweir 		}
633cdf0e10cSrcweir 
634cdf0e10cSrcweir 		DBG_ASSERT(pType2, "kein FieldType gefunden!" );
635cdf0e10cSrcweir 	}
636cdf0e10cSrcweir 	else
637cdf0e10cSrcweir 	{
638cdf0e10cSrcweir 		switch( nResTypeId )
639cdf0e10cSrcweir 		{
640cdf0e10cSrcweir 		case RES_USERFLD:
641cdf0e10cSrcweir 			if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_CONTENT)))
642cdf0e10cSrcweir 				::GetString( rValue, sParam1 );
643cdf0e10cSrcweir 			else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_VALUE )))
644cdf0e10cSrcweir 			{
645cdf0e10cSrcweir 				if(rValue.getValueType() != ::getCppuType(static_cast<const double*>(0)))
646cdf0e10cSrcweir 					throw lang::IllegalArgumentException();
647cdf0e10cSrcweir 				fParam1 = *(double*)rValue.getValue();
648cdf0e10cSrcweir 			}
649cdf0e10cSrcweir 			else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_IS_EXPRESSION )))
650cdf0e10cSrcweir 			{
651cdf0e10cSrcweir 				if(rValue.getValueType() != ::getBooleanCppuType())
652cdf0e10cSrcweir 					throw lang::IllegalArgumentException();
653cdf0e10cSrcweir 				bParam1 = *(sal_Bool*)rValue.getValue();
654cdf0e10cSrcweir 			}
655cdf0e10cSrcweir 
656cdf0e10cSrcweir 			break;
657cdf0e10cSrcweir 		case RES_DBFLD:
658cdf0e10cSrcweir 			if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_NAME)))
659cdf0e10cSrcweir 				::GetString( rValue, sParam1 );
660cdf0e10cSrcweir             else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_TABLE_NAME)))
661cdf0e10cSrcweir 				::GetString( rValue, sParam2 );
662cdf0e10cSrcweir             else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_COLUMN_NAME)))
663cdf0e10cSrcweir 				::GetString( rValue, sParam3 );
664cdf0e10cSrcweir             else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_COMMAND_TYPE)))
665cdf0e10cSrcweir                 rValue >>= nParam2;
666cdf0e10cSrcweir             if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_URL)))
667cdf0e10cSrcweir                 ::GetString( rValue, sParam5 );
668cdf0e10cSrcweir 
669cdf0e10cSrcweir             if((sParam1.Len() || sParam5.Len())
670cdf0e10cSrcweir                     && sParam2.Len() && sParam3.Len())
671cdf0e10cSrcweir                 GetFldType();
672cdf0e10cSrcweir 			break;
673cdf0e10cSrcweir 		case  RES_SETEXPFLD:
674cdf0e10cSrcweir 			if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_NUMBERING_SEPARATOR)))
675cdf0e10cSrcweir 				::GetString( rValue, sParam1 );
676cdf0e10cSrcweir 			else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_CHAPTER_NUMBERING_LEVEL)))
677cdf0e10cSrcweir 				rValue >>= nParam1;
678cdf0e10cSrcweir 			break;
679cdf0e10cSrcweir 		case RES_DDEFLD:
680cdf0e10cSrcweir 			{
681cdf0e10cSrcweir 				sal_uInt16 nPart = rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DDE_COMMAND_TYPE))  ? 0 :
682cdf0e10cSrcweir 						rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DDE_COMMAND_FILE))  ? 1 :
683cdf0e10cSrcweir 						rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DDE_COMMAND_ELEMENT))  ? 2 :
684cdf0e10cSrcweir 						rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_IS_AUTOMATIC_UPDATE)) ? 3 : USHRT_MAX;
685cdf0e10cSrcweir 				if(nPart  < 3 )
686cdf0e10cSrcweir 				{
687cdf0e10cSrcweir 					String sTmp;
688cdf0e10cSrcweir 					if(!sParam1.Len())
689cdf0e10cSrcweir                         (sParam1 = sfx2::cTokenSeperator)
690cdf0e10cSrcweir                                 += sfx2::cTokenSeperator;
691cdf0e10cSrcweir 
692cdf0e10cSrcweir                     sParam1.SetToken( nPart, sfx2::cTokenSeperator,
693cdf0e10cSrcweir 								::GetString( rValue, sTmp ));
694cdf0e10cSrcweir 				}
695cdf0e10cSrcweir 				else if(3 == nPart)
696cdf0e10cSrcweir 					bParam1 = *(sal_Bool*)rValue.getValue();
697cdf0e10cSrcweir 			}
698cdf0e10cSrcweir 			break;
699cdf0e10cSrcweir 		default:
700cdf0e10cSrcweir         	throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
701cdf0e10cSrcweir 		}
702cdf0e10cSrcweir 	}
703cdf0e10cSrcweir }
704cdf0e10cSrcweir 
GetFldType(sal_Bool bDontCreate) const705cdf0e10cSrcweir SwFieldType* SwXFieldMaster::GetFldType(sal_Bool bDontCreate) const
706cdf0e10cSrcweir {
707cdf0e10cSrcweir     if(!bDontCreate && RES_DBFLD == nResTypeId && m_bIsDescriptor && m_pDoc)
708cdf0e10cSrcweir     {
709cdf0e10cSrcweir         SwDBData aData;
710cdf0e10cSrcweir 
711cdf0e10cSrcweir         // set DataSource
712cdf0e10cSrcweir         svx::ODataAccessDescriptor aAcc;
713cdf0e10cSrcweir         if( sParam1.Len() > 0 )
714cdf0e10cSrcweir             aAcc[ svx::daDataSource ]       <<= OUString(sParam1); // DataBaseName
715cdf0e10cSrcweir         else if( sParam5.Len() > 0 )
716cdf0e10cSrcweir             aAcc[ svx::daDatabaseLocation]  <<= OUString(sParam5); // DataBaseURL
717cdf0e10cSrcweir         aData.sDataSource = aAcc.getDataSource();
718cdf0e10cSrcweir 
719cdf0e10cSrcweir         aData.sCommand = sParam2;
720cdf0e10cSrcweir         aData.nCommandType = nParam2;
721cdf0e10cSrcweir         SwDBFieldType aType(m_pDoc, sParam3,  aData);
722cdf0e10cSrcweir         SwFieldType* pType = m_pDoc->InsertFldType(aType);
723cdf0e10cSrcweir         SwXFieldMaster* pThis = ((SwXFieldMaster*)this);
724cdf0e10cSrcweir         pType->Add(pThis);
725cdf0e10cSrcweir         pThis->m_bIsDescriptor = sal_False;
726cdf0e10cSrcweir     }
727cdf0e10cSrcweir     if(m_bIsDescriptor)
728cdf0e10cSrcweir         return 0;
729cdf0e10cSrcweir     else
730cdf0e10cSrcweir         return (SwFieldType*)GetRegisteredIn();
731cdf0e10cSrcweir }
732cdf0e10cSrcweir 
733cdf0e10cSrcweir 
734cdf0e10cSrcweir typedef SwFmtFld* SwFmtFldPtr;
735cdf0e10cSrcweir SV_DECL_PTRARR(SwDependentFields, SwFmtFldPtr, 5, 5)
SV_IMPL_PTRARR(SwDependentFields,SwFmtFldPtr)736cdf0e10cSrcweir SV_IMPL_PTRARR(SwDependentFields, SwFmtFldPtr)
737cdf0e10cSrcweir 
738cdf0e10cSrcweir uno::Any SwXFieldMaster::getPropertyValue(const OUString& rPropertyName)
739cdf0e10cSrcweir 		throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
740cdf0e10cSrcweir {
741cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
742cdf0e10cSrcweir 	uno::Any aRet;
743cdf0e10cSrcweir     SwFieldType* pType = GetFldType(sal_True);
744cdf0e10cSrcweir     if( rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_INSTANCE_NAME)) )
745cdf0e10cSrcweir     {
746cdf0e10cSrcweir         String sName;
747cdf0e10cSrcweir         if(pType)
748cdf0e10cSrcweir             SwXTextFieldMasters::getInstanceName(*pType, sName);
749cdf0e10cSrcweir         aRet <<= OUString(sName);
750cdf0e10cSrcweir     }
751cdf0e10cSrcweir     else if(pType)
752cdf0e10cSrcweir 	{
753cdf0e10cSrcweir 		if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_NAME) ))
754cdf0e10cSrcweir 		{
755cdf0e10cSrcweir 			aRet <<= SwXFieldMaster::GetProgrammaticName(*pType, *GetDoc());
756cdf0e10cSrcweir 		}
757cdf0e10cSrcweir         else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DEPENDENT_TEXT_FIELDS)) )
758cdf0e10cSrcweir 		{
759cdf0e10cSrcweir 			//fill all text fields into a sequence
760cdf0e10cSrcweir 			SwDependentFields aFldArr;
761cdf0e10cSrcweir 			SwIterator<SwFmtFld,SwFieldType> aIter( *pType );
762cdf0e10cSrcweir 			SwFmtFldPtr pFld = aIter.First();
763cdf0e10cSrcweir 			while(pFld)
764cdf0e10cSrcweir 			{
765cdf0e10cSrcweir 				if(pFld->IsFldInDoc())
766cdf0e10cSrcweir 					aFldArr.Insert(pFld, aFldArr.Count());
767cdf0e10cSrcweir 				pFld = aIter.Next();
768cdf0e10cSrcweir 			}
769cdf0e10cSrcweir 
770cdf0e10cSrcweir 			uno::Sequence<uno::Reference <text::XDependentTextField> > aRetSeq(aFldArr.Count());
771cdf0e10cSrcweir 			uno::Reference<text::XDependentTextField>* pRetSeq = aRetSeq.getArray();
772cdf0e10cSrcweir             for(sal_uInt16 i = 0; i < aFldArr.Count(); i++)
773cdf0e10cSrcweir             {
774cdf0e10cSrcweir                 pFld = aFldArr.GetObject(i);
775cdf0e10cSrcweir                 SwXTextField * pInsert = SwXTextField::CreateSwXTextField(*GetDoc(), *pFld);
776cdf0e10cSrcweir 
777cdf0e10cSrcweir                 pRetSeq[i] = uno::Reference<text::XDependentTextField>(pInsert);
778cdf0e10cSrcweir             }
779cdf0e10cSrcweir 			aRet <<= aRetSeq;
780cdf0e10cSrcweir 		}
781cdf0e10cSrcweir 		else if(pType)
782cdf0e10cSrcweir 		{
783cdf0e10cSrcweir 			//TODO: Properties fuer die uebrigen Feldtypen einbauen
784cdf0e10cSrcweir 			sal_uInt16 nMId = GetFieldTypeMId( rPropertyName, *pType );
785cdf0e10cSrcweir 			if( USHRT_MAX != nMId )
786cdf0e10cSrcweir             {
787cdf0e10cSrcweir 				pType->QueryValue( aRet, nMId );
788cdf0e10cSrcweir 
789cdf0e10cSrcweir                 if( rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_NAME)) ||
790cdf0e10cSrcweir                     rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_URL)))
791cdf0e10cSrcweir                 {
792cdf0e10cSrcweir                     OUString aDataSource;
793cdf0e10cSrcweir                     aRet >>= aDataSource;
794cdf0e10cSrcweir                     aRet <<= OUString();
795cdf0e10cSrcweir 
796cdf0e10cSrcweir                     OUString *pStr = 0;     // only one of this properties will return
797cdf0e10cSrcweir                                             // a non-empty string.
798cdf0e10cSrcweir                     INetURLObject aObj;
799cdf0e10cSrcweir                     aObj.SetURL( aDataSource );
800cdf0e10cSrcweir                     sal_Bool bIsURL = aObj.GetProtocol() != INET_PROT_NOT_VALID;
801cdf0e10cSrcweir                     if (bIsURL && rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_URL)))
802cdf0e10cSrcweir                         pStr = &aDataSource;        // DataBaseURL
803cdf0e10cSrcweir                     else if (!bIsURL && rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_NAME)))
804cdf0e10cSrcweir                         pStr = &aDataSource;        // DataBaseName
805cdf0e10cSrcweir 
806cdf0e10cSrcweir                     if (pStr)
807cdf0e10cSrcweir                         aRet <<= *pStr;
808cdf0e10cSrcweir                 }
809cdf0e10cSrcweir             }
810cdf0e10cSrcweir             else
811cdf0e10cSrcweir         		throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
812cdf0e10cSrcweir 		}
813cdf0e10cSrcweir 		else
814cdf0e10cSrcweir 		{
815cdf0e10cSrcweir 			if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_COMMAND_TYPE)) )
816cdf0e10cSrcweir 				aRet <<= nParam2;
817cdf0e10cSrcweir 		}
818cdf0e10cSrcweir 	}
819cdf0e10cSrcweir 	else
820cdf0e10cSrcweir 	{
821cdf0e10cSrcweir 		if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_COMMAND_TYPE)) )
822cdf0e10cSrcweir 			aRet <<= nParam2;
823cdf0e10cSrcweir         else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DEPENDENT_TEXT_FIELDS)) )
824cdf0e10cSrcweir         {
825cdf0e10cSrcweir             uno::Sequence<uno::Reference <text::XDependentTextField> > aRetSeq(0);
826cdf0e10cSrcweir             aRet <<= aRetSeq;
827cdf0e10cSrcweir         }
828cdf0e10cSrcweir         else
829cdf0e10cSrcweir 		{
830cdf0e10cSrcweir 			const String* pStr = 0;
831cdf0e10cSrcweir 			String sStr;
832cdf0e10cSrcweir 			switch ( nResTypeId )
833cdf0e10cSrcweir 			{
834cdf0e10cSrcweir 			case RES_USERFLD:
835cdf0e10cSrcweir 				if( rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_CONTENT)) )
836cdf0e10cSrcweir 					pStr = &sParam1;
837cdf0e10cSrcweir 				else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_VALUE )))
838cdf0e10cSrcweir 					aRet <<= fParam1;
839cdf0e10cSrcweir 				else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_IS_EXPRESSION )))
840cdf0e10cSrcweir 					aRet.setValue(&bParam1, ::getBooleanCppuType());
841cdf0e10cSrcweir 				break;
842cdf0e10cSrcweir 			case RES_DBFLD:
843cdf0e10cSrcweir                 if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_NAME)) ||
844cdf0e10cSrcweir                    rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_URL)))
845cdf0e10cSrcweir                 {
846cdf0e10cSrcweir                     pStr = 0;   // only one of this properties will return
847cdf0e10cSrcweir                                 // a non-empty string.
848cdf0e10cSrcweir                     INetURLObject aObj;
849cdf0e10cSrcweir                     aObj.SetURL( sParam5 );  // SetSmartURL
850cdf0e10cSrcweir                     sal_Bool bIsURL = aObj.GetProtocol() != INET_PROT_NOT_VALID;
851cdf0e10cSrcweir                     if (bIsURL && rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_URL)))
852cdf0e10cSrcweir                         pStr = &sParam5;        // DataBaseURL
853cdf0e10cSrcweir                     else if ( rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_NAME)))
854cdf0e10cSrcweir                         pStr = &sParam1;            // DataBaseName
855cdf0e10cSrcweir                 }
856cdf0e10cSrcweir 				else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_TABLE_NAME)))
857cdf0e10cSrcweir 					pStr = &sParam2;
858cdf0e10cSrcweir 				else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_COLUMN_NAME)))
859cdf0e10cSrcweir 					pStr = &sParam3;
860cdf0e10cSrcweir 				break;
861cdf0e10cSrcweir 			case RES_SETEXPFLD:
862cdf0e10cSrcweir 				if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_NUMBERING_SEPARATOR)))
863cdf0e10cSrcweir 					pStr = &sParam1;
864cdf0e10cSrcweir 				else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_CHAPTER_NUMBERING_LEVEL)))
865cdf0e10cSrcweir 					aRet <<= nParam1;
866cdf0e10cSrcweir 				break;
867cdf0e10cSrcweir 			case RES_DDEFLD:
868cdf0e10cSrcweir 				{
869cdf0e10cSrcweir 					sal_uInt16 nPart = rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DDE_COMMAND_TYPE))  ? 0 :
870cdf0e10cSrcweir 						rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DDE_COMMAND_FILE)) ? 1 :
871cdf0e10cSrcweir 							rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DDE_COMMAND_ELEMENT))  ? 2 :
872cdf0e10cSrcweir 							rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_IS_AUTOMATIC_UPDATE)) ? 3 : USHRT_MAX;
873cdf0e10cSrcweir 					if(nPart  < 3 )
874cdf0e10cSrcweir                         pStr = &(sStr = sParam1.GetToken(nPart, sfx2::cTokenSeperator));
875cdf0e10cSrcweir 					else if(3 == nPart)
876cdf0e10cSrcweir 						aRet.setValue(&bParam1, ::getBooleanCppuType());
877cdf0e10cSrcweir 				}
878cdf0e10cSrcweir 				break;
879cdf0e10cSrcweir 			default:
880cdf0e10cSrcweir         		throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
881cdf0e10cSrcweir 			}
882cdf0e10cSrcweir 
883cdf0e10cSrcweir 			if( pStr )
884cdf0e10cSrcweir 				aRet <<= OUString( *pStr );
885cdf0e10cSrcweir 		}
886cdf0e10cSrcweir 	}
887cdf0e10cSrcweir 	return aRet;
888cdf0e10cSrcweir }
889cdf0e10cSrcweir 
addPropertyChangeListener(const OUString &,const uno::Reference<beans::XPropertyChangeListener> &)890cdf0e10cSrcweir void SwXFieldMaster::addPropertyChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XPropertyChangeListener > & /*aListener*/) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
891cdf0e10cSrcweir {
892cdf0e10cSrcweir 	DBG_WARNING("not implemented");
893cdf0e10cSrcweir }
894cdf0e10cSrcweir 
removePropertyChangeListener(const OUString &,const uno::Reference<beans::XPropertyChangeListener> &)895cdf0e10cSrcweir void SwXFieldMaster::removePropertyChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XPropertyChangeListener > & /*aListener*/) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
896cdf0e10cSrcweir {
897cdf0e10cSrcweir 	DBG_WARNING("not implemented");
898cdf0e10cSrcweir }
899cdf0e10cSrcweir 
addVetoableChangeListener(const OUString &,const uno::Reference<beans::XVetoableChangeListener> &)900cdf0e10cSrcweir void SwXFieldMaster::addVetoableChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XVetoableChangeListener > & /*aListener*/) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
901cdf0e10cSrcweir {
902cdf0e10cSrcweir 	DBG_WARNING("not implemented");
903cdf0e10cSrcweir }
904cdf0e10cSrcweir 
removeVetoableChangeListener(const OUString &,const uno::Reference<beans::XVetoableChangeListener> &)905cdf0e10cSrcweir void SwXFieldMaster::removeVetoableChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XVetoableChangeListener > & /*aListener*/) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
906cdf0e10cSrcweir {
907cdf0e10cSrcweir 	DBG_WARNING("not implemented");
908cdf0e10cSrcweir }
909cdf0e10cSrcweir 
910cdf0e10cSrcweir 
dispose(void)911cdf0e10cSrcweir void SwXFieldMaster::dispose(void) 			throw( uno::RuntimeException )
912cdf0e10cSrcweir {
913*6a85fc09SOliver-Rainer Wittmann     vos::OGuard aGuard( Application::GetSolarMutex() );
914cdf0e10cSrcweir 
915*6a85fc09SOliver-Rainer Wittmann     SwFieldType* pFldType = GetFldType( sal_True );
916*6a85fc09SOliver-Rainer Wittmann     if ( pFldType != NULL )
917*6a85fc09SOliver-Rainer Wittmann     {
918*6a85fc09SOliver-Rainer Wittmann         sal_uInt16 nTypeIdx = USHRT_MAX;
919*6a85fc09SOliver-Rainer Wittmann         const SwFldTypes* pTypes = GetDoc()->GetFldTypes();
920*6a85fc09SOliver-Rainer Wittmann         for ( sal_uInt16 i = 0; i < pTypes->Count(); i++ )
921*6a85fc09SOliver-Rainer Wittmann         {
922*6a85fc09SOliver-Rainer Wittmann             if ( ( *pTypes )[i] == pFldType )
923*6a85fc09SOliver-Rainer Wittmann                 nTypeIdx = i;
924*6a85fc09SOliver-Rainer Wittmann         }
925*6a85fc09SOliver-Rainer Wittmann 
926*6a85fc09SOliver-Rainer Wittmann         // zuerst alle Felder loeschen
927*6a85fc09SOliver-Rainer Wittmann         SwIterator< SwFmtFld, SwFieldType > aIter( *pFldType );
928*6a85fc09SOliver-Rainer Wittmann         SwFmtFld* pFld = aIter.First();
929*6a85fc09SOliver-Rainer Wittmann         while ( pFld != NULL )
930*6a85fc09SOliver-Rainer Wittmann         {
931*6a85fc09SOliver-Rainer Wittmann             SwTxtFld* pTxtFld = pFld->GetTxtFld();
932*6a85fc09SOliver-Rainer Wittmann             if ( pTxtFld != NULL
933*6a85fc09SOliver-Rainer Wittmann                  && pTxtFld->GetTxtNode().GetNodes().IsDocNodes() )
934*6a85fc09SOliver-Rainer Wittmann             {
935*6a85fc09SOliver-Rainer Wittmann                 SwTxtFld::DeleteTxtFld( *pTxtFld );
936*6a85fc09SOliver-Rainer Wittmann             }
937cdf0e10cSrcweir             pFld = aIter.Next();
938*6a85fc09SOliver-Rainer Wittmann         }
939*6a85fc09SOliver-Rainer Wittmann         // dann den FieldType loeschen
940*6a85fc09SOliver-Rainer Wittmann         GetDoc()->RemoveFldType( nTypeIdx );
941*6a85fc09SOliver-Rainer Wittmann     }
942*6a85fc09SOliver-Rainer Wittmann     else
943*6a85fc09SOliver-Rainer Wittmann         throw uno::RuntimeException();
944cdf0e10cSrcweir }
945cdf0e10cSrcweir 
addEventListener(const uno::Reference<lang::XEventListener> & aListener)946cdf0e10cSrcweir void SwXFieldMaster::addEventListener(const uno::Reference< lang::XEventListener > & aListener)
947cdf0e10cSrcweir 											throw( uno::RuntimeException )
948cdf0e10cSrcweir {
949cdf0e10cSrcweir 	if(!GetRegisteredIn())
950cdf0e10cSrcweir 		throw uno::RuntimeException();
951cdf0e10cSrcweir 	aLstnrCntnr.AddListener(aListener);
952cdf0e10cSrcweir }
953cdf0e10cSrcweir 
removeEventListener(const uno::Reference<lang::XEventListener> & aListener)954cdf0e10cSrcweir void SwXFieldMaster::removeEventListener(const uno::Reference< lang::XEventListener > & aListener)
955cdf0e10cSrcweir 													throw( uno::RuntimeException )
956cdf0e10cSrcweir {
957cdf0e10cSrcweir 	if(!GetRegisteredIn() || !aLstnrCntnr.RemoveListener(aListener))
958cdf0e10cSrcweir 		throw uno::RuntimeException();
959cdf0e10cSrcweir }
960cdf0e10cSrcweir 
961cdf0e10cSrcweir 
Modify(const SfxPoolItem * pOld,const SfxPoolItem * pNew)962cdf0e10cSrcweir void SwXFieldMaster::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew)
963cdf0e10cSrcweir {
964cdf0e10cSrcweir 	ClientModify(this, pOld, pNew);
965cdf0e10cSrcweir 	if(!GetRegisteredIn())
966cdf0e10cSrcweir 	{
967cdf0e10cSrcweir 		aLstnrCntnr.Disposing();
968cdf0e10cSrcweir 		m_pDoc = 0;
969cdf0e10cSrcweir 	}
970cdf0e10cSrcweir }
971cdf0e10cSrcweir 
GetProgrammaticName(const SwFieldType & rType,SwDoc & rDoc)972cdf0e10cSrcweir OUString SwXFieldMaster::GetProgrammaticName(const SwFieldType& rType, SwDoc& rDoc)
973cdf0e10cSrcweir {
974cdf0e10cSrcweir 	OUString sRet(rType.GetName());
975cdf0e10cSrcweir 	if(RES_SETEXPFLD == rType.Which())
976cdf0e10cSrcweir 	{
977cdf0e10cSrcweir 		const SwFldTypes* pTypes = rDoc.GetFldTypes();
978cdf0e10cSrcweir 		for( sal_uInt16 i = 0; i <= INIT_FLDTYPES; i++ )
979cdf0e10cSrcweir 		{
980cdf0e10cSrcweir 			if((*pTypes)[i] == &rType)
981cdf0e10cSrcweir 			{
982cdf0e10cSrcweir 				sRet = SwStyleNameMapper::GetProgName ( sRet, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
983cdf0e10cSrcweir 				break;
984cdf0e10cSrcweir 			}
985cdf0e10cSrcweir 		}
986cdf0e10cSrcweir 	}
987cdf0e10cSrcweir 	return sRet;
988cdf0e10cSrcweir }
989cdf0e10cSrcweir 
LocalizeFormula(const SwSetExpField & rFld,const OUString & rFormula,sal_Bool bQuery)990cdf0e10cSrcweir OUString SwXFieldMaster::LocalizeFormula(
991cdf0e10cSrcweir 	const SwSetExpField& rFld,
992cdf0e10cSrcweir 	const OUString& rFormula,
993cdf0e10cSrcweir 	sal_Bool bQuery)
994cdf0e10cSrcweir {
995cdf0e10cSrcweir 	const OUString sTypeName(rFld.GetTyp()->GetName());
996cdf0e10cSrcweir 	OUString sProgName = SwStyleNameMapper::GetProgName(sTypeName, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
997cdf0e10cSrcweir 	if(sProgName != sTypeName)
998cdf0e10cSrcweir 	{
999cdf0e10cSrcweir 		OUString sSource = bQuery ? sTypeName : sProgName;
1000cdf0e10cSrcweir 		OUString sDest = bQuery ? sProgName : sTypeName;
1001cdf0e10cSrcweir 		if(!rFormula.compareTo(sSource, sSource.getLength()))
1002cdf0e10cSrcweir 		{
1003cdf0e10cSrcweir 			OUString sTmpFormula = sDest;
1004cdf0e10cSrcweir 			sTmpFormula += rFormula.copy(sSource.getLength());
1005cdf0e10cSrcweir 			return sTmpFormula;
1006cdf0e10cSrcweir 		}
1007cdf0e10cSrcweir 	}
1008cdf0e10cSrcweir 	return rFormula;
1009cdf0e10cSrcweir }
1010cdf0e10cSrcweir 
1011cdf0e10cSrcweir 
CreateSwXTextField(SwDoc & rDoc,SwFmtFld const & rFmt)1012cdf0e10cSrcweir SwXTextField* SwXTextField::CreateSwXTextField(SwDoc & rDoc, SwFmtFld const& rFmt)
1013cdf0e10cSrcweir {
1014c0286415SOliver-Rainer Wittmann     SwIterator<SwXTextField,SwFieldType> aIter(*rFmt.GetField()->GetTyp());
1015cdf0e10cSrcweir     SwXTextField * pField = 0;
1016cdf0e10cSrcweir     SwXTextField * pTemp = aIter.First();
1017cdf0e10cSrcweir     while (pTemp)
1018cdf0e10cSrcweir     {
1019cdf0e10cSrcweir         if (pTemp->GetFldFmt() == &rFmt)
1020cdf0e10cSrcweir         {
1021cdf0e10cSrcweir             pField = pTemp;
1022cdf0e10cSrcweir             break;
1023cdf0e10cSrcweir         }
1024cdf0e10cSrcweir         pTemp = aIter.Next();
1025cdf0e10cSrcweir     }
1026cdf0e10cSrcweir     return pField ? pField : new SwXTextField( rFmt, &rDoc );
1027cdf0e10cSrcweir }
1028cdf0e10cSrcweir 
1029cdf0e10cSrcweir /******************************************************************
1030cdf0e10cSrcweir  *
1031cdf0e10cSrcweir  ******************************************************************/
1032cdf0e10cSrcweir struct SwFieldProperties_Impl
1033cdf0e10cSrcweir {
1034cdf0e10cSrcweir 	String 		sPar1;
1035cdf0e10cSrcweir 	String 		sPar2;
1036cdf0e10cSrcweir 	String 		sPar3;
1037cdf0e10cSrcweir 	String 		sPar4;
1038cdf0e10cSrcweir     String      sPar5;
1039cdf0e10cSrcweir     String      sPar6;
1040cdf0e10cSrcweir 	Date 			aDate;
1041cdf0e10cSrcweir 	double 			fDouble;
1042cdf0e10cSrcweir 	uno::Sequence<beans::PropertyValue>	aPropSeq;
1043cdf0e10cSrcweir     uno::Sequence<OUString> aStrings;
1044cdf0e10cSrcweir 	util::DateTime*	pDateTime;
1045cdf0e10cSrcweir 
1046cdf0e10cSrcweir 	sal_Int32 		nSubType;
1047cdf0e10cSrcweir 	sal_Int32 		nFormat;
1048cdf0e10cSrcweir 	sal_uInt16 		nUSHORT1;
1049cdf0e10cSrcweir 	sal_uInt16 		nUSHORT2;
1050cdf0e10cSrcweir 	sal_Int16 		nSHORT1;
1051cdf0e10cSrcweir 	sal_Int8 		nByte1;
1052cdf0e10cSrcweir     sal_Bool        bFormatIsDefault;
1053cdf0e10cSrcweir 	sal_Bool 		bBool1;
1054cdf0e10cSrcweir 	sal_Bool 		bBool2;
1055cdf0e10cSrcweir 	sal_Bool 		bBool3;
1056cdf0e10cSrcweir     sal_Bool        bBool4;
1057cdf0e10cSrcweir 
SwFieldProperties_ImplSwFieldProperties_Impl1058cdf0e10cSrcweir 	SwFieldProperties_Impl():
1059cdf0e10cSrcweir 		fDouble(0.),
1060cdf0e10cSrcweir 		pDateTime(0),
1061cdf0e10cSrcweir 		nSubType(0),
1062cdf0e10cSrcweir 		nFormat(0),
1063cdf0e10cSrcweir 		nUSHORT1(0),
1064cdf0e10cSrcweir 		nUSHORT2(0),
1065cdf0e10cSrcweir 		nSHORT1(0),
1066cdf0e10cSrcweir 		nByte1(0),
1067cdf0e10cSrcweir         bFormatIsDefault(sal_True),
1068cdf0e10cSrcweir 		bBool1(sal_False),
1069cdf0e10cSrcweir 		bBool2(sal_False),
1070cdf0e10cSrcweir 		bBool3(sal_False),
1071cdf0e10cSrcweir         bBool4(sal_True) //Automatic language
1072cdf0e10cSrcweir 		{}
~SwFieldProperties_ImplSwFieldProperties_Impl1073cdf0e10cSrcweir 	~SwFieldProperties_Impl()
1074cdf0e10cSrcweir 		{delete pDateTime;}
1075cdf0e10cSrcweir 
1076cdf0e10cSrcweir };
1077cdf0e10cSrcweir 
1078cdf0e10cSrcweir TYPEINIT1(SwXTextField, SwClient);
1079cdf0e10cSrcweir 
getUnoTunnelId()1080cdf0e10cSrcweir const uno::Sequence< sal_Int8 > & SwXTextField::getUnoTunnelId()
1081cdf0e10cSrcweir {
1082cdf0e10cSrcweir     static uno::Sequence< sal_Int8 > aSeq = ::CreateUnoTunnelId();
1083cdf0e10cSrcweir 	return aSeq;
1084cdf0e10cSrcweir }
1085cdf0e10cSrcweir 
getSomething(const uno::Sequence<sal_Int8> & rId)1086cdf0e10cSrcweir sal_Int64 SAL_CALL SwXTextField::getSomething( const uno::Sequence< sal_Int8 >& rId )
1087cdf0e10cSrcweir 	throw(uno::RuntimeException)
1088cdf0e10cSrcweir {
1089cdf0e10cSrcweir     if( rId.getLength() == 16
1090cdf0e10cSrcweir         && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
1091cdf0e10cSrcweir 										rId.getConstArray(), 16 ) )
1092cdf0e10cSrcweir     {
1093cdf0e10cSrcweir 		return sal::static_int_cast< sal_Int64 >( reinterpret_cast< sal_IntPtr >(this) );
1094cdf0e10cSrcweir     }
1095cdf0e10cSrcweir 	return 0;
1096cdf0e10cSrcweir }
1097cdf0e10cSrcweir 
SwXTextField(sal_uInt16 nServiceId,SwDoc * pDoc)1098dec99bbdSOliver-Rainer Wittmann SwXTextField::SwXTextField(
1099dec99bbdSOliver-Rainer Wittmann     sal_uInt16 nServiceId,
1100dec99bbdSOliver-Rainer Wittmann     SwDoc* pDoc )
1101dec99bbdSOliver-Rainer Wittmann     : m_aLstnrCntnr( (XTextContent*)this)
1102dec99bbdSOliver-Rainer Wittmann     , m_pFmtFld(0)
1103dec99bbdSOliver-Rainer Wittmann     , m_pDoc(pDoc)
1104dec99bbdSOliver-Rainer Wittmann     , m_pTextObject(0)
1105dec99bbdSOliver-Rainer Wittmann     , m_bIsDescriptor(nServiceId != USHRT_MAX)
1106dec99bbdSOliver-Rainer Wittmann     , m_bCallUpdate(sal_False)
1107dec99bbdSOliver-Rainer Wittmann     , m_nServiceId(nServiceId)
1108dec99bbdSOliver-Rainer Wittmann     , m_pProps( new SwFieldProperties_Impl() )
1109cdf0e10cSrcweir {
1110dec99bbdSOliver-Rainer Wittmann     //Set visible as default!
1111dec99bbdSOliver-Rainer Wittmann     if ( SW_SERVICE_FIELDTYPE_SET_EXP == nServiceId
1112dec99bbdSOliver-Rainer Wittmann          || SW_SERVICE_FIELDTYPE_DATABASE_SET_NUM == nServiceId
1113dec99bbdSOliver-Rainer Wittmann          || SW_SERVICE_FIELDTYPE_DATABASE == nServiceId
1114dec99bbdSOliver-Rainer Wittmann          || SW_SERVICE_FIELDTYPE_DATABASE_NAME == nServiceId )
1115dec99bbdSOliver-Rainer Wittmann     {
1116dec99bbdSOliver-Rainer Wittmann         m_pProps->bBool2 = sal_True;
1117dec99bbdSOliver-Rainer Wittmann     }
1118dec99bbdSOliver-Rainer Wittmann     else if( SW_SERVICE_FIELDTYPE_TABLE_FORMULA == nServiceId )
1119dec99bbdSOliver-Rainer Wittmann     {
1120cdf0e10cSrcweir         m_pProps->bBool1 = sal_True;
1121dec99bbdSOliver-Rainer Wittmann     }
1122dec99bbdSOliver-Rainer Wittmann     if ( SW_SERVICE_FIELDTYPE_SET_EXP == nServiceId )
1123dec99bbdSOliver-Rainer Wittmann     {
1124cdf0e10cSrcweir         m_pProps->nUSHORT2 = USHRT_MAX;
1125dec99bbdSOliver-Rainer Wittmann     }
1126cdf0e10cSrcweir 
1127cdf0e10cSrcweir }
1128cdf0e10cSrcweir 
SwXTextField(const SwFmtFld & rFmt,SwDoc * pDc)1129dec99bbdSOliver-Rainer Wittmann SwXTextField::SwXTextField(
1130dec99bbdSOliver-Rainer Wittmann     const SwFmtFld& rFmt,
1131dec99bbdSOliver-Rainer Wittmann     SwDoc* pDc )
1132dec99bbdSOliver-Rainer Wittmann     : m_aLstnrCntnr( (XTextContent*)this)
1133dec99bbdSOliver-Rainer Wittmann     , m_pFmtFld(&rFmt)
1134dec99bbdSOliver-Rainer Wittmann     , m_pDoc(pDc)
1135dec99bbdSOliver-Rainer Wittmann     , m_pTextObject(0)
1136dec99bbdSOliver-Rainer Wittmann     , m_bIsDescriptor(sal_False)
1137dec99bbdSOliver-Rainer Wittmann     , m_bCallUpdate(sal_False)
1138dec99bbdSOliver-Rainer Wittmann     , m_nServiceId( lcl_GetServiceForField( *m_pFmtFld->GetField() ) )
1139dec99bbdSOliver-Rainer Wittmann     , m_pProps(0)
1140cdf0e10cSrcweir {
1141dec99bbdSOliver-Rainer Wittmann     pDc->GetUnoCallBack()->Add(this);
1142cdf0e10cSrcweir }
1143cdf0e10cSrcweir 
~SwXTextField()1144cdf0e10cSrcweir SwXTextField::~SwXTextField()
1145cdf0e10cSrcweir {
1146cdf0e10cSrcweir 	if ( m_pTextObject )
1147cdf0e10cSrcweir 	{
1148cdf0e10cSrcweir 		m_pTextObject->DisposeEditSource();
1149cdf0e10cSrcweir 		m_pTextObject->release();
1150cdf0e10cSrcweir 	}
1151cdf0e10cSrcweir 
1152cdf0e10cSrcweir 	delete m_pProps;
1153cdf0e10cSrcweir }
1154cdf0e10cSrcweir 
attachTextFieldMaster(const uno::Reference<beans::XPropertySet> & xFieldMaster)1155cdf0e10cSrcweir void SwXTextField::attachTextFieldMaster(const uno::Reference< beans::XPropertySet > & xFieldMaster)
1156cdf0e10cSrcweir 					throw( lang::IllegalArgumentException, uno::RuntimeException )
1157cdf0e10cSrcweir {
1158cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
1159cdf0e10cSrcweir 	if(!m_bIsDescriptor)
1160cdf0e10cSrcweir 		throw uno::RuntimeException();
1161cdf0e10cSrcweir 	uno::Reference< lang::XUnoTunnel > xMasterTunnel(xFieldMaster, uno::UNO_QUERY);
1162cdf0e10cSrcweir     if (!xMasterTunnel.is())
1163cdf0e10cSrcweir         throw lang::IllegalArgumentException();
1164cdf0e10cSrcweir 	SwXFieldMaster* pMaster = reinterpret_cast< SwXFieldMaster * >(
1165cdf0e10cSrcweir 			sal::static_int_cast< sal_IntPtr >( xMasterTunnel->getSomething( SwXFieldMaster::getUnoTunnelId()) ));
1166cdf0e10cSrcweir 
1167cdf0e10cSrcweir 	SwFieldType* pFieldType = pMaster ? pMaster->GetFldType() : 0;
1168cdf0e10cSrcweir 	if(pFieldType && pFieldType->Which() == lcl_ServiceIdToResId(m_nServiceId))
1169cdf0e10cSrcweir 	{
1170cdf0e10cSrcweir 		m_sTypeName = pFieldType->GetName();
1171cdf0e10cSrcweir         pFieldType->Add( &m_aFieldTypeClient );
1172cdf0e10cSrcweir 	}
1173cdf0e10cSrcweir 	else
1174cdf0e10cSrcweir 		throw lang::IllegalArgumentException();
1175cdf0e10cSrcweir 
1176cdf0e10cSrcweir }
1177cdf0e10cSrcweir 
getTextFieldMaster(void)1178cdf0e10cSrcweir uno::Reference< beans::XPropertySet >  SwXTextField::getTextFieldMaster(void) throw( uno::RuntimeException )
1179cdf0e10cSrcweir {
1180cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
1181cdf0e10cSrcweir     SwFieldType* pType = 0;
1182cdf0e10cSrcweir     if( m_bIsDescriptor && m_aFieldTypeClient.GetRegisteredIn() )
1183cdf0e10cSrcweir     {
1184cdf0e10cSrcweir         pType = (SwFieldType*)m_aFieldTypeClient.GetRegisteredIn();
1185cdf0e10cSrcweir     }
1186cdf0e10cSrcweir     else
1187cdf0e10cSrcweir     {
1188cdf0e10cSrcweir         if(!GetRegisteredIn())
1189cdf0e10cSrcweir             throw uno::RuntimeException();
1190dec99bbdSOliver-Rainer Wittmann         pType = m_pFmtFld->GetField()->GetTyp();
1191cdf0e10cSrcweir     }
1192cdf0e10cSrcweir 
1193cdf0e10cSrcweir     SwXFieldMaster* pMaster = SwIterator<SwXFieldMaster,SwFieldType>::FirstElement( *pType );
1194cdf0e10cSrcweir 	if(!pMaster)
1195cdf0e10cSrcweir 		pMaster = new SwXFieldMaster(*pType, GetDoc());
1196cdf0e10cSrcweir 
1197cdf0e10cSrcweir 	return pMaster;
1198cdf0e10cSrcweir }
1199cdf0e10cSrcweir 
getPresentation(sal_Bool bShowCommand)1200cdf0e10cSrcweir OUString SwXTextField::getPresentation(sal_Bool bShowCommand) throw( uno::RuntimeException )
1201cdf0e10cSrcweir {
1202cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
1203cdf0e10cSrcweir 
1204cdf0e10cSrcweir     SwField const*const pField = GetField();
1205cdf0e10cSrcweir     if (!pField)
1206cdf0e10cSrcweir     {
1207cdf0e10cSrcweir 		throw uno::RuntimeException();
1208cdf0e10cSrcweir     }
1209cdf0e10cSrcweir     ::rtl::OUString const ret( (bShowCommand)
1210cdf0e10cSrcweir             ? pField->GetFieldName()
1211cdf0e10cSrcweir             : pField->ExpandField(true) );
1212cdf0e10cSrcweir     return ret;
1213cdf0e10cSrcweir }
1214cdf0e10cSrcweir 
attachToRange(const uno::Reference<text::XTextRange> & xTextRange)1215cdf0e10cSrcweir void SwXTextField::attachToRange(
1216cdf0e10cSrcweir 		const uno::Reference< text::XTextRange > & xTextRange)
1217cdf0e10cSrcweir 	throw( lang::IllegalArgumentException, uno::RuntimeException )
1218cdf0e10cSrcweir {
1219cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
1220cdf0e10cSrcweir 	if(!m_bIsDescriptor)
1221cdf0e10cSrcweir 		throw uno::RuntimeException();
1222cdf0e10cSrcweir 	uno::Reference<lang::XUnoTunnel> xRangeTunnel( xTextRange, uno::UNO_QUERY);
1223cdf0e10cSrcweir 	SwXTextRange* pRange = 0;
1224cdf0e10cSrcweir 	OTextCursorHelper* pCursor = 0;
1225cdf0e10cSrcweir 	if(xRangeTunnel.is())
1226cdf0e10cSrcweir 	{
1227cdf0e10cSrcweir 		pRange 	= reinterpret_cast< SwXTextRange * >(
1228cdf0e10cSrcweir 				sal::static_int_cast< sal_IntPtr >( xRangeTunnel->getSomething( SwXTextRange::getUnoTunnelId()) ));
1229cdf0e10cSrcweir 		pCursor	= reinterpret_cast< OTextCursorHelper * >(
1230cdf0e10cSrcweir 				sal::static_int_cast< sal_IntPtr >( xRangeTunnel->getSomething( OTextCursorHelper::getUnoTunnelId()) ));
1231cdf0e10cSrcweir 	}
1232cdf0e10cSrcweir 
12333b32dd21SOliver-Rainer Wittmann     SwDoc* pDoc = pRange ? (SwDoc*)pRange->GetDoc() : pCursor ? (SwDoc*)pCursor->GetDoc() : 0;
12343b32dd21SOliver-Rainer Wittmann     //wurde ein FieldMaster attached, dann ist das Dokument schon festgelegt!
12353b32dd21SOliver-Rainer Wittmann     if(pDoc && (!m_pDoc || m_pDoc == pDoc))
12363b32dd21SOliver-Rainer Wittmann     {
12373b32dd21SOliver-Rainer Wittmann         SwUnoInternalPaM aPam(*pDoc);
1238cdf0e10cSrcweir         ::sw::XTextRangeToSwPaM(aPam, xTextRange);
12393b32dd21SOliver-Rainer Wittmann         SwField* pFld = 0;
12403b32dd21SOliver-Rainer Wittmann         switch(m_nServiceId)
12413b32dd21SOliver-Rainer Wittmann         {
12423b32dd21SOliver-Rainer Wittmann         case SW_SERVICE_FIELDTYPE_ANNOTATION:
12433b32dd21SOliver-Rainer Wittmann             {
12443b32dd21SOliver-Rainer Wittmann                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_POSTITFLD);
12453b32dd21SOliver-Rainer Wittmann 
12463b32dd21SOliver-Rainer Wittmann                 DateTime aDateTime;
12473b32dd21SOliver-Rainer Wittmann                 if (m_pProps->pDateTime)
12483b32dd21SOliver-Rainer Wittmann                 {
12493b32dd21SOliver-Rainer Wittmann                     aDateTime.SetYear(m_pProps->pDateTime->Year);
12503b32dd21SOliver-Rainer Wittmann                     aDateTime.SetMonth(m_pProps->pDateTime->Month);
12513b32dd21SOliver-Rainer Wittmann                     aDateTime.SetDay(m_pProps->pDateTime->Day);
12523b32dd21SOliver-Rainer Wittmann                     aDateTime.SetHour(m_pProps->pDateTime->Hours);
12533b32dd21SOliver-Rainer Wittmann                     aDateTime.SetMin(m_pProps->pDateTime->Minutes);
12543b32dd21SOliver-Rainer Wittmann                     aDateTime.SetSec(m_pProps->pDateTime->Seconds);
12553b32dd21SOliver-Rainer Wittmann                 }
1256dec99bbdSOliver-Rainer Wittmann                 SwPostItField* pPostItField = new SwPostItField(
12573b32dd21SOliver-Rainer Wittmann                     (SwPostItFieldType*)pFldType,
12583b32dd21SOliver-Rainer Wittmann                     m_pProps->sPar2, // content
12593b32dd21SOliver-Rainer Wittmann                     m_pProps->sPar1, // author
12603b32dd21SOliver-Rainer Wittmann                     m_pProps->sPar3, // author's initials
12613b32dd21SOliver-Rainer Wittmann                     m_pProps->sPar4, // name
12623b32dd21SOliver-Rainer Wittmann                     aDateTime );
12633b32dd21SOliver-Rainer Wittmann                 if ( m_pTextObject )
12643b32dd21SOliver-Rainer Wittmann                 {
1265dec99bbdSOliver-Rainer Wittmann                     pPostItField->SetTextObject( m_pTextObject->CreateText() );
1266dec99bbdSOliver-Rainer Wittmann                     pPostItField->SetPar2(m_pTextObject->GetText());
12673b32dd21SOliver-Rainer Wittmann                 }
1268dec99bbdSOliver-Rainer Wittmann                 pFld = pPostItField;
12693b32dd21SOliver-Rainer Wittmann             }
12703b32dd21SOliver-Rainer Wittmann             break;
12713b32dd21SOliver-Rainer Wittmann 
12723b32dd21SOliver-Rainer Wittmann         case SW_SERVICE_FIELDTYPE_SCRIPT:
12733b32dd21SOliver-Rainer Wittmann             {
12743b32dd21SOliver-Rainer Wittmann                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_SCRIPTFLD);
12753b32dd21SOliver-Rainer Wittmann                 pFld = new SwScriptField((SwScriptFieldType*)pFldType,
12763b32dd21SOliver-Rainer Wittmann                     m_pProps->sPar1, m_pProps->sPar2,
12773b32dd21SOliver-Rainer Wittmann                     m_pProps->bBool1);
12783b32dd21SOliver-Rainer Wittmann             }
12793b32dd21SOliver-Rainer Wittmann             break;
12803b32dd21SOliver-Rainer Wittmann 
12813b32dd21SOliver-Rainer Wittmann         case SW_SERVICE_FIELDTYPE_DATETIME:
12823b32dd21SOliver-Rainer Wittmann             {
12833b32dd21SOliver-Rainer Wittmann                 sal_uInt16 nSub = 0;
12843b32dd21SOliver-Rainer Wittmann                 if(m_pProps->bBool1)
12853b32dd21SOliver-Rainer Wittmann                     nSub |= FIXEDFLD;
12863b32dd21SOliver-Rainer Wittmann                 if(m_pProps->bBool2)
12873b32dd21SOliver-Rainer Wittmann                     nSub |= DATEFLD;
12883b32dd21SOliver-Rainer Wittmann                 else
12893b32dd21SOliver-Rainer Wittmann                     nSub |= TIMEFLD;
12903b32dd21SOliver-Rainer Wittmann                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_DATETIMEFLD);
12913b32dd21SOliver-Rainer Wittmann                 pFld = new SwDateTimeField((SwDateTimeFieldType*)pFldType,
12923b32dd21SOliver-Rainer Wittmann                     nSub, m_pProps->nFormat);
1293cdf0e10cSrcweir                 if(m_pProps->fDouble > 0.)
12943b32dd21SOliver-Rainer Wittmann                     ((SwDateTimeField*)pFld)->SetValue( m_pProps->fDouble );
12953b32dd21SOliver-Rainer Wittmann                 if(m_pProps->pDateTime)
12963b32dd21SOliver-Rainer Wittmann                 {
12973b32dd21SOliver-Rainer Wittmann                     uno::Any aVal; aVal <<= *m_pProps->pDateTime;
12983b32dd21SOliver-Rainer Wittmann                     pFld->PutValue( aVal, FIELD_PROP_DATE_TIME );
12993b32dd21SOliver-Rainer Wittmann                 }
13003b32dd21SOliver-Rainer Wittmann                 ((SwDateTimeField*)pFld)->SetOffset(m_pProps->nSubType);
13013b32dd21SOliver-Rainer Wittmann             }
13023b32dd21SOliver-Rainer Wittmann             break;
13033b32dd21SOliver-Rainer Wittmann 
13043b32dd21SOliver-Rainer Wittmann         case SW_SERVICE_FIELDTYPE_FILE_NAME:
13053b32dd21SOliver-Rainer Wittmann             {
13063b32dd21SOliver-Rainer Wittmann                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_FILENAMEFLD);
13073b32dd21SOliver-Rainer Wittmann                 sal_Int32 nFormat = m_pProps->nFormat;
13083b32dd21SOliver-Rainer Wittmann                 if(m_pProps->bBool2)
13093b32dd21SOliver-Rainer Wittmann                     nFormat |= FF_FIXED;
13103b32dd21SOliver-Rainer Wittmann                 pFld = new SwFileNameField((SwFileNameFieldType*)pFldType, nFormat);
13113b32dd21SOliver-Rainer Wittmann                 if(m_pProps->sPar3.Len())
13123b32dd21SOliver-Rainer Wittmann                     ((SwFileNameField*)pFld)->SetExpansion(m_pProps->sPar3);
1313cdf0e10cSrcweir                 uno::Any aFormat(&m_pProps->nFormat, ::getCppuType(&m_pProps->nFormat));
1314cdf0e10cSrcweir                 pFld->PutValue( aFormat, FIELD_PROP_FORMAT );
13153b32dd21SOliver-Rainer Wittmann             }
13163b32dd21SOliver-Rainer Wittmann             break;
13173b32dd21SOliver-Rainer Wittmann 
13183b32dd21SOliver-Rainer Wittmann         case SW_SERVICE_FIELDTYPE_TEMPLATE_NAME:
13193b32dd21SOliver-Rainer Wittmann             {
13203b32dd21SOliver-Rainer Wittmann                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_TEMPLNAMEFLD);
13213b32dd21SOliver-Rainer Wittmann                 pFld = new SwTemplNameField((SwTemplNameFieldType*)pFldType,
13223b32dd21SOliver-Rainer Wittmann                     m_pProps->nFormat);
1323cdf0e10cSrcweir                 uno::Any aFormat(&m_pProps->nFormat, ::getCppuType(&m_pProps->nFormat));
1324cdf0e10cSrcweir                 pFld->PutValue(aFormat, FIELD_PROP_FORMAT);
1325cdf0e10cSrcweir             }
13263b32dd21SOliver-Rainer Wittmann             break;
13273b32dd21SOliver-Rainer Wittmann 
13283b32dd21SOliver-Rainer Wittmann         case SW_SERVICE_FIELDTYPE_CHAPTER:
13293b32dd21SOliver-Rainer Wittmann             {
13303b32dd21SOliver-Rainer Wittmann                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_CHAPTERFLD);
13313b32dd21SOliver-Rainer Wittmann                 pFld = new SwChapterField((SwChapterFieldType*)pFldType, m_pProps->nUSHORT1);
13323b32dd21SOliver-Rainer Wittmann                 ((SwChapterField*)pFld)->SetLevel(m_pProps->nByte1);
1333cdf0e10cSrcweir                 uno::Any aVal; aVal <<= (sal_Int16)m_pProps->nUSHORT1;
1334cdf0e10cSrcweir                 pFld->PutValue(aVal, FIELD_PROP_USHORT1 );
13353b32dd21SOliver-Rainer Wittmann             }
13363b32dd21SOliver-Rainer Wittmann             break;
13373b32dd21SOliver-Rainer Wittmann         case SW_SERVICE_FIELDTYPE_AUTHOR:
13383b32dd21SOliver-Rainer Wittmann             {
13393b32dd21SOliver-Rainer Wittmann                 long nFormat = m_pProps->bBool1 ? AF_NAME : AF_SHORTCUT;
13403b32dd21SOliver-Rainer Wittmann                 if(m_pProps->bBool2)
13413b32dd21SOliver-Rainer Wittmann                     nFormat |= AF_FIXED;
1342cdf0e10cSrcweir 
13433b32dd21SOliver-Rainer Wittmann                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_AUTHORFLD);
13443b32dd21SOliver-Rainer Wittmann                 pFld = new SwAuthorField((SwAuthorFieldType*)pFldType, nFormat);
13453b32dd21SOliver-Rainer Wittmann                 ((SwAuthorField*)pFld)->SetExpansion(m_pProps->sPar1);
13463b32dd21SOliver-Rainer Wittmann             }
13473b32dd21SOliver-Rainer Wittmann             break;
13483b32dd21SOliver-Rainer Wittmann 
13493b32dd21SOliver-Rainer Wittmann         case SW_SERVICE_FIELDTYPE_CONDITIONED_TEXT:
13503b32dd21SOliver-Rainer Wittmann         case SW_SERVICE_FIELDTYPE_HIDDEN_TEXT:
13513b32dd21SOliver-Rainer Wittmann             {
13523b32dd21SOliver-Rainer Wittmann                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_HIDDENTXTFLD);
13533b32dd21SOliver-Rainer Wittmann                 pFld = new SwHiddenTxtField(((SwHiddenTxtFieldType*)pFldType),
13543b32dd21SOliver-Rainer Wittmann                     m_pProps->sPar1,
13553b32dd21SOliver-Rainer Wittmann                     m_pProps->sPar2, m_pProps->sPar3,
13563b32dd21SOliver-Rainer Wittmann                     static_cast< sal_uInt16 >(SW_SERVICE_FIELDTYPE_HIDDEN_TEXT == m_nServiceId ? TYP_HIDDENTXTFLD : TYP_CONDTXTFLD));
1357cdf0e10cSrcweir                 ((SwHiddenTxtField*)pFld)->SetValue(m_pProps->bBool1);
13583b32dd21SOliver-Rainer Wittmann                 uno::Any aVal; aVal <<= (OUString)m_pProps->sPar4;
13593b32dd21SOliver-Rainer Wittmann                 pFld->PutValue(aVal, FIELD_PROP_PAR4 );
13603b32dd21SOliver-Rainer Wittmann             }
13613b32dd21SOliver-Rainer Wittmann             break;
13623b32dd21SOliver-Rainer Wittmann 
1363cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_HIDDEN_PARA:
1364cdf0e10cSrcweir 			{
1365cdf0e10cSrcweir 				SwFieldType* pFldType = pDoc->GetSysFldType(RES_HIDDENPARAFLD);
1366cdf0e10cSrcweir 				pFld = new SwHiddenParaField((SwHiddenParaFieldType*)pFldType,
1367cdf0e10cSrcweir 												m_pProps->sPar1);
1368cdf0e10cSrcweir                 ((SwHiddenParaField*)pFld)->SetHidden(m_pProps->bBool1);
1369cdf0e10cSrcweir 			}
1370cdf0e10cSrcweir 			break;
1371cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_GET_REFERENCE:
1372cdf0e10cSrcweir 			{
1373cdf0e10cSrcweir 				SwFieldType* pFldType = pDoc->GetSysFldType(RES_GETREFFLD);
1374cdf0e10cSrcweir 				pFld = new SwGetRefField((SwGetRefFieldType*)pFldType,
1375cdf0e10cSrcweir 							m_pProps->sPar1,
1376cdf0e10cSrcweir 							0,
1377cdf0e10cSrcweir 							0,
1378cdf0e10cSrcweir 							0);
1379cdf0e10cSrcweir 				if(m_pProps->sPar3.Len())
1380cdf0e10cSrcweir 					((SwGetRefField*)pFld)->SetExpand(m_pProps->sPar3);
1381cdf0e10cSrcweir 				uno::Any aVal; aVal <<=(sal_Int16)m_pProps->nUSHORT1;
1382cdf0e10cSrcweir 				pFld->PutValue(aVal, FIELD_PROP_USHORT1 );
1383cdf0e10cSrcweir 				aVal <<=(sal_Int16)m_pProps->nUSHORT2;
1384cdf0e10cSrcweir 				pFld->PutValue(aVal, FIELD_PROP_USHORT2 );
1385cdf0e10cSrcweir 				aVal <<=(sal_Int16)m_pProps->nSHORT1;
1386cdf0e10cSrcweir 				pFld->PutValue(aVal, FIELD_PROP_SHORT1 );
1387cdf0e10cSrcweir 			}
1388cdf0e10cSrcweir 			break;
1389cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_JUMP_EDIT:
1390cdf0e10cSrcweir 			{
1391cdf0e10cSrcweir 				SwFieldType* pFldType = pDoc->GetSysFldType(RES_JUMPEDITFLD);
1392cdf0e10cSrcweir 				pFld = new SwJumpEditField((SwJumpEditFieldType*)pFldType,
1393cdf0e10cSrcweir 						m_pProps->nUSHORT1, m_pProps->sPar2, m_pProps->sPar1);
1394cdf0e10cSrcweir 			}
1395cdf0e10cSrcweir 			break;
1396cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_AUTHOR		:
1397cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_DATE_TIME  :
1398cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DOCINFO_EDIT_TIME         :
1399cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DOCINFO_DESCRIPTION       :
1400cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_AUTHOR     :
1401cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_DATE_TIME  :
1402cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DOCINFO_CUSTOM            :
1403cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_AUTHOR      :
1404cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_DATE_TIME   :
1405cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DOCINFO_KEY_WORDS         :
1406cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DOCINFO_SUBJECT           :
1407cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DOCINFO_TITLE             :
1408cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DOCINFO_REVISION          :
1409cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DOC_INFO:
1410cdf0e10cSrcweir 			{
1411cdf0e10cSrcweir 				SwFieldType* pFldType = pDoc->GetSysFldType(RES_DOCINFOFLD);
1412cdf0e10cSrcweir 				sal_uInt16 nSubType = aDocInfoSubTypeFromService[
1413cdf0e10cSrcweir 						m_nServiceId - SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_AUTHOR];
1414cdf0e10cSrcweir 				if( SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_DATE_TIME == m_nServiceId ||
1415cdf0e10cSrcweir 					SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_DATE_TIME == m_nServiceId ||
1416cdf0e10cSrcweir 					SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_DATE_TIME == m_nServiceId ||
1417cdf0e10cSrcweir 					SW_SERVICE_FIELDTYPE_DOCINFO_EDIT_TIME == m_nServiceId )
1418cdf0e10cSrcweir 				{
1419cdf0e10cSrcweir 					if(m_pProps->bBool2) //IsDate
1420cdf0e10cSrcweir 					{
1421cdf0e10cSrcweir 						nSubType &= 0xf0ff;
1422cdf0e10cSrcweir 						nSubType |= DI_SUB_DATE;
1423cdf0e10cSrcweir 					}
1424cdf0e10cSrcweir 					else
1425cdf0e10cSrcweir 					{
1426cdf0e10cSrcweir 						nSubType &= 0xf0ff;
1427cdf0e10cSrcweir 						nSubType |= DI_SUB_TIME;
1428cdf0e10cSrcweir 					}
1429cdf0e10cSrcweir 				}
1430cdf0e10cSrcweir 				if(m_pProps->bBool1)
1431cdf0e10cSrcweir 					nSubType |= DI_SUB_FIXED;
1432cdf0e10cSrcweir 				pFld = new SwDocInfoField((SwDocInfoFieldType*)pFldType, nSubType, m_pProps->sPar4, m_pProps->nFormat);
1433cdf0e10cSrcweir 				if(m_pProps->sPar3.Len())
1434cdf0e10cSrcweir 					((SwDocInfoField*)pFld)->SetExpansion(m_pProps->sPar3);
1435cdf0e10cSrcweir 			}
1436cdf0e10cSrcweir 			break;
1437cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_USER_EXT:
1438cdf0e10cSrcweir 			{
1439cdf0e10cSrcweir 				sal_Int32 nFormat = 0;
1440cdf0e10cSrcweir 				if(m_pProps->bBool1)
1441cdf0e10cSrcweir 					nFormat = AF_FIXED;
1442cdf0e10cSrcweir 
1443cdf0e10cSrcweir 				SwFieldType* pFldType = pDoc->GetSysFldType(RES_EXTUSERFLD);
1444cdf0e10cSrcweir 				pFld = new SwExtUserField((SwExtUserFieldType*)pFldType, m_pProps->nUSHORT1, nFormat);
1445cdf0e10cSrcweir 				((SwExtUserField*)pFld)->SetExpansion(m_pProps->sPar1);
1446cdf0e10cSrcweir 			}
1447cdf0e10cSrcweir 			break;
1448cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_USER:
1449cdf0e10cSrcweir 			{
1450cdf0e10cSrcweir 				SwFieldType* pFldType = pDoc->GetFldType(RES_USERFLD, m_sTypeName, sal_True);
1451cdf0e10cSrcweir 				if(!pFldType)
1452cdf0e10cSrcweir 					throw uno::RuntimeException();
1453cdf0e10cSrcweir 				sal_uInt16 nUserSubType = m_pProps->bBool1 ? nsSwExtendedSubType::SUB_INVISIBLE : 0;
1454cdf0e10cSrcweir 				if(m_pProps->bBool2)
1455cdf0e10cSrcweir 					nUserSubType |= nsSwExtendedSubType::SUB_CMD;
1456cdf0e10cSrcweir                 if(m_pProps->bFormatIsDefault &&
1457cdf0e10cSrcweir                     nsSwGetSetExpType::GSE_STRING == ((SwUserFieldType*)pFldType)->GetType())
1458cdf0e10cSrcweir                         m_pProps->nFormat = -1;
1459cdf0e10cSrcweir 				pFld = new SwUserField((SwUserFieldType*)pFldType,
1460cdf0e10cSrcweir 									nUserSubType,
1461cdf0e10cSrcweir 									m_pProps->nFormat);
1462cdf0e10cSrcweir 			}
1463cdf0e10cSrcweir 			break;
1464cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_REF_PAGE_SET:
1465cdf0e10cSrcweir 			{
1466cdf0e10cSrcweir 				SwFieldType* pFldType = pDoc->GetSysFldType(RES_REFPAGESETFLD);
1467cdf0e10cSrcweir 				pFld = new SwRefPageSetField( (SwRefPageSetFieldType*)pFldType,
1468cdf0e10cSrcweir 									m_pProps->nUSHORT1,
1469cdf0e10cSrcweir 									m_pProps->bBool1 );
1470cdf0e10cSrcweir 			}
1471cdf0e10cSrcweir 			break;
1472cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_REF_PAGE_GET:
1473cdf0e10cSrcweir 			{
1474cdf0e10cSrcweir 				SwFieldType* pFldType = pDoc->GetSysFldType(RES_REFPAGEGETFLD);
1475cdf0e10cSrcweir 				pFld = new SwRefPageGetField( (SwRefPageGetFieldType*)pFldType,
1476cdf0e10cSrcweir 												m_pProps->nUSHORT1 );
1477cdf0e10cSrcweir                 ((SwRefPageGetField*)pFld)->SetText(m_pProps->sPar1);
1478cdf0e10cSrcweir 			}
1479cdf0e10cSrcweir 			break;
1480cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_PAGE_NUM:
1481cdf0e10cSrcweir 			{
1482cdf0e10cSrcweir 				SwFieldType* pFldType = pDoc->GetSysFldType(RES_PAGENUMBERFLD);
1483cdf0e10cSrcweir 				pFld = new SwPageNumberField((SwPageNumberFieldType*)pFldType,
1484cdf0e10cSrcweir 												PG_RANDOM,
1485cdf0e10cSrcweir 												m_pProps->nFormat,
1486cdf0e10cSrcweir 												m_pProps->nUSHORT1);
1487cdf0e10cSrcweir 				((SwPageNumberField*)pFld)->SetUserString(m_pProps->sPar1);
1488cdf0e10cSrcweir                 uno::Any aVal; aVal <<= m_pProps->nSubType;
1489cdf0e10cSrcweir                 pFld->PutValue( aVal, FIELD_PROP_SUBTYPE );
1490cdf0e10cSrcweir             }
1491cdf0e10cSrcweir 			break;
1492cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DDE:
1493cdf0e10cSrcweir 			{
1494cdf0e10cSrcweir 				SwFieldType* pFldType = pDoc->GetFldType(RES_DDEFLD, m_sTypeName, sal_True);
1495cdf0e10cSrcweir 				if(!pFldType)
1496cdf0e10cSrcweir 					throw uno::RuntimeException();
1497cdf0e10cSrcweir 				pFld = new SwDDEField( (SwDDEFieldType*)pFldType );
1498cdf0e10cSrcweir 			}
1499cdf0e10cSrcweir 			break;
1500cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DATABASE_NAME:
1501cdf0e10cSrcweir 			{
1502cdf0e10cSrcweir 				SwFieldType* pFldType = pDoc->GetSysFldType(RES_DBNAMEFLD);
1503cdf0e10cSrcweir 				SwDBData aData;
1504cdf0e10cSrcweir 				aData.sDataSource = m_pProps->sPar1;
1505cdf0e10cSrcweir 				aData.sCommand = m_pProps->sPar2;
1506cdf0e10cSrcweir 				aData.nCommandType = m_pProps->nSHORT1;
1507cdf0e10cSrcweir 				pFld = new SwDBNameField((SwDBNameFieldType*)pFldType, aData);
1508cdf0e10cSrcweir                 sal_uInt16  nSubType = pFld->GetSubType();
1509cdf0e10cSrcweir                 if(m_pProps->bBool2)
1510cdf0e10cSrcweir                     nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
1511cdf0e10cSrcweir                 else
1512cdf0e10cSrcweir                     nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
1513cdf0e10cSrcweir                 pFld->SetSubType(nSubType);
1514cdf0e10cSrcweir             }
1515cdf0e10cSrcweir 			break;
1516cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DATABASE_NEXT_SET:
1517cdf0e10cSrcweir 			{
1518cdf0e10cSrcweir 				SwDBData aData;
1519cdf0e10cSrcweir 				aData.sDataSource = m_pProps->sPar1;
1520cdf0e10cSrcweir 				aData.sCommand = m_pProps->sPar2;
1521cdf0e10cSrcweir 				aData.nCommandType = m_pProps->nSHORT1;
1522cdf0e10cSrcweir 				SwFieldType* pFldType = pDoc->GetSysFldType(RES_DBNEXTSETFLD);
1523cdf0e10cSrcweir 				pFld = new SwDBNextSetField((SwDBNextSetFieldType*)pFldType,
1524cdf0e10cSrcweir 						m_pProps->sPar3, aEmptyStr,
1525cdf0e10cSrcweir 						aData);
1526cdf0e10cSrcweir             }
1527cdf0e10cSrcweir 			break;
1528cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DATABASE_NUM_SET:
1529cdf0e10cSrcweir 			{
1530cdf0e10cSrcweir 				SwDBData aData;
1531cdf0e10cSrcweir 				aData.sDataSource = m_pProps->sPar1;
1532cdf0e10cSrcweir 				aData.sCommand = m_pProps->sPar2;
1533cdf0e10cSrcweir 				aData.nCommandType = m_pProps->nSHORT1;
1534cdf0e10cSrcweir 				pFld = new SwDBNumSetField( (SwDBNumSetFieldType*)
1535cdf0e10cSrcweir 					pDoc->GetSysFldType(RES_DBNUMSETFLD),
1536cdf0e10cSrcweir 					m_pProps->sPar3,
1537cdf0e10cSrcweir 					String::CreateFromInt32(m_pProps->nFormat),
1538cdf0e10cSrcweir 					aData );
1539cdf0e10cSrcweir             }
1540cdf0e10cSrcweir 			break;
1541cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DATABASE_SET_NUM:
1542cdf0e10cSrcweir 			{
1543cdf0e10cSrcweir 				SwDBData aData;
1544cdf0e10cSrcweir 				aData.sDataSource = m_pProps->sPar1;
1545cdf0e10cSrcweir 				aData.sCommand = m_pProps->sPar2;
1546cdf0e10cSrcweir 				aData.nCommandType = m_pProps->nSHORT1;
1547cdf0e10cSrcweir 				pFld = new SwDBSetNumberField((SwDBSetNumberFieldType*)
1548cdf0e10cSrcweir 						pDoc->GetSysFldType(RES_DBSETNUMBERFLD),
1549cdf0e10cSrcweir 						aData,
1550cdf0e10cSrcweir 						m_pProps->nUSHORT1);
1551cdf0e10cSrcweir 				((SwDBSetNumberField*)pFld)->SetSetNumber(m_pProps->nFormat);
1552cdf0e10cSrcweir                 sal_uInt16  nSubType = pFld->GetSubType();
1553cdf0e10cSrcweir                 if(m_pProps->bBool2)
1554cdf0e10cSrcweir                     nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
1555cdf0e10cSrcweir                 else
1556cdf0e10cSrcweir                     nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
1557cdf0e10cSrcweir                 pFld->SetSubType(nSubType);
1558cdf0e10cSrcweir             }
1559cdf0e10cSrcweir 			break;
1560cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_DATABASE:
1561cdf0e10cSrcweir 			{
1562cdf0e10cSrcweir 				SwFieldType* pFldType = pDoc->GetFldType(RES_DBFLD, m_sTypeName, sal_False);
1563cdf0e10cSrcweir 				if(!pFldType)
1564cdf0e10cSrcweir 					throw uno::RuntimeException();
1565cdf0e10cSrcweir 				pFld = new SwDBField((SwDBFieldType*)pFldType, m_pProps->nFormat);
1566cdf0e10cSrcweir 				((SwDBField*)pFld)->InitContent(m_pProps->sPar1);
1567cdf0e10cSrcweir                 sal_uInt16  nSubType = pFld->GetSubType();
1568cdf0e10cSrcweir                 if(m_pProps->bBool2)
1569cdf0e10cSrcweir                     nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
1570cdf0e10cSrcweir                 else
1571cdf0e10cSrcweir                     nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
1572cdf0e10cSrcweir                 pFld->SetSubType(nSubType);
1573cdf0e10cSrcweir 			}
1574cdf0e10cSrcweir 			break;
1575cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_SET_EXP:
1576cdf0e10cSrcweir 			{
1577cdf0e10cSrcweir 				SwFieldType* pFldType = pDoc->GetFldType(RES_SETEXPFLD, m_sTypeName, sal_True);
1578cdf0e10cSrcweir 				if(!pFldType)
1579cdf0e10cSrcweir 					throw uno::RuntimeException();
1580cdf0e10cSrcweir                 //#93192# detect the field type's sub type and set an appropriate number format
1581cdf0e10cSrcweir                 if(m_pProps->bFormatIsDefault &&
1582cdf0e10cSrcweir                     nsSwGetSetExpType::GSE_STRING == ((SwSetExpFieldType*)pFldType)->GetType())
1583cdf0e10cSrcweir                         m_pProps->nFormat = -1;
1584cdf0e10cSrcweir                 pFld = new SwSetExpField((SwSetExpFieldType*)pFldType,
1585cdf0e10cSrcweir 					m_pProps->sPar2,
1586cdf0e10cSrcweir                     m_pProps->nUSHORT2 != USHRT_MAX ?  //#i79471# the field can have a number format or a number_ing_ format
1587cdf0e10cSrcweir                     m_pProps->nUSHORT2 : m_pProps->nFormat);
1588cdf0e10cSrcweir 
1589cdf0e10cSrcweir 				sal_uInt16	nSubType = pFld->GetSubType();
1590cdf0e10cSrcweir 				if(m_pProps->bBool2)
1591cdf0e10cSrcweir 					nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
1592cdf0e10cSrcweir 				else
1593cdf0e10cSrcweir 					nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
1594cdf0e10cSrcweir 				if(m_pProps->bBool3)
1595cdf0e10cSrcweir 					nSubType |= nsSwExtendedSubType::SUB_CMD;
1596cdf0e10cSrcweir 				else
1597cdf0e10cSrcweir 					nSubType &= ~nsSwExtendedSubType::SUB_CMD;
1598cdf0e10cSrcweir 				pFld->SetSubType(nSubType);
1599cdf0e10cSrcweir 				((SwSetExpField*)pFld)->SetSeqNumber( m_pProps->nUSHORT1 );
1600cdf0e10cSrcweir 				((SwSetExpField*)pFld)->SetInputFlag(m_pProps->bBool1);
1601cdf0e10cSrcweir 				((SwSetExpField*)pFld)->SetPromptText(m_pProps->sPar3);
1602cdf0e10cSrcweir 				if(m_pProps->sPar4.Len())
1603cdf0e10cSrcweir 					((SwSetExpField*)pFld)->ChgExpStr(m_pProps->sPar4);
1604cdf0e10cSrcweir 
1605cdf0e10cSrcweir 			}
1606cdf0e10cSrcweir 			break;
1607cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_GET_EXP:
1608cdf0e10cSrcweir 			{
1609cdf0e10cSrcweir 				sal_uInt16 nSubType;
1610cdf0e10cSrcweir 				switch(m_pProps->nSubType)
1611cdf0e10cSrcweir 				{
1612cdf0e10cSrcweir                     case text::SetVariableType::STRING: nSubType = nsSwGetSetExpType::GSE_STRING;   break;
1613cdf0e10cSrcweir                     case text::SetVariableType::VAR:        nSubType = nsSwGetSetExpType::GSE_EXPR;  break;
1614cdf0e10cSrcweir 					//case text::SetVariableType::SEQUENCE:   nSubType = nsSwGetSetExpType::GSE_SEQ;  break;
1615cdf0e10cSrcweir                     case text::SetVariableType::FORMULA:    nSubType = nsSwGetSetExpType::GSE_FORMULA; break;
1616cdf0e10cSrcweir 					default:
1617cdf0e10cSrcweir 						DBG_ERROR("wrong value");
1618cdf0e10cSrcweir 						nSubType = nsSwGetSetExpType::GSE_EXPR;
1619cdf0e10cSrcweir 				}
1620cdf0e10cSrcweir                 //make sure the SubType matches the field type
1621cdf0e10cSrcweir                 SwFieldType* pSetExpFld = pDoc->GetFldType(RES_SETEXPFLD, m_pProps->sPar1, sal_False);
1622cdf0e10cSrcweir                 bool bSetGetExpFieldUninitialized = false;
1623cdf0e10cSrcweir                 if( pSetExpFld )
1624cdf0e10cSrcweir                 {
1625cdf0e10cSrcweir                     if( nSubType != nsSwGetSetExpType::GSE_STRING &&
1626cdf0e10cSrcweir                         static_cast< SwSetExpFieldType* >(pSetExpFld)->GetType() == nsSwGetSetExpType::GSE_STRING )
1627cdf0e10cSrcweir                     nSubType = nsSwGetSetExpType::GSE_STRING;
1628cdf0e10cSrcweir 				}
1629cdf0e10cSrcweir 				else
1630cdf0e10cSrcweir                     bSetGetExpFieldUninitialized = true; // #i82544#
1631cdf0e10cSrcweir 
1632cdf0e10cSrcweir 				if(m_pProps->bBool2)
1633cdf0e10cSrcweir 					nSubType |= nsSwExtendedSubType::SUB_CMD;
1634cdf0e10cSrcweir 				else
1635cdf0e10cSrcweir 					nSubType &= ~nsSwExtendedSubType::SUB_CMD;
1636cdf0e10cSrcweir 				pFld = new SwGetExpField((SwGetExpFieldType*)
1637cdf0e10cSrcweir 						pDoc->GetSysFldType(RES_GETEXPFLD),
1638cdf0e10cSrcweir 						m_pProps->sPar1, nSubType, m_pProps->nFormat);
1639cdf0e10cSrcweir 				//TODO: SubType auswerten!
1640cdf0e10cSrcweir 				if(m_pProps->sPar4.Len())
1641cdf0e10cSrcweir 					((SwGetExpField*)pFld)->ChgExpStr(m_pProps->sPar4);
1642cdf0e10cSrcweir 				// #i82544#
1643cdf0e10cSrcweir                 if( bSetGetExpFieldUninitialized )
1644cdf0e10cSrcweir                     ((SwGetExpField*)pFld)->SetLateInitialization();
1645cdf0e10cSrcweir 			}
1646cdf0e10cSrcweir 			break;
1647cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_INPUT_USER:
1648cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_INPUT:
1649cdf0e10cSrcweir 			{
1650cdf0e10cSrcweir 				SwFieldType* pFldType = pDoc->GetFldType(RES_INPUTFLD, m_sTypeName, sal_True);
1651cdf0e10cSrcweir 				if(!pFldType)
1652cdf0e10cSrcweir 					throw uno::RuntimeException();
1653cdf0e10cSrcweir                 sal_uInt16 nInpSubType = sal::static_int_cast< sal_uInt16 >(SW_SERVICE_FIELDTYPE_INPUT_USER == m_nServiceId ? INP_USR : INP_TXT);
1654cdf0e10cSrcweir                 SwInputField * pTxtField =
165569a74367SOliver-Rainer Wittmann                     new SwInputField( static_cast<SwInputFieldType*>(pFldType),
165669a74367SOliver-Rainer Wittmann                                       m_pProps->sPar1,
165769a74367SOliver-Rainer Wittmann                                       m_pProps->sPar2,
165869a74367SOliver-Rainer Wittmann                                       nInpSubType );
1659cdf0e10cSrcweir                 pTxtField->SetHelp(m_pProps->sPar3);
1660cdf0e10cSrcweir                 pTxtField->SetToolTip(m_pProps->sPar4);
1661cdf0e10cSrcweir 
1662cdf0e10cSrcweir                 pFld = pTxtField;
1663cdf0e10cSrcweir 			}
1664cdf0e10cSrcweir 			break;
1665cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_MACRO:
1666cdf0e10cSrcweir 			{
1667cdf0e10cSrcweir 				SwFieldType* pFldType = pDoc->GetSysFldType(RES_MACROFLD);
1668cdf0e10cSrcweir 				String aName;
1669cdf0e10cSrcweir 
1670cdf0e10cSrcweir 				// support for Scripting Framework macros
1671cdf0e10cSrcweir 				if (m_pProps->sPar4.Len() != 0)
1672cdf0e10cSrcweir 				{
1673cdf0e10cSrcweir 					aName = m_pProps->sPar4;
1674cdf0e10cSrcweir 				}
1675cdf0e10cSrcweir 				else
1676cdf0e10cSrcweir 				{
1677cdf0e10cSrcweir 					SwMacroField::CreateMacroString(
1678cdf0e10cSrcweir 						aName, m_pProps->sPar1, m_pProps->sPar3 );
1679cdf0e10cSrcweir 				}
1680cdf0e10cSrcweir 				pFld = new SwMacroField((SwMacroFieldType*)pFldType, aName,
1681cdf0e10cSrcweir                                         m_pProps->sPar2);
1682cdf0e10cSrcweir 			}
1683cdf0e10cSrcweir 			break;
1684cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_PAGE_COUNT            :
1685cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_PARAGRAPH_COUNT       :
1686cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_WORD_COUNT            :
1687cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_CHARACTER_COUNT       :
1688cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_TABLE_COUNT           :
1689cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_GRAPHIC_OBJECT_COUNT  :
1690cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_EMBEDDED_OBJECT_COUNT :
1691cdf0e10cSrcweir 			{
1692cdf0e10cSrcweir 				sal_uInt16 nSubType = DS_PAGE;
1693cdf0e10cSrcweir 				switch(m_nServiceId)
1694cdf0e10cSrcweir 				{
1695cdf0e10cSrcweir //					case SW_SERVICE_FIELDTYPE_PAGE_COUNT            : break;
1696cdf0e10cSrcweir 					case SW_SERVICE_FIELDTYPE_PARAGRAPH_COUNT       : nSubType = DS_PARA;break;
1697cdf0e10cSrcweir 					case SW_SERVICE_FIELDTYPE_WORD_COUNT            : nSubType = DS_WORD;break;
1698cdf0e10cSrcweir 					case SW_SERVICE_FIELDTYPE_CHARACTER_COUNT       : nSubType = DS_CHAR;break;
1699cdf0e10cSrcweir 					case SW_SERVICE_FIELDTYPE_TABLE_COUNT           : nSubType = DS_TBL;break;
1700cdf0e10cSrcweir 					case SW_SERVICE_FIELDTYPE_GRAPHIC_OBJECT_COUNT  : nSubType = DS_GRF;break;
1701cdf0e10cSrcweir 					case SW_SERVICE_FIELDTYPE_EMBEDDED_OBJECT_COUNT : nSubType = DS_OLE;break;
1702cdf0e10cSrcweir 				}
1703cdf0e10cSrcweir 				SwFieldType* pFldType = pDoc->GetSysFldType(RES_DOCSTATFLD);
1704cdf0e10cSrcweir 				pFld = new SwDocStatField((SwDocStatFieldType*)pFldType, nSubType, m_pProps->nUSHORT2);
1705cdf0e10cSrcweir 			}
1706cdf0e10cSrcweir 			break;
1707cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_BIBLIOGRAPHY:
1708cdf0e10cSrcweir 				pFld = new SwAuthorityField( (SwAuthorityFieldType*)
1709cdf0e10cSrcweir 						pDoc->InsertFldType(SwAuthorityFieldType(pDoc)),
1710cdf0e10cSrcweir 						aEmptyStr );
1711cdf0e10cSrcweir 				if(m_pProps->aPropSeq.getLength())
1712cdf0e10cSrcweir 				{
1713cdf0e10cSrcweir 					uno::Any aVal; aVal <<= m_pProps->aPropSeq;
1714cdf0e10cSrcweir 					pFld->PutValue( aVal, FIELD_PROP_PROP_SEQ );
1715cdf0e10cSrcweir 				}
1716cdf0e10cSrcweir 				break;
1717cdf0e10cSrcweir 			case SW_SERVICE_FIELDTYPE_COMBINED_CHARACTERS:
1718cdf0e10cSrcweir 				// create field
1719cdf0e10cSrcweir 				pFld = new SwCombinedCharField( (SwCombinedCharFieldType*)
1720cdf0e10cSrcweir 							pDoc->GetSysFldType(RES_COMBINED_CHARS),
1721cdf0e10cSrcweir 							m_pProps->sPar1);
1722cdf0e10cSrcweir 				break;
1723cdf0e10cSrcweir             case SW_SERVICE_FIELDTYPE_DROPDOWN:
1724cdf0e10cSrcweir                 pFld = new SwDropDownField
1725cdf0e10cSrcweir                     ((SwDropDownFieldType *)
1726cdf0e10cSrcweir                      pDoc->GetSysFldType(RES_DROPDOWN));
1727cdf0e10cSrcweir 
1728cdf0e10cSrcweir                 ((SwDropDownField *) pFld)->SetItems(m_pProps->aStrings);
1729cdf0e10cSrcweir                 ((SwDropDownField *) pFld)->SetSelectedItem(m_pProps->sPar1);
1730cdf0e10cSrcweir                 ((SwDropDownField *) pFld)->SetName(m_pProps->sPar2);
1731cdf0e10cSrcweir                 ((SwDropDownField *) pFld)->SetHelp(m_pProps->sPar3);
1732cdf0e10cSrcweir                 ((SwDropDownField *) pFld)->SetToolTip(m_pProps->sPar4);
1733cdf0e10cSrcweir                 break;
1734cdf0e10cSrcweir 
1735cdf0e10cSrcweir             case SW_SERVICE_FIELDTYPE_TABLE_FORMULA :
1736cdf0e10cSrcweir             {
1737cdf0e10cSrcweir 
1738cdf0e10cSrcweir 				// create field
1739cdf0e10cSrcweir                 sal_uInt16 nType = nsSwGetSetExpType::GSE_FORMULA;
1740cdf0e10cSrcweir                 if(m_pProps->bBool1)
1741cdf0e10cSrcweir                 {
1742cdf0e10cSrcweir                     nType |= nsSwExtendedSubType::SUB_CMD;
1743cdf0e10cSrcweir                     if(m_pProps->bFormatIsDefault)
1744cdf0e10cSrcweir                         m_pProps->nFormat = -1;
1745cdf0e10cSrcweir                 }
1746cdf0e10cSrcweir                 pFld = new SwTblField( (SwTblFieldType*)
1747cdf0e10cSrcweir 					pDoc->GetSysFldType(RES_TABLEFLD),
1748cdf0e10cSrcweir 					m_pProps->sPar2,
1749cdf0e10cSrcweir                     nType,
1750cdf0e10cSrcweir                     m_pProps->nFormat);
1751cdf0e10cSrcweir                ((SwTblField*)pFld)->ChgExpStr(m_pProps->sPar1);
1752cdf0e10cSrcweir             }
1753cdf0e10cSrcweir             break;
17543b32dd21SOliver-Rainer Wittmann             default: DBG_ERROR("was ist das fuer ein Typ?");
17553b32dd21SOliver-Rainer Wittmann         }
17563b32dd21SOliver-Rainer Wittmann         if ( pFld )
17573b32dd21SOliver-Rainer Wittmann         {
1758cdf0e10cSrcweir             pFld->SetAutomaticLanguage(!m_pProps->bBool4);
1759cdf0e10cSrcweir             SwFmtFld aFmt( *pFld );
1760cdf0e10cSrcweir 
17613b32dd21SOliver-Rainer Wittmann             UnoActionContext aCont(pDoc);
17623b32dd21SOliver-Rainer Wittmann             if ( aPam.HasMark()
17633b32dd21SOliver-Rainer Wittmann                  && m_nServiceId != SW_SERVICE_FIELDTYPE_ANNOTATION )
17643b32dd21SOliver-Rainer Wittmann             {
17653b32dd21SOliver-Rainer Wittmann                 pDoc->DeleteAndJoin(aPam);
17663b32dd21SOliver-Rainer Wittmann             }
1767cdf0e10cSrcweir 
176869a74367SOliver-Rainer Wittmann             SwXTextCursor const*const pTextCursor( dynamic_cast<SwXTextCursor*>(pCursor) );
176969a74367SOliver-Rainer Wittmann             const bool bForceExpandHints(
177069a74367SOliver-Rainer Wittmann                 (pTextCursor)
177169a74367SOliver-Rainer Wittmann                 ? pTextCursor->IsAtEndOfMeta()
177269a74367SOliver-Rainer Wittmann                 : false );
177369a74367SOliver-Rainer Wittmann             const SetAttrMode nInsertFlags =
177469a74367SOliver-Rainer Wittmann                 (bForceExpandHints)
1775cdf0e10cSrcweir                 ? nsSetAttrMode::SETATTR_FORCEHINTEXPAND
1776cdf0e10cSrcweir                 : nsSetAttrMode::SETATTR_DEFAULT;
1777cdf0e10cSrcweir 
17783b32dd21SOliver-Rainer Wittmann             if ( *aPam.GetPoint() != *aPam.GetMark()
17793b32dd21SOliver-Rainer Wittmann                  && m_nServiceId == SW_SERVICE_FIELDTYPE_ANNOTATION )
17803b32dd21SOliver-Rainer Wittmann             {
1781dec99bbdSOliver-Rainer Wittmann                 // Make sure we always insert the annotation at the end of the provided text range
17823b32dd21SOliver-Rainer Wittmann                 SwPaM aEnd(*aPam.End(), *aPam.End());
17833b32dd21SOliver-Rainer Wittmann                 pDoc->InsertPoolItem(aEnd, aFmt, nInsertFlags);
17843b32dd21SOliver-Rainer Wittmann             }
17853b32dd21SOliver-Rainer Wittmann             else
17863b32dd21SOliver-Rainer Wittmann                 pDoc->InsertPoolItem(aPam, aFmt, nInsertFlags);
1787cdf0e10cSrcweir 
1788dec99bbdSOliver-Rainer Wittmann             SwTxtAttr* pTxtAttr = aPam.GetNode()->GetTxtNode()->GetFldTxtAttrAt( aPam.GetPoint()->nContent.GetIndex()-1, true );
178969a74367SOliver-Rainer Wittmann             // was passiert mit dem Update der Felder ? (siehe fldmgr.cxx)
1790dec99bbdSOliver-Rainer Wittmann             if ( pTxtAttr != NULL )
179169a74367SOliver-Rainer Wittmann             {
179269a74367SOliver-Rainer Wittmann                 const SwFmtFld& rFld = pTxtAttr->GetFmtFld();
1793dec99bbdSOliver-Rainer Wittmann                 m_pFmtFld = &rFld;
1794dec99bbdSOliver-Rainer Wittmann 
1795dec99bbdSOliver-Rainer Wittmann                 if ( pTxtAttr->Which() == RES_TXTATR_ANNOTATION
1796dec99bbdSOliver-Rainer Wittmann                      && *aPam.GetPoint() != *aPam.GetMark() )
1797dec99bbdSOliver-Rainer Wittmann                 {
1798dec99bbdSOliver-Rainer Wittmann                     // create annotation mark
1799dec99bbdSOliver-Rainer Wittmann                     const SwPostItField* pPostItField = dynamic_cast< const SwPostItField* >(pTxtAttr->GetFmtFld().GetField());
1800dec99bbdSOliver-Rainer Wittmann                     ASSERT( pPostItField != NULL, "<SwXTextField::attachToRange(..)> - annotation field missing!" );
1801dec99bbdSOliver-Rainer Wittmann                     if ( pPostItField != NULL )
1802dec99bbdSOliver-Rainer Wittmann                     {
1803dec99bbdSOliver-Rainer Wittmann                         IDocumentMarkAccess* pMarksAccess = pDoc->getIDocumentMarkAccess();
1804dec99bbdSOliver-Rainer Wittmann                         pMarksAccess->makeAnnotationMark( aPam, pPostItField->GetName() );
1805dec99bbdSOliver-Rainer Wittmann                     }
1806dec99bbdSOliver-Rainer Wittmann                 }
180769a74367SOliver-Rainer Wittmann             }
180869a74367SOliver-Rainer Wittmann         }
180969a74367SOliver-Rainer Wittmann         delete pFld;
1810cdf0e10cSrcweir 
181169a74367SOliver-Rainer Wittmann         m_pDoc = pDoc;
181269a74367SOliver-Rainer Wittmann         m_pDoc->GetUnoCallBack()->Add(this);
181369a74367SOliver-Rainer Wittmann         m_bIsDescriptor = sal_False;
1814cdf0e10cSrcweir         if(m_aFieldTypeClient.GetRegisteredIn())
1815cdf0e10cSrcweir             const_cast<SwModify*>(m_aFieldTypeClient.GetRegisteredIn())->Remove(&m_aFieldTypeClient);
181669a74367SOliver-Rainer Wittmann         DELETEZ(m_pProps);
1817cdf0e10cSrcweir         if(m_bCallUpdate)
1818cdf0e10cSrcweir             update();
1819cdf0e10cSrcweir     }
182069a74367SOliver-Rainer Wittmann     else
182169a74367SOliver-Rainer Wittmann         throw lang::IllegalArgumentException();
1822cdf0e10cSrcweir }
1823cdf0e10cSrcweir 
attach(const uno::Reference<text::XTextRange> & xTextRange)1824dec99bbdSOliver-Rainer Wittmann void SwXTextField::attach( const uno::Reference< text::XTextRange > & xTextRange )
1825dec99bbdSOliver-Rainer Wittmann     throw( lang::IllegalArgumentException, uno::RuntimeException )
1826cdf0e10cSrcweir {
1827dec99bbdSOliver-Rainer Wittmann     vos::OGuard aGuard(Application::GetSolarMutex());
1828dec99bbdSOliver-Rainer Wittmann 
1829dec99bbdSOliver-Rainer Wittmann     if ( m_bIsDescriptor )
1830dec99bbdSOliver-Rainer Wittmann     {
1831dec99bbdSOliver-Rainer Wittmann         attachToRange( xTextRange );
1832dec99bbdSOliver-Rainer Wittmann     }
1833dec99bbdSOliver-Rainer Wittmann     else if ( m_pFmtFld != NULL
1834dec99bbdSOliver-Rainer Wittmann               && m_pDoc != NULL
1835dec99bbdSOliver-Rainer Wittmann               && m_nServiceId == SW_SERVICE_FIELDTYPE_ANNOTATION )
1836dec99bbdSOliver-Rainer Wittmann     {
1837dec99bbdSOliver-Rainer Wittmann         SwUnoInternalPaM aIntPam( *m_pDoc );
1838dec99bbdSOliver-Rainer Wittmann         if ( ::sw::XTextRangeToSwPaM( aIntPam, xTextRange ) )
1839dec99bbdSOliver-Rainer Wittmann         {
1840dec99bbdSOliver-Rainer Wittmann             // nothing to do, if the text range only covers the former annotation field
1841dec99bbdSOliver-Rainer Wittmann             if ( aIntPam.Start()->nNode != aIntPam.End()->nNode
1842dec99bbdSOliver-Rainer Wittmann                  || aIntPam.Start()->nContent.GetIndex() != aIntPam.End()->nContent.GetIndex()-1 )
1843dec99bbdSOliver-Rainer Wittmann             {
1844dec99bbdSOliver-Rainer Wittmann                 UnoActionContext aCont( m_pDoc );
1845dec99bbdSOliver-Rainer Wittmann                 // insert copy of annotation at new text range
1846dec99bbdSOliver-Rainer Wittmann                 SwPostItField* pPostItField = dynamic_cast< SwPostItField* >(m_pFmtFld->GetField()->CopyField());
1847dec99bbdSOliver-Rainer Wittmann                 SwFmtFld aFmtFld( *pPostItField );
1848dec99bbdSOliver-Rainer Wittmann                 delete pPostItField;
1849dec99bbdSOliver-Rainer Wittmann                 SwPaM aEnd( *aIntPam.End(), *aIntPam.End() );
1850dec99bbdSOliver-Rainer Wittmann                 m_pDoc->InsertPoolItem( aEnd, aFmtFld, nsSetAttrMode::SETATTR_DEFAULT );
1851dec99bbdSOliver-Rainer Wittmann                 // delete former annotation
1852dec99bbdSOliver-Rainer Wittmann                 {
1853dec99bbdSOliver-Rainer Wittmann                     const SwTxtFld* pTxtFld = m_pFmtFld->GetTxtFld();
1854dec99bbdSOliver-Rainer Wittmann                     SwTxtNode& rTxtNode = (SwTxtNode&)*pTxtFld->GetpTxtNode();
1855dec99bbdSOliver-Rainer Wittmann                     SwPaM aPam( rTxtNode, *pTxtFld->GetStart() );
1856dec99bbdSOliver-Rainer Wittmann                     aPam.SetMark();
1857dec99bbdSOliver-Rainer Wittmann                     aPam.Move();
1858dec99bbdSOliver-Rainer Wittmann                     GetDoc()->DeleteAndJoin(aPam);
1859dec99bbdSOliver-Rainer Wittmann                 }
1860dec99bbdSOliver-Rainer Wittmann                 // keep inserted annotation
1861dec99bbdSOliver-Rainer Wittmann                 {
1862dec99bbdSOliver-Rainer Wittmann                     SwTxtFld* pTxtAttr = aEnd.GetNode()->GetTxtNode()->GetFldTxtAttrAt( aEnd.End()->nContent.GetIndex()-1, true );
1863dec99bbdSOliver-Rainer Wittmann                     if ( pTxtAttr != NULL )
1864dec99bbdSOliver-Rainer Wittmann                     {
1865dec99bbdSOliver-Rainer Wittmann                         m_pFmtFld = &pTxtAttr->GetFmtFld();
1866dec99bbdSOliver-Rainer Wittmann 
1867dec99bbdSOliver-Rainer Wittmann                         if ( *aIntPam.GetPoint() != *aIntPam.GetMark() )
1868dec99bbdSOliver-Rainer Wittmann                         {
1869dec99bbdSOliver-Rainer Wittmann                             // create annotation mark
1870dec99bbdSOliver-Rainer Wittmann                             const SwPostItField* pPostItField = dynamic_cast< const SwPostItField* >(pTxtAttr->GetFmtFld().GetField());
1871dec99bbdSOliver-Rainer Wittmann                             ASSERT( pPostItField != NULL, "<SwXTextField::attach(..)> - annotation field missing!" );
1872dec99bbdSOliver-Rainer Wittmann                             if ( pPostItField != NULL )
1873dec99bbdSOliver-Rainer Wittmann                             {
1874dec99bbdSOliver-Rainer Wittmann                                 IDocumentMarkAccess* pMarksAccess = aIntPam.GetDoc()->getIDocumentMarkAccess();
1875dec99bbdSOliver-Rainer Wittmann                                 pMarksAccess->makeAnnotationMark( aIntPam, pPostItField->GetName() );
1876dec99bbdSOliver-Rainer Wittmann                             }
1877dec99bbdSOliver-Rainer Wittmann                         }
1878dec99bbdSOliver-Rainer Wittmann                     }
1879dec99bbdSOliver-Rainer Wittmann                 }
1880dec99bbdSOliver-Rainer Wittmann             }
1881dec99bbdSOliver-Rainer Wittmann         }
1882dec99bbdSOliver-Rainer Wittmann         else
1883dec99bbdSOliver-Rainer Wittmann             throw lang::IllegalArgumentException();
1884dec99bbdSOliver-Rainer Wittmann     }
1885dec99bbdSOliver-Rainer Wittmann     else
1886dec99bbdSOliver-Rainer Wittmann         throw lang::IllegalArgumentException();
1887cdf0e10cSrcweir }
1888cdf0e10cSrcweir 
getAnchor(void)1889cdf0e10cSrcweir uno::Reference< text::XTextRange >  SwXTextField::getAnchor(void) throw( uno::RuntimeException )
1890cdf0e10cSrcweir {
1891*6a85fc09SOliver-Rainer Wittmann     vos::OGuard aGuard( Application::GetSolarMutex() );
1892cdf0e10cSrcweir 
1893*6a85fc09SOliver-Rainer Wittmann     uno::Reference< text::XTextRange > aRef;
1894cdf0e10cSrcweir 
1895*6a85fc09SOliver-Rainer Wittmann     SwField* pField = (SwField*) GetField();
1896*6a85fc09SOliver-Rainer Wittmann     if ( pField != NULL )
1897*6a85fc09SOliver-Rainer Wittmann     {
1898*6a85fc09SOliver-Rainer Wittmann         const SwTxtFld* pTxtFld = m_pFmtFld->GetTxtFld();
1899*6a85fc09SOliver-Rainer Wittmann         if ( !pTxtFld )
1900*6a85fc09SOliver-Rainer Wittmann             throw uno::RuntimeException();
1901*6a85fc09SOliver-Rainer Wittmann 
1902*6a85fc09SOliver-Rainer Wittmann         boost::shared_ptr< SwPaM > pPamForTxtFld;
1903*6a85fc09SOliver-Rainer Wittmann         SwTxtFld::GetPamForTxtFld( *pTxtFld, pPamForTxtFld );
1904*6a85fc09SOliver-Rainer Wittmann         if ( pPamForTxtFld.get() != NULL )
1905*6a85fc09SOliver-Rainer Wittmann         {
1906*6a85fc09SOliver-Rainer Wittmann             aRef = SwXTextRange::CreateXTextRange( *m_pDoc,
1907*6a85fc09SOliver-Rainer Wittmann                                                    *(pPamForTxtFld->GetPoint()),
1908*6a85fc09SOliver-Rainer Wittmann                                                    pPamForTxtFld->GetMark() );
1909*6a85fc09SOliver-Rainer Wittmann         }
1910*6a85fc09SOliver-Rainer Wittmann     }
1911*6a85fc09SOliver-Rainer Wittmann     return aRef;
1912cdf0e10cSrcweir 
1913cdf0e10cSrcweir }
1914cdf0e10cSrcweir 
1915*6a85fc09SOliver-Rainer Wittmann 
dispose(void)1916cdf0e10cSrcweir void SwXTextField::dispose(void) throw( uno::RuntimeException )
1917cdf0e10cSrcweir {
1918*6a85fc09SOliver-Rainer Wittmann     vos::OGuard aGuard( Application::GetSolarMutex() );
1919*6a85fc09SOliver-Rainer Wittmann     SwField* pField = (SwField*) GetField();
1920*6a85fc09SOliver-Rainer Wittmann     if ( pField != NULL )
1921*6a85fc09SOliver-Rainer Wittmann     {
1922*6a85fc09SOliver-Rainer Wittmann         UnoActionContext aContext( GetDoc() );
1923cdf0e10cSrcweir 
1924*6a85fc09SOliver-Rainer Wittmann         ASSERT( m_pFmtFld->GetTxtFld(), "<SwXTextField::dispose()> - missing <SwTxtFld> --> crash" );
1925*6a85fc09SOliver-Rainer Wittmann         SwTxtFld::DeleteTxtFld( *( m_pFmtFld->GetTxtFld() ) );
1926*6a85fc09SOliver-Rainer Wittmann     }
1927*6a85fc09SOliver-Rainer Wittmann 
1928*6a85fc09SOliver-Rainer Wittmann     if ( m_pTextObject )
1929*6a85fc09SOliver-Rainer Wittmann     {
1930*6a85fc09SOliver-Rainer Wittmann         m_pTextObject->DisposeEditSource();
1931*6a85fc09SOliver-Rainer Wittmann         m_pTextObject->release();
1932*6a85fc09SOliver-Rainer Wittmann         m_pTextObject = 0;
1933*6a85fc09SOliver-Rainer Wittmann     }
1934cdf0e10cSrcweir }
1935cdf0e10cSrcweir 
addEventListener(const uno::Reference<lang::XEventListener> & aListener)1936cdf0e10cSrcweir void SwXTextField::addEventListener(const uno::Reference< lang::XEventListener > & aListener) throw( uno::RuntimeException )
1937cdf0e10cSrcweir {
1938cdf0e10cSrcweir 	if(!GetRegisteredIn())
1939cdf0e10cSrcweir 		throw uno::RuntimeException();
1940dec99bbdSOliver-Rainer Wittmann 	m_aLstnrCntnr.AddListener(aListener);
1941cdf0e10cSrcweir }
1942cdf0e10cSrcweir 
removeEventListener(const uno::Reference<lang::XEventListener> & aListener)1943cdf0e10cSrcweir void SwXTextField::removeEventListener(const uno::Reference< lang::XEventListener > & aListener) throw( uno::RuntimeException )
1944cdf0e10cSrcweir {
1945dec99bbdSOliver-Rainer Wittmann 	if(!GetRegisteredIn() || !m_aLstnrCntnr.RemoveListener(aListener))
1946cdf0e10cSrcweir 		throw uno::RuntimeException();
1947cdf0e10cSrcweir }
1948cdf0e10cSrcweir 
getPropertySetInfo(void)1949cdf0e10cSrcweir uno::Reference< beans::XPropertySetInfo >  SwXTextField::getPropertySetInfo(void)
1950cdf0e10cSrcweir 		throw( uno::RuntimeException )
1951cdf0e10cSrcweir {
1952cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
1953cdf0e10cSrcweir 	//kein static
1954cdf0e10cSrcweir 	uno::Reference< beans::XPropertySetInfo >  aRef;
1955cdf0e10cSrcweir 	if(m_nServiceId != USHRT_MAX)
1956cdf0e10cSrcweir 	{
1957cdf0e10cSrcweir         const SfxItemPropertySet* pPropSet = aSwMapProvider.GetPropertySet(
1958cdf0e10cSrcweir 						lcl_GetPropertyMapOfService( m_nServiceId ));
1959cdf0e10cSrcweir         uno::Reference< beans::XPropertySetInfo >  xInfo = pPropSet->getPropertySetInfo();
1960cdf0e10cSrcweir 		// extend PropertySetInfo!
1961cdf0e10cSrcweir 		const uno::Sequence<beans::Property> aPropSeq = xInfo->getProperties();
1962cdf0e10cSrcweir 		aRef = new SfxExtItemPropertySetInfo(
1963cdf0e10cSrcweir             aSwMapProvider.GetPropertyMapEntries(PROPERTY_MAP_PARAGRAPH_EXTENSIONS),
1964cdf0e10cSrcweir 			aPropSeq );
1965cdf0e10cSrcweir 	}
1966cdf0e10cSrcweir 	else
1967cdf0e10cSrcweir 		throw uno::RuntimeException();
1968cdf0e10cSrcweir 	return aRef;
1969cdf0e10cSrcweir }
1970cdf0e10cSrcweir 
setPropertyValue(const OUString & rPropertyName,const uno::Any & rValue)1971cdf0e10cSrcweir void SwXTextField::setPropertyValue(const OUString& rPropertyName, const uno::Any& rValue)
1972cdf0e10cSrcweir 	throw( beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException,
1973cdf0e10cSrcweir 		lang::WrappedTargetException, uno::RuntimeException )
1974cdf0e10cSrcweir {
1975cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
1976cdf0e10cSrcweir 	SwField* pField = (SwField*)GetField();
1977cdf0e10cSrcweir     const SfxItemPropertySet* _pPropSet = aSwMapProvider.GetPropertySet(
1978cdf0e10cSrcweir 								lcl_GetPropertyMapOfService( m_nServiceId));
1979cdf0e10cSrcweir     const SfxItemPropertySimpleEntry*   pEntry = _pPropSet->getPropertyMap()->getByName(rPropertyName);
1980cdf0e10cSrcweir 
1981cdf0e10cSrcweir     if (!pEntry)
1982cdf0e10cSrcweir         throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
1983cdf0e10cSrcweir     if ( pEntry->nFlags & beans::PropertyAttribute::READONLY)
1984cdf0e10cSrcweir         throw beans::PropertyVetoException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Property is read-only: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
1985cdf0e10cSrcweir 
1986*6a85fc09SOliver-Rainer Wittmann     if ( pField )
1987*6a85fc09SOliver-Rainer Wittmann     {
1988*6a85fc09SOliver-Rainer Wittmann         // Sonderbehandlung Serienbrieffeld
1989*6a85fc09SOliver-Rainer Wittmann         sal_uInt16 nWhich = pField->Which();
1990*6a85fc09SOliver-Rainer Wittmann         if ( RES_DBFLD == nWhich
1991*6a85fc09SOliver-Rainer Wittmann              && ( rPropertyName.equalsAsciiL( SW_PROP_NAME( UNO_NAME_DATA_BASE_NAME ) )
1992*6a85fc09SOliver-Rainer Wittmann                   || rPropertyName.equalsAsciiL( SW_PROP_NAME( UNO_NAME_DATA_BASE_URL ) )
1993*6a85fc09SOliver-Rainer Wittmann                   || rPropertyName.equalsAsciiL( SW_PROP_NAME( UNO_NAME_DATA_TABLE_NAME ) )
1994*6a85fc09SOliver-Rainer Wittmann                   || rPropertyName.equalsAsciiL( SW_PROP_NAME( UNO_NAME_DATA_COLUMN_NAME ) ) ) )
1995*6a85fc09SOliver-Rainer Wittmann         {
1996*6a85fc09SOliver-Rainer Wittmann             // hier muss ein neuer Feldtyp angelegt werden und
1997*6a85fc09SOliver-Rainer Wittmann             // das Feld an den neuen Typ umgehaengt werden
1998*6a85fc09SOliver-Rainer Wittmann             DBG_WARNING( "not implemented" );
1999*6a85fc09SOliver-Rainer Wittmann         }
2000*6a85fc09SOliver-Rainer Wittmann         else
2001cdf0e10cSrcweir         {
2002cdf0e10cSrcweir             // -> #111840#
2003cdf0e10cSrcweir             SwDoc * pDoc = GetDoc();
2004cdf0e10cSrcweir 
2005cdf0e10cSrcweir             if (NULL != pDoc)
2006cdf0e10cSrcweir             {
2007dec99bbdSOliver-Rainer Wittmann                 const SwTxtFld* pTxtFld = m_pFmtFld->GetTxtFld();
2008cdf0e10cSrcweir                 if(!pTxtFld)
2009cdf0e10cSrcweir                     throw uno::RuntimeException();
2010cdf0e10cSrcweir                 SwPosition aPosition( pTxtFld->GetTxtNode() );
2011cdf0e10cSrcweir                 aPosition.nContent = *pTxtFld->GetStart();
2012cdf0e10cSrcweir                 pDoc->PutValueToField( aPosition, rValue, pEntry->nWID);
2013cdf0e10cSrcweir             }
2014cdf0e10cSrcweir             // <- #111840#
2015cdf0e10cSrcweir         }
2016cdf0e10cSrcweir         pField->PutValue( rValue, pEntry->nWID );
2017cdf0e10cSrcweir 
2018*6a85fc09SOliver-Rainer Wittmann         //#i100374# notify SwPostIt about new field content
2019*6a85fc09SOliver-Rainer Wittmann         if ( RES_POSTITFLD == nWhich && m_pFmtFld )
2020*6a85fc09SOliver-Rainer Wittmann         {
2021*6a85fc09SOliver-Rainer Wittmann             const_cast< SwFmtFld* >( m_pFmtFld )->Broadcast( SwFmtFldHint( 0, SWFMTFLD_CHANGED ) );
2022*6a85fc09SOliver-Rainer Wittmann         }
2023cdf0e10cSrcweir 
2024cdf0e10cSrcweir         //#114571# changes of the expanded string have to be notified
2025cdf0e10cSrcweir         //#to the SwTxtFld
2026*6a85fc09SOliver-Rainer Wittmann         if ( RES_DBFLD == nWhich && m_pFmtFld->GetTxtFld() )
2027cdf0e10cSrcweir         {
2028dec99bbdSOliver-Rainer Wittmann             m_pFmtFld->GetTxtFld()->ExpandTxtFld();
2029cdf0e10cSrcweir         }
2030*6a85fc09SOliver-Rainer Wittmann 
2031*6a85fc09SOliver-Rainer Wittmann         //#i100374# changing a document field should set the modify flag
2032*6a85fc09SOliver-Rainer Wittmann         SwDoc* pDoc = GetDoc();
2033*6a85fc09SOliver-Rainer Wittmann         if ( pDoc )
2034*6a85fc09SOliver-Rainer Wittmann             pDoc->SetModified();
2035*6a85fc09SOliver-Rainer Wittmann 
2036*6a85fc09SOliver-Rainer Wittmann     }
2037*6a85fc09SOliver-Rainer Wittmann     else if ( m_pProps )
2038*6a85fc09SOliver-Rainer Wittmann     {
2039*6a85fc09SOliver-Rainer Wittmann         String* pStr = 0;
2040*6a85fc09SOliver-Rainer Wittmann         sal_Bool* pBool = 0;
2041*6a85fc09SOliver-Rainer Wittmann         switch (pEntry->nWID)
2042*6a85fc09SOliver-Rainer Wittmann         {
2043*6a85fc09SOliver-Rainer Wittmann         case FIELD_PROP_PAR1:
2044*6a85fc09SOliver-Rainer Wittmann             pStr = &m_pProps->sPar1;
2045*6a85fc09SOliver-Rainer Wittmann             break;
2046*6a85fc09SOliver-Rainer Wittmann         case FIELD_PROP_PAR2:
2047*6a85fc09SOliver-Rainer Wittmann             pStr = &m_pProps->sPar2;
2048*6a85fc09SOliver-Rainer Wittmann             break;
2049*6a85fc09SOliver-Rainer Wittmann         case FIELD_PROP_PAR3:
2050*6a85fc09SOliver-Rainer Wittmann             pStr = &m_pProps->sPar3;
2051*6a85fc09SOliver-Rainer Wittmann             break;
2052*6a85fc09SOliver-Rainer Wittmann         case FIELD_PROP_PAR4:
2053*6a85fc09SOliver-Rainer Wittmann             pStr = &m_pProps->sPar4;
2054*6a85fc09SOliver-Rainer Wittmann             break;
2055*6a85fc09SOliver-Rainer Wittmann         case FIELD_PROP_FORMAT:
2056*6a85fc09SOliver-Rainer Wittmann             rValue >>= m_pProps->nFormat;
2057cdf0e10cSrcweir             m_pProps->bFormatIsDefault = sal_False;
2058*6a85fc09SOliver-Rainer Wittmann             break;
2059*6a85fc09SOliver-Rainer Wittmann         case FIELD_PROP_SUBTYPE:
2060*6a85fc09SOliver-Rainer Wittmann             m_pProps->nSubType = SWUnoHelper::GetEnumAsInt32( rValue );
2061*6a85fc09SOliver-Rainer Wittmann             break;
2062*6a85fc09SOliver-Rainer Wittmann         case FIELD_PROP_BYTE1:
2063*6a85fc09SOliver-Rainer Wittmann             rValue >>= m_pProps->nByte1;
2064*6a85fc09SOliver-Rainer Wittmann             break;
2065*6a85fc09SOliver-Rainer Wittmann         case FIELD_PROP_BOOL1:
2066*6a85fc09SOliver-Rainer Wittmann             pBool = &m_pProps->bBool1;
2067*6a85fc09SOliver-Rainer Wittmann             break;
2068*6a85fc09SOliver-Rainer Wittmann         case FIELD_PROP_BOOL2:
2069*6a85fc09SOliver-Rainer Wittmann             pBool = &m_pProps->bBool2;
2070*6a85fc09SOliver-Rainer Wittmann             break;
2071*6a85fc09SOliver-Rainer Wittmann         case FIELD_PROP_BOOL3:
2072*6a85fc09SOliver-Rainer Wittmann             pBool = &m_pProps->bBool3;
2073*6a85fc09SOliver-Rainer Wittmann             break;
2074cdf0e10cSrcweir         case FIELD_PROP_BOOL4:
2075cdf0e10cSrcweir             pBool = &m_pProps->bBool4;
2076*6a85fc09SOliver-Rainer Wittmann             break;
2077*6a85fc09SOliver-Rainer Wittmann         case FIELD_PROP_DATE:
2078*6a85fc09SOliver-Rainer Wittmann             {
2079*6a85fc09SOliver-Rainer Wittmann             if ( rValue.getValueType() != ::getCppuType( static_cast< const util::Date* >( 0 ) ) )
2080*6a85fc09SOliver-Rainer Wittmann                 throw lang::IllegalArgumentException();
2081cdf0e10cSrcweir 
2082*6a85fc09SOliver-Rainer Wittmann             util::Date aTemp = *(const util::Date*) rValue.getValue();
2083*6a85fc09SOliver-Rainer Wittmann             m_pProps->aDate = Date( aTemp.Day, aTemp.Month, aTemp.Year );
2084*6a85fc09SOliver-Rainer Wittmann         }
2085*6a85fc09SOliver-Rainer Wittmann             break;
2086*6a85fc09SOliver-Rainer Wittmann         case FIELD_PROP_USHORT1:
2087*6a85fc09SOliver-Rainer Wittmann             case FIELD_PROP_USHORT2:
2088*6a85fc09SOliver-Rainer Wittmann             {
2089*6a85fc09SOliver-Rainer Wittmann             sal_Int16 nVal = 0;
2090*6a85fc09SOliver-Rainer Wittmann             rValue >>= nVal;
2091*6a85fc09SOliver-Rainer Wittmann             if ( FIELD_PROP_USHORT1 == pEntry->nWID )
2092*6a85fc09SOliver-Rainer Wittmann                 m_pProps->nUSHORT1 = nVal;
2093*6a85fc09SOliver-Rainer Wittmann             else
2094*6a85fc09SOliver-Rainer Wittmann                 m_pProps->nUSHORT2 = nVal;
2095*6a85fc09SOliver-Rainer Wittmann         }
2096*6a85fc09SOliver-Rainer Wittmann             break;
2097*6a85fc09SOliver-Rainer Wittmann         case FIELD_PROP_SHORT1:
2098*6a85fc09SOliver-Rainer Wittmann             rValue >>= m_pProps->nSHORT1;
2099*6a85fc09SOliver-Rainer Wittmann             break;
2100*6a85fc09SOliver-Rainer Wittmann         case FIELD_PROP_DOUBLE:
2101*6a85fc09SOliver-Rainer Wittmann             if ( rValue.getValueType() != ::getCppuType( static_cast< const double* >( 0 ) ) )
2102*6a85fc09SOliver-Rainer Wittmann                 throw lang::IllegalArgumentException();
2103*6a85fc09SOliver-Rainer Wittmann             m_pProps->fDouble = *(double*) rValue.getValue();
2104*6a85fc09SOliver-Rainer Wittmann             break;
2105cdf0e10cSrcweir 
2106*6a85fc09SOliver-Rainer Wittmann         case FIELD_PROP_DATE_TIME:
2107*6a85fc09SOliver-Rainer Wittmann             if ( !m_pProps->pDateTime )
2108*6a85fc09SOliver-Rainer Wittmann                 m_pProps->pDateTime = new util::DateTime;
2109*6a85fc09SOliver-Rainer Wittmann             rValue >>= ( *m_pProps->pDateTime );
2110*6a85fc09SOliver-Rainer Wittmann             break;
2111*6a85fc09SOliver-Rainer Wittmann         case FIELD_PROP_PROP_SEQ:
2112*6a85fc09SOliver-Rainer Wittmann             rValue >>= m_pProps->aPropSeq;
2113*6a85fc09SOliver-Rainer Wittmann             break;
2114cdf0e10cSrcweir         case FIELD_PROP_STRINGS:
2115cdf0e10cSrcweir             rValue >>= m_pProps->aStrings;
2116cdf0e10cSrcweir             break;
2117*6a85fc09SOliver-Rainer Wittmann         }
2118*6a85fc09SOliver-Rainer Wittmann         if ( pStr )
2119*6a85fc09SOliver-Rainer Wittmann             ::GetString( rValue, *pStr );
2120*6a85fc09SOliver-Rainer Wittmann         else if ( pBool )
2121*6a85fc09SOliver-Rainer Wittmann         {
2122*6a85fc09SOliver-Rainer Wittmann             if ( rValue.getValueType() == getCppuBooleanType() )
2123*6a85fc09SOliver-Rainer Wittmann                 *pBool = *(sal_Bool*) rValue.getValue();
2124*6a85fc09SOliver-Rainer Wittmann             else
2125*6a85fc09SOliver-Rainer Wittmann                 throw lang::IllegalArgumentException();
2126*6a85fc09SOliver-Rainer Wittmann         }
2127*6a85fc09SOliver-Rainer Wittmann     }
2128*6a85fc09SOliver-Rainer Wittmann     else
2129*6a85fc09SOliver-Rainer Wittmann         throw uno::RuntimeException();
2130cdf0e10cSrcweir }
2131cdf0e10cSrcweir 
getPropertyValue(const OUString & rPropertyName)2132cdf0e10cSrcweir uno::Any SwXTextField::getPropertyValue(const OUString& rPropertyName)
2133cdf0e10cSrcweir 	throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
2134cdf0e10cSrcweir {
2135cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
2136cdf0e10cSrcweir 	uno::Any aRet;
2137cdf0e10cSrcweir 	const SwField* pField = GetField();
2138cdf0e10cSrcweir     const SfxItemPropertySet* _pPropSet = aSwMapProvider.GetPropertySet(
2139cdf0e10cSrcweir                                 lcl_GetPropertyMapOfService( m_nServiceId));
2140cdf0e10cSrcweir     const SfxItemPropertySimpleEntry*   pEntry = _pPropSet->getPropertyMap()->getByName(rPropertyName);
2141cdf0e10cSrcweir     if(!pEntry )
2142cdf0e10cSrcweir 	{
2143cdf0e10cSrcweir         const SfxItemPropertySet* _pParaPropSet = aSwMapProvider.GetPropertySet(PROPERTY_MAP_PARAGRAPH_EXTENSIONS);
2144cdf0e10cSrcweir         pEntry = _pParaPropSet->getPropertyMap()->getByName(rPropertyName);
2145cdf0e10cSrcweir 	}
2146cdf0e10cSrcweir     if (!pEntry)
2147cdf0e10cSrcweir         throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
2148cdf0e10cSrcweir 
2149cdf0e10cSrcweir     switch( pEntry->nWID )
2150cdf0e10cSrcweir 	{
2151cdf0e10cSrcweir 	case FN_UNO_TEXT_WRAP:
2152cdf0e10cSrcweir 		aRet <<= text::WrapTextMode_NONE;
2153cdf0e10cSrcweir 		break;
2154cdf0e10cSrcweir 	case FN_UNO_ANCHOR_TYPE:
2155cdf0e10cSrcweir 		aRet <<= text::TextContentAnchorType_AS_CHARACTER;
2156cdf0e10cSrcweir 		break;
2157cdf0e10cSrcweir 	case FN_UNO_ANCHOR_TYPES:
2158cdf0e10cSrcweir 		{
2159cdf0e10cSrcweir 			uno::Sequence<text::TextContentAnchorType> aTypes(1);
2160cdf0e10cSrcweir 			text::TextContentAnchorType* pArray = aTypes.getArray();
2161cdf0e10cSrcweir 			pArray[0] = text::TextContentAnchorType_AS_CHARACTER;
2162cdf0e10cSrcweir 			aRet.setValue(&aTypes, ::getCppuType(static_cast<uno::Sequence<text::TextContentAnchorType>*>(0)));
2163cdf0e10cSrcweir 		}
2164cdf0e10cSrcweir 		break;
2165cdf0e10cSrcweir 
2166cdf0e10cSrcweir 	default:
2167cdf0e10cSrcweir 		if( pField )
2168cdf0e10cSrcweir         {
2169cdf0e10cSrcweir             if (FIELD_PROP_IS_FIELD_USED      == pEntry->nWID ||
2170cdf0e10cSrcweir                 FIELD_PROP_IS_FIELD_DISPLAYED == pEntry->nWID)
2171cdf0e10cSrcweir             {
2172cdf0e10cSrcweir                 sal_Bool bIsFieldUsed       = sal_False;
2173cdf0e10cSrcweir                 sal_Bool bIsFieldDisplayed  = sal_False;
2174cdf0e10cSrcweir 
2175cdf0e10cSrcweir                 // in order to have the information about fields
2176cdf0e10cSrcweir                 // correctly evaluated the document needs a layout
2177cdf0e10cSrcweir                 // (has to be already formatted)
2178cdf0e10cSrcweir                 SwDoc *pDoc = GetDoc();
2179cdf0e10cSrcweir                 ViewShell *pViewShell = 0;
2180cdf0e10cSrcweir                 SwEditShell *pEditShell = pDoc ? pDoc->GetEditShell( &pViewShell ) : 0;
2181cdf0e10cSrcweir                 if (pEditShell)
2182cdf0e10cSrcweir                     pEditShell->CalcLayout();
2183cdf0e10cSrcweir                 else if (pViewShell) // a page preview has no SwEditShell it should only have a view shell
2184cdf0e10cSrcweir                     pViewShell->CalcLayout();
2185cdf0e10cSrcweir                 else
2186cdf0e10cSrcweir                     throw uno::RuntimeException();
2187cdf0e10cSrcweir 
2188cdf0e10cSrcweir                 // get text node for the text field
2189cdf0e10cSrcweir                 const SwFmtFld *pFldFmt = GetFldFmt();
2190dec99bbdSOliver-Rainer Wittmann                 const SwTxtFld* pTxtFld = pFldFmt ? pFldFmt->GetTxtFld() : 0;
2191cdf0e10cSrcweir                 if(!pTxtFld)
2192cdf0e10cSrcweir                     throw uno::RuntimeException();
2193cdf0e10cSrcweir                 const SwTxtNode& rTxtNode = pTxtFld->GetTxtNode();
2194cdf0e10cSrcweir 
2195cdf0e10cSrcweir                 // skip fields that are currently not in the document
2196cdf0e10cSrcweir                 // e.g. fields in undo or redo array
2197cdf0e10cSrcweir                 if (rTxtNode.GetNodes().IsDocNodes())
2198cdf0e10cSrcweir                 {
2199cdf0e10cSrcweir                     sal_Bool bFrame = 0 != rTxtNode.FindLayoutRect().Width(); // oder so
2200cdf0e10cSrcweir                     sal_Bool bHidden = rTxtNode.IsHidden();
2201cdf0e10cSrcweir                     if ( !bHidden )
2202cdf0e10cSrcweir                     {
2203cdf0e10cSrcweir                         xub_StrLen nHiddenStart;
2204cdf0e10cSrcweir                         xub_StrLen nHiddenEnd;
2205cdf0e10cSrcweir 
2206cdf0e10cSrcweir                         SwPosition aPosition( pTxtFld->GetTxtNode() );
2207cdf0e10cSrcweir                         aPosition.nContent = *pTxtFld->GetStart();
2208cdf0e10cSrcweir 
2209cdf0e10cSrcweir                         bHidden = SwScriptInfo::GetBoundsOfHiddenRange( pTxtFld->GetTxtNode(),
2210cdf0e10cSrcweir                                         *pTxtFld->GetStart(),
2211cdf0e10cSrcweir                                         nHiddenStart, nHiddenEnd );
2212cdf0e10cSrcweir                     }
2213cdf0e10cSrcweir 
2214cdf0e10cSrcweir                     // !bFrame && !bHidden: aller Wahrscheinlichkeit handelt es
2215cdf0e10cSrcweir                     // sich um ein Feld in einem unbenutzten Seitenstyle
2216cdf0e10cSrcweir                     //
2217cdf0e10cSrcweir                     // bHidden: Feld ist versteckt
2218cdf0e10cSrcweir                     // FME: Problem: Verstecktes Feld in unbenutzter Seitenvorlage =>
2219cdf0e10cSrcweir                     // bIsFieldUsed = true
2220cdf0e10cSrcweir                     // bIsFieldDisplayed = false
2221cdf0e10cSrcweir                     bIsFieldUsed       = bFrame || bHidden;
2222cdf0e10cSrcweir                     bIsFieldDisplayed  = bIsFieldUsed && !bHidden;
2223cdf0e10cSrcweir 				}
2224cdf0e10cSrcweir                 sal_Bool bRetVal = (FIELD_PROP_IS_FIELD_USED == pEntry->nWID) ?
2225cdf0e10cSrcweir 											bIsFieldUsed : bIsFieldDisplayed;
2226cdf0e10cSrcweir                 aRet.setValue( &bRetVal, ::getCppuBooleanType() );
2227cdf0e10cSrcweir 			}
2228cdf0e10cSrcweir             else
2229cdf0e10cSrcweir                 pField->QueryValue( aRet, pEntry->nWID );
2230cdf0e10cSrcweir         }
2231cdf0e10cSrcweir         else if( m_pProps )     // currently just a descriptor...
2232cdf0e10cSrcweir 		{
2233cdf0e10cSrcweir             switch(pEntry->nWID)
2234cdf0e10cSrcweir 			{
2235cdf0e10cSrcweir 			case FIELD_PROP_TEXT:
2236cdf0e10cSrcweir 				{
2237cdf0e10cSrcweir 					if (!m_pTextObject)
2238cdf0e10cSrcweir 					{
2239cdf0e10cSrcweir 						SwTextAPIEditSource* pObj = new SwTextAPIEditSource( m_pDoc );
2240cdf0e10cSrcweir 						m_pTextObject = new SwTextAPIObject( pObj );
2241cdf0e10cSrcweir 						m_pTextObject->acquire();
2242cdf0e10cSrcweir 					}
2243cdf0e10cSrcweir 
2244dec99bbdSOliver-Rainer Wittmann 					uno::Reference < text::XText > xText( m_pTextObject );
2245cdf0e10cSrcweir 					aRet <<= xText;
2246cdf0e10cSrcweir 					break;
2247cdf0e10cSrcweir 				}
2248cdf0e10cSrcweir 			case FIELD_PROP_PAR1:
2249cdf0e10cSrcweir 				aRet <<= OUString(m_pProps->sPar1);
2250cdf0e10cSrcweir 				break;
2251cdf0e10cSrcweir 			case FIELD_PROP_PAR2:
2252cdf0e10cSrcweir 				aRet <<= OUString(m_pProps->sPar2);
2253cdf0e10cSrcweir 				break;
2254cdf0e10cSrcweir 			case FIELD_PROP_PAR3:
2255cdf0e10cSrcweir 				aRet <<= OUString(m_pProps->sPar3);
2256cdf0e10cSrcweir 				break;
2257cdf0e10cSrcweir 			case FIELD_PROP_PAR4:
2258cdf0e10cSrcweir 				aRet <<= OUString(m_pProps->sPar4);
2259cdf0e10cSrcweir 				break;
2260cdf0e10cSrcweir 			case FIELD_PROP_FORMAT:
2261cdf0e10cSrcweir 				aRet <<= m_pProps->nFormat;
2262cdf0e10cSrcweir 				break;
2263cdf0e10cSrcweir 			case FIELD_PROP_SUBTYPE:
2264cdf0e10cSrcweir 				aRet <<= m_pProps->nSubType;
2265cdf0e10cSrcweir 				break;
2266cdf0e10cSrcweir 			case FIELD_PROP_BYTE1 :
2267cdf0e10cSrcweir 				aRet <<= m_pProps->nByte1;
2268cdf0e10cSrcweir 				break;
2269cdf0e10cSrcweir 			case FIELD_PROP_BOOL1 :
2270cdf0e10cSrcweir 				aRet.setValue(&m_pProps->bBool1, ::getCppuBooleanType());
2271cdf0e10cSrcweir 				break;
2272cdf0e10cSrcweir 			case FIELD_PROP_BOOL2 :
2273cdf0e10cSrcweir 				aRet.setValue(&m_pProps->bBool2, ::getCppuBooleanType());
2274cdf0e10cSrcweir 				break;
2275cdf0e10cSrcweir             case FIELD_PROP_BOOL3 :
2276cdf0e10cSrcweir                 aRet.setValue(&m_pProps->bBool3, ::getCppuBooleanType());
2277cdf0e10cSrcweir                 break;
2278cdf0e10cSrcweir             case FIELD_PROP_BOOL4 :
2279cdf0e10cSrcweir                 aRet.setValue(&m_pProps->bBool4, ::getCppuBooleanType());
2280cdf0e10cSrcweir                 break;
2281cdf0e10cSrcweir             case FIELD_PROP_DATE :
2282cdf0e10cSrcweir 				aRet.setValue(&m_pProps->aDate, ::getCppuType(static_cast<const util::Date*>(0)));
2283cdf0e10cSrcweir 				break;
2284cdf0e10cSrcweir 			case FIELD_PROP_USHORT1:
2285cdf0e10cSrcweir 				aRet <<= (sal_Int16)m_pProps->nUSHORT1;
2286cdf0e10cSrcweir 				break;
2287cdf0e10cSrcweir 			case FIELD_PROP_USHORT2:
2288cdf0e10cSrcweir 				aRet <<= (sal_Int16)m_pProps->nUSHORT2;
2289cdf0e10cSrcweir 				break;
2290cdf0e10cSrcweir 			case FIELD_PROP_SHORT1:
2291cdf0e10cSrcweir 				aRet <<= m_pProps->nSHORT1;
2292cdf0e10cSrcweir 				break;
2293cdf0e10cSrcweir 			case FIELD_PROP_DOUBLE:
2294cdf0e10cSrcweir 				aRet <<= m_pProps->fDouble;
2295cdf0e10cSrcweir 				break;
2296cdf0e10cSrcweir 			case FIELD_PROP_DATE_TIME :
2297cdf0e10cSrcweir 				if(m_pProps->pDateTime)
2298cdf0e10cSrcweir 					aRet <<= (*m_pProps->pDateTime);
2299cdf0e10cSrcweir 				break;
2300cdf0e10cSrcweir 			case FIELD_PROP_PROP_SEQ:
2301cdf0e10cSrcweir 				aRet <<= m_pProps->aPropSeq;
2302cdf0e10cSrcweir 				break;
2303cdf0e10cSrcweir 			case FIELD_PROP_STRINGS:
2304cdf0e10cSrcweir 				aRet <<= m_pProps->aStrings;
2305cdf0e10cSrcweir 				break;
2306cdf0e10cSrcweir             case FIELD_PROP_IS_FIELD_USED:
2307cdf0e10cSrcweir             case FIELD_PROP_IS_FIELD_DISPLAYED:
230846d2a04eSHerbert Dürr                 aRet.setValue( NULL, ::getCppuBooleanType() );
2309cdf0e10cSrcweir                 break;
2310cdf0e10cSrcweir             }
2311cdf0e10cSrcweir 		}
2312cdf0e10cSrcweir 		else
2313cdf0e10cSrcweir 			throw uno::RuntimeException();
2314cdf0e10cSrcweir 	}
2315cdf0e10cSrcweir 	return aRet;
2316cdf0e10cSrcweir }
2317cdf0e10cSrcweir 
addPropertyChangeListener(const OUString &,const uno::Reference<beans::XPropertyChangeListener> &)2318cdf0e10cSrcweir void SwXTextField::addPropertyChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XPropertyChangeListener > & /*aListener*/) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
2319cdf0e10cSrcweir {
2320cdf0e10cSrcweir 	DBG_WARNING("not implemented");
2321cdf0e10cSrcweir }
2322cdf0e10cSrcweir 
removePropertyChangeListener(const OUString &,const uno::Reference<beans::XPropertyChangeListener> &)2323cdf0e10cSrcweir void SwXTextField::removePropertyChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XPropertyChangeListener > & /*aListener*/) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
2324cdf0e10cSrcweir {
2325cdf0e10cSrcweir 	DBG_WARNING("not implemented");
2326cdf0e10cSrcweir }
2327cdf0e10cSrcweir 
addVetoableChangeListener(const OUString &,const uno::Reference<beans::XVetoableChangeListener> &)2328cdf0e10cSrcweir void SwXTextField::addVetoableChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XVetoableChangeListener > & /*aListener*/) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
2329cdf0e10cSrcweir {
2330cdf0e10cSrcweir 	DBG_WARNING("not implemented");
2331cdf0e10cSrcweir }
2332cdf0e10cSrcweir 
removeVetoableChangeListener(const OUString &,const uno::Reference<beans::XVetoableChangeListener> &)2333cdf0e10cSrcweir void SwXTextField::removeVetoableChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XVetoableChangeListener > & /*aListener*/) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
2334cdf0e10cSrcweir {
2335cdf0e10cSrcweir 	DBG_WARNING("not implemented");
2336cdf0e10cSrcweir }
2337cdf0e10cSrcweir 
update()2338cdf0e10cSrcweir void SwXTextField::update(  ) throw (uno::RuntimeException)
2339cdf0e10cSrcweir {
2340cdf0e10cSrcweir     vos::OGuard  aGuard(Application::GetSolarMutex());
2341cdf0e10cSrcweir     const SwField* pFld = GetField();
2342cdf0e10cSrcweir     if(pFld)
2343cdf0e10cSrcweir     {
2344cdf0e10cSrcweir         switch(pFld->Which())
2345cdf0e10cSrcweir         {
2346cdf0e10cSrcweir             case RES_DATETIMEFLD:
2347cdf0e10cSrcweir             ((SwDateTimeField*)pFld)->SetDateTime( ::DateTime() );
2348cdf0e10cSrcweir             break;
2349cdf0e10cSrcweir 
2350cdf0e10cSrcweir             case RES_EXTUSERFLD:
2351cdf0e10cSrcweir             {
2352cdf0e10cSrcweir                 SwExtUserField* pExtUserFld = (SwExtUserField*)pFld;
2353cdf0e10cSrcweir                 pExtUserFld->SetExpansion( ((SwExtUserFieldType*)pFld->GetTyp())->Expand(
2354cdf0e10cSrcweir                                             pExtUserFld->GetSubType(),
2355cdf0e10cSrcweir                                             pExtUserFld->GetFormat() ) );
2356cdf0e10cSrcweir             }
2357cdf0e10cSrcweir             break;
2358cdf0e10cSrcweir 
2359cdf0e10cSrcweir             case RES_AUTHORFLD:
2360cdf0e10cSrcweir             {
2361cdf0e10cSrcweir                 SwAuthorField* pAuthorFld = (SwAuthorField*)pFld;
2362cdf0e10cSrcweir                 pAuthorFld->SetExpansion( ((SwAuthorFieldType*)pFld->GetTyp())->Expand(
2363cdf0e10cSrcweir                                             pAuthorFld->GetFormat() ) );
2364cdf0e10cSrcweir             }
2365cdf0e10cSrcweir             break;
2366cdf0e10cSrcweir 
2367cdf0e10cSrcweir             case RES_FILENAMEFLD:
2368cdf0e10cSrcweir             {
2369cdf0e10cSrcweir                 SwFileNameField* pFileNameFld = (SwFileNameField*)pFld;
2370cdf0e10cSrcweir                 pFileNameFld->SetExpansion( ((SwFileNameFieldType*)pFld->GetTyp())->Expand(
2371cdf0e10cSrcweir                                             pFileNameFld->GetFormat() ) );
2372cdf0e10cSrcweir             }
2373cdf0e10cSrcweir             break;
2374cdf0e10cSrcweir 
2375cdf0e10cSrcweir             case RES_DOCINFOFLD:
2376cdf0e10cSrcweir             {
2377cdf0e10cSrcweir                     SwDocInfoField* pDocInfFld = (SwDocInfoField*)pFld;
2378cdf0e10cSrcweir                     pDocInfFld->SetExpansion( ((SwDocInfoFieldType*)pFld->GetTyp())->Expand(
2379cdf0e10cSrcweir                                                 pDocInfFld->GetSubType(),
2380cdf0e10cSrcweir                                                 pDocInfFld->GetFormat(),
2381cdf0e10cSrcweir                                                 pDocInfFld->GetLanguage(),
2382*6a85fc09SOliver-Rainer Wittmann                                                 pDocInfFld->GetName() ) );
2383cdf0e10cSrcweir             }
2384cdf0e10cSrcweir             break;
2385cdf0e10cSrcweir         }
2386*6a85fc09SOliver-Rainer Wittmann         // Text formatting has to be triggered.
2387*6a85fc09SOliver-Rainer Wittmann         const_cast< SwFmtFld* >( m_pFmtFld )->ModifyNotification( 0, 0 );
2388cdf0e10cSrcweir     }
2389cdf0e10cSrcweir     else
2390cdf0e10cSrcweir         m_bCallUpdate = sal_True;
2391cdf0e10cSrcweir }
2392cdf0e10cSrcweir 
getImplementationName(void)2393cdf0e10cSrcweir OUString SwXTextField::getImplementationName(void) throw( uno::RuntimeException )
2394cdf0e10cSrcweir {
2395cdf0e10cSrcweir 	return C2U("SwXTextField");
2396cdf0e10cSrcweir }
2397cdf0e10cSrcweir 
OldNameToNewName_Impl(const OUString & rOld)2398cdf0e10cSrcweir static OUString OldNameToNewName_Impl( const OUString &rOld )
2399cdf0e10cSrcweir {
2400cdf0e10cSrcweir 	static OUString aOldNamePart1( OUString::createFromAscii(".TextField.DocInfo.") );
2401cdf0e10cSrcweir 	static OUString aOldNamePart2( OUString::createFromAscii(".TextField.") );
2402cdf0e10cSrcweir 	static OUString aNewNamePart1( OUString::createFromAscii(".textfield.docinfo.") );
2403cdf0e10cSrcweir 	static OUString aNewNamePart2( OUString::createFromAscii(".textfield.") );
2404cdf0e10cSrcweir 	OUString sServiceNameCC( rOld );
2405cdf0e10cSrcweir 	sal_Int32 nIdx = sServiceNameCC.indexOf( aOldNamePart1 );
2406cdf0e10cSrcweir 	if (nIdx >= 0)
2407cdf0e10cSrcweir 		sServiceNameCC = sServiceNameCC.replaceAt( nIdx, aOldNamePart1.getLength(), aNewNamePart1 );
2408cdf0e10cSrcweir 	nIdx = sServiceNameCC.indexOf( aOldNamePart2 );
2409cdf0e10cSrcweir 	if (nIdx >= 0)
2410cdf0e10cSrcweir 		sServiceNameCC = sServiceNameCC.replaceAt( nIdx, aOldNamePart2.getLength(), aNewNamePart2 );
2411cdf0e10cSrcweir 	return sServiceNameCC;
2412cdf0e10cSrcweir }
2413cdf0e10cSrcweir 
supportsService(const OUString & rServiceName)2414cdf0e10cSrcweir sal_Bool SwXTextField::supportsService(const OUString& rServiceName) throw( uno::RuntimeException )
2415cdf0e10cSrcweir {
2416cdf0e10cSrcweir 	OUString sServiceName = SwXServiceProvider::GetProviderName(m_nServiceId);
2417cdf0e10cSrcweir 
2418cdf0e10cSrcweir 	// case-corected version of service-name (see #i67811)
2419cdf0e10cSrcweir 	// (need to supply both because of compatibility to older versions)
2420cdf0e10cSrcweir 	OUString sServiceNameCC(  OldNameToNewName_Impl( sServiceName ) );
2421cdf0e10cSrcweir 
2422cdf0e10cSrcweir 	return sServiceName == rServiceName || sServiceNameCC == rServiceName ||
2423cdf0e10cSrcweir         rServiceName.equalsAsciiL(
2424cdf0e10cSrcweir 				RTL_CONSTASCII_STRINGPARAM("com.sun.star.text.TextContent"));
2425cdf0e10cSrcweir }
2426cdf0e10cSrcweir 
getSupportedServiceNames(void)2427cdf0e10cSrcweir uno::Sequence< OUString > SwXTextField::getSupportedServiceNames(void) throw( uno::RuntimeException )
2428cdf0e10cSrcweir {
2429cdf0e10cSrcweir 	OUString sServiceName = SwXServiceProvider::GetProviderName(m_nServiceId);
2430cdf0e10cSrcweir 
2431cdf0e10cSrcweir 	// case-corected version of service-name (see #i67811)
2432cdf0e10cSrcweir 	// (need to supply both because of compatibility to older versions)
2433cdf0e10cSrcweir 	OUString sServiceNameCC(  OldNameToNewName_Impl( sServiceName ) );
2434cdf0e10cSrcweir 	sal_Int32 nLen = sServiceName == sServiceNameCC ? 2 : 3;
2435cdf0e10cSrcweir 
2436cdf0e10cSrcweir 	uno::Sequence< OUString > aRet( nLen );
2437cdf0e10cSrcweir 	OUString* pArray = aRet.getArray();
2438cdf0e10cSrcweir 	*pArray++ = sServiceName;
2439cdf0e10cSrcweir 	if (nLen == 3)
2440cdf0e10cSrcweir 		*pArray++ = sServiceNameCC;
2441cdf0e10cSrcweir 	*pArray++ = C2U("com.sun.star.text.TextContent");
2442cdf0e10cSrcweir 	return aRet;
2443cdf0e10cSrcweir }
2444cdf0e10cSrcweir 
24453b32dd21SOliver-Rainer Wittmann 
GetServiceId()24463b32dd21SOliver-Rainer Wittmann sal_uInt16 SwXTextField::GetServiceId()
24473b32dd21SOliver-Rainer Wittmann {
24483b32dd21SOliver-Rainer Wittmann     return m_nServiceId;
24493b32dd21SOliver-Rainer Wittmann }
24503b32dd21SOliver-Rainer Wittmann 
24513b32dd21SOliver-Rainer Wittmann 
Invalidate()24523b32dd21SOliver-Rainer Wittmann     void SwXTextField::Invalidate()
2453cdf0e10cSrcweir {
2454cdf0e10cSrcweir 	if (GetRegisteredIn())
2455cdf0e10cSrcweir 	{
2456cdf0e10cSrcweir 		((SwModify*)GetRegisteredIn())->Remove(this);
2457dec99bbdSOliver-Rainer Wittmann 		m_aLstnrCntnr.Disposing();
2458dec99bbdSOliver-Rainer Wittmann 		m_pFmtFld = 0;
2459cdf0e10cSrcweir 		m_pDoc = 0;
2460cdf0e10cSrcweir 	}
2461cdf0e10cSrcweir }
2462cdf0e10cSrcweir 
2463cdf0e10cSrcweir 
Modify(const SfxPoolItem * pOld,const SfxPoolItem * pNew)2464cdf0e10cSrcweir void SwXTextField::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew)
2465cdf0e10cSrcweir {
2466cdf0e10cSrcweir 	switch( pOld ? pOld->Which() : 0 )
2467cdf0e10cSrcweir 	{
2468cdf0e10cSrcweir 	case RES_REMOVE_UNO_OBJECT:
2469cdf0e10cSrcweir 	case RES_OBJECTDYING:
2470cdf0e10cSrcweir 		if( (void*)GetRegisteredIn() == ((SwPtrMsgPoolItem *)pOld)->pObject )
2471cdf0e10cSrcweir 			Invalidate();
2472cdf0e10cSrcweir 		break;
2473cdf0e10cSrcweir 
2474cdf0e10cSrcweir 	case RES_FMT_CHG:
2475cdf0e10cSrcweir 		// wurden wir an das neue umgehaengt und wird das alte geloscht?
2476cdf0e10cSrcweir 		if( ((SwFmtChg*)pNew)->pChangedFmt == GetRegisteredIn() &&
2477cdf0e10cSrcweir 			((SwFmtChg*)pOld)->pChangedFmt->IsFmtInDTOR() )
2478cdf0e10cSrcweir 			Invalidate();
2479cdf0e10cSrcweir 		break;
2480cdf0e10cSrcweir 	case RES_FIELD_DELETED:
2481dec99bbdSOliver-Rainer Wittmann 		if( (void*)m_pFmtFld == ((SwPtrMsgPoolItem *)pOld)->pObject )
2482cdf0e10cSrcweir 			Invalidate();
2483cdf0e10cSrcweir 		break;
2484cdf0e10cSrcweir 	}
2485cdf0e10cSrcweir }
2486cdf0e10cSrcweir 
GetField() const2487cdf0e10cSrcweir const SwField*  SwXTextField::GetField() const
2488cdf0e10cSrcweir {
2489dec99bbdSOliver-Rainer Wittmann     if ( GetRegisteredIn() && m_pFmtFld )
2490c0286415SOliver-Rainer Wittmann     {
2491dec99bbdSOliver-Rainer Wittmann         return m_pFmtFld->GetField();
2492c0286415SOliver-Rainer Wittmann     }
2493c0286415SOliver-Rainer Wittmann     return 0;
2494cdf0e10cSrcweir }
2495cdf0e10cSrcweir 
2496cdf0e10cSrcweir /******************************************************************
2497cdf0e10cSrcweir  * SwXTextFieldMasters
2498cdf0e10cSrcweir  ******************************************************************/
getImplementationName(void)2499cdf0e10cSrcweir OUString SwXTextFieldMasters::getImplementationName(void) throw( uno::RuntimeException )
2500cdf0e10cSrcweir {
2501cdf0e10cSrcweir 	return C2U("SwXTextFieldMasters");
2502cdf0e10cSrcweir }
2503cdf0e10cSrcweir 
supportsService(const OUString & rServiceName)2504cdf0e10cSrcweir sal_Bool SwXTextFieldMasters::supportsService(const OUString& rServiceName) throw( uno::RuntimeException )
2505cdf0e10cSrcweir {
2506cdf0e10cSrcweir 	return rServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(
2507cdf0e10cSrcweir 							"com.sun.star.text.TextFieldMasters" ));
2508cdf0e10cSrcweir }
2509cdf0e10cSrcweir 
getSupportedServiceNames(void)2510cdf0e10cSrcweir uno::Sequence< OUString > SwXTextFieldMasters::getSupportedServiceNames(void) throw( uno::RuntimeException )
2511cdf0e10cSrcweir {
2512cdf0e10cSrcweir 	uno::Sequence< OUString > aRet(1);
2513cdf0e10cSrcweir 	OUString* pArray = aRet.getArray();
2514cdf0e10cSrcweir 	pArray[0] = C2U("com.sun.star.text.TextFieldMasters");
2515cdf0e10cSrcweir 	return aRet;
2516cdf0e10cSrcweir }
2517cdf0e10cSrcweir 
SwXTextFieldMasters(SwDoc * _pDoc)2518cdf0e10cSrcweir SwXTextFieldMasters::SwXTextFieldMasters(SwDoc* _pDoc) :
2519cdf0e10cSrcweir 	SwUnoCollection(_pDoc)
2520cdf0e10cSrcweir {
2521cdf0e10cSrcweir }
2522cdf0e10cSrcweir 
~SwXTextFieldMasters()2523cdf0e10cSrcweir SwXTextFieldMasters::~SwXTextFieldMasters()
2524cdf0e10cSrcweir {
2525cdf0e10cSrcweir 
2526cdf0e10cSrcweir }
2527cdf0e10cSrcweir /*-----------------------------------------------------------------------
2528cdf0e10cSrcweir 	Iteration ueber nicht-Standard Feldtypen
2529cdf0e10cSrcweir 	USER/SETEXP/DDE/DATABASE
2530cdf0e10cSrcweir 	Der Name ist demnach:
2531cdf0e10cSrcweir     "com.sun.star.text.fieldmaster.User" + <Feltypname>
2532cdf0e10cSrcweir     "com.sun.star.text.fieldmaster.DDE" + <Feltypname>
2533cdf0e10cSrcweir     "com.sun.star.text.fieldmaster.SetExpression" + <Feltypname>
2534cdf0e10cSrcweir     "com.sun.star.text.fieldmaster.DataBase" + <Feltypname>
2535cdf0e10cSrcweir 
2536cdf0e10cSrcweir 	Falls wir grosszuegig werden wollen, dann koennte man com.sun.star.text
2537cdf0e10cSrcweir 	auch optional weglassen
2538cdf0e10cSrcweir   -----------------------------------------------------------------------*/
2539cdf0e10cSrcweir 
lcl_GetIdByName(String & rName,String & rTypeName)2540cdf0e10cSrcweir sal_uInt16 lcl_GetIdByName( String& rName, String& rTypeName )
2541cdf0e10cSrcweir {
2542cdf0e10cSrcweir     if( rName.EqualsAscii( COM_TEXT_FLDMASTER, 0, RTL_CONSTASCII_LENGTH(COM_TEXT_FLDMASTER ))
2543cdf0e10cSrcweir         ||  rName.EqualsAscii( COM_TEXT_FLDMASTER_CC, 0, RTL_CONSTASCII_LENGTH(COM_TEXT_FLDMASTER_CC )))
2544cdf0e10cSrcweir 		rName.Erase(0, 30);
2545cdf0e10cSrcweir 
2546cdf0e10cSrcweir 	sal_uInt16 nResId = USHRT_MAX;
2547cdf0e10cSrcweir 	xub_StrLen nFound = 0;
2548cdf0e10cSrcweir 	rTypeName = rName.GetToken( 0, '.', nFound );
2549cdf0e10cSrcweir 	if(rTypeName.EqualsAscii("User"))
2550cdf0e10cSrcweir 		nResId = RES_USERFLD;
2551cdf0e10cSrcweir 	else if(rTypeName.EqualsAscii("DDE"))
2552cdf0e10cSrcweir 		nResId = RES_DDEFLD;
2553cdf0e10cSrcweir 	else if(rTypeName.EqualsAscii("SetExpression"))
2554cdf0e10cSrcweir 	{
2555cdf0e10cSrcweir 		nResId = RES_SETEXPFLD;
2556cdf0e10cSrcweir 
2557cdf0e10cSrcweir         String sFldTypName( rName.GetToken( 1, '.' ));
2558cdf0e10cSrcweir         String sUIName( SwStyleNameMapper::GetSpecialExtraUIName( sFldTypName ) );
2559cdf0e10cSrcweir 
2560cdf0e10cSrcweir 		if( sUIName != sFldTypName )
2561cdf0e10cSrcweir 			rName.SetToken( 1, '.', sUIName );
2562cdf0e10cSrcweir 	}
2563cdf0e10cSrcweir 	else if(rTypeName.EqualsAscii("DataBase"))
2564cdf0e10cSrcweir 	{
2565cdf0e10cSrcweir 		rName.Erase( 0, RTL_CONSTASCII_LENGTH( "DataBase." ));
2566cdf0e10cSrcweir 		sal_uInt16 nDotCount = rName.GetTokenCount('.');
2567cdf0e10cSrcweir 		if( 2 <= nDotCount )
2568cdf0e10cSrcweir 		{
2569cdf0e10cSrcweir 			// #i51815#
2570cdf0e10cSrcweir 			//rName.SearchAndReplace('.', DB_DELIM);
2571cdf0e10cSrcweir 			//rName.SetChar( rName.SearchBackward( '.' ), DB_DELIM );
2572cdf0e10cSrcweir 
2573cdf0e10cSrcweir 			rName.InsertAscii( "DataBase.", 0 );
2574cdf0e10cSrcweir 			nResId = RES_DBFLD;
2575cdf0e10cSrcweir 		}
2576cdf0e10cSrcweir 	}
2577cdf0e10cSrcweir 	else if( rTypeName.EqualsAscii("Bibliography"))
2578cdf0e10cSrcweir 		nResId = RES_AUTHORITY;
2579cdf0e10cSrcweir 	return nResId;
2580cdf0e10cSrcweir }
2581cdf0e10cSrcweir 
2582cdf0e10cSrcweir //-----------------------------------------------------------------------------
getByName(const OUString & rName)2583cdf0e10cSrcweir uno::Any SwXTextFieldMasters::getByName(const OUString& rName)
2584cdf0e10cSrcweir 	throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException )
2585cdf0e10cSrcweir {
2586cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
2587cdf0e10cSrcweir 	if(!GetDoc())
2588cdf0e10cSrcweir 		throw uno::RuntimeException();
2589cdf0e10cSrcweir 
2590cdf0e10cSrcweir 	String sName(rName), sTypeName;
2591cdf0e10cSrcweir 	sal_uInt16 nResId = lcl_GetIdByName( sName, sTypeName );
2592cdf0e10cSrcweir 	if( USHRT_MAX == nResId )
2593cdf0e10cSrcweir 		throw container::NoSuchElementException();
2594cdf0e10cSrcweir 
2595cdf0e10cSrcweir 	sName.Erase(0, sTypeName.Len()+1);
2596cdf0e10cSrcweir 	SwFieldType* pType = GetDoc()->GetFldType(nResId, sName, sal_True);
2597cdf0e10cSrcweir 	if(!pType)
2598cdf0e10cSrcweir 		throw container::NoSuchElementException();
2599cdf0e10cSrcweir     SwXFieldMaster* pMaster = SwIterator<SwXFieldMaster,SwFieldType>::FirstElement( *pType );
2600cdf0e10cSrcweir 	if(!pMaster)
2601cdf0e10cSrcweir 		pMaster = new SwXFieldMaster(*pType, GetDoc());
2602cdf0e10cSrcweir 	uno::Reference< beans::XPropertySet >  aRef = pMaster;
2603cdf0e10cSrcweir 	uno::Any aRet(&aRef, ::getCppuType( static_cast<const uno::Reference<beans::XPropertySet>* >(0)));
2604cdf0e10cSrcweir 	return aRet;
2605cdf0e10cSrcweir }
2606cdf0e10cSrcweir 
getInstanceName(const SwFieldType & rFldType,String & rName)2607cdf0e10cSrcweir sal_Bool SwXTextFieldMasters::getInstanceName(
2608cdf0e10cSrcweir 	const SwFieldType& rFldType, String& rName)
2609cdf0e10cSrcweir {
2610cdf0e10cSrcweir 	sal_Bool bRet = sal_True;
2611cdf0e10cSrcweir 	switch( rFldType.Which() )
2612cdf0e10cSrcweir 	{
2613cdf0e10cSrcweir 	case RES_USERFLD:
2614cdf0e10cSrcweir         rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( COM_TEXT_FLDMASTER_CC ));
2615cdf0e10cSrcweir 		rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "User."));
2616cdf0e10cSrcweir 		rName += rFldType.GetName();
2617cdf0e10cSrcweir 		break;
2618cdf0e10cSrcweir 	case RES_DDEFLD:
2619cdf0e10cSrcweir         rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( COM_TEXT_FLDMASTER_CC ));
2620cdf0e10cSrcweir 		rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "DDE."));
2621cdf0e10cSrcweir 		rName += rFldType.GetName();
2622cdf0e10cSrcweir 		break;
2623cdf0e10cSrcweir 
2624cdf0e10cSrcweir 	case RES_SETEXPFLD:
2625cdf0e10cSrcweir         rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( COM_TEXT_FLDMASTER_CC ));
2626cdf0e10cSrcweir 		rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "SetExpression."));
2627cdf0e10cSrcweir         rName += String( SwStyleNameMapper::GetSpecialExtraProgName( rFldType.GetName() ) );
2628cdf0e10cSrcweir 		break;
2629cdf0e10cSrcweir 
2630cdf0e10cSrcweir 	case RES_DBFLD:
2631cdf0e10cSrcweir 		{
2632cdf0e10cSrcweir             rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( COM_TEXT_FLDMASTER_CC ));
2633cdf0e10cSrcweir 			rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "DataBase."));
2634cdf0e10cSrcweir 			String sDBName(rFldType.GetName());
2635cdf0e10cSrcweir 			sDBName.SearchAndReplaceAll(DB_DELIM, '.');
2636cdf0e10cSrcweir 			rName += sDBName;
2637cdf0e10cSrcweir 		}
2638cdf0e10cSrcweir 		break;
2639cdf0e10cSrcweir 
2640cdf0e10cSrcweir 	case RES_AUTHORITY:
2641cdf0e10cSrcweir         rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( COM_TEXT_FLDMASTER_CC ));
2642cdf0e10cSrcweir 		rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "Bibliography"));
2643cdf0e10cSrcweir 		break;
2644cdf0e10cSrcweir 
2645cdf0e10cSrcweir 	default:
2646cdf0e10cSrcweir 		bRet = sal_False;
2647cdf0e10cSrcweir 	}
2648cdf0e10cSrcweir 
2649cdf0e10cSrcweir 	return bRet;
2650cdf0e10cSrcweir }
2651cdf0e10cSrcweir 
2652cdf0e10cSrcweir 
getElementNames(void)2653cdf0e10cSrcweir uno::Sequence< OUString > SwXTextFieldMasters::getElementNames(void)
2654cdf0e10cSrcweir 	throw( uno::RuntimeException )
2655cdf0e10cSrcweir {
2656cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
2657cdf0e10cSrcweir 	if(!GetDoc())
2658cdf0e10cSrcweir 		throw uno::RuntimeException();
2659cdf0e10cSrcweir 
2660cdf0e10cSrcweir 	const SwFldTypes* pFldTypes = GetDoc()->GetFldTypes();
2661cdf0e10cSrcweir 	sal_uInt16 nCount = pFldTypes->Count();
2662cdf0e10cSrcweir 
2663cdf0e10cSrcweir 	SvStrings aFldNames;
2664cdf0e10cSrcweir 	String* pString = new String();
2665cdf0e10cSrcweir 	sal_uInt16 i;
2666cdf0e10cSrcweir 
2667cdf0e10cSrcweir 	for( i = 0; i < nCount; i++)
2668cdf0e10cSrcweir 	{
2669cdf0e10cSrcweir 		SwFieldType& rFldType = *((*pFldTypes)[i]);
2670cdf0e10cSrcweir 
2671cdf0e10cSrcweir 		if (SwXTextFieldMasters::getInstanceName(rFldType, *pString))
2672cdf0e10cSrcweir 		{
2673cdf0e10cSrcweir 			aFldNames.Insert(pString, aFldNames.Count());
2674cdf0e10cSrcweir 			pString = new String();
2675cdf0e10cSrcweir 		}
2676cdf0e10cSrcweir 	}
2677cdf0e10cSrcweir 	delete pString;
2678cdf0e10cSrcweir 
2679cdf0e10cSrcweir 	uno::Sequence< OUString > aSeq(aFldNames.Count());
2680cdf0e10cSrcweir 	OUString* pArray = aSeq.getArray();
2681cdf0e10cSrcweir 	for(i = 0; i < aFldNames.Count();i++)
2682cdf0e10cSrcweir 	{
2683cdf0e10cSrcweir 		pArray[i] = *aFldNames.GetObject(i);
2684cdf0e10cSrcweir 	}
2685cdf0e10cSrcweir 	aFldNames.DeleteAndDestroy(0, aFldNames.Count());
2686cdf0e10cSrcweir 
2687cdf0e10cSrcweir 	return aSeq;
2688cdf0e10cSrcweir 
2689cdf0e10cSrcweir }
2690cdf0e10cSrcweir 
hasByName(const OUString & rName)2691cdf0e10cSrcweir sal_Bool SwXTextFieldMasters::hasByName(const OUString& rName) throw( uno::RuntimeException )
2692cdf0e10cSrcweir {
2693cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
2694cdf0e10cSrcweir 	if(!GetDoc())
2695cdf0e10cSrcweir 		throw uno::RuntimeException();
2696cdf0e10cSrcweir 
2697cdf0e10cSrcweir 	String sName(rName), sTypeName;
2698cdf0e10cSrcweir 	sal_uInt16 nResId = lcl_GetIdByName( sName, sTypeName );
2699cdf0e10cSrcweir     sal_Bool bRet = sal_False;
2700cdf0e10cSrcweir     if( USHRT_MAX != nResId )
2701cdf0e10cSrcweir     {
2702cdf0e10cSrcweir         sName.Erase(0, sTypeName.Len()+1);
2703cdf0e10cSrcweir         bRet = USHRT_MAX != nResId && 0 != GetDoc()->GetFldType(nResId, sName, sal_True);
2704cdf0e10cSrcweir     }
2705cdf0e10cSrcweir 	return bRet;
2706cdf0e10cSrcweir }
2707cdf0e10cSrcweir 
getElementType(void)2708cdf0e10cSrcweir uno::Type  SwXTextFieldMasters::getElementType(void) throw( uno::RuntimeException )
2709cdf0e10cSrcweir {
2710cdf0e10cSrcweir 	return ::getCppuType(static_cast<const uno::Reference<beans::XPropertySet>*>(0));
2711cdf0e10cSrcweir 
2712cdf0e10cSrcweir }
2713cdf0e10cSrcweir 
hasElements(void)2714cdf0e10cSrcweir sal_Bool SwXTextFieldMasters::hasElements(void) throw( uno::RuntimeException )
2715cdf0e10cSrcweir {
2716cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
2717cdf0e10cSrcweir 	if(!IsValid())
2718cdf0e10cSrcweir 		throw uno::RuntimeException();
2719cdf0e10cSrcweir 	return sal_True;
2720cdf0e10cSrcweir }
2721cdf0e10cSrcweir 
2722cdf0e10cSrcweir /******************************************************************
2723cdf0e10cSrcweir  *
2724cdf0e10cSrcweir  ******************************************************************/
2725cdf0e10cSrcweir 
getImplementationName(void)2726cdf0e10cSrcweir OUString SwXTextFieldTypes::getImplementationName(void) throw( uno::RuntimeException )
2727cdf0e10cSrcweir {
2728cdf0e10cSrcweir 	return C2U("SwXTextFieldTypes");
2729cdf0e10cSrcweir }
2730cdf0e10cSrcweir 
supportsService(const OUString & rServiceName)2731cdf0e10cSrcweir sal_Bool SwXTextFieldTypes::supportsService(const OUString& rServiceName) throw( uno::RuntimeException )
2732cdf0e10cSrcweir {
2733cdf0e10cSrcweir 	return rServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(
2734cdf0e10cSrcweir 							"com.sun.star.text.TextFields" ));
2735cdf0e10cSrcweir }
2736cdf0e10cSrcweir 
getSupportedServiceNames(void)2737cdf0e10cSrcweir uno::Sequence< OUString > SwXTextFieldTypes::getSupportedServiceNames(void) throw( uno::RuntimeException )
2738cdf0e10cSrcweir {
2739cdf0e10cSrcweir 	uno::Sequence< OUString > aRet(1);
2740cdf0e10cSrcweir 	OUString* pArray = aRet.getArray();
2741cdf0e10cSrcweir 	pArray[0] = C2U("com.sun.star.text.TextFields");
2742cdf0e10cSrcweir 	return aRet;
2743cdf0e10cSrcweir }
2744cdf0e10cSrcweir 
SwXTextFieldTypes(SwDoc * _pDoc)2745cdf0e10cSrcweir SwXTextFieldTypes::SwXTextFieldTypes(SwDoc* _pDoc) :
2746cdf0e10cSrcweir     SwUnoCollection (_pDoc),
2747cdf0e10cSrcweir     aRefreshCont    ( static_cast< XEnumerationAccess * >(this) )
2748cdf0e10cSrcweir {
2749cdf0e10cSrcweir }
2750cdf0e10cSrcweir 
~SwXTextFieldTypes()2751cdf0e10cSrcweir SwXTextFieldTypes::~SwXTextFieldTypes()
2752cdf0e10cSrcweir {
2753cdf0e10cSrcweir }
2754cdf0e10cSrcweir 
Invalidate()2755cdf0e10cSrcweir void SwXTextFieldTypes::Invalidate()
2756cdf0e10cSrcweir {
2757cdf0e10cSrcweir     SwUnoCollection::Invalidate();
2758cdf0e10cSrcweir 	aRefreshCont.Disposing();
2759cdf0e10cSrcweir }
2760cdf0e10cSrcweir 
createEnumeration(void)2761cdf0e10cSrcweir uno::Reference< container::XEnumeration >  SwXTextFieldTypes::createEnumeration(void)
2762cdf0e10cSrcweir 	throw( uno::RuntimeException )
2763cdf0e10cSrcweir {
2764cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
2765cdf0e10cSrcweir 	if(!IsValid())
2766cdf0e10cSrcweir 		throw uno::RuntimeException();
2767cdf0e10cSrcweir 	return new SwXFieldEnumeration(GetDoc());
2768cdf0e10cSrcweir }
2769cdf0e10cSrcweir 
2770cdf0e10cSrcweir 
getElementType(void)2771cdf0e10cSrcweir uno::Type  SwXTextFieldTypes::getElementType(void) throw( uno::RuntimeException )
2772cdf0e10cSrcweir {
2773cdf0e10cSrcweir 	return ::getCppuType(static_cast<const uno::Reference<text::XDependentTextField>*>(0));
2774cdf0e10cSrcweir }
2775cdf0e10cSrcweir 
hasElements(void)2776cdf0e10cSrcweir sal_Bool SwXTextFieldTypes::hasElements(void) throw( uno::RuntimeException )
2777cdf0e10cSrcweir {
2778cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
2779cdf0e10cSrcweir 	if(!IsValid())
2780cdf0e10cSrcweir 		throw uno::RuntimeException();
2781cdf0e10cSrcweir 	//es gibt sie immer
2782cdf0e10cSrcweir 	return sal_True;
2783cdf0e10cSrcweir }
2784cdf0e10cSrcweir 
refresh(void)2785cdf0e10cSrcweir void SwXTextFieldTypes::refresh(void)  throw( uno::RuntimeException )
2786cdf0e10cSrcweir {
2787cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
2788cdf0e10cSrcweir 	if(!IsValid())
2789cdf0e10cSrcweir 		throw uno::RuntimeException();
2790cdf0e10cSrcweir 	UnoActionContext aContext(GetDoc());
2791cdf0e10cSrcweir 	SwDocStat aDocStat;
2792cdf0e10cSrcweir 	GetDoc()->UpdateDocStat(aDocStat);
2793cdf0e10cSrcweir 	GetDoc()->UpdateFlds(0, sal_False);
2794cdf0e10cSrcweir 
2795cdf0e10cSrcweir     // call refresh listeners
2796cdf0e10cSrcweir     aRefreshCont.Refreshed();
2797cdf0e10cSrcweir }
2798cdf0e10cSrcweir 
addRefreshListener(const uno::Reference<util::XRefreshListener> & l)2799cdf0e10cSrcweir void SwXTextFieldTypes::addRefreshListener(const uno::Reference< util::XRefreshListener > & l)
2800cdf0e10cSrcweir 	throw( uno::RuntimeException )
2801cdf0e10cSrcweir {
2802cdf0e10cSrcweir 	::vos::OGuard aGuard(Application::GetSolarMutex());
2803cdf0e10cSrcweir 	if ( !IsValid() )
2804cdf0e10cSrcweir 		throw uno::RuntimeException();
2805cdf0e10cSrcweir 	aRefreshCont.AddListener ( reinterpret_cast < const uno::Reference < lang::XEventListener > &> ( l ));
2806cdf0e10cSrcweir }
2807cdf0e10cSrcweir 
removeRefreshListener(const uno::Reference<util::XRefreshListener> & l)2808cdf0e10cSrcweir void SwXTextFieldTypes::removeRefreshListener(const uno::Reference< util::XRefreshListener > & l)
2809cdf0e10cSrcweir 	 throw( uno::RuntimeException )
2810cdf0e10cSrcweir {
2811cdf0e10cSrcweir 	::vos::OGuard aGuard(Application::GetSolarMutex());
2812cdf0e10cSrcweir 	if ( !IsValid() || !aRefreshCont.RemoveListener ( reinterpret_cast < const uno::Reference < lang::XEventListener > &> ( l ) ) )
2813cdf0e10cSrcweir 		throw uno::RuntimeException();
2814cdf0e10cSrcweir }
2815cdf0e10cSrcweir /******************************************************************
2816cdf0e10cSrcweir  * SwXFieldEnumeration
2817cdf0e10cSrcweir  ******************************************************************/
2818cdf0e10cSrcweir 
getImplementationName(void)2819cdf0e10cSrcweir OUString SwXFieldEnumeration::getImplementationName(void) throw( uno::RuntimeException )
2820cdf0e10cSrcweir {
2821cdf0e10cSrcweir 	return C2U("SwXFieldEnumeration");
2822cdf0e10cSrcweir }
2823cdf0e10cSrcweir 
supportsService(const OUString & rServiceName)2824cdf0e10cSrcweir sal_Bool SwXFieldEnumeration::supportsService(const OUString& rServiceName) throw( uno::RuntimeException )
2825cdf0e10cSrcweir {
2826cdf0e10cSrcweir 	return rServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(
2827cdf0e10cSrcweir 							"com.sun.star.text.FieldEnumeration" ));
2828cdf0e10cSrcweir }
2829cdf0e10cSrcweir 
getSupportedServiceNames(void)2830cdf0e10cSrcweir uno::Sequence< OUString > SwXFieldEnumeration::getSupportedServiceNames(void) throw( uno::RuntimeException )
2831cdf0e10cSrcweir {
2832cdf0e10cSrcweir 	uno::Sequence< OUString > aRet(1);
2833cdf0e10cSrcweir 	OUString* pArray = aRet.getArray();
2834cdf0e10cSrcweir 	pArray[0] = C2U("com.sun.star.text.FieldEnumeration");
2835cdf0e10cSrcweir 	return aRet;
2836cdf0e10cSrcweir }
2837cdf0e10cSrcweir 
SwXFieldEnumeration(SwDoc * pDc)2838cdf0e10cSrcweir SwXFieldEnumeration::SwXFieldEnumeration(SwDoc* pDc) :
2839cdf0e10cSrcweir     nNextIndex(0),
2840cdf0e10cSrcweir 	pDoc(pDc)
2841cdf0e10cSrcweir {
2842cdf0e10cSrcweir 	pDoc->GetPageDescFromPool(RES_POOLPAGE_STANDARD)->Add(this);
2843cdf0e10cSrcweir 
2844cdf0e10cSrcweir     // build sequence
2845cdf0e10cSrcweir     sal_Int32 nSize = 32;
2846cdf0e10cSrcweir     aItems.realloc( nSize );
2847cdf0e10cSrcweir     uno::Reference< text::XTextField > *pItems = aItems.getArray();
2848cdf0e10cSrcweir     sal_Int32 nFillPos = 0;
2849cdf0e10cSrcweir     //
2850cdf0e10cSrcweir     const SwFldTypes* pFldTypes = pDoc->GetFldTypes();
2851cdf0e10cSrcweir     sal_uInt16 nCount = pFldTypes->Count();
2852cdf0e10cSrcweir     for(sal_uInt16 nType = 0;  nType < nCount;  ++nType)
2853cdf0e10cSrcweir     {
2854cdf0e10cSrcweir         const SwFieldType *pCurType = pFldTypes->GetObject(nType);
2855cdf0e10cSrcweir         SwIterator<SwFmtFld,SwFieldType> aIter( *pCurType );
2856cdf0e10cSrcweir         const SwFmtFld* pCurFldFmt = aIter.First();
2857cdf0e10cSrcweir         while (pCurFldFmt)
2858cdf0e10cSrcweir         {
2859cdf0e10cSrcweir             const SwTxtFld *pTxtFld = pCurFldFmt->GetTxtFld();
2860cdf0e10cSrcweir             // skip fields that are currently not in the document
2861cdf0e10cSrcweir             // e.g. fields in undo or redo array
2862cdf0e10cSrcweir             sal_Bool bSkip = !pTxtFld ||
2863cdf0e10cSrcweir                          !pTxtFld->GetpTxtNode()->GetNodes().IsDocNodes();
2864cdf0e10cSrcweir             if (!bSkip)
2865cdf0e10cSrcweir                 pItems[ nFillPos++ ] = new SwXTextField(*pCurFldFmt, pDoc);
2866cdf0e10cSrcweir             pCurFldFmt = aIter.Next();
2867cdf0e10cSrcweir 
2868cdf0e10cSrcweir             // enlarge sequence if necessary
2869cdf0e10cSrcweir             if (aItems.getLength() == nFillPos)
2870cdf0e10cSrcweir             {
2871cdf0e10cSrcweir                 aItems.realloc( 2 * aItems.getLength() );
2872cdf0e10cSrcweir                 pItems = aItems.getArray();
2873cdf0e10cSrcweir             }
2874cdf0e10cSrcweir         }
2875cdf0e10cSrcweir     }
2876cdf0e10cSrcweir     // now handle meta-fields, which are not SwFields
2877cdf0e10cSrcweir     const ::std::vector< uno::Reference<text::XTextField> > MetaFields(
2878cdf0e10cSrcweir            pDc->GetMetaFieldManager().getMetaFields() );
2879cdf0e10cSrcweir     for (size_t i = 0; i < MetaFields.size(); ++i)
2880cdf0e10cSrcweir     {
2881cdf0e10cSrcweir         pItems[ nFillPos ] = MetaFields[i];
2882cdf0e10cSrcweir         nFillPos++;
2883cdf0e10cSrcweir 
2884cdf0e10cSrcweir         //FIXME UGLY
2885cdf0e10cSrcweir         // enlarge sequence if necessary
2886cdf0e10cSrcweir         if (aItems.getLength() == nFillPos)
2887cdf0e10cSrcweir         {
2888cdf0e10cSrcweir             aItems.realloc( 2 * aItems.getLength() );
2889cdf0e10cSrcweir             pItems = aItems.getArray();
2890cdf0e10cSrcweir         }
2891cdf0e10cSrcweir     }
2892cdf0e10cSrcweir     // resize sequence to actual used size
2893cdf0e10cSrcweir     aItems.realloc( nFillPos );
2894cdf0e10cSrcweir }
2895cdf0e10cSrcweir 
~SwXFieldEnumeration()2896cdf0e10cSrcweir SwXFieldEnumeration::~SwXFieldEnumeration()
2897cdf0e10cSrcweir {
2898cdf0e10cSrcweir 
2899cdf0e10cSrcweir }
2900cdf0e10cSrcweir 
hasMoreElements(void)2901cdf0e10cSrcweir sal_Bool SwXFieldEnumeration::hasMoreElements(void)
2902cdf0e10cSrcweir     throw( uno::RuntimeException )
2903cdf0e10cSrcweir {
2904cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
2905cdf0e10cSrcweir     return nNextIndex < aItems.getLength();
2906cdf0e10cSrcweir }
2907cdf0e10cSrcweir 
nextElement(void)2908cdf0e10cSrcweir uno::Any SwXFieldEnumeration::nextElement(void)
2909cdf0e10cSrcweir 	throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException )
2910cdf0e10cSrcweir {
2911cdf0e10cSrcweir 	vos::OGuard  aGuard(Application::GetSolarMutex());
2912cdf0e10cSrcweir 
2913cdf0e10cSrcweir     if (!(nNextIndex < aItems.getLength()))
2914cdf0e10cSrcweir         throw container::NoSuchElementException();
2915cdf0e10cSrcweir 
2916cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1
2917cdf0e10cSrcweir     uno::Reference< text::XTextField > *pItems = aItems.getArray();
2918cdf0e10cSrcweir     (void)pItems;
2919cdf0e10cSrcweir #endif
2920cdf0e10cSrcweir     uno::Reference< text::XTextField >  &rxFld = aItems.getArray()[ nNextIndex++ ];
2921cdf0e10cSrcweir     uno::Any aRet(&rxFld, ::getCppuType(static_cast<const uno::Reference<text::XTextField>*>(0)));
2922cdf0e10cSrcweir     rxFld = 0;  // free memory for item that is not longer used
2923cdf0e10cSrcweir     return aRet;
2924cdf0e10cSrcweir }
2925cdf0e10cSrcweir 
Modify(const SfxPoolItem * pOld,const SfxPoolItem * pNew)2926cdf0e10cSrcweir void SwXFieldEnumeration::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew)
2927cdf0e10cSrcweir {
2928cdf0e10cSrcweir 	ClientModify(this, pOld, pNew);
2929cdf0e10cSrcweir 	if(!GetRegisteredIn())
2930cdf0e10cSrcweir 		pDoc = 0;
2931cdf0e10cSrcweir }
2932cdf0e10cSrcweir 
2933cdf0e10cSrcweir 
GetString(const uno::Any & rAny,String & rStr)2934cdf0e10cSrcweir String& GetString( const uno::Any& rAny, String& rStr )
2935cdf0e10cSrcweir {
2936cdf0e10cSrcweir 	OUString aStr;
2937cdf0e10cSrcweir 	rAny >>= aStr;
2938cdf0e10cSrcweir 	rStr = String( aStr );
2939cdf0e10cSrcweir 	return rStr;
2940cdf0e10cSrcweir }
2941