1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_editeng.hxx"
26 #include <com/sun/star/util/DateTime.hpp>
27 #include <com/sun/star/text/FilenameDisplayFormat.hpp>
28 #include <com/sun/star/lang/NoSupportException.hpp>
29 #include <com/sun/star/beans/PropertyAttribute.hpp>
30 #include <vcl/svapp.hxx>
31 #include <vos/mutex.hxx>
32
33 #include <rtl/uuid.h>
34 #include <rtl/memory.h>
35
36 #include <editeng/eeitem.hxx>
37 #include <editeng/flditem.hxx>
38 #include <editeng/measfld.hxx>
39 #include <editeng/unofield.hxx>
40 #include <editeng/unotext.hxx>
41 #include <comphelper/serviceinfohelper.hxx>
42
43 using namespace ::rtl;
44 using namespace ::vos;
45 using namespace ::cppu;
46 using namespace ::com::sun::star;
47
48 #define QUERYINT( xint ) \
49 if( rType == ::getCppuType((const uno::Reference< xint >*)0) ) \
50 aAny <<= uno::Reference< xint >(this)
51
52
53 #define WID_DATE 0
54 #define WID_BOOL1 1
55 #define WID_BOOL2 2
56 #define WID_INT32 3
57 #define WID_INT16 4
58 #define WID_STRING1 5
59 #define WID_STRING2 6
60 #define WID_STRING3 7
61
62 class SvxUnoFieldData_Impl
63 {
64 public:
65 sal_Bool mbBoolean1;
66 sal_Bool mbBoolean2;
67 sal_Int32 mnInt32;
68 sal_Int16 mnInt16;
69 OUString msString1;
70 OUString msString2;
71 OUString msString3;
72 util::DateTime maDateTime;
73
74 OUString msPresentation;
75 };
76
ImplGetFieldItemPropertySet(sal_Int32 mnId)77 const SfxItemPropertySet* ImplGetFieldItemPropertySet( sal_Int32 mnId )
78 {
79 static SfxItemPropertyMapEntry aExDateTimeFieldPropertyMap_Impl[] =
80 {
81 { MAP_CHAR_LEN("DateTime"), WID_DATE, &::getCppuType((const util::DateTime*)0), 0, 0 },
82 { MAP_CHAR_LEN("IsFixed"), WID_BOOL1, &::getBooleanCppuType(), 0, 0 },
83 { MAP_CHAR_LEN("IsDate"), WID_BOOL2, &::getBooleanCppuType(), 0, 0 },
84 { MAP_CHAR_LEN("NumberFormat"), WID_INT32, &::getCppuType((const sal_Int16*)0), 0, 0 },
85 {0,0,0,0,0,0}
86 };
87 static SfxItemPropertySet aExDateTimeFieldPropertySet_Impl(aExDateTimeFieldPropertyMap_Impl);
88
89 static SfxItemPropertyMapEntry aDateTimeFieldPropertyMap_Impl[] =
90 {
91 { MAP_CHAR_LEN("IsDate"), WID_BOOL2, &::getBooleanCppuType(), 0, 0 },
92 {0,0,0,0,0,0}
93 };
94 static SfxItemPropertySet aDateTimeFieldPropertySet_Impl(aDateTimeFieldPropertyMap_Impl);
95
96 static SfxItemPropertyMapEntry aUrlFieldPropertyMap_Impl[] =
97 {
98
99 { MAP_CHAR_LEN("Format"), WID_INT16, &::getCppuType((const sal_Int16*)0), 0, 0 },
100 { MAP_CHAR_LEN("Representation"), WID_STRING1, &::getCppuType((const OUString*)0), 0, 0 },
101 { MAP_CHAR_LEN("TargetFrame"), WID_STRING2, &::getCppuType((const OUString*)0), 0, 0 },
102 { MAP_CHAR_LEN("URL"), WID_STRING3, &::getCppuType((const OUString*)0), 0, 0 },
103 {0,0,0,0,0,0}
104 };
105 static SfxItemPropertySet aUrlFieldPropertySet_Impl(aUrlFieldPropertyMap_Impl);
106
107 static SfxItemPropertyMapEntry aEmptyPropertyMap_Impl[] =
108 {
109 {0,0,0,0,0,0}
110 };
111 static SfxItemPropertySet aEmptyPropertySet_Impl(aEmptyPropertyMap_Impl);
112
113 static SfxItemPropertyMapEntry aExtFileFieldPropertyMap_Impl[] =
114 {
115 { MAP_CHAR_LEN("IsFixed"), WID_BOOL1, &::getBooleanCppuType(), 0, 0 },
116 { MAP_CHAR_LEN("FileFormat"), WID_INT16, &::getCppuType((const sal_Int16*)0), 0, 0 },
117 { MAP_CHAR_LEN("CurrentPresentation"), WID_STRING1,&::getCppuType((const OUString*)0), 0, 0 },
118 {0,0,0,0,0,0}
119 };
120 static SfxItemPropertySet aExtFileFieldPropertySet_Impl(aExtFileFieldPropertyMap_Impl);
121
122 static SfxItemPropertyMapEntry aAuthorFieldPropertyMap_Impl[] =
123 {
124 { MAP_CHAR_LEN("IsFixed"), WID_BOOL1, &::getBooleanCppuType(), 0, 0 },
125 { MAP_CHAR_LEN("CurrentPresentation"), WID_STRING1,&::getCppuType((const OUString*)0), 0, 0 },
126 { MAP_CHAR_LEN("Content"), WID_STRING2,&::getCppuType((const OUString*)0), 0, 0 },
127 { MAP_CHAR_LEN("AuthorFormat"), WID_INT16, &::getCppuType((const sal_Int16*)0), 0, 0 },
128 { MAP_CHAR_LEN("FullName"), WID_BOOL2, &::getBooleanCppuType(), 0, 0 },
129 {0,0,0,0,0,0}
130 };
131 static SfxItemPropertySet aAuthorFieldPropertySet_Impl(aAuthorFieldPropertyMap_Impl);
132
133 static SfxItemPropertyMapEntry aMeasureFieldPropertyMap_Impl[] =
134 {
135 { MAP_CHAR_LEN("Kind"), WID_INT16, &::getCppuType((const sal_Int16*)0), 0, 0 },
136 {0,0,0,0,0,0}
137 };
138 static SfxItemPropertySet aMeasureFieldPropertySet_Impl(aMeasureFieldPropertyMap_Impl);
139
140 switch( mnId )
141 {
142 case ID_EXT_DATEFIELD:
143 case ID_EXT_TIMEFIELD:
144 return &aExDateTimeFieldPropertySet_Impl;
145 case ID_URLFIELD:
146 return &aUrlFieldPropertySet_Impl;
147 case ID_DATEFIELD:
148 case ID_TIMEFIELD:
149 return &aDateTimeFieldPropertySet_Impl;
150 case ID_EXT_FILEFIELD:
151 return &aExtFileFieldPropertySet_Impl;
152 case ID_AUTHORFIELD:
153 return &aAuthorFieldPropertySet_Impl;
154 case ID_MEASUREFIELD:
155 return &aMeasureFieldPropertySet_Impl;
156 // case ID_PAGEFIELD:
157 // case ID_PAGESFIELD:
158 // case ID_FILEFIELD:
159 // case ID_TABLEFIELD:
160 // case ID_HEADERFIELD:
161 // case ID_FOOTERFIELD:
162 // case ID_DATETIMEFIELD::
163 default:
164 return &aEmptyPropertySet_Impl;
165 }
166 }
167
168 static sal_Char const* aFieldItemNameMap_Impl[] =
169 {
170 "Date",
171 "URL",
172 "Page",
173 "Pages",
174 "Time",
175 "File",
176 "Table",
177 "ExtTime",
178 "ExtFile",
179 "Author",
180 "Measure",
181 "ExtDate",
182 "Header",
183 "Footer",
184 "DateTime",
185 "Unknown"
186 };
187
188 /* conversion routines */
189
getFileNameDisplayFormat(SvxFileFormat nFormat)190 static sal_Int16 getFileNameDisplayFormat( SvxFileFormat nFormat )
191 {
192 switch( nFormat )
193 {
194 case SVXFILEFORMAT_NAME_EXT: return text::FilenameDisplayFormat::NAME_AND_EXT;
195 case SVXFILEFORMAT_FULLPATH: return text::FilenameDisplayFormat::FULL;
196 case SVXFILEFORMAT_PATH: return text::FilenameDisplayFormat::PATH;
197 // case SVXFILEFORMAT_NAME:
198 default: return text::FilenameDisplayFormat::NAME;
199 }
200 }
201
setFileNameDisplayFormat(sal_Int16 nFormat)202 static SvxFileFormat setFileNameDisplayFormat( sal_Int16 nFormat )
203 {
204 switch( nFormat )
205 {
206 case text::FilenameDisplayFormat::FULL: return SVXFILEFORMAT_FULLPATH;
207 case text::FilenameDisplayFormat::PATH: return SVXFILEFORMAT_PATH;
208 case text::FilenameDisplayFormat::NAME: return SVXFILEFORMAT_NAME;
209 // case text::FilenameDisplayFormat::NAME_AND_EXT:
210 default:
211 return SVXFILEFORMAT_NAME_EXT;
212 }
213 }
214
getDate(sal_uLong nDate)215 static util::DateTime getDate( sal_uLong nDate )
216 {
217 util::DateTime aDate;
218 memset( &aDate, 0, sizeof( util::DateTime ) );
219
220 Date aTempDate( nDate );
221
222 aDate.Day = aTempDate.GetDay();
223 aDate.Month = aTempDate.GetMonth();
224 aDate.Year = aTempDate.GetYear();
225
226 return aDate;
227 }
228
setDate(util::DateTime & rDate)229 inline Date setDate( util::DateTime& rDate )
230 {
231 return Date( rDate.Day, rDate.Month, rDate.Year );
232 }
233
getTime(long nTime)234 static util::DateTime getTime( long nTime )
235 {
236 util::DateTime aTime;
237 memset( &aTime, 0, sizeof( util::DateTime ) );
238
239 Time aTempTime( nTime );
240
241 aTime.HundredthSeconds = aTempTime.Get100Sec();
242 aTime.Seconds = aTempTime.GetSec();
243 aTime.Minutes = aTempTime.GetMin();
244 aTime.Hours = aTempTime.GetHour();
245
246 return aTime;
247 }
248
setTime(util::DateTime & rDate)249 inline Time setTime( util::DateTime& rDate )
250 {
251 return Time( rDate.Hours, rDate.Minutes, rDate.Seconds, rDate.HundredthSeconds );
252 }
253
254 // ====================================================================
255 // class SvxUnoTextField
256 // ====================================================================
257 UNO3_GETIMPLEMENTATION_IMPL( SvxUnoTextField );
258
SvxUnoTextField(sal_Int32 nServiceId)259 SvxUnoTextField::SvxUnoTextField( sal_Int32 nServiceId ) throw()
260 : OComponentHelper( getMutex() )
261 , mpPropSet(NULL)
262 , mnServiceId(nServiceId)
263 , mpImpl( new SvxUnoFieldData_Impl )
264 {
265 mpPropSet = ImplGetFieldItemPropertySet(mnServiceId);
266
267 memset( &(mpImpl->maDateTime), 0, sizeof( util::DateTime ) );
268
269 switch( nServiceId )
270 {
271 case ID_EXT_DATEFIELD:
272 case ID_DATEFIELD:
273 mpImpl->mbBoolean2 = sal_True;
274 mpImpl->mnInt32 = SVXDATEFORMAT_STDSMALL;
275 mpImpl->mbBoolean1 = sal_False;
276 break;
277
278 case ID_EXT_TIMEFIELD:
279 case ID_TIMEFIELD:
280 mpImpl->mbBoolean2 = sal_False;
281 mpImpl->mbBoolean1 = sal_False;
282 mpImpl->mnInt32 = SVXTIMEFORMAT_STANDARD;
283 break;
284
285 case ID_URLFIELD:
286 mpImpl->mnInt16 = SVXURLFORMAT_REPR;
287 break;
288
289 case ID_EXT_FILEFIELD:
290 mpImpl->mbBoolean1 = sal_False;
291 mpImpl->mnInt16 = text::FilenameDisplayFormat::FULL;
292 break;
293
294 case ID_AUTHORFIELD:
295 mpImpl->mnInt16 = SVXAUTHORFORMAT_FULLNAME;
296 mpImpl->mbBoolean1 = sal_False;
297 mpImpl->mbBoolean2 = sal_True;
298 break;
299
300 case ID_MEASUREFIELD:
301 mpImpl->mnInt16 = SDRMEASUREFIELD_VALUE;
302 break;
303
304 default:
305 mpImpl->mbBoolean1 = sal_False;
306 mpImpl->mbBoolean2 = sal_False;
307 mpImpl->mnInt32 = 0;
308 mpImpl->mnInt16 = 0;
309
310 }
311 }
312
SvxUnoTextField(uno::Reference<text::XTextRange> xAnchor,const OUString & rPresentation,const SvxFieldData * pData)313 SvxUnoTextField::SvxUnoTextField( uno::Reference< text::XTextRange > xAnchor, const OUString& rPresentation, const SvxFieldData* pData ) throw()
314 : OComponentHelper( getMutex() )
315 , mxAnchor( xAnchor )
316 , mpPropSet(NULL)
317 , mnServiceId(ID_UNKNOWN)
318 , mpImpl( new SvxUnoFieldData_Impl )
319 {
320 DBG_ASSERT(pData, "pFieldData == NULL! [CL]" );
321
322 mpImpl->msPresentation = rPresentation;
323
324 if(pData)
325 {
326 mnServiceId = GetFieldId(pData);
327 DBG_ASSERT(mnServiceId != ID_UNKNOWN, "unknown SvxFieldData! [CL]");
328 if(mnServiceId != ID_UNKNOWN)
329 {
330 // extract field properties from data class
331 switch( mnServiceId )
332 {
333 case ID_DATEFIELD:
334 case ID_EXT_DATEFIELD:
335 {
336 mpImpl->mbBoolean2 = sal_True;
337 // #i35416# for variable date field, don't use invalid "0000-00-00" date,
338 // use current date instead
339 sal_Bool bFixed = ((SvxDateField*)pData)->GetType() == SVXDATETYPE_FIX;
340 mpImpl->maDateTime = getDate( bFixed ?
341 ((SvxDateField*)pData)->GetFixDate() :
342 Date().GetDate() );
343 mpImpl->mnInt32 = ((SvxDateField*)pData)->GetFormat();
344 mpImpl->mbBoolean1 = bFixed;
345 }
346 break;
347
348 case ID_TIMEFIELD:
349 mpImpl->mbBoolean2 = sal_False;
350 mpImpl->mbBoolean1 = sal_False;
351 mpImpl->mnInt32 = SVXTIMEFORMAT_STANDARD;
352 break;
353
354 case ID_EXT_TIMEFIELD:
355 mpImpl->mbBoolean2 = sal_False;
356 mpImpl->maDateTime = getTime( ((SvxExtTimeField*)pData)->GetFixTime() );
357 mpImpl->mbBoolean1 = ((SvxExtTimeField*)pData)->GetType() == SVXTIMETYPE_FIX;
358 mpImpl->mnInt32 = ((SvxExtTimeField*)pData)->GetFormat();
359 break;
360
361 case ID_URLFIELD:
362 mpImpl->msString1 = ((SvxURLField*)pData)->GetRepresentation();
363 mpImpl->msString2 = ((SvxURLField*)pData)->GetTargetFrame();
364 mpImpl->msString3 = ((SvxURLField*)pData)->GetURL();
365 mpImpl->mnInt16 = sal::static_int_cast< sal_Int16 >(
366 ((SvxURLField*)pData)->GetFormat());
367 break;
368
369 case ID_EXT_FILEFIELD:
370 mpImpl->msString1 = ((SvxExtFileField*)pData)->GetFile();
371 mpImpl->mbBoolean1 = ((SvxExtFileField*)pData)->GetType() == SVXFILETYPE_FIX;
372 mpImpl->mnInt16 = getFileNameDisplayFormat(((SvxExtFileField*)pData)->GetFormat());
373 break;
374
375 case ID_AUTHORFIELD:
376 mpImpl->msString1 = ((SvxAuthorField*)pData)->GetFormatted();
377 mpImpl->msString2 = ((SvxAuthorField*)pData)->GetFormatted();
378 mpImpl->mnInt16 = sal::static_int_cast< sal_Int16 >(
379 ((SvxAuthorField*)pData)->GetFormat());
380 mpImpl->mbBoolean1 = ((SvxAuthorField*)pData)->GetType() == SVXAUTHORTYPE_FIX;
381 mpImpl->mbBoolean2 = ((SvxAuthorField*)pData)->GetFormat() != SVXAUTHORFORMAT_SHORTNAME;
382 break;
383
384 case ID_MEASUREFIELD:
385 mpImpl->mnInt16 = sal::static_int_cast< sal_Int16 >(((SdrMeasureField*)pData)->GetMeasureFieldKind());
386 break;
387 }
388 }
389 }
390
391 mpPropSet = ImplGetFieldItemPropertySet(mnServiceId);
392 }
393
~SvxUnoTextField()394 SvxUnoTextField::~SvxUnoTextField() throw()
395 {
396 delete mpImpl;
397 }
398
CreateFieldData() const399 SvxFieldData* SvxUnoTextField::CreateFieldData() const throw()
400 {
401 SvxFieldData* pData = NULL;
402
403 switch( mnServiceId )
404 {
405 case ID_TIMEFIELD:
406 case ID_EXT_TIMEFIELD:
407 case ID_DATEFIELD:
408 case ID_EXT_DATEFIELD:
409 {
410 if( mpImpl->mbBoolean2 ) // IsDate?
411 {
412 Date aDate( setDate( mpImpl->maDateTime ) );
413 pData = new SvxDateField( aDate, mpImpl->mbBoolean1?SVXDATETYPE_FIX:SVXDATETYPE_VAR );
414 if( mpImpl->mnInt32 >= SVXDATEFORMAT_APPDEFAULT && mpImpl->mnInt32 <= SVXDATEFORMAT_F )
415 ((SvxDateField*)pData)->SetFormat( (SvxDateFormat)mpImpl->mnInt32 );
416 }
417 else
418 {
419 if( mnServiceId != ID_TIMEFIELD && mnServiceId != ID_DATEFIELD )
420 {
421 Time aTime( setTime( mpImpl->maDateTime ) );
422 pData = new SvxExtTimeField( aTime, mpImpl->mbBoolean1?SVXTIMETYPE_FIX:SVXTIMETYPE_VAR );
423
424 if( mpImpl->mnInt32 >= SVXTIMEFORMAT_APPDEFAULT && mpImpl->mnInt32 <= SVXTIMEFORMAT_AM_HMSH )
425 ((SvxExtTimeField*)pData)->SetFormat( (SvxTimeFormat)mpImpl->mnInt32 );
426 }
427 else
428 {
429 pData = new SvxTimeField();
430 }
431 }
432
433 }
434 break;
435
436 case ID_URLFIELD:
437 pData = new SvxURLField( mpImpl->msString3, mpImpl->msString1, mpImpl->msString1.getLength() ? SVXURLFORMAT_REPR : SVXURLFORMAT_URL );
438 ((SvxURLField*)pData)->SetTargetFrame( mpImpl->msString2 );
439 if( mpImpl->mnInt16 >= SVXURLFORMAT_APPDEFAULT && mpImpl->mnInt16 <= SVXURLFORMAT_REPR )
440 ((SvxURLField*)pData)->SetFormat( (SvxURLFormat)mpImpl->mnInt16 );
441 break;
442
443 case ID_PAGEFIELD:
444 pData = new SvxPageField();
445 break;
446
447 case ID_PAGESFIELD:
448 pData = new SvxPagesField();
449 break;
450
451 case ID_FILEFIELD:
452 pData = new SvxFileField();
453 break;
454
455 case ID_TABLEFIELD:
456 pData = new SvxTableField();
457 break;
458
459 case ID_EXT_FILEFIELD:
460 {
461 // #92009# pass fixed attribute to constructor
462 pData = new SvxExtFileField( mpImpl->msString1,
463 mpImpl->mbBoolean1 ? SVXFILETYPE_FIX : SVXFILETYPE_VAR,
464 setFileNameDisplayFormat(mpImpl->mnInt16 ) );
465 break;
466 }
467
468 case ID_AUTHORFIELD:
469 {
470 ::rtl::OUString aContent;
471 String aFirstName;
472 String aLastName;
473 String aEmpty;
474
475 // do we have CurrentPresentation given?
476 // mimic behaviour of writer, which means:
477 // prefer CurrentPresentation over Content
478 // if both are given.
479 if( mpImpl->msString1.getLength() )
480 aContent = mpImpl->msString1;
481 else
482 aContent = mpImpl->msString2;
483
484 sal_Int32 nPos = aContent.lastIndexOf( sal_Char(' '), 0 );
485 if( nPos > 0 )
486 {
487 aFirstName = aContent.copy( 0, nPos );
488 aLastName = aContent.copy( nPos + 1 );
489 }
490 else
491 {
492 aLastName = aContent;
493 }
494
495 // #92009# pass fixed attribute to constructor
496 pData = new SvxAuthorField( aFirstName, aLastName, aEmpty,
497 mpImpl->mbBoolean1 ? SVXAUTHORTYPE_FIX : SVXAUTHORTYPE_VAR );
498
499 if( !mpImpl->mbBoolean2 )
500 {
501 ((SvxAuthorField*)pData)->SetFormat( SVXAUTHORFORMAT_SHORTNAME );
502 }
503 else if( mpImpl->mnInt16 >= SVXAUTHORFORMAT_FULLNAME || mpImpl->mnInt16 <= SVXAUTHORFORMAT_SHORTNAME )
504 {
505 ((SvxAuthorField*)pData)->SetFormat( (SvxAuthorFormat) mpImpl->mnInt16 );
506 }
507
508 break;
509 }
510
511 case ID_MEASUREFIELD:
512 {
513 SdrMeasureFieldKind eKind = SDRMEASUREFIELD_VALUE;
514 if( mpImpl->mnInt16 == (sal_Int16)SDRMEASUREFIELD_UNIT || mpImpl->mnInt16 == (sal_Int16)SDRMEASUREFIELD_ROTA90BLANCS )
515 eKind = (SdrMeasureFieldKind) mpImpl->mnInt16;
516 pData = new SdrMeasureField( eKind);
517 break;
518 }
519 case ID_HEADERFIELD:
520 pData = new SvxHeaderField();
521 break;
522 case ID_FOOTERFIELD:
523 pData = new SvxFooterField();
524 break;
525 case ID_DATETIMEFIELD:
526 pData = new SvxDateTimeField();
527 break;
528 };
529
530 return pData;
531 }
532
533 // uno::XInterface
queryAggregation(const uno::Type & rType)534 uno::Any SAL_CALL SvxUnoTextField::queryAggregation( const uno::Type & rType )
535 throw(uno::RuntimeException)
536 {
537 uno::Any aAny;
538
539 QUERYINT( beans::XPropertySet );
540 else QUERYINT( text::XTextContent );
541 else QUERYINT( text::XTextField );
542 else QUERYINT( lang::XServiceInfo );
543 else QUERYINT( lang::XUnoTunnel );
544 else
545 return OComponentHelper::queryAggregation( rType );
546
547 return aAny;
548 }
549
550 // XTypeProvider
551
getTypes()552 uno::Sequence< uno::Type > SAL_CALL SvxUnoTextField::getTypes()
553 throw (uno::RuntimeException)
554 {
555 if( maTypeSequence.getLength() == 0 )
556 {
557 maTypeSequence = OComponentHelper::getTypes();
558 sal_Int32 nOldCount = maTypeSequence.getLength();
559
560 maTypeSequence.realloc( nOldCount + 4 ); // !DANGER! keep this updated
561 uno::Type* pTypes = &maTypeSequence.getArray()[nOldCount];
562
563 *pTypes++ = ::getCppuType(( const uno::Reference< text::XTextField >*)0);
564 *pTypes++ = ::getCppuType(( const uno::Reference< beans::XPropertySet >*)0);
565 *pTypes++ = ::getCppuType(( const uno::Reference< lang::XServiceInfo >*)0);
566 *pTypes++ = ::getCppuType(( const uno::Reference< lang::XUnoTunnel >*)0);
567 }
568 return maTypeSequence;
569 }
570
getImplementationId()571 uno::Sequence< sal_Int8 > SAL_CALL SvxUnoTextField::getImplementationId()
572 throw (uno::RuntimeException)
573 {
574 static uno::Sequence< sal_Int8 > aId;
575 if( aId.getLength() == 0 )
576 {
577 aId.realloc( 16 );
578 rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True );
579 }
580 return aId;
581 }
582
queryInterface(const uno::Type & rType)583 uno::Any SAL_CALL SvxUnoTextField::queryInterface( const uno::Type & rType )
584 throw(uno::RuntimeException)
585 {
586 return OComponentHelper::queryInterface(rType);
587 }
588
acquire()589 void SAL_CALL SvxUnoTextField::acquire() throw( )
590 {
591 OComponentHelper::acquire();
592 }
593
release()594 void SAL_CALL SvxUnoTextField::release() throw( )
595 {
596 OComponentHelper::release();
597 }
598
599 // Interface text::XTextField
getPresentation(sal_Bool bShowCommand)600 OUString SAL_CALL SvxUnoTextField::getPresentation( sal_Bool bShowCommand )
601 throw(uno::RuntimeException)
602 {
603 OGuard aGuard( Application::GetSolarMutex() );
604
605 if(bShowCommand)
606 {
607 DBG_ASSERT( ((sal_uInt32)mnServiceId) < ID_UNKNOWN, "Unknown field type" );
608 return OUString::createFromAscii( aFieldItemNameMap_Impl[(((sal_uInt32)mnServiceId) > ID_UNKNOWN)? ID_UNKNOWN : mnServiceId ] );
609 }
610 else
611 {
612 return mpImpl->msPresentation;
613 }
614 }
615
616 // Interface text::XTextContent
attach(const uno::Reference<text::XTextRange> & xTextRange)617 void SAL_CALL SvxUnoTextField::attach( const uno::Reference< text::XTextRange >& xTextRange )
618 throw(lang::IllegalArgumentException, uno::RuntimeException)
619 {
620 SvxUnoTextRangeBase* pRange = SvxUnoTextRange::getImplementation( xTextRange );
621 if(pRange == NULL)
622 throw lang::IllegalArgumentException();
623
624 SvxFieldData* pData = CreateFieldData();
625 if( pData )
626 pRange->attachField( pData );
627
628 delete pData;
629 }
630
getAnchor()631 uno::Reference< text::XTextRange > SAL_CALL SvxUnoTextField::getAnchor()
632 throw(uno::RuntimeException)
633 {
634 return mxAnchor;
635 }
636
637 // lang::XComponent
dispose()638 void SAL_CALL SvxUnoTextField::dispose()
639 throw(uno::RuntimeException)
640 {
641 OComponentHelper::dispose();
642 }
643
addEventListener(const uno::Reference<lang::XEventListener> & xListener)644 void SAL_CALL SvxUnoTextField::addEventListener( const uno::Reference< lang::XEventListener >& xListener )
645 throw(uno::RuntimeException)
646 {
647 OComponentHelper::addEventListener(xListener);
648 }
649
removeEventListener(const uno::Reference<lang::XEventListener> & aListener)650 void SAL_CALL SvxUnoTextField::removeEventListener( const uno::Reference< lang::XEventListener >& aListener )
651 throw(uno::RuntimeException)
652 {
653 OComponentHelper::removeEventListener(aListener);
654 }
655
656
657 // Interface beans::XPropertySet
getPropertySetInfo()658 uno::Reference< beans::XPropertySetInfo > SAL_CALL SvxUnoTextField::getPropertySetInfo( )
659 throw(uno::RuntimeException)
660 {
661 OGuard aGuard( Application::GetSolarMutex() );
662 return mpPropSet->getPropertySetInfo();
663 }
664
setPropertyValue(const OUString & aPropertyName,const uno::Any & aValue)665 void SAL_CALL SvxUnoTextField::setPropertyValue( const OUString& aPropertyName, const uno::Any& aValue )
666 throw(beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException)
667 {
668 OGuard aGuard( Application::GetSolarMutex() );
669
670 if( mpImpl == NULL )
671 throw uno::RuntimeException();
672
673 const SfxItemPropertySimpleEntry* pMap = mpPropSet->getPropertyMap()->getByName( aPropertyName );
674 if ( !pMap )
675 throw beans::UnknownPropertyException();
676
677 switch( pMap->nWID )
678 {
679 case WID_DATE:
680 if(aValue >>= mpImpl->maDateTime)
681 return;
682 break;
683 case WID_BOOL1:
684 if(aValue >>= mpImpl->mbBoolean1)
685 return;
686 break;
687 case WID_BOOL2:
688 if(aValue >>= mpImpl->mbBoolean2)
689 return;
690 break;
691 case WID_INT16:
692 if(aValue >>= mpImpl->mnInt16)
693 return;
694 break;
695 case WID_INT32:
696 if(aValue >>= mpImpl->mnInt32)
697 return;
698 break;
699 case WID_STRING1:
700 if(aValue >>= mpImpl->msString1)
701 return;
702 break;
703 case WID_STRING2:
704 if(aValue >>= mpImpl->msString2)
705 return;
706 break;
707 case WID_STRING3:
708 if(aValue >>= mpImpl->msString3)
709 return;
710 break;
711 }
712
713 throw lang::IllegalArgumentException();
714
715 /*
716 case WID_FORMAT:
717 {
718 sal_Int32 nFormat;
719
720 switch( mnId )
721 {
722 case ID_DATEFIELD:
723 {
724 SvxDateField* pDate = PTR_CAST( SvxDateField, aFieldItem.GetField() );
725 if(pDate)
726 pDate->SetFormat( (SvxDateFormat)nFormat );
727 break;
728 }
729 case ID_URLFIELD:
730 {
731 SvxURLField* pURL = PTR_CAST( SvxURLField, aFieldItem.GetField() );
732 if(pURL)
733 pURL->SetFormat( (SvxURLFormat)nFormat );
734 break;
735 }
736 case ID_EXT_TIMEFIELD:
737 {
738 SvxExtTimeField* pTime = PTR_CAST( SvxExtTimeField, aFieldItem.GetField() );
739 if(pTime)
740 pTime->SetFormat( (SvxTimeFormat)nFormat );
741 break;
742 }
743 case ID_EXT_FILEFIELD:
744 {
745 SvxExtFileField* pFile = PTR_CAST( SvxExtFileField, aFieldItem.GetField() );
746 if(pFile)
747 pFile->SetFormat( (SvxFileFormat)nFormat );
748 break;
749 }
750 case ID_AUTHORFIELD:
751 {
752 SvxAuthorField* pAuthor = PTR_CAST( SvxAuthorField, aFieldItem.GetField() );
753 if(pAuthor)
754 pAuthor->SetFormat( (SvxAuthorFormat)nFormat );
755 break;
756 }
757 default:
758 throw beans::UnknownPropertyException();
759 }
760 }
761 break;
762 case WID_FIX:
763 {
764 if( aValue.hasValue() || aValue.getValueType() != ::getCppuBooleanType() )
765 throw lang::IllegalArgumentException();
766 sal_Bool bFix( *(sal_Bool*)aValue.getValue() );
767 switch( mnId )
768 {
769 case ID_EXT_TIMEFIELD:
770 {
771 SvxExtTimeField* pTime = PTR_CAST( SvxExtTimeField, aFieldItem.GetField() );
772 if(pTime)
773 pTime->SetType( (SvxTimeType)bFix?SVXTIMETYPE_FIX:SVXTIMETYPE_VAR );
774 break;
775 }
776 case ID_DATEFIELD:
777 {
778 SvxDateField* pDate = PTR_CAST( SvxDateField, aFieldItem.GetField() );
779 if(pDate)
780 pDate->SetType( (SvxDateType)bFix?SVXDATETYPE_FIX:SVXDATETYPE_VAR );
781 break;
782 }
783 case ID_EXT_FILEFIELD:
784 {
785 SvxExtFileField* pFile = PTR_CAST( SvxExtFileField, aFieldItem.GetField() );
786 if(pFile)
787 pFile->SetType( (SvxFileType)bFix?SVXFILETYPE_FIX:SVXFILETYPE_VAR );
788 break;
789 }
790 case ID_AUTHORFIELD:
791 {
792 SvxAuthorField* pAuthor = PTR_CAST( SvxAuthorField, aFieldItem.GetField() );
793 if(pAuthor)
794 pAuthor->SetType( (SvxAuthorType)bFix?SVXAUTHORTYPE_FIX:SVXAUTHORTYPE_VAR );
795 break;
796 }
797 default:
798 throw beans::UnknownPropertyException();
799 }
800 }
801 break;
802 case WID_PRES:
803 case WID_URL:
804 case WID_TARGET:
805 {
806 SvxURLField* pURL = PTR_CAST( SvxURLField, aFieldItem.GetField() );
807 if(pURL)
808 {
809 OUString aUnoStr;
810 if(!(aValue >>= aUnoStr))
811 throw lang::IllegalArgumentException();
812
813 switch( pMap->nWID )
814 {
815 case WID_PRES:
816 pURL->SetRepresentation( aUnoStr );
817 break;
818 case WID_URL:
819 pURL->SetURL( aUnoStr );
820 break;
821 case WID_TARGET:
822 pURL->SetTargetFrame( aUnoStr );
823 break;
824 }
825 }
826 break;
827 }
828 }
829
830 SfxItemSet aSet = pForwarder->GetAttribs( GetSelection() );
831 aSet.Put( aFieldItem );
832 */
833 }
834
getPropertyValue(const OUString & PropertyName)835 uno::Any SAL_CALL SvxUnoTextField::getPropertyValue( const OUString& PropertyName )
836 throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
837 {
838 OGuard aGuard( Application::GetSolarMutex() );
839
840 uno::Any aValue;
841
842 const SfxItemPropertySimpleEntry* pMap = mpPropSet->getPropertyMap()->getByName( PropertyName );
843 if ( !pMap )
844 throw beans::UnknownPropertyException();
845
846 switch( pMap->nWID )
847 {
848 case WID_DATE:
849 aValue <<= mpImpl->maDateTime;
850 break;
851 case WID_BOOL1:
852 aValue <<= mpImpl->mbBoolean1;
853 break;
854 case WID_BOOL2:
855 aValue <<= mpImpl->mbBoolean2;
856 break;
857 case WID_INT16:
858 aValue <<= mpImpl->mnInt16;
859 break;
860 case WID_INT32:
861 aValue <<= mpImpl->mnInt32;
862 break;
863 case WID_STRING1:
864 aValue <<= mpImpl->msString1;
865 break;
866 case WID_STRING2:
867 aValue <<= mpImpl->msString2;
868 break;
869 case WID_STRING3:
870 aValue <<= mpImpl->msString3;
871 break;
872 }
873
874 return aValue;
875
876 /*
877 switch(pMap->nWID)
878 {
879 case WID_FORMAT:
880 switch( mnId )
881 {
882 case ID_DATEFIELD:
883 {
884 SvxDateField* pDate = PTR_CAST( SvxDateField, pFieldItem->GetField() );
885 if(pDate)
886 aValue <<= (sal_Int32)pDate->GetFormat();
887 break;
888 }
889 case ID_URLFIELD:
890 {
891 SvxURLField* pURL = PTR_CAST( SvxURLField, pFieldItem->GetField() );
892 if(pURL)
893 aValue <<= (sal_Int32)pURL->GetFormat();
894 break;
895 }
896 case ID_EXT_TIMEFIELD:
897 {
898 SvxExtTimeField* pTime = PTR_CAST( SvxExtTimeField, pFieldItem->GetField() );
899 if(pTime)
900 aValue <<= (sal_Int32)pTime->GetFormat();
901 break;
902 }
903 case ID_EXT_FILEFIELD:
904 {
905 SvxExtFileField* pFile = PTR_CAST( SvxExtFileField, pFieldItem->GetField() );
906 if(pFile)
907 aValue <<= (sal_Int32)pFile->GetFormat();
908 break;
909 }
910 case ID_AUTHORFIELD:
911 {
912 SvxAuthorField* pAuthor = PTR_CAST( SvxAuthorField, pFieldItem->GetField() );
913 if(pAuthor)
914 aValue <<= (sal_Int32)pAuthor->GetFormat();
915 break;
916 }
917 default:
918 throw beans::UnknownPropertyException();
919 }
920 break;
921 case WID_FIX:
922 {
923 sal_Bool bFix = sal_False;
924 switch( mnId )
925 {
926 case ID_EXT_TIMEFIELD:
927 {
928 SvxExtTimeField* pTime = PTR_CAST( SvxExtTimeField, pFieldItem->GetField() );
929 if(pTime)
930 bFix = pTime->GetType() == SVXTIMETYPE_FIX;
931 break;
932 }
933 case ID_DATEFIELD:
934 {
935 SvxDateField* pDate = PTR_CAST( SvxDateField, pFieldItem->GetField() );
936 if(pDate)
937 bFix = pDate->GetType() == SVXDATETYPE_FIX;
938 break;
939 }
940 case ID_EXT_FILEFIELD:
941 {
942 SvxExtFileField* pFile = PTR_CAST( SvxExtFileField, pFieldItem->GetField() );
943 if(pFile)
944 bFix = pFile->GetType() == SVXFILETYPE_FIX;
945 break;
946 }
947 case ID_AUTHORFIELD:
948 {
949 SvxAuthorField* pAuthor = PTR_CAST( SvxAuthorField, pFieldItem->GetField() );
950 if(pAuthor)
951 bFix = pAuthor->GetType() == SVXAUTHORTYPE_FIX;
952 break;
953 }
954 default:
955 throw beans::UnknownPropertyException();
956 }
957 aValue.setValue( &bFix, ::getCppuBooleanType() );
958 }
959 break;
960 case WID_PRES:
961 case WID_URL:
962 case WID_TARGET:
963 {
964 SvxURLField* pURL = PTR_CAST( SvxURLField, pFieldItem->GetField() );
965 if(pURL)
966 {
967 OUString aStr;
968 switch( pMap->nWID )
969 {
970 case WID_PRES:
971 aStr = pURL->GetRepresentation();
972 break;
973 case WID_URL:
974 aStr = pURL->GetURL();
975 break;
976 case WID_TARGET:
977 aStr = pURL->GetTargetFrame();
978 break;
979 }
980 aValue <<= aStr;
981 }
982 break;
983 }
984 case WID_FCOLOR:
985 case WID_TCOLOR:
986 {
987 Color* pFColor = NULL;
988 Color* pTColor = NULL;
989 const ESelection aSel = GetSelection();
990
991 pForwarder->CalcFieldValue( *pFieldItem, aSel.nStartPara, aSel.nStartPos, pTColor, pFColor );
992
993 if( pMap->nWID == WID_FCOLOR )
994 aValue <<= (sal_Int32)pFColor->GetColor();
995 else
996 aValue <<= (sal_Int32)pTColor->GetColor();
997 break;
998
999 delete pTColor;
1000 delete pFColor;
1001 }
1002 }
1003 return aValue;
1004 */
1005 }
1006
addPropertyChangeListener(const OUString &,const uno::Reference<beans::XPropertyChangeListener> &)1007 void SAL_CALL SvxUnoTextField::addPropertyChangeListener( const OUString&, const uno::Reference< beans::XPropertyChangeListener >& ) throw(::com::sun::star::beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {}
removePropertyChangeListener(const OUString &,const uno::Reference<beans::XPropertyChangeListener> &)1008 void SAL_CALL SvxUnoTextField::removePropertyChangeListener( const OUString&, const uno::Reference< beans::XPropertyChangeListener >& ) throw(::com::sun::star::beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {}
addVetoableChangeListener(const OUString &,const uno::Reference<beans::XVetoableChangeListener> &)1009 void SAL_CALL SvxUnoTextField::addVetoableChangeListener( const OUString&, const uno::Reference< beans::XVetoableChangeListener >& ) throw(::com::sun::star::beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {}
removeVetoableChangeListener(const OUString &,const uno::Reference<beans::XVetoableChangeListener> &)1010 void SAL_CALL SvxUnoTextField::removeVetoableChangeListener( const OUString&, const uno::Reference< beans::XVetoableChangeListener >& ) throw(::com::sun::star::beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {}
1011
1012 // OComponentHelper
disposing()1013 void SvxUnoTextField::disposing()
1014 {
1015 // nothing to do
1016 }
1017
GetFieldId(const SvxFieldData * pFieldData) const1018 sal_Int32 SvxUnoTextField::GetFieldId( const SvxFieldData* pFieldData ) const throw()
1019 {
1020 if( pFieldData->ISA( SvxURLField ) )
1021 return ID_URLFIELD;
1022 else if( pFieldData->ISA( SvxPageField ) )
1023 return ID_PAGEFIELD;
1024 else if( pFieldData->ISA( SvxPagesField ) )
1025 return ID_PAGESFIELD;
1026 else if( pFieldData->ISA( SvxTimeField ) )
1027 return ID_TIMEFIELD;
1028 else if( pFieldData->ISA( SvxFileField ) )
1029 return ID_FILEFIELD;
1030 else if( pFieldData->ISA( SvxTableField ) )
1031 return ID_TABLEFIELD;
1032 else if( pFieldData->ISA( SvxExtTimeField ) )
1033 return ID_EXT_TIMEFIELD;
1034 else if( pFieldData->ISA( SvxExtFileField ) )
1035 return ID_EXT_FILEFIELD;
1036 else if( pFieldData->ISA( SvxAuthorField ) )
1037 return ID_AUTHORFIELD;
1038 else if( pFieldData->ISA( SvxDateField ) )
1039 return ID_EXT_DATEFIELD;
1040 else if( pFieldData->ISA( SdrMeasureField ) )
1041 return ID_MEASUREFIELD;
1042 else if( pFieldData->ISA( SvxHeaderField ) )
1043 return ID_HEADERFIELD;
1044 else if( pFieldData->ISA( SvxFooterField ) )
1045 return ID_FOOTERFIELD;
1046 else if( pFieldData->ISA( SvxDateTimeField ) )
1047 return ID_DATETIMEFIELD;
1048
1049 return ID_UNKNOWN;
1050 }
1051
1052 // lang::XServiceInfo
getImplementationName()1053 OUString SAL_CALL SvxUnoTextField::getImplementationName() throw(uno::RuntimeException)
1054 {
1055 return OUString(RTL_CONSTASCII_USTRINGPARAM("SvxUnoTextField"));
1056 }
1057
1058 static const sal_Char* pOldServiceNames[] =
1059 {
1060 "com.sun.star.text.TextField.DateTime",
1061 "com.sun.star.text.TextField.URL",
1062 "com.sun.star.text.TextField.PageNumber",
1063 "com.sun.star.text.TextField.PageCount",
1064 "com.sun.star.text.TextField.DateTime",
1065 "com.sun.star.text.TextField.DocInfo.Title", // SvxFileField is used for title
1066 "com.sun.star.text.TextField.SheetName",
1067 "com.sun.star.text.TextField.DateTime",
1068 "com.sun.star.text.TextField.FileName",
1069 "com.sun.star.text.TextField.Author",
1070 "com.sun.star.text.TextField.Measure",
1071 "com.sun.star.text.TextField.DateTime",
1072 "com.sun.star.presentation.TextField.Header",
1073 "com.sun.star.presentation.TextField.Footer",
1074 "com.sun.star.presentation.TextField.DateTime"
1075 };
1076
1077 static const sal_Char* pNewServiceNames[] =
1078 {
1079 "com.sun.star.text.textfield.DateTime",
1080 "com.sun.star.text.textfield.URL",
1081 "com.sun.star.text.textfield.PageNumber",
1082 "com.sun.star.text.textfield.PageCount",
1083 "com.sun.star.text.textfield.DateTime",
1084 "com.sun.star.text.textfield.docinfo.Title", // SvxFileField is used for title
1085 "com.sun.star.text.textfield.SheetName",
1086 "com.sun.star.text.textfield.DateTime",
1087 "com.sun.star.text.textfield.FileName",
1088 "com.sun.star.text.textfield.Author",
1089 "com.sun.star.text.textfield.Measure",
1090 "com.sun.star.text.textfield.DateTime",
1091 "com.sun.star.presentation.textfield.Header",
1092 "com.sun.star.presentation.textfield.Footer",
1093 "com.sun.star.presentation.textfield.DateTime"
1094 };
1095
getSupportedServiceNames()1096 uno::Sequence< OUString > SAL_CALL SvxUnoTextField::getSupportedServiceNames()
1097 throw(uno::RuntimeException)
1098 {
1099 uno::Sequence< OUString > aSeq( 4 );
1100 OUString* pServices = aSeq.getArray();
1101 pServices[0] = OUString::createFromAscii( pNewServiceNames[mnServiceId] );
1102 pServices[1] = OUString::createFromAscii( pOldServiceNames[mnServiceId] );
1103 pServices[2] = OUString::createFromAscii( "com.sun.star.text.TextContent" ),
1104 pServices[3] = OUString::createFromAscii( "com.sun.star.text.TextField" );
1105
1106 return aSeq;
1107 }
1108
supportsService(const OUString & ServiceName)1109 sal_Bool SAL_CALL SvxUnoTextField::supportsService( const OUString& ServiceName ) throw( uno::RuntimeException )
1110 {
1111 return comphelper::ServiceInfoHelper::supportsService( ServiceName, getSupportedServiceNames() );
1112 }
1113
SvxUnoTextCreateTextField(const::rtl::OUString & ServiceSpecifier)1114 uno::Reference< uno::XInterface > SAL_CALL SvxUnoTextCreateTextField( const ::rtl::OUString& ServiceSpecifier ) throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException)
1115 {
1116 uno::Reference< uno::XInterface > xRet;
1117
1118 const OUString aTextFieldPrexit( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.textfield.") );
1119
1120 // #i93308# up to OOo 3.2 we used this wrong namespace name with the capital T & F. This is
1121 // fixed since OOo 3.2 but for compatibility we will still provide support for the wrong notation.
1122 const OUString aTextFieldPrexit2( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextField.") );
1123
1124 if( (ServiceSpecifier.compareTo( aTextFieldPrexit, aTextFieldPrexit.getLength() ) == 0) ||
1125 (ServiceSpecifier.compareTo( aTextFieldPrexit2, aTextFieldPrexit2.getLength() ) == 0) )
1126 {
1127 OUString aFieldType( ServiceSpecifier.copy( aTextFieldPrexit.getLength() ) );
1128
1129 sal_Int32 nId = ID_UNKNOWN;
1130
1131 if( aFieldType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("DateTime") ) )
1132 {
1133 nId = ID_DATEFIELD;
1134 }
1135 else if( aFieldType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("URL") ) )
1136 {
1137 nId = ID_URLFIELD;
1138 }
1139 else if( aFieldType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("PageNumber") ) )
1140 {
1141 nId = ID_PAGEFIELD;
1142 }
1143 else if( aFieldType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("PageCount") ) )
1144 {
1145 nId = ID_PAGESFIELD;
1146 }
1147 else if( aFieldType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("SheetName") ) )
1148 {
1149 nId = ID_TABLEFIELD;
1150 }
1151 else if( aFieldType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("FileName") ) )
1152 {
1153 nId = ID_EXT_FILEFIELD;
1154 }
1155 else if (aFieldType.equalsAsciiL(
1156 RTL_CONSTASCII_STRINGPARAM("docinfo.Title") ) ||
1157 aFieldType.equalsAsciiL(
1158 RTL_CONSTASCII_STRINGPARAM("DocInfo.Title") ) )
1159 {
1160 nId = ID_FILEFIELD;
1161 }
1162 else if( aFieldType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("Author") ) )
1163 {
1164 nId = ID_AUTHORFIELD;
1165 }
1166 else if( aFieldType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("Measure") ) )
1167 {
1168 nId = ID_MEASUREFIELD;
1169 }
1170
1171 if( nId != ID_UNKNOWN )
1172 xRet = (::cppu::OWeakObject * )new SvxUnoTextField( nId );
1173 }
1174
1175 return xRet;
1176 }
1177