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