xref: /core/svx/source/unodraw/unoprov.cxx (revision 59523318)
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  *   Licensed to the Apache Software Foundation (ASF) under one or more
12  *   contributor license agreements. See the NOTICE file distributed
13  *   with this work for additional information regarding copyright
14  *   ownership. The ASF licenses this file to you under the Apache
15  *   License, Version 2.0 (the "License"); you may not use this file
16  *   except in compliance with the License. You may obtain a copy of
17  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include <sal/macros.h>
21 #include <com/sun/star/table/XTable.hpp>
22 #include <com/sun/star/container/XIndexAccess.hpp>
23 #include <com/sun/star/container/XNameContainer.hpp>
24 #include <com/sun/star/frame/XModel.hpp>
25 #include <com/sun/star/embed/XEmbeddedObject.hpp>
26 #include <com/sun/star/util/MeasureUnit.hpp>
27 #include <com/sun/star/drawing/TextVerticalAdjust.hpp>
28 #include <com/sun/star/media/ZoomLevel.hpp>
29 #include <com/sun/star/io/XInputStream.hpp>
30 #include <com/sun/star/beans/PropertyAttribute.hpp>
31 #include <com/sun/star/lang/Locale.hpp>
32 #include <tools/fldunit.hxx>
33 #include <vcl/svapp.hxx>
34 #include <comphelper/propertysetinfo.hxx>
35 #include <comphelper/sequence.hxx>
36 #include <svx/dialmgr.hxx>
37 #include <svx/unoapi.hxx>
38 #include <svx/unoshprp.hxx>
39 #include <svx/svx3ditems.hxx>
40 #include <svx/svxids.hrc>
41 #include <svx/globl3d.hxx>
42 #include <svx/strings.hrc>
43 #include <strings.hxx>
44 #include <svx/svdobj.hxx>
45 
46 #include "shapeimpl.hxx"
47 #include <unordered_map>
48 
49 using namespace ::com::sun::star;
50 using namespace ::com::sun::star::beans::PropertyAttribute;
51 using ::com::sun::star::drawing::TextVerticalAdjust;
52 
53 static SfxItemPropertyMapEntry const * ImplGetSvxShapePropertyMap()
54 {
55     static SfxItemPropertyMapEntry const aShapePropertyMap_Impl[] =
56     {
57         EDGERADIUS_PROPERTIES
58         FILL_PROPERTIES
59         LINE_PROPERTIES
60         LINE_PROPERTIES_START_END
61         SHAPE_DESCRIPTOR_PROPERTIES
62         MISC_OBJ_PROPERTIES
63         LINKTARGET_PROPERTIES
64         GLOW_PROPERTIES
65         SOFTEDGE_PROPERTIES
66         SHADOW_PROPERTIES
67         TEXT_PROPERTIES
68         // #FontWork#
69         FONTWORK_PROPERTIES
70         { OUString("UserDefinedAttributes"), SDRATTR_XMLATTRIBUTES, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
71         { OUString("ParaUserDefinedAttributes"), EE_PARA_XMLATTRIBS, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
72         { OUString(), 0, css::uno::Type(), 0, 0 }
73     };
74 
75     return aShapePropertyMap_Impl;
76 }
77 
78 static SfxItemPropertyMapEntry const * ImplGetSvxTextShapePropertyMap()
79 {
80     static SfxItemPropertyMapEntry const aTextShapePropertyMap_Impl[] =
81     {
82         EDGERADIUS_PROPERTIES
83         FILL_PROPERTIES
84         LINE_PROPERTIES
85         LINE_PROPERTIES_START_END
86         SHAPE_DESCRIPTOR_PROPERTIES
87         MISC_OBJ_PROPERTIES_NO_SHEAR
88         LINKTARGET_PROPERTIES
89         GLOW_PROPERTIES
90         SOFTEDGE_PROPERTIES
91         SHADOW_PROPERTIES
92         TEXT_PROPERTIES
93         // #FontWork#
94         FONTWORK_PROPERTIES
95         { OUString("UserDefinedAttributes"), SDRATTR_XMLATTRIBUTES, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
96         { OUString("ParaUserDefinedAttributes"), EE_PARA_XMLATTRIBS, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
97         { OUString(), 0, css::uno::Type(), 0, 0 }
98     };
99 
100     return aTextShapePropertyMap_Impl;
101 }
102 
103 static SfxItemPropertyMapEntry const * ImplGetSvxConnectorPropertyMap()
104 {
105     static SfxItemPropertyMapEntry const aConnectorPropertyMap_Impl[] =
106     {
107         SPECIAL_CONNECTOR_PROPERTIES
108         EDGERADIUS_PROPERTIES
109         FILL_PROPERTIES
110         LINE_PROPERTIES
111         LINE_PROPERTIES_START_END
112         SHAPE_DESCRIPTOR_PROPERTIES
113         MISC_OBJ_PROPERTIES
114         LINKTARGET_PROPERTIES
115         GLOW_PROPERTIES
116         SOFTEDGE_PROPERTIES
117         SHADOW_PROPERTIES
118         TEXT_PROPERTIES
119         // #FontWork#
120         FONTWORK_PROPERTIES
121         { OUString("UserDefinedAttributes"), SDRATTR_XMLATTRIBUTES, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
122         { OUString("ParaUserDefinedAttributes"), EE_PARA_XMLATTRIBS, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
123         { OUString(), 0, css::uno::Type(), 0, 0 }
124     };
125 
126     return aConnectorPropertyMap_Impl;
127 }
128 
129 static SfxItemPropertyMapEntry const * ImplGetSvxDimensioningPropertyMap()
130 {
131     static SfxItemPropertyMapEntry const aDimensioningPropertyMap_Impl[] =
132     {
133         SPECIAL_DIMENSIONING_PROPERTIES
134         EDGERADIUS_PROPERTIES
135         FILL_PROPERTIES
136         LINE_PROPERTIES
137         LINE_PROPERTIES_START_END
138         SHAPE_DESCRIPTOR_PROPERTIES
139         MISC_OBJ_PROPERTIES
140         LINKTARGET_PROPERTIES
141         GLOW_PROPERTIES
142         SOFTEDGE_PROPERTIES
143         SHADOW_PROPERTIES
144         TEXT_PROPERTIES
145         // #FontWork#
146         FONTWORK_PROPERTIES
147         { OUString("UserDefinedAttributes"), SDRATTR_XMLATTRIBUTES, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
148         { OUString("ParaUserDefinedAttributes"), EE_PARA_XMLATTRIBS, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
149         { OUString(), 0, css::uno::Type(), 0, 0 }
150     };
151 
152     return aDimensioningPropertyMap_Impl;
153 }
154 
155 static SfxItemPropertyMapEntry const * ImplGetSvxCirclePropertyMap()
156 {
157     static SfxItemPropertyMapEntry const aCirclePropertyMap_Impl[] =
158     {
159         SPECIAL_CIRCLE_PROPERTIES
160         EDGERADIUS_PROPERTIES
161         FILL_PROPERTIES
162         LINE_PROPERTIES
163         LINE_PROPERTIES_START_END
164         SHAPE_DESCRIPTOR_PROPERTIES
165         MISC_OBJ_PROPERTIES
166         LINKTARGET_PROPERTIES
167         GLOW_PROPERTIES
168         SOFTEDGE_PROPERTIES
169         SHADOW_PROPERTIES
170         TEXT_PROPERTIES
171         // #FontWork#
172         FONTWORK_PROPERTIES
173         { OUString("UserDefinedAttributes"), SDRATTR_XMLATTRIBUTES, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
174         { OUString("ParaUserDefinedAttributes"), EE_PARA_XMLATTRIBS, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
175         { OUString(), 0, css::uno::Type(), 0, 0 }
176     };
177 
178     return aCirclePropertyMap_Impl;
179 }
180 
181 static SfxItemPropertyMapEntry const * ImplGetSvxPolyPolygonPropertyMap()
182 {
183     static SfxItemPropertyMapEntry const aPolyPolygonPropertyMap_Impl[] =
184     {
185         { OUString("Geometry"), OWN_ATTR_BASE_GEOMETRY, cppu::UnoType<css::drawing::PointSequenceSequence>::get(), 0, 0 },
186         SPECIAL_POLYGON_PROPERTIES
187         SPECIAL_POLYPOLYGON_PROPERTIES
188         SPECIAL_POLYPOLYGONBEZIER_PROPERTIES
189         FILL_PROPERTIES
190         LINE_PROPERTIES
191         LINE_PROPERTIES_START_END
192         SHAPE_DESCRIPTOR_PROPERTIES
193         MISC_OBJ_PROPERTIES
194         LINKTARGET_PROPERTIES
195         GLOW_PROPERTIES
196         SOFTEDGE_PROPERTIES
197         SHADOW_PROPERTIES
198         TEXT_PROPERTIES
199         // #FontWork#
200         FONTWORK_PROPERTIES
201         { OUString("UserDefinedAttributes"), SDRATTR_XMLATTRIBUTES, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
202         { OUString("ParaUserDefinedAttributes"), EE_PARA_XMLATTRIBS, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
203         { OUString(), 0, css::uno::Type(), 0, 0 }
204     };
205 
206     return aPolyPolygonPropertyMap_Impl;
207 }
208 
209 static SfxItemPropertyMapEntry const * ImplGetSvxGraphicObjectPropertyMap()
210 {
211     static SfxItemPropertyMapEntry const aGraphicObjectPropertyMap_Impl[] =
212     {
213         SPECIAL_GRAPHOBJ_PROPERTIES
214 
215         // #i25616#
216         FILL_PROPERTIES
217 
218         LINE_PROPERTIES
219         LINE_PROPERTIES_START_END
220         SHAPE_DESCRIPTOR_PROPERTIES
221 
222         // #i118485# Full properties now, shear included
223         MISC_OBJ_PROPERTIES
224 
225         LINKTARGET_PROPERTIES
226         GLOW_PROPERTIES
227         SOFTEDGE_PROPERTIES
228         SHADOW_PROPERTIES
229         TEXT_PROPERTIES
230         // #FontWork#
231         FONTWORK_PROPERTIES
232         { OUString("IsMirrored"), OWN_ATTR_MIRRORED, cppu::UnoType<bool>::get(), 0, 0},
233         { OUString("UserDefinedAttributes"), SDRATTR_XMLATTRIBUTES, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
234         { OUString("ParaUserDefinedAttributes"), EE_PARA_XMLATTRIBS, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
235         { OUString("GraphicStream"), OWN_ATTR_GRAPHIC_STREAM, cppu::UnoType<css::io::XInputStream>::get(), css::beans::PropertyAttribute::READONLY, 0},
236         { OUString(), 0, css::uno::Type(), 0, 0 }
237     };
238 
239     return aGraphicObjectPropertyMap_Impl;
240 }
241 
242 static SfxItemPropertyMapEntry const * ImplGetSvx3DSceneObjectPropertyMap()
243 {
244     static SfxItemPropertyMapEntry const a3DSceneObjectPropertyMap_Impl[] =
245     {
246         SPECIAL_3DSCENEOBJECT_PROPERTIES
247         FILL_PROPERTIES
248         LINE_PROPERTIES
249         LINE_PROPERTIES_START_END
250         SHAPE_DESCRIPTOR_PROPERTIES
251         MISC_OBJ_PROPERTIES
252         LINKTARGET_PROPERTIES
253         SHADOW_PROPERTIES
254         { OUString(), 0, css::uno::Type(), 0, 0 }
255     };
256 
257     return a3DSceneObjectPropertyMap_Impl;
258 }
259 
260 static SfxItemPropertyMapEntry const * ImplGetSvx3DCubeObjectPropertyMap()
261 {
262     static SfxItemPropertyMapEntry const a3DCubeObjectPropertyMap_Impl[] =
263     {
264         SPECIAL_3DCUBEOBJECT_PROPERTIES
265         MISC_3D_OBJ_PROPERTIES
266         FILL_PROPERTIES
267         LINE_PROPERTIES
268         LINE_PROPERTIES_START_END
269         SHAPE_DESCRIPTOR_PROPERTIES
270         MISC_OBJ_PROPERTIES
271         LINKTARGET_PROPERTIES
272         SHADOW_PROPERTIES
273         { OUString("UserDefinedAttributes"), SDRATTR_XMLATTRIBUTES, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
274         { OUString("ParaUserDefinedAttributes"), EE_PARA_XMLATTRIBS, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
275         { OUString(), 0, css::uno::Type(), 0, 0 }
276     };
277 
278     return a3DCubeObjectPropertyMap_Impl;
279 }
280 
281 static SfxItemPropertyMapEntry const * ImplGetSvx3DSphereObjectPropertyMap()
282 {
283     static SfxItemPropertyMapEntry const a3DSphereObjectPropertyMap_Impl[] =
284     {
285         SPECIAL_3DSPHEREOBJECT_PROPERTIES
286         MISC_3D_OBJ_PROPERTIES
287         FILL_PROPERTIES
288         LINE_PROPERTIES
289         LINE_PROPERTIES_START_END
290         SHAPE_DESCRIPTOR_PROPERTIES
291         MISC_OBJ_PROPERTIES
292         LINKTARGET_PROPERTIES
293         SHADOW_PROPERTIES
294         { OUString("UserDefinedAttributes"), SDRATTR_XMLATTRIBUTES, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
295         { OUString("ParaUserDefinedAttributes"), EE_PARA_XMLATTRIBS, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
296         { OUString(), 0, css::uno::Type(), 0, 0 }
297     };
298     return a3DSphereObjectPropertyMap_Impl;
299 }
300 
301 static SfxItemPropertyMapEntry const * ImplGetSvx3DLatheObjectPropertyMap()
302 {
303     static SfxItemPropertyMapEntry const a3DLatheObjectPropertyMap_Impl[] =
304     {
305         SPECIAL_3DLATHEOBJECT_PROPERTIES
306 
307         // #107245# New 3D properties which are possible for lathe and extrude 3d objects
308         SPECIAL_3DLATHEANDEXTRUDEOBJ_PROPERTIES
309 
310         SPECIAL_3DBACKSCALE_PROPERTIES
311         MISC_3D_OBJ_PROPERTIES
312         FILL_PROPERTIES
313         LINE_PROPERTIES
314         LINE_PROPERTIES_START_END
315         SHAPE_DESCRIPTOR_PROPERTIES
316         MISC_OBJ_PROPERTIES
317         LINKTARGET_PROPERTIES
318         SHADOW_PROPERTIES
319         { OUString("UserDefinedAttributes"), SDRATTR_XMLATTRIBUTES, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
320         { OUString("ParaUserDefinedAttributes"), EE_PARA_XMLATTRIBS, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
321         { OUString(), 0, css::uno::Type(), 0, 0 }
322     };
323 
324     return a3DLatheObjectPropertyMap_Impl;
325 }
326 
327 static SfxItemPropertyMapEntry const * ImplGetSvx3DExtrudeObjectPropertyMap()
328 {
329     static SfxItemPropertyMapEntry const a3DExtrudeObjectPropertyMap_Impl[] =
330     {
331         SPECIAL_3DEXTRUDEOBJECT_PROPERTIES
332 
333         // #107245# New 3D properties which are possible for lathe and extrude 3d objects
334         SPECIAL_3DLATHEANDEXTRUDEOBJ_PROPERTIES
335 
336         SPECIAL_3DBACKSCALE_PROPERTIES
337         MISC_3D_OBJ_PROPERTIES
338         FILL_PROPERTIES
339         LINE_PROPERTIES
340         LINE_PROPERTIES_START_END
341         SHAPE_DESCRIPTOR_PROPERTIES
342         MISC_OBJ_PROPERTIES
343         LINKTARGET_PROPERTIES
344         SHADOW_PROPERTIES
345         { OUString("UserDefinedAttributes"), SDRATTR_XMLATTRIBUTES, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
346         { OUString("ParaUserDefinedAttributes"), EE_PARA_XMLATTRIBS, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
347         { OUString(), 0, css::uno::Type(), 0, 0 }
348     };
349 
350     return a3DExtrudeObjectPropertyMap_Impl;
351 }
352 
353 static SfxItemPropertyMapEntry const * ImplGetSvx3DPolygonObjectPropertyMap()
354 {
355     static SfxItemPropertyMapEntry const a3DPolygonObjectPropertyMap_Impl[] =
356     {
357         SPECIAL_3DPOLYGONOBJECT_PROPERTIES
358         MISC_3D_OBJ_PROPERTIES
359         FILL_PROPERTIES
360         LINE_PROPERTIES
361         LINE_PROPERTIES_START_END
362         SHAPE_DESCRIPTOR_PROPERTIES
363         MISC_OBJ_PROPERTIES
364         LINKTARGET_PROPERTIES
365         SHADOW_PROPERTIES
366         { OUString("UserDefinedAttributes"), SDRATTR_XMLATTRIBUTES, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
367         { OUString("ParaUserDefinedAttributes"), EE_PARA_XMLATTRIBS, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
368         { OUString(), 0, css::uno::Type(), 0, 0 }
369     };
370 
371     return a3DPolygonObjectPropertyMap_Impl;
372 }
373 
374 static SfxItemPropertyMapEntry const * ImplGetSvxAllPropertyMap()
375 {
376     static SfxItemPropertyMapEntry const aAllPropertyMap_Impl[] =
377     {
378         GLOW_PROPERTIES
379         SOFTEDGE_PROPERTIES
380         SHADOW_PROPERTIES
381         LINE_PROPERTIES
382         LINE_PROPERTIES_START_END
383         FILL_PROPERTIES
384         EDGERADIUS_PROPERTIES
385         TEXT_PROPERTIES
386         // #FontWork#
387         FONTWORK_PROPERTIES
388         SHAPE_DESCRIPTOR_PROPERTIES
389         MISC_OBJ_PROPERTIES
390         LINKTARGET_PROPERTIES
391         SPECIAL_CONNECTOR_PROPERTIES
392         SPECIAL_DIMENSIONING_PROPERTIES
393         SPECIAL_CIRCLE_PROPERTIES
394         SPECIAL_POLYGON_PROPERTIES
395         SPECIAL_POLYPOLYGON_PROPERTIES
396         SPECIAL_POLYPOLYGONBEZIER_PROPERTIES
397         SPECIAL_GRAPHOBJ_PROPERTIES
398         SPECIAL_3DSCENEOBJECT_PROPERTIES
399         MISC_3D_OBJ_PROPERTIES
400         SPECIAL_3DCUBEOBJECT_PROPERTIES
401         SPECIAL_3DSPHEREOBJECT_PROPERTIES
402         SPECIAL_3DLATHEOBJECT_PROPERTIES
403         SPECIAL_3DEXTRUDEOBJECT_PROPERTIES
404 
405         // #107245# New 3D properties which are possible for lathe and extrude 3d objects
406         SPECIAL_3DLATHEANDEXTRUDEOBJ_PROPERTIES
407 
408         SPECIAL_3DBACKSCALE_PROPERTIES
409         SPECIAL_3DPOLYGONOBJECT_PROPERTIES
410         { OUString("UserDefinedAttributes"), SDRATTR_XMLATTRIBUTES, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
411         { OUString("ParaUserDefinedAttributes"), EE_PARA_XMLATTRIBS, cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
412         { OUString(), 0, css::uno::Type(), 0, 0 }
413     };
414 
415     return aAllPropertyMap_Impl;
416 }
417 
418 static SfxItemPropertyMapEntry const * ImplGetSvxGroupPropertyMap()
419 {
420     static SfxItemPropertyMapEntry const aGroupPropertyMap_Impl[] =
421     {
422         SHAPE_DESCRIPTOR_PROPERTIES
423         MISC_OBJ_PROPERTIES
424         LINKTARGET_PROPERTIES
425         { OUString(), 0, css::uno::Type(), 0, 0 }
426     };
427 
428     return aGroupPropertyMap_Impl;
429 }
430 
431 static SfxItemPropertyMapEntry const * ImplGetSvxOle2PropertyMap()
432 {
433     static SfxItemPropertyMapEntry const aOle2PropertyMap_Impl[] =
434     {
435         // #i118485# Adding properties for line, fill, text, shadow, fontwork, rotate, shear
436         FILL_PROPERTIES
437         LINE_PROPERTIES
438         LINE_PROPERTIES_START_END
439         SHAPE_DESCRIPTOR_PROPERTIES
440         MISC_OBJ_PROPERTIES
441         LINKTARGET_PROPERTIES
442         GLOW_PROPERTIES
443         SOFTEDGE_PROPERTIES
444         SHADOW_PROPERTIES
445         TEXT_PROPERTIES
446         FONTWORK_PROPERTIES
447 
448         { OUString("ThumbnailGraphic"),         OWN_ATTR_THUMBNAIL          , cppu::UnoType<css::graphic::XGraphic>::get(), 0, 0 },
449         { OUString("Model"),                    OWN_ATTR_OLEMODEL           , cppu::UnoType<css::frame::XModel>::get(), css::beans::PropertyAttribute::READONLY, 0},
450         { OUString("EmbeddedObject"),           OWN_ATTR_OLE_EMBEDDED_OBJECT, cppu::UnoType<css::embed::XEmbeddedObject>::get(), css::beans::PropertyAttribute::READONLY, 0},
451         { OUString("EmbeddedObjectNoNewClient"),OWN_ATTR_OLE_EMBEDDED_OBJECT_NONEWCLIENT, cppu::UnoType<css::embed::XEmbeddedObject>::get(), css::beans::PropertyAttribute::READONLY, 0},
452         { OUString("OriginalSize"),             OWN_ATTR_OLESIZE            , cppu::UnoType<css::awt::Size>::get(), css::beans::PropertyAttribute::READONLY, 0},
453         { OUString("CLSID"),                    OWN_ATTR_CLSID              , cppu::UnoType<OUString>::get(), 0, 0 },
454         { OUString("IsInternal"),               OWN_ATTR_INTERNAL_OLE       , cppu::UnoType<bool>::get() , css::beans::PropertyAttribute::READONLY,     0},
455         { OUString("VisibleArea"),              OWN_ATTR_OLE_VISAREA        , cppu::UnoType<css::awt::Rectangle>::get(), 0, 0},
456         { OUString("Aspect"),                   OWN_ATTR_OLE_ASPECT         , cppu::UnoType<sal_Int64>::get(), 0, 0},
457         { OUString(UNO_NAME_OLE2_PERSISTNAME),  OWN_ATTR_PERSISTNAME        , cppu::UnoType<OUString>::get(), 0, 0 },
458         { OUString("LinkURL"),                  OWN_ATTR_OLE_LINKURL        , cppu::UnoType<OUString>::get(), 0, 0 },
459         { OUString(UNO_NAME_GRAPHOBJ_GRAPHIC),   OWN_ATTR_VALUE_GRAPHIC     , cppu::UnoType<css::graphic::XGraphic>::get(),     0,     0},
460         { OUString(), 0, css::uno::Type(), 0, 0 }
461     };
462 
463     return aOle2PropertyMap_Impl;
464 }
465 
466 static SfxItemPropertyMapEntry const * ImplGetSvxPluginPropertyMap()
467 {
468     static SfxItemPropertyMapEntry const aPluginPropertyMap_Impl[] =
469     {
470         { OUString("PluginMimeType"),           OWN_ATTR_PLUGIN_MIMETYPE    , cppu::UnoType<OUString>::get(),    0,  0},
471         { OUString("PluginURL"),                OWN_ATTR_PLUGIN_URL         , cppu::UnoType<OUString>::get(),    0,  0},
472         { OUString("PluginCommands"),           OWN_ATTR_PLUGIN_COMMANDS    , cppu::UnoType<css::uno::Sequence< css::beans::PropertyValue >>::get(), 0, 0},
473         { OUString("Transformation"),           OWN_ATTR_TRANSFORMATION     , cppu::UnoType<css::drawing::HomogenMatrix3>::get(), 0, 0 },
474         { OUString(UNO_NAME_MISC_OBJ_ZORDER),   OWN_ATTR_ZORDER             , cppu::UnoType<sal_Int32>::get(),      0,      0},
475         { OUString(UNO_NAME_MISC_OBJ_LAYERID),  SDRATTR_LAYERID             , cppu::UnoType<sal_Int16>::get(),      0,  0},
476         { OUString(UNO_NAME_MISC_OBJ_LAYERNAME),SDRATTR_LAYERNAME           , cppu::UnoType<OUString>::get(),    0,  0},
477         { OUString(UNO_NAME_LINKDISPLAYBITMAP), OWN_ATTR_LDBITMAP           , cppu::UnoType<css::awt::XBitmap>::get(), css::beans::PropertyAttribute::READONLY, 0},
478         { OUString(UNO_NAME_LINKDISPLAYNAME),   OWN_ATTR_LDNAME             , cppu::UnoType<OUString>::get(),   css::beans::PropertyAttribute::READONLY, 0},
479         { OUString(UNO_NAME_OLE2_METAFILE),     OWN_ATTR_METAFILE           , cppu::UnoType<css::uno::Sequence<sal_Int8>>::get(), css::beans::PropertyAttribute::READONLY, 0},
480         { OUString("ThumbnailGraphic"),         OWN_ATTR_THUMBNAIL          , cppu::UnoType<css::graphic::XGraphic>::get(), 0, 0 },
481         { OUString(UNO_NAME_MISC_OBJ_MOVEPROTECT),      SDRATTR_OBJMOVEPROTECT, cppu::UnoType<bool>::get(),0, 0},
482         { OUString(UNO_NAME_MISC_OBJ_SIZEPROTECT),      SDRATTR_OBJSIZEPROTECT, cppu::UnoType<bool>::get(),0, 0},
483         { OUString(UNO_NAME_OLE2_PERSISTNAME),  OWN_ATTR_PERSISTNAME        , cppu::UnoType<OUString>::get(), 0, 0 },
484         { OUString("LinkURL"),                  OWN_ATTR_OLE_LINKURL        , cppu::UnoType<OUString>::get(), 0, 0 },
485         { OUString(UNO_NAME_MISC_OBJ_BOUNDRECT), OWN_ATTR_BOUNDRECT,            cppu::UnoType<css::awt::Rectangle>::get(), css::beans::PropertyAttribute::READONLY, 0},
486         { OUString("VisibleArea"),              OWN_ATTR_OLE_VISAREA        , cppu::UnoType<css::awt::Rectangle>::get(), 0, 0},
487         { OUString("UINameSingular"),               OWN_ATTR_UINAME_SINGULAR        , ::cppu::UnoType<OUString>::get(),    css::beans::PropertyAttribute::READONLY,   0},
488         // #i68101#
489         { OUString(UNO_NAME_MISC_OBJ_TITLE),        OWN_ATTR_MISC_OBJ_TITLE         , cppu::UnoType<OUString>::get(),    0,  0},
490         { OUString(UNO_NAME_MISC_OBJ_DESCRIPTION),  OWN_ATTR_MISC_OBJ_DESCRIPTION   , cppu::UnoType<OUString>::get(),    0,  0},
491         { OUString(), 0, css::uno::Type(), 0, 0 }
492     };
493 
494     return aPluginPropertyMap_Impl;
495 }
496 
497 static SfxItemPropertyMapEntry const * ImplGetSvxFramePropertyMap()
498 {
499     //TODO/LATER: new properties for ScrollingMode and DefaultBorder
500     static SfxItemPropertyMapEntry const aFramePropertyMap_Impl[] =
501     {
502         { OUString("FrameURL"),                 OWN_ATTR_FRAME_URL          , cppu::UnoType<OUString>::get(),    0,  0},
503         { OUString("FrameName"),                OWN_ATTR_FRAME_NAME         , cppu::UnoType<OUString>::get(),    0,  0},
504         { OUString("FrameIsAutoScroll"),        OWN_ATTR_FRAME_ISAUTOSCROLL , cppu::UnoType<bool>::get() , css::beans::PropertyAttribute::MAYBEVOID, 0},
505         { OUString("FrameIsBorder"),            OWN_ATTR_FRAME_ISBORDER     , cppu::UnoType<bool>::get() , 0, 0},
506         { OUString("FrameMarginWidth"),         OWN_ATTR_FRAME_MARGIN_WIDTH , cppu::UnoType<sal_Int32>::get(),      0,      0},
507         { OUString("FrameMarginHeight"),        OWN_ATTR_FRAME_MARGIN_HEIGHT, cppu::UnoType<sal_Int32>::get(),      0,      0},
508         { OUString("Transformation"),           OWN_ATTR_TRANSFORMATION     , cppu::UnoType<css::drawing::HomogenMatrix3>::get(), 0, 0 },
509         { OUString(UNO_NAME_MISC_OBJ_ZORDER),   OWN_ATTR_ZORDER             , cppu::UnoType<sal_Int32>::get(),      0,      0},
510         { OUString(UNO_NAME_MISC_OBJ_LAYERID),  SDRATTR_LAYERID             , cppu::UnoType<sal_Int16>::get(),      0,  0},
511         { OUString(UNO_NAME_MISC_OBJ_LAYERNAME),SDRATTR_LAYERNAME           , cppu::UnoType<OUString>::get(),    0,  0},
512         { OUString(UNO_NAME_LINKDISPLAYBITMAP), OWN_ATTR_LDBITMAP           , cppu::UnoType<css::awt::XBitmap>::get(), css::beans::PropertyAttribute::READONLY, 0},
513         { OUString(UNO_NAME_LINKDISPLAYNAME),   OWN_ATTR_LDNAME             , cppu::UnoType<OUString>::get(),   css::beans::PropertyAttribute::READONLY, 0},
514         { OUString(UNO_NAME_OLE2_METAFILE),     OWN_ATTR_METAFILE           , cppu::UnoType<css::uno::Sequence<sal_Int8>>::get(), css::beans::PropertyAttribute::READONLY, 0},
515         { OUString("ThumbnailGraphic"),         OWN_ATTR_THUMBNAIL          , cppu::UnoType<css::graphic::XGraphic>::get(), 0, 0 },
516         { OUString(UNO_NAME_MISC_OBJ_MOVEPROTECT),      SDRATTR_OBJMOVEPROTECT, cppu::UnoType<bool>::get(),0, 0},
517         { OUString(UNO_NAME_MISC_OBJ_SIZEPROTECT),      SDRATTR_OBJSIZEPROTECT, cppu::UnoType<bool>::get(),0, 0},
518         { OUString(UNO_NAME_OLE2_PERSISTNAME),  OWN_ATTR_PERSISTNAME        , cppu::UnoType<OUString>::get(), 0, 0 },
519         { OUString("LinkURL"),                  OWN_ATTR_OLE_LINKURL        , cppu::UnoType<OUString>::get(), 0, 0 },
520         { OUString(UNO_NAME_MISC_OBJ_BOUNDRECT), OWN_ATTR_BOUNDRECT,            cppu::UnoType<css::awt::Rectangle>::get(), css::beans::PropertyAttribute::READONLY, 0},
521         { OUString("VisibleArea"),              OWN_ATTR_OLE_VISAREA        , cppu::UnoType<css::awt::Rectangle>::get(), 0, 0},
522         { OUString("UINameSingular"),               OWN_ATTR_UINAME_SINGULAR        , ::cppu::UnoType<OUString>::get(),    css::beans::PropertyAttribute::READONLY,   0},
523         // #i68101#
524         { OUString(UNO_NAME_MISC_OBJ_TITLE),        OWN_ATTR_MISC_OBJ_TITLE         , cppu::UnoType<OUString>::get(),    0,  0},
525         { OUString(UNO_NAME_MISC_OBJ_DESCRIPTION),  OWN_ATTR_MISC_OBJ_DESCRIPTION   , cppu::UnoType<OUString>::get(),    0,  0},
526         { OUString(), 0, css::uno::Type(), 0, 0 }
527     };
528 
529     return aFramePropertyMap_Impl;
530 }
531 
532 static SfxItemPropertyMapEntry const * ImplGetSvxAppletPropertyMap()
533 {
534     static SfxItemPropertyMapEntry const aAppletPropertyMap_Impl[] =
535     {
536         { OUString("AppletCodeBase"),           OWN_ATTR_APPLET_CODEBASE    , cppu::UnoType<OUString>::get(), 0, 0},
537         { OUString("AppletName"),               OWN_ATTR_APPLET_NAME        , cppu::UnoType<OUString>::get(), 0, 0},
538         { OUString("AppletCode"),               OWN_ATTR_APPLET_CODE        , cppu::UnoType<OUString>::get(), 0, 0},
539         { OUString("AppletCommands"),           OWN_ATTR_APPLET_COMMANDS    , cppu::UnoType<css::uno::Sequence< css::beans::PropertyValue >>::get(), 0, 0},
540         { OUString("AppletDocBase"),            OWN_ATTR_APPLET_DOCBASE     , cppu::UnoType<OUString>::get(), 0, 0},
541         { OUString("AppletIsScript"),           OWN_ATTR_APPLET_ISSCRIPT    , cppu::UnoType<bool>::get(), 0, 0 },
542         { OUString("Transformation"),           OWN_ATTR_TRANSFORMATION     , cppu::UnoType<css::drawing::HomogenMatrix3>::get(), 0, 0 },
543         { OUString(UNO_NAME_MISC_OBJ_ZORDER),   OWN_ATTR_ZORDER             , cppu::UnoType<sal_Int32>::get(),      0,      0},
544         { OUString(UNO_NAME_MISC_OBJ_LAYERID),  SDRATTR_LAYERID             , cppu::UnoType<sal_Int16>::get(),      0,  0},
545         { OUString(UNO_NAME_MISC_OBJ_LAYERNAME),SDRATTR_LAYERNAME           , cppu::UnoType<OUString>::get(),    0,  0},
546         { OUString(UNO_NAME_LINKDISPLAYBITMAP), OWN_ATTR_LDBITMAP           , cppu::UnoType<css::awt::XBitmap>::get(), css::beans::PropertyAttribute::READONLY, 0},
547         { OUString(UNO_NAME_LINKDISPLAYNAME),   OWN_ATTR_LDNAME             , cppu::UnoType<OUString>::get(),   css::beans::PropertyAttribute::READONLY, 0},
548         { OUString(UNO_NAME_OLE2_METAFILE),     OWN_ATTR_METAFILE           , cppu::UnoType<css::uno::Sequence<sal_Int8>>::get(), css::beans::PropertyAttribute::READONLY, 0},
549         { OUString("ThumbnailGraphic"),         OWN_ATTR_THUMBNAIL          , cppu::UnoType<css::graphic::XGraphic>::get(), 0, 0 },
550         { OUString(UNO_NAME_MISC_OBJ_MOVEPROTECT),      SDRATTR_OBJMOVEPROTECT, cppu::UnoType<bool>::get(),0, 0},
551         { OUString(UNO_NAME_MISC_OBJ_SIZEPROTECT),      SDRATTR_OBJSIZEPROTECT, cppu::UnoType<bool>::get(),0, 0},
552         { OUString(UNO_NAME_OLE2_PERSISTNAME),  OWN_ATTR_PERSISTNAME        , cppu::UnoType<OUString>::get(), 0, 0 },
553         { OUString("LinkURL"),                  OWN_ATTR_OLE_LINKURL        , cppu::UnoType<OUString>::get(), 0, 0 },
554         { OUString(UNO_NAME_MISC_OBJ_BOUNDRECT), OWN_ATTR_BOUNDRECT,            cppu::UnoType<css::awt::Rectangle>::get(), css::beans::PropertyAttribute::READONLY, 0},
555         { OUString("VisibleArea"),              OWN_ATTR_OLE_VISAREA        , cppu::UnoType<css::awt::Rectangle>::get(), 0, 0},
556         { OUString("UINameSingular"),               OWN_ATTR_UINAME_SINGULAR        , ::cppu::UnoType<OUString>::get(),    css::beans::PropertyAttribute::READONLY,   0},
557         // #i68101#
558         { OUString(UNO_NAME_MISC_OBJ_TITLE),        OWN_ATTR_MISC_OBJ_TITLE         , cppu::UnoType<OUString>::get(),    0,  0},
559         { OUString(UNO_NAME_MISC_OBJ_DESCRIPTION),  OWN_ATTR_MISC_OBJ_DESCRIPTION   , cppu::UnoType<OUString>::get(),    0,  0},
560         { OUString(), 0, css::uno::Type(), 0, 0 }
561     };
562 
563     return aAppletPropertyMap_Impl;
564 }
565 
566 static SfxItemPropertyMapEntry const * ImplGetSvxControlShapePropertyMap()
567 {
568     static SfxItemPropertyMapEntry const aControlPropertyMap_Impl[] =
569     {
570         // the following properties are mapped to the XControl Model of this shape
571         { OUString(UNO_NAME_EDIT_CHAR_FONTNAME),        0,  cppu::UnoType<OUString>::get(),  0, 0 },
572         { OUString(UNO_NAME_EDIT_CHAR_FONTSTYLENAME),   0,  cppu::UnoType<OUString>::get(),  0, 0 },
573         { OUString(UNO_NAME_EDIT_CHAR_FONTFAMILY),      0,  cppu::UnoType<sal_Int16>::get(),        0, 0 },
574         { OUString(UNO_NAME_EDIT_CHAR_FONTCHARSET),     0,  cppu::UnoType<sal_Int16>::get(),        0, 0 },
575         { OUString(UNO_NAME_EDIT_CHAR_HEIGHT),          0,  cppu::UnoType<float>::get(),            0, 0 },
576         { OUString(UNO_NAME_EDIT_CHAR_FONTPITCH),       0,  cppu::UnoType<sal_Int16>::get(),        0, 0 },
577         { OUString(UNO_NAME_EDIT_CHAR_POSTURE),         0,  cppu::UnoType<css::awt::FontSlant>::get(),0, 0 },
578         { OUString(UNO_NAME_EDIT_CHAR_WEIGHT),          0,  cppu::UnoType<float>::get(),            0, 0 },
579         { OUString(UNO_NAME_EDIT_CHAR_UNDERLINE),       0,  cppu::UnoType<sal_Int16>::get(),        0, 0 },
580         { OUString(UNO_NAME_EDIT_CHAR_STRIKEOUT),       0,  cppu::UnoType<sal_Int16>::get(),        0, 0},
581         { OUString(UNO_NAME_EDIT_CHAR_CASEMAP),         0,  cppu::UnoType<sal_Int16>::get(),        0, 0 },
582         { OUString(UNO_NAME_EDIT_CHAR_COLOR),           0,  cppu::UnoType<sal_Int32>::get(),        0, 0 },
583         { OUString("CharBackColor"),                    0,  cppu::UnoType<sal_Int32>::get(),        0, 0 },
584         { OUString("CharBackTransparent"),              0,  cppu::UnoType<bool>::get(),             0, 0 },
585         { OUString("CharRelief"),                       0,  cppu::UnoType<sal_Int16>::get(),        0, 0 },
586         { OUString("CharUnderlineColor"),               0,  cppu::UnoType<sal_Int32>::get(),        0, 0 },
587         { OUString("CharKerning"),                      0,  cppu::UnoType<sal_Int16>::get(),        0, 0 },
588         { OUString("CharWordMode"),                     0,  cppu::UnoType<bool>::get(),                    0, 0 },
589         { OUString(UNO_NAME_EDIT_PARA_ADJUST),          0,  cppu::UnoType<sal_Int16>::get(),        0, 0 },
590         { OUString("TextVerticalAdjust"),               0,  cppu::UnoType<TextVerticalAdjust>::get(), MAYBEVOID, 0 },
591         { OUString("ControlBackground"),                0,  cppu::UnoType<sal_Int32>::get(),        0, 0 },
592         { OUString("ControlBorder"),                    0,  cppu::UnoType<sal_Int16>::get(),        0, 0 },
593         { OUString("ControlBorderColor"),               0,  cppu::UnoType<sal_Int32>::get(),        0, 0 },
594         { OUString("ControlSymbolColor"),               0,  cppu::UnoType<sal_Int16>::get(),        0, 0 },
595         { OUString("ImageScaleMode"),                   0,  cppu::UnoType<sal_Int16>::get(),        0, 0 },
596         { OUString(UNO_NAME_MISC_OBJ_MOVEPROTECT),      SDRATTR_OBJMOVEPROTECT, cppu::UnoType<bool>::get(),0, 0},
597         { OUString(UNO_NAME_MISC_OBJ_SIZEPROTECT),      SDRATTR_OBJSIZEPROTECT, cppu::UnoType<bool>::get(),0, 0},
598         { OUString("ControlTextEmphasis"),              0,  cppu::UnoType<sal_Int16>::get(),        0, 0 },
599         { OUString("ControlWritingMode"),               0,  cppu::UnoType< sal_Int16 >::get(), 0, 0},
600         // the following properties are handled by SvxShape
601         { OUString("Transformation"),           OWN_ATTR_TRANSFORMATION     , cppu::UnoType<css::drawing::HomogenMatrix3>::get(), 0, 0 },
602         { OUString(UNO_NAME_MISC_OBJ_ZORDER),   OWN_ATTR_ZORDER             , cppu::UnoType<sal_Int32>::get(),      0,      0},
603         { OUString(UNO_NAME_MISC_OBJ_LAYERID),  SDRATTR_LAYERID             , cppu::UnoType<sal_Int16>::get(),      0,  0},
604         { OUString(UNO_NAME_MISC_OBJ_LAYERNAME),SDRATTR_LAYERNAME           , cppu::UnoType<OUString>::get(),    0,  0},
605         { OUString(UNO_NAME_LINKDISPLAYBITMAP), OWN_ATTR_LDBITMAP           , cppu::UnoType<css::awt::XBitmap>::get(), css::beans::PropertyAttribute::READONLY, 0},
606         { OUString(UNO_NAME_LINKDISPLAYNAME),   OWN_ATTR_LDNAME             , cppu::UnoType<OUString>::get(),   css::beans::PropertyAttribute::READONLY, 0},
607         { OUString("UserDefinedAttributes"),        SDRATTR_XMLATTRIBUTES,      cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
608         {OUString("ParaUserDefinedAttributes"),         EE_PARA_XMLATTRIBS,     cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
609         { OUString(UNO_NAME_MISC_OBJ_BOUNDRECT), OWN_ATTR_BOUNDRECT,            cppu::UnoType<css::awt::Rectangle>::get(), css::beans::PropertyAttribute::READONLY, 0},
610         { OUString("UINameSingular"),               OWN_ATTR_UINAME_SINGULAR        , ::cppu::UnoType<OUString>::get(),    css::beans::PropertyAttribute::READONLY,   0},
611         // #i68101#
612         { OUString(UNO_NAME_MISC_OBJ_TITLE),        OWN_ATTR_MISC_OBJ_TITLE         , cppu::UnoType<OUString>::get(),    0,  0},
613         { OUString(UNO_NAME_MISC_OBJ_DESCRIPTION),  OWN_ATTR_MISC_OBJ_DESCRIPTION   , cppu::UnoType<OUString>::get(),    0,  0},
614         // #i112587#
615         { OUString(UNO_NAME_MISC_OBJ_PRINTABLE),    SDRATTR_OBJPRINTABLE            , cppu::UnoType<bool>::get(),                      0,  0},
616         { OUString("Visible"),                      SDRATTR_OBJVISIBLE              , cppu::UnoType<bool>::get(),                      0,  0},
617         { OUString(UNO_NAME_MISC_OBJ_INTEROPGRABBAG),   OWN_ATTR_INTEROPGRABBAG,    cppu::UnoType<css::uno::Sequence< css::beans::PropertyValue >>::get(),  0,  0},
618         { OUString(), 0, css::uno::Type(), 0, 0 }
619     };
620 
621     return aControlPropertyMap_Impl;
622 }
623 
624 static SfxItemPropertyMapEntry const * ImplGetSvxPageShapePropertyMap()
625 {
626     static SfxItemPropertyMapEntry const aPageShapePropertyMap_Impl[] =
627     {
628         { OUString("PageNumber"),               OWN_ATTR_PAGE_NUMBER        , cppu::UnoType<sal_Int32>::get(),      0, 0},
629         { OUString("Transformation"),           OWN_ATTR_TRANSFORMATION     , cppu::UnoType<css::drawing::HomogenMatrix3>::get(), 0, 0 },
630         { OUString(UNO_NAME_MISC_OBJ_ZORDER),   OWN_ATTR_ZORDER             , cppu::UnoType<sal_Int32>::get(),      0, 0},
631         { OUString(UNO_NAME_MISC_OBJ_LAYERID),  SDRATTR_LAYERID             , cppu::UnoType<sal_Int16>::get(),      0, 0},
632         { OUString(UNO_NAME_MISC_OBJ_LAYERNAME),SDRATTR_LAYERNAME           , cppu::UnoType<OUString>::get(), 0, 0},
633         { OUString(UNO_NAME_LINKDISPLAYBITMAP), OWN_ATTR_LDBITMAP           , cppu::UnoType<css::awt::XBitmap>::get(), css::beans::PropertyAttribute::READONLY, 0},
634         { OUString(UNO_NAME_LINKDISPLAYNAME),   OWN_ATTR_LDNAME             , cppu::UnoType<OUString>::get(),   css::beans::PropertyAttribute::READONLY, 0},
635         { OUString(UNO_NAME_MISC_OBJ_MOVEPROTECT),      SDRATTR_OBJMOVEPROTECT, cppu::UnoType<bool>::get(),0, 0},
636         { OUString(UNO_NAME_MISC_OBJ_SIZEPROTECT),      SDRATTR_OBJSIZEPROTECT, cppu::UnoType<bool>::get(),0, 0},
637         { OUString(UNO_NAME_MISC_OBJ_BOUNDRECT), OWN_ATTR_BOUNDRECT,            cppu::UnoType<css::awt::Rectangle>::get(), css::beans::PropertyAttribute::READONLY, 0},
638         // #i68101#
639         { OUString(UNO_NAME_MISC_OBJ_TITLE),        OWN_ATTR_MISC_OBJ_TITLE         , cppu::UnoType<OUString>::get(),    0,  0},
640         { OUString(UNO_NAME_MISC_OBJ_DESCRIPTION),  OWN_ATTR_MISC_OBJ_DESCRIPTION   , cppu::UnoType<OUString>::get(),    0,  0},
641         { OUString(), 0, css::uno::Type(), 0, 0 }
642     };
643 
644     return aPageShapePropertyMap_Impl;
645 }
646 
647 static SfxItemPropertyMapEntry const * ImplGetSvxCaptionPropertyMap()
648 {
649     static SfxItemPropertyMapEntry const aCaptionPropertyMap_Impl[] =
650     {
651         { OUString("CaptionPoint"),             OWN_ATTR_CAPTION_POINT,     cppu::UnoType<css::awt::Point>::get(),   0, 0 },
652         { OUString("CaptionType"),              SDRATTR_CAPTIONTYPE,        cppu::UnoType<sal_Int16>::get(), 0, 0},
653         { OUString("CaptionIsFixedAngle"),      SDRATTR_CAPTIONFIXEDANGLE,  cppu::UnoType<bool>::get(), 0, 0},
654         { OUString("CaptionAngle"),             SDRATTR_CAPTIONANGLE,       cppu::UnoType<sal_Int32>::get(),    0,  0},
655         { OUString("CaptionGap"),               SDRATTR_CAPTIONGAP,         cppu::UnoType<sal_Int32>::get(),    0,  0, PropertyMoreFlags::METRIC_ITEM},
656         { OUString("CaptionEscapeDirection"),   SDRATTR_CAPTIONESCDIR,      cppu::UnoType<sal_Int32>::get(),    0,  0},
657         { OUString("CaptionIsEscapeRelative"),  SDRATTR_CAPTIONESCISREL,    cppu::UnoType<bool>::get(), 0, 0},
658         { OUString("CaptionEscapeRelative"),    SDRATTR_CAPTIONESCREL,      cppu::UnoType<sal_Int32>::get(),    0,  0},
659         { OUString("CaptionEscapeAbsolute"),    SDRATTR_CAPTIONESCABS,      cppu::UnoType<sal_Int32>::get(),    0,  0, PropertyMoreFlags::METRIC_ITEM},
660         { OUString("CaptionLineLength"),        SDRATTR_CAPTIONLINELEN,     cppu::UnoType<sal_Int32>::get(),    0,  0, PropertyMoreFlags::METRIC_ITEM},
661         { OUString("CaptionIsFitLineLength"),   SDRATTR_CAPTIONFITLINELEN,  cppu::UnoType<bool>::get(), 0, 0},
662         EDGERADIUS_PROPERTIES
663         FILL_PROPERTIES
664         LINE_PROPERTIES
665         LINE_PROPERTIES_START_END
666         SHAPE_DESCRIPTOR_PROPERTIES
667         MISC_OBJ_PROPERTIES
668         LINKTARGET_PROPERTIES
669         SHADOW_PROPERTIES
670         TEXT_PROPERTIES
671         // #FontWork#
672         FONTWORK_PROPERTIES
673         { OUString("UserDefinedAttributes"),        SDRATTR_XMLATTRIBUTES,      cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
674         {OUString("ParaUserDefinedAttributes"),         EE_PARA_XMLATTRIBS,     cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
675         { OUString(), 0, css::uno::Type(), 0, 0 }
676     };
677 
678     return aCaptionPropertyMap_Impl;
679 }
680 
681 static SfxItemPropertyMapEntry const * ImplGetSvxCustomShapePropertyMap()
682 {
683     static SfxItemPropertyMapEntry const aCustomShapePropertyMap_Impl[] =
684     {
685         { OUString("CustomShapeEngine"),            SDRATTR_CUSTOMSHAPE_ENGINE,         cppu::UnoType<OUString>::get(),  0, 0 },
686         { OUString("CustomShapeData"),          SDRATTR_CUSTOMSHAPE_DATA,               cppu::UnoType<OUString>::get(),  0, 0 },
687         { OUString("CustomShapeGeometry"),      SDRATTR_CUSTOMSHAPE_GEOMETRY,
688         cppu::UnoType<css::uno::Sequence< css::beans::PropertyValue >>::get(),  0, 0 },
689         FILL_PROPERTIES
690         LINE_PROPERTIES
691         LINE_PROPERTIES_START_END
692         SHAPE_DESCRIPTOR_PROPERTIES
693         MISC_OBJ_PROPERTIES
694         LINKTARGET_PROPERTIES
695         GLOW_PROPERTIES
696         SOFTEDGE_PROPERTIES
697         SHADOW_PROPERTIES
698         TEXT_PROPERTIES
699         {OUString("UserDefinedAttributes"),     SDRATTR_XMLATTRIBUTES,      cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
700         {OUString("ParaUserDefinedAttributes"), EE_PARA_XMLATTRIBS,         cppu::UnoType<css::container::XNameContainer>::get(),        0,     0},
701         { OUString(), 0, css::uno::Type(), 0, 0 }
702     };
703     return aCustomShapePropertyMap_Impl;
704 }
705 
706 static SfxItemPropertyMapEntry const * ImplGetSvxMediaShapePropertyMap()
707 {
708     static SfxItemPropertyMapEntry const aMediaShapePropertyMap_Impl[] =
709     {
710         { OUString(UNO_NAME_MISC_OBJ_ZORDER), OWN_ATTR_ZORDER, cppu::UnoType<sal_Int32>::get(), 0, 0},
711         { OUString(UNO_NAME_MISC_OBJ_LAYERID), SDRATTR_LAYERID, cppu::UnoType<sal_Int16>::get(), 0, 0},
712         { OUString(UNO_NAME_MISC_OBJ_LAYERNAME), SDRATTR_LAYERNAME, cppu::UnoType<OUString>::get(), 0, 0},
713         { OUString(UNO_NAME_LINKDISPLAYBITMAP), OWN_ATTR_LDBITMAP, cppu::UnoType<css::awt::XBitmap>::get(), css::beans::PropertyAttribute::READONLY, 0},
714         { OUString(UNO_NAME_LINKDISPLAYNAME), OWN_ATTR_LDNAME, cppu::UnoType<OUString>::get(),  css::beans::PropertyAttribute::READONLY, 0},
715         { OUString("Transformation"), OWN_ATTR_TRANSFORMATION, cppu::UnoType<css::drawing::HomogenMatrix3>::get(), 0, 0 },
716         { OUString("MediaURL"), OWN_ATTR_MEDIA_URL, cppu::UnoType<OUString>::get(), 0, 0},
717         { OUString("PreferredSize"), OWN_ATTR_MEDIA_PREFERREDSIZE, cppu::UnoType<css::awt::Size>::get(), css::beans::PropertyAttribute::READONLY, 0},
718         { OUString("Loop"), OWN_ATTR_MEDIA_LOOP, cppu::UnoType<sal_Bool>::get(), 0, 0},
719         { OUString("Mute"), OWN_ATTR_MEDIA_MUTE, cppu::UnoType<sal_Bool>::get(), 0, 0},
720         { OUString("VolumeDB"), OWN_ATTR_MEDIA_VOLUMEDB, cppu::UnoType<sal_Int16>::get(), 0, 0},
721         { OUString("Zoom"), OWN_ATTR_MEDIA_ZOOM, cppu::UnoType<css::media::ZoomLevel>::get(), 0, 0},
722         { OUString(UNO_NAME_MISC_OBJ_MOVEPROTECT), SDRATTR_OBJMOVEPROTECT, cppu::UnoType<bool>::get(),0, 0},
723         { OUString(UNO_NAME_MISC_OBJ_SIZEPROTECT), SDRATTR_OBJSIZEPROTECT, cppu::UnoType<bool>::get(),0, 0},
724         { OUString(UNO_NAME_MISC_OBJ_BOUNDRECT), OWN_ATTR_BOUNDRECT, cppu::UnoType<css::awt::Rectangle>::get(), css::beans::PropertyAttribute::READONLY, 0},
725         { OUString("UINameSingular"),               OWN_ATTR_UINAME_SINGULAR        , ::cppu::UnoType<OUString>::get(),    css::beans::PropertyAttribute::READONLY,   0},
726         // #i68101#
727         { OUString(UNO_NAME_MISC_OBJ_TITLE),        OWN_ATTR_MISC_OBJ_TITLE         , cppu::UnoType<OUString>::get(),    0,  0},
728         { OUString(UNO_NAME_MISC_OBJ_DESCRIPTION),  OWN_ATTR_MISC_OBJ_DESCRIPTION   , cppu::UnoType<OUString>::get(),    0,  0},
729         {OUString("PrivateStream"), OWN_ATTR_MEDIA_STREAM, cppu::UnoType<css::io::XInputStream>::get(), 0, 0},
730         {OUString("PrivateTempFileURL"), OWN_ATTR_MEDIA_TEMPFILEURL, cppu::UnoType<OUString>::get(), css::beans::PropertyAttribute::READONLY, 0},
731         { OUString("MediaMimeType"), OWN_ATTR_MEDIA_MIMETYPE, cppu::UnoType<OUString>::get(), 0, 0},
732         { OUString("FallbackGraphic"), OWN_ATTR_FALLBACK_GRAPHIC, cppu::UnoType<css::graphic::XGraphic>::get(), css::beans::PropertyAttribute::READONLY, 0},
733         { OUString(), 0, css::uno::Type(), 0, 0 }
734     };
735 
736     return aMediaShapePropertyMap_Impl;
737 }
738 
739 static SfxItemPropertyMapEntry const * ImplGetSvxTableShapePropertyMap()
740 {
741     static SfxItemPropertyMapEntry const  aTableShapePropertyMap_Impl[] =
742     {
743         { OUString(UNO_NAME_MISC_OBJ_ZORDER),       OWN_ATTR_ZORDER, cppu::UnoType<sal_Int32>::get(), 0, 0},
744         { OUString(UNO_NAME_MISC_OBJ_LAYERID),      SDRATTR_LAYERID, cppu::UnoType<sal_Int16>::get(), 0,    0},
745         { OUString(UNO_NAME_MISC_OBJ_LAYERNAME),    SDRATTR_LAYERNAME, cppu::UnoType<OUString>::get(), 0, 0},
746         { OUString(UNO_NAME_LINKDISPLAYBITMAP),     OWN_ATTR_LDBITMAP, cppu::UnoType<css::awt::XBitmap>::get(), css::beans::PropertyAttribute::READONLY, 0},
747         { OUString(UNO_NAME_LINKDISPLAYNAME),       OWN_ATTR_LDNAME, cppu::UnoType<OUString>::get(),    css::beans::PropertyAttribute::READONLY, 0},
748         { OUString("Transformation"),               OWN_ATTR_TRANSFORMATION, cppu::UnoType<css::drawing::HomogenMatrix3>::get(), 0, 0 },
749         { OUString(UNO_NAME_MISC_OBJ_MOVEPROTECT),  SDRATTR_OBJMOVEPROTECT, cppu::UnoType<bool>::get(),0, 0},
750         { OUString(UNO_NAME_MISC_OBJ_SIZEPROTECT),  SDRATTR_OBJSIZEPROTECT, cppu::UnoType<bool>::get(),0, 0},
751         { OUString(UNO_NAME_MISC_OBJ_BOUNDRECT),    OWN_ATTR_BOUNDRECT, cppu::UnoType<css::awt::Rectangle>::get(), css::beans::PropertyAttribute::READONLY, 0},
752         { OUString(UNO_NAME_MISC_OBJ_NAME),         SDRATTR_OBJECTNAME, cppu::UnoType<OUString>::get(),    0,      0},
753         { OUString("UINameSingular"),               OWN_ATTR_UINAME_SINGULAR        , ::cppu::UnoType<OUString>::get(),    css::beans::PropertyAttribute::READONLY,   0},
754         { OUString(UNO_NAME_MISC_OBJ_TITLE),        OWN_ATTR_MISC_OBJ_TITLE         , cppu::UnoType<OUString>::get(),    0,  0},
755         { OUString(UNO_NAME_MISC_OBJ_DESCRIPTION),  OWN_ATTR_MISC_OBJ_DESCRIPTION   , cppu::UnoType<OUString>::get(),    0,  0},
756         { OUString("Model"),                        OWN_ATTR_OLEMODEL               , cppu::UnoType<css::table::XTable>::get(), css::beans::PropertyAttribute::READONLY, 0},
757         { OUString("TableTemplate"),                OWN_ATTR_TABLETEMPLATE          , cppu::UnoType<css::container::XIndexAccess>::get(), 0, 0},
758         { OUString("UseFirstRowStyle"),             OWN_ATTR_TABLETEMPLATE_FIRSTROW, cppu::UnoType<bool>::get(),0, 0},
759         { OUString("UseLastRowStyle"),              OWN_ATTR_TABLETEMPLATE_LASTROW, cppu::UnoType<bool>::get(),0, 0},
760         { OUString("UseFirstColumnStyle"),          OWN_ATTR_TABLETEMPLATE_FIRSTCOLUMN, cppu::UnoType<bool>::get(),0, 0},
761         { OUString("UseLastColumnStyle"),           OWN_ATTR_TABLETEMPLATE_LASTCOLUMN, cppu::UnoType<bool>::get(),0, 0},
762         { OUString("UseBandingRowStyle"),           OWN_ATTR_TABLETEMPLATE_BANDINGROWS, cppu::UnoType<bool>::get(),0, 0},
763         { OUString("UseBandingColumnStyle"),        OWN_ATTR_TABLETEMPLATE_BANDINGCOULUMNS, cppu::UnoType<bool>::get(),0, 0},
764         { OUString("ReplacementGraphic"),           OWN_ATTR_REPLACEMENT_GRAPHIC, cppu::UnoType<css::graphic::XGraphic>::get(), css::beans::PropertyAttribute::READONLY, 0},
765         { OUString(), 0, css::uno::Type(), 0, 0 }
766     };
767 
768     return aTableShapePropertyMap_Impl;
769 }
770 
771 static comphelper::PropertyMapEntry const * ImplGetSvxDrawingDefaultsPropertyMap()
772 {
773     static comphelper::PropertyMapEntry const aSvxDrawingDefaultsPropertyMap_Impl[] =
774     {
775         GLOW_PROPERTIES
776         SOFTEDGE_PROPERTIES
777         SHADOW_PROPERTIES
778         LINE_PROPERTIES_DEFAULTS
779         FILL_PROPERTIES_BMP
780         FILL_PROPERTIES_DEFAULTS
781         EDGERADIUS_PROPERTIES
782         TEXT_PROPERTIES_DEFAULTS
783         CONNECTOR_PROPERTIES
784         SPECIAL_DIMENSIONING_PROPERTIES_DEFAULTS
785         MISC_3D_OBJ_PROPERTIES
786         SPECIAL_3DBACKSCALE_PROPERTIES
787         { OUString(), 0, css::uno::Type(), 0, 0 }
788     };
789 
790     return aSvxDrawingDefaultsPropertyMap_Impl;
791 }
792 
793 static comphelper::PropertyMapEntry const * ImplGetAdditionalWriterDrawingDefaultsPropertyMap()
794 {
795     static comphelper::PropertyMapEntry const aSvxAdditionalDefaultsPropertyMap_Impl[] =
796     {
797         { OUString("IsFollowingTextFlow"), SID_SW_FOLLOW_TEXT_FLOW, cppu::UnoType<bool>::get(), 0, 0},
798         { OUString(), 0, css::uno::Type(), 0, 0 }
799     };
800 
801     return aSvxAdditionalDefaultsPropertyMap_Impl;
802 }
803 
804 typedef std::unordered_map< OUString, sal_uInt32 > UHashMapImpl;
805 
806 namespace {
807 
808 const UHashMapImpl& GetUHashImpl()
809 {
810     static UHashMapImpl const aImpl
811     {
812             { "com.sun.star.drawing.RectangleShape",       OBJ_RECT },
813             { "com.sun.star.drawing.EllipseShape",         OBJ_CIRC },
814             { "com.sun.star.drawing.ControlShape",         OBJ_UNO  },
815             { "com.sun.star.drawing.ConnectorShape",       OBJ_EDGE },
816             { "com.sun.star.drawing.MeasureShape",         OBJ_MEASURE },
817             { "com.sun.star.drawing.LineShape",            OBJ_LINE },
818             { "com.sun.star.drawing.PolyPolygonShape",     OBJ_POLY },
819             { "com.sun.star.drawing.PolyLineShape",        OBJ_PLIN },
820             { "com.sun.star.drawing.OpenBezierShape",      OBJ_PATHLINE },
821             { "com.sun.star.drawing.ClosedBezierShape",    OBJ_PATHFILL },
822             { "com.sun.star.drawing.OpenFreeHandShape",    OBJ_FREELINE },
823             { "com.sun.star.drawing.ClosedFreeHandShape",  OBJ_FREEFILL },
824             { "com.sun.star.drawing.PolyPolygonPathShape", OBJ_PATHPOLY },
825             { "com.sun.star.drawing.PolyLinePathShape",    OBJ_PATHPLIN },
826             { "com.sun.star.drawing.GraphicObjectShape",   OBJ_GRAF },
827             { "com.sun.star.drawing.GroupShape",           OBJ_GRUP },
828             { "com.sun.star.drawing.TextShape",            OBJ_TEXT },
829             { "com.sun.star.drawing.OLE2Shape",            OBJ_OLE2 },
830             { "com.sun.star.drawing.PageShape",            OBJ_PAGE },
831             { "com.sun.star.drawing.CaptionShape",         OBJ_CAPTION },
832             { "com.sun.star.drawing.FrameShape",           OBJ_FRAME },
833             { "com.sun.star.drawing.PluginShape",          OBJ_OLE2_PLUGIN },
834             { "com.sun.star.drawing.AppletShape",          OBJ_OLE2_APPLET },
835             { "com.sun.star.drawing.CustomShape",          OBJ_CUSTOMSHAPE },
836             { "com.sun.star.drawing.MediaShape",           OBJ_MEDIA },
837 
838             { "com.sun.star.drawing.Shape3DSceneObject",   E3D_SCENE_ID  | E3D_INVENTOR_FLAG },
839             { "com.sun.star.drawing.Shape3DCubeObject",    E3D_CUBEOBJ_ID    | E3D_INVENTOR_FLAG },
840             { "com.sun.star.drawing.Shape3DSphereObject",  E3D_SPHEREOBJ_ID  | E3D_INVENTOR_FLAG },
841             { "com.sun.star.drawing.Shape3DLatheObject",   E3D_LATHEOBJ_ID   | E3D_INVENTOR_FLAG },
842             { "com.sun.star.drawing.Shape3DExtrudeObject", E3D_EXTRUDEOBJ_ID | E3D_INVENTOR_FLAG },
843             { "com.sun.star.drawing.Shape3DPolygonObject", E3D_POLYGONOBJ_ID | E3D_INVENTOR_FLAG },
844     };
845 
846     return aImpl;
847 }
848 
849 }
850 
851 
852 OUString UHashMap::getNameFromId(sal_uInt32 nId)
853 {
854     const UHashMapImpl &rMap = GetUHashImpl();
855 
856     auto it = std::find_if(rMap.begin(), rMap.end(),
857         [nId](const UHashMapImpl::value_type& rEntry) { return rEntry.second == nId; });
858     if (it != rMap.end())
859         return it->first;
860     OSL_FAIL("[CL] unknown SdrObject identifier");
861     return OUString();
862 }
863 
864 uno::Sequence< OUString > UHashMap::getServiceNames()
865 {
866     return comphelper::mapKeysToSequence( GetUHashImpl() );
867 }
868 
869 sal_uInt32 UHashMap::getId( const OUString& rCompareString )
870 {
871     const UHashMapImpl &rMap = GetUHashImpl();
872     UHashMapImpl::const_iterator it = rMap.find( rCompareString );
873     if( it == rMap.end() )
874         return UHASHMAP_NOTFOUND;
875     else
876         return it->second;
877 }
878 
879 namespace {
880 
881 struct theSvxMapProvider :
882     public rtl::Static<SvxUnoPropertyMapProvider, theSvxMapProvider>
883 {
884 };
885 
886 }
887 
888 SvxUnoPropertyMapProvider& getSvxMapProvider()
889 {
890     return theSvxMapProvider::get();
891 }
892 
893 
894 SvxUnoPropertyMapProvider::SvxUnoPropertyMapProvider()
895 {
896     for(sal_uInt16 i=0;i<SVXMAP_END; i++)
897     {
898         aSetArr[i] = nullptr;
899         aMapArr[i] = nullptr;
900     }
901 }
902 
903 SvxUnoPropertyMapProvider::~SvxUnoPropertyMapProvider()
904 {
905 }
906 
907 
908 const SfxItemPropertyMapEntry* SvxUnoPropertyMapProvider::GetMap(sal_uInt16 nPropertyId)
909 {
910     DBG_ASSERT(nPropertyId < SVXMAP_END, "Id ?" );
911     if(!aMapArr[nPropertyId]) {
912         switch(nPropertyId) {
913             case SVXMAP_SHAPE: aMapArr[SVXMAP_SHAPE]=ImplGetSvxShapePropertyMap(); break;
914             case SVXMAP_CONNECTOR: aMapArr[SVXMAP_CONNECTOR]=ImplGetSvxConnectorPropertyMap(); break;
915             case SVXMAP_DIMENSIONING: aMapArr[SVXMAP_DIMENSIONING]=ImplGetSvxDimensioningPropertyMap(); break;
916             case SVXMAP_CIRCLE: aMapArr[SVXMAP_CIRCLE]=ImplGetSvxCirclePropertyMap(); break;
917             case SVXMAP_POLYPOLYGON: aMapArr[SVXMAP_POLYPOLYGON]=ImplGetSvxPolyPolygonPropertyMap(); break;
918             case SVXMAP_GRAPHICOBJECT: aMapArr[SVXMAP_GRAPHICOBJECT]=ImplGetSvxGraphicObjectPropertyMap(); break;
919             case SVXMAP_3DSCENEOBJECT: aMapArr[SVXMAP_3DSCENEOBJECT]=ImplGetSvx3DSceneObjectPropertyMap(); break;
920             case SVXMAP_3DCUBEOBJECT: aMapArr[SVXMAP_3DCUBEOBJECT]=ImplGetSvx3DCubeObjectPropertyMap(); break;
921             case SVXMAP_3DSPHEREOBJECT: aMapArr[SVXMAP_3DSPHEREOBJECT]=ImplGetSvx3DSphereObjectPropertyMap(); break;
922             case SVXMAP_3DLATHEOBJECT: aMapArr[SVXMAP_3DLATHEOBJECT]=ImplGetSvx3DLatheObjectPropertyMap(); break;
923             case SVXMAP_3DEXTRUDEOBJECT: aMapArr[SVXMAP_3DEXTRUDEOBJECT]=ImplGetSvx3DExtrudeObjectPropertyMap(); break;
924             case SVXMAP_3DPOLYGONOBJECT: aMapArr[SVXMAP_3DPOLYGONOBJECT]=ImplGetSvx3DPolygonObjectPropertyMap(); break;
925             case SVXMAP_ALL: aMapArr[SVXMAP_ALL]=ImplGetSvxAllPropertyMap(); break;
926             case SVXMAP_GROUP: aMapArr[SVXMAP_GROUP]=ImplGetSvxGroupPropertyMap(); break;
927             case SVXMAP_CAPTION: aMapArr[SVXMAP_CAPTION]=ImplGetSvxCaptionPropertyMap(); break;
928             case SVXMAP_OLE2: aMapArr[SVXMAP_OLE2]=ImplGetSvxOle2PropertyMap(); break;
929             case SVXMAP_PLUGIN: aMapArr[SVXMAP_PLUGIN]=ImplGetSvxPluginPropertyMap(); break;
930             case SVXMAP_FRAME: aMapArr[SVXMAP_FRAME]=ImplGetSvxFramePropertyMap(); break;
931             case SVXMAP_APPLET: aMapArr[SVXMAP_APPLET]=ImplGetSvxAppletPropertyMap(); break;
932             case SVXMAP_CONTROL: aMapArr[SVXMAP_CONTROL]=ImplGetSvxControlShapePropertyMap(); break;
933             case SVXMAP_TEXT: aMapArr[SVXMAP_TEXT]=ImplGetSvxTextShapePropertyMap(); break;
934             case SVXMAP_CUSTOMSHAPE: aMapArr[SVXMAP_CUSTOMSHAPE]=ImplGetSvxCustomShapePropertyMap(); break;
935             case SVXMAP_MEDIA: aMapArr[SVXMAP_MEDIA]=ImplGetSvxMediaShapePropertyMap(); break;
936             case SVXMAP_TABLE: aMapArr[SVXMAP_TABLE]=ImplGetSvxTableShapePropertyMap(); break;
937             case SVXMAP_PAGE: aMapArr[SVXMAP_PAGE] = ImplGetSvxPageShapePropertyMap(); break;
938 
939             default:
940                 OSL_FAIL( "Unknown property map for SvxUnoPropertyMapProvider!" );
941         }
942 //      Sort(nPropertyId);
943     }
944     return aMapArr[nPropertyId];
945 }
946 const SvxItemPropertySet* SvxUnoPropertyMapProvider::GetPropertySet(sal_uInt16 nPropertyId, SfxItemPool& rPool)
947 {
948     if( !aSetArr[nPropertyId] )
949         aSetArr[nPropertyId].reset(new SvxItemPropertySet( GetMap( nPropertyId ), rPool ));
950     return aSetArr[nPropertyId].get();
951 }
952 
953 /** maps the vcl MapUnit enum to an API constant MeasureUnit.
954     Returns false if conversion is not supported.
955 */
956 bool SvxMapUnitToMeasureUnit( const MapUnit eVcl, short& eApi ) throw()
957 {
958     switch( eVcl )
959     {
960     case MapUnit::Map100thMM:      eApi = util::MeasureUnit::MM_100TH;     break;
961     case MapUnit::Map10thMM:       eApi = util::MeasureUnit::MM_10TH;      break;
962     case MapUnit::MapMM:            eApi = util::MeasureUnit::MM;           break;
963     case MapUnit::MapCM:            eApi = util::MeasureUnit::CM;           break;
964     case MapUnit::Map1000thInch:   eApi = util::MeasureUnit::INCH_1000TH;  break;
965     case MapUnit::Map100thInch:    eApi = util::MeasureUnit::INCH_100TH;   break;
966     case MapUnit::Map10thInch:     eApi = util::MeasureUnit::INCH_10TH;    break;
967     case MapUnit::MapInch:          eApi = util::MeasureUnit::INCH;         break;
968     case MapUnit::MapPoint:         eApi = util::MeasureUnit::POINT;        break;
969     case MapUnit::MapTwip:          eApi = util::MeasureUnit::TWIP;         break;
970     case MapUnit::MapRelative:      eApi = util::MeasureUnit::PERCENT;      break;
971     default:
972         return false;
973     }
974 
975     return true;
976 }
977 
978 /** maps the API constant MeasureUnit to a vcl MapUnit enum.
979     Returns false if conversion is not supported.
980 */
981 
982 bool SvxMeasureUnitToFieldUnit( const short eApi, FieldUnit& eVcl ) throw()
983 {
984     switch( eApi )
985     {
986     case util::MeasureUnit::MM:         eVcl = FieldUnit::MM;        break;
987     case util::MeasureUnit::CM:         eVcl = FieldUnit::CM;        break;
988     case util::MeasureUnit::M:          eVcl = FieldUnit::M;         break;
989     case util::MeasureUnit::KM:         eVcl = FieldUnit::KM;        break;
990     case util::MeasureUnit::TWIP:       eVcl = FieldUnit::TWIP;      break;
991     case util::MeasureUnit::POINT:      eVcl = FieldUnit::POINT;     break;
992     case util::MeasureUnit::PICA:       eVcl = FieldUnit::PICA;      break;
993     case util::MeasureUnit::INCH:       eVcl = FieldUnit::INCH;      break;
994     case util::MeasureUnit::FOOT:       eVcl = FieldUnit::FOOT;      break;
995     case util::MeasureUnit::MILE:       eVcl = FieldUnit::MILE;      break;
996     case util::MeasureUnit::PERCENT:    eVcl = FieldUnit::PERCENT;   break;
997     case util::MeasureUnit::MM_100TH:   eVcl = FieldUnit::MM_100TH;  break;
998     default:
999         return false;
1000     }
1001 
1002     return true;
1003 }
1004 
1005 /** maps the vcl MapUnit enum to an API constant MeasureUnit.
1006     Returns false if conversion is not supported.
1007 */
1008 bool SvxFieldUnitToMeasureUnit( const FieldUnit eVcl, short& eApi ) throw()
1009 {
1010     switch( eVcl )
1011     {
1012     case FieldUnit::MM:          eApi = util::MeasureUnit::MM;       break;
1013     case FieldUnit::CM:          eApi = util::MeasureUnit::CM;       break;
1014     case FieldUnit::M:           eApi = util::MeasureUnit::M;        break;
1015     case FieldUnit::KM:          eApi = util::MeasureUnit::KM;       break;
1016     case FieldUnit::TWIP:        eApi = util::MeasureUnit::TWIP;     break;
1017     case FieldUnit::POINT:       eApi = util::MeasureUnit::POINT;    break;
1018     case FieldUnit::PICA:        eApi = util::MeasureUnit::PICA;     break;
1019     case FieldUnit::INCH:        eApi = util::MeasureUnit::INCH;     break;
1020     case FieldUnit::FOOT:        eApi = util::MeasureUnit::FOOT;     break;
1021     case FieldUnit::MILE:        eApi = util::MeasureUnit::MILE;     break;
1022     case FieldUnit::PERCENT:     eApi = util::MeasureUnit::PERCENT;  break;
1023     case FieldUnit::MM_100TH:    eApi = util::MeasureUnit::MM_100TH; break;
1024     default:
1025         return false;
1026     }
1027 
1028     return true;
1029 }
1030 
1031 static const char* RID_SVXSTR_BMP_DEF[] =
1032 {
1033     RID_SVXSTR_BMP0_DEF,
1034     RID_SVXSTR_BMP1_DEF,
1035     RID_SVXSTR_BMP2_DEF,
1036     RID_SVXSTR_BMP3_DEF,
1037     RID_SVXSTR_BMP4_DEF,
1038     RID_SVXSTR_BMP5_DEF,
1039     RID_SVXSTR_BMP6_DEF,
1040     RID_SVXSTR_BMP7_DEF,
1041     RID_SVXSTR_BMP8_DEF,
1042     RID_SVXSTR_BMP9_DEF,
1043     RID_SVXSTR_BMP10_DEF,
1044     RID_SVXSTR_BMP11_DEF,
1045     RID_SVXSTR_BMP12_DEF,
1046     RID_SVXSTR_BMP13_DEF,
1047     RID_SVXSTR_BMP14_DEF,
1048     RID_SVXSTR_BMP15_DEF,
1049     RID_SVXSTR_BMP16_DEF,
1050     RID_SVXSTR_BMP17_DEF,
1051     RID_SVXSTR_BMP18_DEF,
1052     RID_SVXSTR_BMP19_DEF,
1053     RID_SVXSTR_BMP20_DEF,
1054     RID_SVXSTR_BMP21_DEF,
1055     RID_SVXSTR_BMP22_DEF,
1056     RID_SVXSTR_BMP23_DEF,
1057     RID_SVXSTR_BMP24_DEF,
1058     RID_SVXSTR_BMP25_DEF,
1059     RID_SVXSTR_BMP26_DEF,
1060     RID_SVXSTR_BMP27_DEF,
1061     RID_SVXSTR_BMP28_DEF,
1062     RID_SVXSTR_BMP29_DEF,
1063     RID_SVXSTR_BMP30_DEF,
1064     RID_SVXSTR_BMP31_DEF,
1065     RID_SVXSTR_BMP32_DEF,
1066     RID_SVXSTR_BMP33_DEF,
1067     RID_SVXSTR_BMP34_DEF,
1068     RID_SVXSTR_BMP35_DEF,
1069     RID_SVXSTR_BMP36_DEF,
1070     RID_SVXSTR_BMP37_DEF,
1071     RID_SVXSTR_BMP38_DEF,
1072     RID_SVXSTR_BMP39_DEF,
1073     RID_SVXSTR_BMP40_DEF,
1074     RID_SVXSTR_BMP41_DEF,
1075     RID_SVXSTR_BMP42_DEF,
1076     RID_SVXSTR_BMP43_DEF,
1077     RID_SVXSTR_BMP44_DEF,
1078     RID_SVXSTR_BMP45_DEF,
1079     RID_SVXSTR_BMP46_DEF,
1080     RID_SVXSTR_BMP47_DEF,
1081     RID_SVXSTR_BMP48_DEF,
1082     RID_SVXSTR_BMP49_DEF,
1083     RID_SVXSTR_BMP50_DEF,
1084     RID_SVXSTR_BMP51_DEF,
1085     RID_SVXSTR_BMP52_DEF,
1086     RID_SVXSTR_BMP53_DEF,
1087     RID_SVXSTR_BMP54_DEF,
1088     RID_SVXSTR_BMP55_DEF,
1089     RID_SVXSTR_BMP56_DEF,
1090     RID_SVXSTR_BMP57_DEF,
1091     RID_SVXSTR_BMP58_DEF,
1092     RID_SVXSTR_BMP59_DEF,
1093     RID_SVXSTR_BMP60_DEF,
1094     RID_SVXSTR_BMP61_DEF,
1095     RID_SVXSTR_BMP62_DEF,
1096     RID_SVXSTR_BMP63_DEF,
1097     RID_SVXSTR_BMP64_DEF,
1098     RID_SVXSTR_BMP65_DEF,
1099     RID_SVXSTR_BMP66_DEF,
1100     RID_SVXSTR_BMP67_DEF,
1101     RID_SVXSTR_BMP68_DEF,
1102     RID_SVXSTR_BMP69_DEF,
1103     RID_SVXSTR_BMP70_DEF,
1104     RID_SVXSTR_BMP71_DEF,
1105     RID_SVXSTR_BMP72_DEF,
1106     RID_SVXSTR_BMP73_DEF,
1107     RID_SVXSTR_BMP74_DEF,
1108     RID_SVXSTR_BMP75_DEF,
1109     RID_SVXSTR_BMP76_DEF,
1110     RID_SVXSTR_BMP77_DEF,
1111     RID_SVXSTR_BMP78_DEF,
1112     RID_SVXSTR_BMP79_DEF,
1113     RID_SVXSTR_BMP80_DEF,
1114     RID_SVXSTR_BMP81_DEF,
1115     RID_SVXSTR_BMP82_DEF,
1116     RID_SVXSTR_BMP83_DEF,
1117     RID_SVXSTR_BMP84_DEF,
1118     RID_SVXSTR_BMP85_DEF,
1119     RID_SVXSTR_BMP86_DEF,
1120     RID_SVXSTR_BMP87_DEF,
1121     RID_SVXSTR_BMP88_DEF,
1122     RID_SVXSTR_BMP89_DEF,
1123     RID_SVXSTR_BMP90_DEF,
1124     RID_SVXSTR_BMP91_DEF,
1125     RID_SVXSTR_BMP92_DEF
1126 };
1127 
1128 static const char* RID_SVXSTR_BMP[] =
1129 {
1130     RID_SVXSTR_BMP0,
1131     RID_SVXSTR_BMP1,
1132     RID_SVXSTR_BMP2,
1133     RID_SVXSTR_BMP3,
1134     RID_SVXSTR_BMP4,
1135     RID_SVXSTR_BMP5,
1136     RID_SVXSTR_BMP6,
1137     RID_SVXSTR_BMP7,
1138     RID_SVXSTR_BMP8,
1139     RID_SVXSTR_BMP9,
1140     RID_SVXSTR_BMP10,
1141     RID_SVXSTR_BMP11,
1142     RID_SVXSTR_BMP12,
1143     RID_SVXSTR_BMP13,
1144     RID_SVXSTR_BMP14,
1145     RID_SVXSTR_BMP15,
1146     RID_SVXSTR_BMP16,
1147     RID_SVXSTR_BMP17,
1148     RID_SVXSTR_BMP18,
1149     RID_SVXSTR_BMP19,
1150     RID_SVXSTR_BMP20,
1151     RID_SVXSTR_BMP21,
1152     RID_SVXSTR_BMP22,
1153     RID_SVXSTR_BMP23,
1154     RID_SVXSTR_BMP24,
1155     RID_SVXSTR_BMP25,
1156     RID_SVXSTR_BMP26,
1157     RID_SVXSTR_BMP27,
1158     RID_SVXSTR_BMP28,
1159     RID_SVXSTR_BMP29,
1160     RID_SVXSTR_BMP30,
1161     RID_SVXSTR_BMP31,
1162     RID_SVXSTR_BMP32,
1163     RID_SVXSTR_BMP33,
1164     RID_SVXSTR_BMP34,
1165     RID_SVXSTR_BMP35,
1166     RID_SVXSTR_BMP36,
1167     RID_SVXSTR_BMP37,
1168     RID_SVXSTR_BMP38,
1169     RID_SVXSTR_BMP39,
1170     RID_SVXSTR_BMP40,
1171     RID_SVXSTR_BMP41,
1172     RID_SVXSTR_BMP42,
1173     RID_SVXSTR_BMP43,
1174     RID_SVXSTR_BMP44,
1175     RID_SVXSTR_BMP45,
1176     RID_SVXSTR_BMP46,
1177     RID_SVXSTR_BMP47,
1178     RID_SVXSTR_BMP48,
1179     RID_SVXSTR_BMP49,
1180     RID_SVXSTR_BMP50,
1181     RID_SVXSTR_BMP51,
1182     RID_SVXSTR_BMP52,
1183     RID_SVXSTR_BMP53,
1184     RID_SVXSTR_BMP54,
1185     RID_SVXSTR_BMP55,
1186     RID_SVXSTR_BMP56,
1187     RID_SVXSTR_BMP57,
1188     RID_SVXSTR_BMP58,
1189     RID_SVXSTR_BMP59,
1190     RID_SVXSTR_BMP60,
1191     RID_SVXSTR_BMP61,
1192     RID_SVXSTR_BMP62,
1193     RID_SVXSTR_BMP63,
1194     RID_SVXSTR_BMP64,
1195     RID_SVXSTR_BMP65,
1196     RID_SVXSTR_BMP66,
1197     RID_SVXSTR_BMP67,
1198     RID_SVXSTR_BMP68,
1199     RID_SVXSTR_BMP69,
1200     RID_SVXSTR_BMP70,
1201     RID_SVXSTR_BMP71,
1202     RID_SVXSTR_BMP72,
1203     RID_SVXSTR_BMP73,
1204     RID_SVXSTR_BMP74,
1205     RID_SVXSTR_BMP75,
1206     RID_SVXSTR_BMP76,
1207     RID_SVXSTR_BMP77,
1208     RID_SVXSTR_BMP78,
1209     RID_SVXSTR_BMP79,
1210     RID_SVXSTR_BMP80,
1211     RID_SVXSTR_BMP81,
1212     RID_SVXSTR_BMP82,
1213     RID_SVXSTR_BMP83,
1214     RID_SVXSTR_BMP84,
1215     RID_SVXSTR_BMP85,
1216     RID_SVXSTR_BMP86,
1217     RID_SVXSTR_BMP87,
1218     RID_SVXSTR_BMP88,
1219     RID_SVXSTR_BMP89,
1220     RID_SVXSTR_BMP90,
1221     RID_SVXSTR_BMP91,
1222     RID_SVXSTR_BMP92
1223 };
1224 
1225 static const char* RID_SVXSTR_DASH_DEF[] =
1226 {
1227     RID_SVXSTR_DASH0_DEF,
1228     RID_SVXSTR_DASH1_DEF,
1229     RID_SVXSTR_DASH2_DEF,
1230     RID_SVXSTR_DASH3_DEF,
1231     RID_SVXSTR_DASH4_DEF,
1232     RID_SVXSTR_DASH5_DEF,
1233     RID_SVXSTR_DASH6_DEF,
1234     RID_SVXSTR_DASH7_DEF,
1235     RID_SVXSTR_DASH8_DEF,
1236     RID_SVXSTR_DASH9_DEF,
1237     RID_SVXSTR_DASH10_DEF,
1238     RID_SVXSTR_DASH11_DEF,
1239     RID_SVXSTR_DASH12_DEF,
1240     RID_SVXSTR_DASH13_DEF,
1241     RID_SVXSTR_DASH14_DEF,
1242     RID_SVXSTR_DASH15_DEF,
1243     RID_SVXSTR_DASH16_DEF,
1244     RID_SVXSTR_DASH17_DEF,
1245     RID_SVXSTR_DASH18_DEF,
1246     RID_SVXSTR_DASH19_DEF,
1247     RID_SVXSTR_DASH20_DEF,
1248     RID_SVXSTR_DASH21_DEF
1249 };
1250 
1251 static const char* RID_SVXSTR_DASH[] =
1252 {
1253     RID_SVXSTR_DASH0,
1254     RID_SVXSTR_DASH1,
1255     RID_SVXSTR_DASH2,
1256     RID_SVXSTR_DASH3,
1257     RID_SVXSTR_DASH4,
1258     RID_SVXSTR_DASH5,
1259     RID_SVXSTR_DASH6,
1260     RID_SVXSTR_DASH7,
1261     RID_SVXSTR_DASH8,
1262     RID_SVXSTR_DASH9,
1263     RID_SVXSTR_DASH10,
1264     RID_SVXSTR_DASH11,
1265     RID_SVXSTR_DASH12,
1266     RID_SVXSTR_DASH13,
1267     RID_SVXSTR_DASH14,
1268     RID_SVXSTR_DASH15,
1269     RID_SVXSTR_DASH16,
1270     RID_SVXSTR_DASH17,
1271     RID_SVXSTR_DASH18,
1272     RID_SVXSTR_DASH19,
1273     RID_SVXSTR_DASH20,
1274     RID_SVXSTR_DASH21
1275 };
1276 
1277 static const char* RID_SVXSTR_LEND_DEF[] =
1278 {
1279     RID_SVXSTR_LEND0_DEF,
1280     RID_SVXSTR_LEND1_DEF,
1281     RID_SVXSTR_LEND2_DEF,
1282     RID_SVXSTR_LEND3_DEF,
1283     RID_SVXSTR_LEND4_DEF,
1284     RID_SVXSTR_LEND5_DEF,
1285     RID_SVXSTR_LEND6_DEF,
1286     RID_SVXSTR_LEND7_DEF,
1287     RID_SVXSTR_LEND8_DEF,
1288     RID_SVXSTR_LEND9_DEF,
1289     RID_SVXSTR_LEND10_DEF,
1290     RID_SVXSTR_LEND11_DEF,
1291     RID_SVXSTR_LEND12_DEF,
1292     RID_SVXSTR_LEND13_DEF,
1293     RID_SVXSTR_LEND14_DEF,
1294     RID_SVXSTR_LEND15_DEF,
1295     RID_SVXSTR_LEND16_DEF,
1296     RID_SVXSTR_LEND17_DEF,
1297     RID_SVXSTR_LEND18_DEF,
1298     RID_SVXSTR_LEND19_DEF,
1299     RID_SVXSTR_LEND20_DEF,
1300     RID_SVXSTR_LEND21_DEF,
1301     RID_SVXSTR_LEND22_DEF,
1302     RID_SVXSTR_LEND23_DEF,
1303     RID_SVXSTR_LEND24_DEF,
1304     RID_SVXSTR_LEND25_DEF,
1305     RID_SVXSTR_LEND26_DEF,
1306     RID_SVXSTR_LEND27_DEF,
1307     RID_SVXSTR_LEND28_DEF,
1308     RID_SVXSTR_LEND29_DEF,
1309     RID_SVXSTR_LEND30_DEF,
1310     RID_SVXSTR_LEND31_DEF
1311 };
1312 
1313 static const char* RID_SVXSTR_LEND[] =
1314 {
1315     RID_SVXSTR_LEND0,
1316     RID_SVXSTR_LEND1,
1317     RID_SVXSTR_LEND2,
1318     RID_SVXSTR_LEND3,
1319     RID_SVXSTR_LEND4,
1320     RID_SVXSTR_LEND5,
1321     RID_SVXSTR_LEND6,
1322     RID_SVXSTR_LEND7,
1323     RID_SVXSTR_LEND8,
1324     RID_SVXSTR_LEND9,
1325     RID_SVXSTR_LEND10,
1326     RID_SVXSTR_LEND11,
1327     RID_SVXSTR_LEND12,
1328     RID_SVXSTR_LEND13,
1329     RID_SVXSTR_LEND14,
1330     RID_SVXSTR_LEND15,
1331     RID_SVXSTR_LEND16,
1332     RID_SVXSTR_LEND17,
1333     RID_SVXSTR_LEND18,
1334     RID_SVXSTR_LEND19,
1335     RID_SVXSTR_LEND20,
1336     RID_SVXSTR_LEND21,
1337     RID_SVXSTR_LEND22,
1338     RID_SVXSTR_LEND23,
1339     RID_SVXSTR_LEND24,
1340     RID_SVXSTR_LEND25,
1341     RID_SVXSTR_LEND26,
1342     RID_SVXSTR_LEND27,
1343     RID_SVXSTR_LEND28,
1344     RID_SVXSTR_LEND29,
1345     RID_SVXSTR_LEND30,
1346     RID_SVXSTR_LEND31
1347 };
1348 
1349 static const char* RID_SVXSTR_GRDT_DEF[] =
1350 {
1351     RID_SVXSTR_GRDT0_DEF,
1352     RID_SVXSTR_GRDT1_DEF,
1353     RID_SVXSTR_GRDT2_DEF,
1354     RID_SVXSTR_GRDT3_DEF,
1355     RID_SVXSTR_GRDT4_DEF,
1356     RID_SVXSTR_GRDT5_DEF,
1357     RID_SVXSTR_GRDT6_DEF,
1358     RID_SVXSTR_GRDT7_DEF,
1359     RID_SVXSTR_GRDT8_DEF,
1360     RID_SVXSTR_GRDT9_DEF,
1361     RID_SVXSTR_GRDT10_DEF,
1362     RID_SVXSTR_GRDT11_DEF,
1363     RID_SVXSTR_GRDT12_DEF,
1364     RID_SVXSTR_GRDT13_DEF,
1365     RID_SVXSTR_GRDT14_DEF,
1366     RID_SVXSTR_GRDT15_DEF,
1367     RID_SVXSTR_GRDT16_DEF,
1368     RID_SVXSTR_GRDT17_DEF,
1369     RID_SVXSTR_GRDT18_DEF,
1370     RID_SVXSTR_GRDT19_DEF,
1371     RID_SVXSTR_GRDT20_DEF,
1372     RID_SVXSTR_GRDT21_DEF,
1373     RID_SVXSTR_GRDT22_DEF,
1374     RID_SVXSTR_GRDT23_DEF,
1375     RID_SVXSTR_GRDT24_DEF,
1376     RID_SVXSTR_GRDT25_DEF,
1377     RID_SVXSTR_GRDT26_DEF,
1378     RID_SVXSTR_GRDT27_DEF,
1379     RID_SVXSTR_GRDT28_DEF,
1380     RID_SVXSTR_GRDT29_DEF,
1381     RID_SVXSTR_GRDT30_DEF,
1382     RID_SVXSTR_GRDT31_DEF,
1383     RID_SVXSTR_GRDT32_DEF,
1384     RID_SVXSTR_GRDT33_DEF,
1385     RID_SVXSTR_GRDT34_DEF,
1386     RID_SVXSTR_GRDT35_DEF,
1387     RID_SVXSTR_GRDT36_DEF,
1388     RID_SVXSTR_GRDT37_DEF,
1389     RID_SVXSTR_GRDT38_DEF,
1390     RID_SVXSTR_GRDT39_DEF,
1391     RID_SVXSTR_GRDT40_DEF,
1392     RID_SVXSTR_GRDT41_DEF,
1393     RID_SVXSTR_GRDT42_DEF,
1394     RID_SVXSTR_GRDT43_DEF,
1395     RID_SVXSTR_GRDT44_DEF,
1396     RID_SVXSTR_GRDT45_DEF,
1397     RID_SVXSTR_GRDT46_DEF,
1398     RID_SVXSTR_GRDT47_DEF,
1399     RID_SVXSTR_GRDT48_DEF,
1400     RID_SVXSTR_GRDT49_DEF,
1401     RID_SVXSTR_GRDT50_DEF,
1402     RID_SVXSTR_GRDT51_DEF,
1403     RID_SVXSTR_GRDT52_DEF,
1404     RID_SVXSTR_GRDT53_DEF,
1405     RID_SVXSTR_GRDT54_DEF,
1406     RID_SVXSTR_GRDT55_DEF,
1407     RID_SVXSTR_GRDT56_DEF,
1408     RID_SVXSTR_GRDT57_DEF,
1409     RID_SVXSTR_GRDT58_DEF,
1410     RID_SVXSTR_GRDT59_DEF,
1411     RID_SVXSTR_GRDT60_DEF,
1412     RID_SVXSTR_GRDT61_DEF,
1413     RID_SVXSTR_GRDT62_DEF,
1414     RID_SVXSTR_GRDT63_DEF,
1415     RID_SVXSTR_GRDT64_DEF,
1416     RID_SVXSTR_GRDT65_DEF,
1417     RID_SVXSTR_GRDT66_DEF,
1418     RID_SVXSTR_GRDT67_DEF,
1419     RID_SVXSTR_GRDT68_DEF,
1420     RID_SVXSTR_GRDT69_DEF,
1421     RID_SVXSTR_GRDT70_DEF,
1422     RID_SVXSTR_GRDT71_DEF,
1423     RID_SVXSTR_GRDT72_DEF,
1424     RID_SVXSTR_GRDT73_DEF,
1425     RID_SVXSTR_GRDT74_DEF,
1426     RID_SVXSTR_GRDT75_DEF,
1427     RID_SVXSTR_GRDT76_DEF,
1428     RID_SVXSTR_GRDT77_DEF,
1429     RID_SVXSTR_GRDT78_DEF,
1430     RID_SVXSTR_GRDT79_DEF,
1431     RID_SVXSTR_GRDT80_DEF,
1432     RID_SVXSTR_GRDT81_DEF,
1433     RID_SVXSTR_GRDT82_DEF,
1434     RID_SVXSTR_GRDT83_DEF,
1435     RID_SVXSTR_GRDT84_DEF
1436 };
1437 
1438 static const char* RID_SVXSTR_GRDT[] =
1439 {
1440     RID_SVXSTR_GRDT0,
1441     RID_SVXSTR_GRDT1,
1442     RID_SVXSTR_GRDT2,
1443     RID_SVXSTR_GRDT3,
1444     RID_SVXSTR_GRDT4,
1445     RID_SVXSTR_GRDT5,
1446     RID_SVXSTR_GRDT6,
1447     RID_SVXSTR_GRDT7,
1448     RID_SVXSTR_GRDT8,
1449     RID_SVXSTR_GRDT9,
1450     RID_SVXSTR_GRDT10,
1451     RID_SVXSTR_GRDT11,
1452     RID_SVXSTR_GRDT12,
1453     RID_SVXSTR_GRDT13,
1454     RID_SVXSTR_GRDT14,
1455     RID_SVXSTR_GRDT15,
1456     RID_SVXSTR_GRDT16,
1457     RID_SVXSTR_GRDT17,
1458     RID_SVXSTR_GRDT18,
1459     RID_SVXSTR_GRDT19,
1460     RID_SVXSTR_GRDT20,
1461     RID_SVXSTR_GRDT21,
1462     RID_SVXSTR_GRDT22,
1463     RID_SVXSTR_GRDT23,
1464     RID_SVXSTR_GRDT24,
1465     RID_SVXSTR_GRDT25,
1466     RID_SVXSTR_GRDT26,
1467     RID_SVXSTR_GRDT27,
1468     RID_SVXSTR_GRDT28,
1469     RID_SVXSTR_GRDT29,
1470     RID_SVXSTR_GRDT30,
1471     RID_SVXSTR_GRDT31,
1472     RID_SVXSTR_GRDT32,
1473     RID_SVXSTR_GRDT33,
1474     RID_SVXSTR_GRDT34,
1475     RID_SVXSTR_GRDT35,
1476     RID_SVXSTR_GRDT36,
1477     RID_SVXSTR_GRDT37,
1478     RID_SVXSTR_GRDT38,
1479     RID_SVXSTR_GRDT39,
1480     RID_SVXSTR_GRDT40,
1481     RID_SVXSTR_GRDT41,
1482     RID_SVXSTR_GRDT42,
1483     RID_SVXSTR_GRDT43,
1484     RID_SVXSTR_GRDT44,
1485     RID_SVXSTR_GRDT45,
1486     RID_SVXSTR_GRDT46,
1487     RID_SVXSTR_GRDT47,
1488     RID_SVXSTR_GRDT48,
1489     RID_SVXSTR_GRDT49,
1490     RID_SVXSTR_GRDT50,
1491     RID_SVXSTR_GRDT51,
1492     RID_SVXSTR_GRDT52,
1493     RID_SVXSTR_GRDT53,
1494     RID_SVXSTR_GRDT54,
1495     RID_SVXSTR_GRDT55,
1496     RID_SVXSTR_GRDT56,
1497     RID_SVXSTR_GRDT57,
1498     RID_SVXSTR_GRDT58,
1499     RID_SVXSTR_GRDT59,
1500     RID_SVXSTR_GRDT60,
1501     RID_SVXSTR_GRDT61,
1502     RID_SVXSTR_GRDT62,
1503     RID_SVXSTR_GRDT63,
1504     RID_SVXSTR_GRDT64,
1505     RID_SVXSTR_GRDT65,
1506     RID_SVXSTR_GRDT66,
1507     RID_SVXSTR_GRDT67,
1508     RID_SVXSTR_GRDT68,
1509     RID_SVXSTR_GRDT69,
1510     RID_SVXSTR_GRDT70,
1511     RID_SVXSTR_GRDT71,
1512     RID_SVXSTR_GRDT72,
1513     RID_SVXSTR_GRDT73,
1514     RID_SVXSTR_GRDT74,
1515     RID_SVXSTR_GRDT75,
1516     RID_SVXSTR_GRDT76,
1517     RID_SVXSTR_GRDT77,
1518     RID_SVXSTR_GRDT78,
1519     RID_SVXSTR_GRDT79,
1520     RID_SVXSTR_GRDT80,
1521     RID_SVXSTR_GRDT81,
1522     RID_SVXSTR_GRDT82,
1523     RID_SVXSTR_GRDT83,
1524     RID_SVXSTR_GRDT84
1525 };
1526 
1527 static const char* RID_SVXSTR_HATCHS_DEF[] =
1528 {
1529     RID_SVXSTR_HATCH0_DEF,
1530     RID_SVXSTR_HATCH1_DEF,
1531     RID_SVXSTR_HATCH2_DEF,
1532     RID_SVXSTR_HATCH3_DEF,
1533     RID_SVXSTR_HATCH4_DEF,
1534     RID_SVXSTR_HATCH5_DEF,
1535     RID_SVXSTR_HATCH6_DEF,
1536     RID_SVXSTR_HATCH7_DEF,
1537     RID_SVXSTR_HATCH8_DEF,
1538     RID_SVXSTR_HATCH9_DEF,
1539     RID_SVXSTR_HATCH10_DEF
1540 };
1541 
1542 static const char* RID_SVXSTR_HATCHS[] =
1543 {
1544     RID_SVXSTR_HATCH0,
1545     RID_SVXSTR_HATCH1,
1546     RID_SVXSTR_HATCH2,
1547     RID_SVXSTR_HATCH3,
1548     RID_SVXSTR_HATCH4,
1549     RID_SVXSTR_HATCH5,
1550     RID_SVXSTR_HATCH6,
1551     RID_SVXSTR_HATCH7,
1552     RID_SVXSTR_HATCH8,
1553     RID_SVXSTR_HATCH9,
1554     RID_SVXSTR_HATCH10
1555 };
1556 
1557 static const char* RID_SVXSTR_TRASNGR_DEF[] =
1558 {
1559     RID_SVXSTR_TRASNGR0_DEF
1560 };
1561 
1562 static const char* RID_SVXSTR_TRASNGR[] =
1563 {
1564     RID_SVXSTR_TRASNGR0
1565 };
1566 
1567 static bool SvxUnoGetResourceRanges( const sal_uInt16 nWhich, const char**& pApiResIds, const char**& pIntResIds, int& nCount ) throw()
1568 {
1569     switch( nWhich )
1570     {
1571     case XATTR_FILLBITMAP:
1572         pApiResIds = RID_SVXSTR_BMP_DEF;
1573         pIntResIds = RID_SVXSTR_BMP;
1574         nCount = SAL_N_ELEMENTS(RID_SVXSTR_BMP_DEF);
1575         break;
1576     case XATTR_LINEDASH:
1577         pApiResIds = RID_SVXSTR_DASH_DEF;
1578         pIntResIds = RID_SVXSTR_DASH;
1579         nCount = SAL_N_ELEMENTS(RID_SVXSTR_DASH_DEF);
1580         break;
1581 
1582     case XATTR_LINESTART:
1583     case XATTR_LINEEND:
1584         pApiResIds = RID_SVXSTR_LEND_DEF;
1585         pIntResIds = RID_SVXSTR_LEND;
1586         nCount = SAL_N_ELEMENTS(RID_SVXSTR_LEND_DEF);
1587         break;
1588 
1589     case XATTR_FILLGRADIENT:
1590         pApiResIds = RID_SVXSTR_GRDT_DEF;
1591         pIntResIds = RID_SVXSTR_GRDT;
1592         nCount = SAL_N_ELEMENTS(RID_SVXSTR_GRDT_DEF);
1593         break;
1594 
1595     case XATTR_FILLHATCH:
1596         pApiResIds = RID_SVXSTR_HATCHS_DEF;
1597         pIntResIds = RID_SVXSTR_HATCHS;
1598         nCount = SAL_N_ELEMENTS(RID_SVXSTR_HATCHS_DEF);
1599         break;
1600 
1601     case XATTR_FILLFLOATTRANSPARENCE:
1602         pApiResIds = RID_SVXSTR_TRASNGR_DEF;
1603         pIntResIds = RID_SVXSTR_TRASNGR;
1604         nCount = SAL_N_ELEMENTS(RID_SVXSTR_TRASNGR_DEF);
1605         break;
1606 
1607     default:
1608         return false;
1609     }
1610     return true;
1611 }
1612 
1613 /// @throws std::exception
1614 static bool SvxUnoConvertResourceString(const char **pSourceResIds, const char** pDestResIds, int nCount, OUString& rString, bool bToApi)
1615 {
1616     // first, calculate the search string length without an optional number after the name
1617     sal_Int32 nLength = rString.getLength();
1618     while( nLength > 0 )
1619     {
1620         const sal_Unicode nChar = rString[ nLength - 1 ];
1621         if( (nChar < '0') || (nChar > '9') )
1622             break;
1623 
1624         nLength--;
1625     }
1626 
1627     // if we cut off a number, also cut of some spaces
1628     if( nLength != rString.getLength() )
1629     {
1630         while( nLength > 0 )
1631         {
1632             const sal_Unicode nChar = rString[ nLength - 1 ];
1633             if( nChar != ' ' )
1634                 break;
1635 
1636             nLength--;
1637         }
1638     }
1639 
1640     const OUString aShortString( rString.copy( 0, nLength ) );
1641 
1642     for (int i = 0; i < nCount; ++i)
1643     {
1644         if (bToApi)
1645         {
1646             const OUString & aCompare = SvxResId(pSourceResIds[i]);
1647             if( aShortString == aCompare )
1648             {
1649                 rString = rString.replaceAt( 0, aShortString.getLength(), OUString::createFromAscii(pDestResIds[i]) );
1650                 return true;
1651             }
1652             else if( rString == aCompare )
1653             {
1654                 rString = OUString::createFromAscii(pDestResIds[i]);
1655                 return true;
1656             }
1657         }
1658         else
1659         {
1660             auto pCompare = pSourceResIds[i];
1661             if( aShortString.equalsAscii(pCompare) )
1662             {
1663                 rString = rString.replaceAt( 0, aShortString.getLength(), SvxResId(pDestResIds[i]) );
1664                 return true;
1665             }
1666             else if( rString.equalsAscii(pCompare) )
1667             {
1668                 rString = SvxResId(pDestResIds[i]);
1669                 return true;
1670             }
1671         }
1672     }
1673 
1674     return false;
1675 }
1676 
1677 
1678 // #i122649# Some comments on the below arrays:
1679 // - They need to have the same order and count of items
1680 // - They are used to translate between translated and non-translated color names
1681 // - To make longer names be found which start with the same basic string,
1682 //   these have to be in front of others
1683 
1684 // It would be nice to:
1685 // - evtl. organize these in a single array with 2-dimensional inner to eliminate
1686 //   the possibility to define it wrong
1687 // - change the compare to also work when a shorter name is in front of a longer one
1688 
1689 static const char* SvxUnoColorNameDefResId[] =
1690 {
1691     RID_SVXSTR_COLOR_BLUEGREY_DEF,
1692     RID_SVXSTR_COLOR_BLACK_DEF,
1693     RID_SVXSTR_COLOR_BLUE_CLASSIC_DEF,
1694     RID_SVXSTR_COLOR_BLUE_DEF,
1695     RID_SVXSTR_COLOR_GREEN_DEF,
1696     RID_SVXSTR_COLOR_RED_DEF,
1697     RID_SVXSTR_COLOR_MAGENTA_DEF,
1698     RID_SVXSTR_COLOR_GREY_DEF,
1699     RID_SVXSTR_COLOR_YELLOWGREEN_DEF,
1700     RID_SVXSTR_COLOR_YELLOW_DEF,
1701     RID_SVXSTR_COLOR_WHITE_DEF,
1702     RID_SVXSTR_COLOR_ORANGE_DEF,
1703     RID_SVXSTR_COLOR_BORDEAUX_DEF,
1704     RID_SVXSTR_COLOR_PALE_YELLOW_DEF,
1705     RID_SVXSTR_COLOR_PALE_GREEN_DEF,
1706     RID_SVXSTR_COLOR_DARKVIOLET_DEF,
1707     RID_SVXSTR_COLOR_SALMON_DEF,
1708     RID_SVXSTR_COLOR_SEABLUE_DEF,
1709     RID_SVXSTR_COLOR_CHART_DEF,
1710     RID_SVXSTR_COLOR_PURPLE_DEF,
1711     RID_SVXSTR_COLOR_SKYBLUE_DEF,
1712     RID_SVXSTR_COLOR_PINK_DEF,
1713     RID_SVXSTR_COLOR_TURQUOISE_DEF,
1714     RID_SVXSTR_COLOR_GOLD_DEF,
1715     RID_SVXSTR_COLOR_BRICK_DEF,
1716     RID_SVXSTR_COLOR_INDIGO_DEF,
1717     RID_SVXSTR_COLOR_TEAL_DEF,
1718     RID_SVXSTR_COLOR_LIME_DEF,
1719     RID_SVXSTR_COLOR_LIGHTGRAY_DEF,
1720     RID_SVXSTR_COLOR_LIGHTYELLOW_DEF,
1721     RID_SVXSTR_COLOR_LIGHTGOLD_DEF,
1722     RID_SVXSTR_COLOR_LIGHTORANGE_DEF,
1723     RID_SVXSTR_COLOR_LIGHTBRICK_DEF,
1724     RID_SVXSTR_COLOR_LIGHTRED_DEF,
1725     RID_SVXSTR_COLOR_LIGHTMAGENTA_DEF,
1726     RID_SVXSTR_COLOR_LIGHTPURPLE_DEF,
1727     RID_SVXSTR_COLOR_LIGHTINDIGO_DEF,
1728     RID_SVXSTR_COLOR_LIGHTBLUE_DEF,
1729     RID_SVXSTR_COLOR_LIGHTTEAL_DEF,
1730     RID_SVXSTR_COLOR_LIGHTGREEN_DEF,
1731     RID_SVXSTR_COLOR_LIGHTLIME_DEF,
1732     RID_SVXSTR_COLOR_DARKGRAY_DEF,
1733     RID_SVXSTR_COLOR_DARKYELLOW_DEF,
1734     RID_SVXSTR_COLOR_DARKGOLD_DEF,
1735     RID_SVXSTR_COLOR_DARKORANGE_DEF,
1736     RID_SVXSTR_COLOR_DARKBRICK_DEF,
1737     RID_SVXSTR_COLOR_DARKRED_DEF,
1738     RID_SVXSTR_COLOR_DARKMAGENTA_DEF,
1739     RID_SVXSTR_COLOR_DARKPURPLE_DEF,
1740     RID_SVXSTR_COLOR_DARKINDIGO_DEF,
1741     RID_SVXSTR_COLOR_DARKBLUE_DEF,
1742     RID_SVXSTR_COLOR_DARKTEAL_DEF,
1743     RID_SVXSTR_COLOR_DARKGREEN_DEF,
1744     RID_SVXSTR_COLOR_DARKLIME_DEF,
1745     RID_SVXSTR_COLOR_VIOLET_DEF,
1746     RID_SVXSTR_COLOR_VIOLET_OUG_DEF,
1747     RID_SVXSTR_COLOR_BLUE_OUG_DEF,
1748     RID_SVXSTR_COLOR_AZURE_OUG_DEF,
1749     RID_SVXSTR_COLOR_SPRINGGREEN_OUG_DEF,
1750     RID_SVXSTR_COLOR_GREEN_OUG_DEF,
1751     RID_SVXSTR_COLOR_CHARTREUSEGREEN_OUG_DEF,
1752     RID_SVXSTR_COLOR_ORANGE_OUG_DEF,
1753     RID_SVXSTR_COLOR_RED_OUG_DEF,
1754     RID_SVXSTR_COLOR_ROSE_OUG_DEF,
1755     RID_SVXSTR_COLOR_AZURE_DEF,
1756     RID_SVXSTR_COLOR_CYAN_DEF,
1757     RID_SVXSTR_COLOR_SPRINGGREEN_DEF,
1758     RID_SVXSTR_COLOR_CHARTREUSEGREEN_DEF,
1759     RID_SVXSTR_COLOR_ROSE_DEF,
1760     RID_SVXSTR_COLOR_MATERIAL_GRAY_A_DEF,
1761     RID_SVXSTR_COLOR_MATERIAL_YELLOW_A_DEF,
1762     RID_SVXSTR_COLOR_MATERIAL_AMBER_A_DEF,
1763     RID_SVXSTR_COLOR_MATERIAL_AMBER_DEF,
1764     RID_SVXSTR_COLOR_MATERIAL_ORANGE_A_DEF,
1765     RID_SVXSTR_COLOR_MATERIAL_DEEP_ORANGE_A_DEF,
1766     RID_SVXSTR_COLOR_MATERIAL_DEEP_ORANGE_DEF,
1767     RID_SVXSTR_COLOR_MATERIAL_RED_A_DEF,
1768     RID_SVXSTR_COLOR_MATERIAL_PINK_A_DEF,
1769     RID_SVXSTR_COLOR_MATERIAL_PURPLE_A_DEF,
1770     RID_SVXSTR_COLOR_MATERIAL_DEEP_PURPLE_A_DEF,
1771     RID_SVXSTR_COLOR_MATERIAL_DEEP_PURPLE_DEF,
1772     RID_SVXSTR_COLOR_MATERIAL_INDIGO_A_DEF,
1773     RID_SVXSTR_COLOR_MATERIAL_BLUE_A_DEF,
1774     RID_SVXSTR_COLOR_MATERIAL_LIGHT_BLUE_A_DEF,
1775     RID_SVXSTR_COLOR_MATERIAL_CYAN_A_DEF,
1776     RID_SVXSTR_COLOR_MATERIAL_TEAL_A_DEF,
1777     RID_SVXSTR_COLOR_MATERIAL_GREEN_A_DEF,
1778     RID_SVXSTR_COLOR_MATERIAL_LIGHT_GREEN_A_DEF,
1779     RID_SVXSTR_COLOR_MATERIAL_LIME_A_DEF,
1780     RID_SVXSTR_COLOR_MATERIAL_BROWN_A_DEF,
1781     RID_SVXSTR_COLOR_MATERIAL_BROWN_DEF,
1782     RID_SVXSTR_COLOR_MATERIAL_BLUE_GRAY_A_DEF,
1783     RID_SVXSTR_COLOR_MATERIAL_BLUE_GRAY_DEF,
1784     RID_SVXSTR_COLOR_LIBRE_GREEN_1_DEF,
1785     RID_SVXSTR_COLOR_LIBRE_GREEN_ACCENT_DEF,
1786     RID_SVXSTR_COLOR_LIBRE_BLUE_ACCENT_DEF,
1787     RID_SVXSTR_COLOR_LIBRE_ORANGE_ACCENT_DEF,
1788     RID_SVXSTR_COLOR_LIBRE_PURPLE_DEF,
1789     RID_SVXSTR_COLOR_LIBRE_PURPLE_ACCENT_DEF,
1790     RID_SVXSTR_COLOR_LIBRE_YELLOW_ACCENT_DEF
1791 };
1792 
1793 static const char* SvxUnoColorNameResId[] =
1794 {
1795     RID_SVXSTR_COLOR_BLUEGREY,
1796     RID_SVXSTR_COLOR_BLACK,
1797     RID_SVXSTR_COLOR_BLUE_CLASSIC,
1798     RID_SVXSTR_COLOR_BLUE,
1799     RID_SVXSTR_COLOR_GREEN,
1800     RID_SVXSTR_COLOR_RED,
1801     RID_SVXSTR_COLOR_MAGENTA,
1802     RID_SVXSTR_COLOR_GREY,
1803     RID_SVXSTR_COLOR_YELLOWGREEN,
1804     RID_SVXSTR_COLOR_YELLOW,
1805     RID_SVXSTR_COLOR_WHITE,
1806     RID_SVXSTR_COLOR_ORANGE,
1807     RID_SVXSTR_COLOR_BORDEAUX,
1808     RID_SVXSTR_COLOR_PALE_YELLOW,
1809     RID_SVXSTR_COLOR_PALE_GREEN,
1810     RID_SVXSTR_COLOR_DARKVIOLET,
1811     RID_SVXSTR_COLOR_SALMON,
1812     RID_SVXSTR_COLOR_SEABLUE,
1813     RID_SVXSTR_COLOR_CHART,
1814     RID_SVXSTR_COLOR_PURPLE,
1815     RID_SVXSTR_COLOR_SKYBLUE,
1816     RID_SVXSTR_COLOR_PINK,
1817     RID_SVXSTR_COLOR_TURQUOISE,
1818     RID_SVXSTR_COLOR_GOLD,
1819     RID_SVXSTR_COLOR_BRICK,
1820     RID_SVXSTR_COLOR_INDIGO,
1821     RID_SVXSTR_COLOR_TEAL,
1822     RID_SVXSTR_COLOR_LIME,
1823     RID_SVXSTR_COLOR_LIGHTGRAY,
1824     RID_SVXSTR_COLOR_LIGHTYELLOW,
1825     RID_SVXSTR_COLOR_LIGHTGOLD,
1826     RID_SVXSTR_COLOR_LIGHTORANGE,
1827     RID_SVXSTR_COLOR_LIGHTBRICK,
1828     RID_SVXSTR_COLOR_LIGHTRED,
1829     RID_SVXSTR_COLOR_LIGHTMAGENTA,
1830     RID_SVXSTR_COLOR_LIGHTPURPLE,
1831     RID_SVXSTR_COLOR_LIGHTINDIGO,
1832     RID_SVXSTR_COLOR_LIGHTBLUE,
1833     RID_SVXSTR_COLOR_LIGHTTEAL,
1834     RID_SVXSTR_COLOR_LIGHTGREEN,
1835     RID_SVXSTR_COLOR_LIGHTLIME,
1836     RID_SVXSTR_COLOR_DARKGRAY,
1837     RID_SVXSTR_COLOR_DARKYELLOW,
1838     RID_SVXSTR_COLOR_DARKGOLD,
1839     RID_SVXSTR_COLOR_DARKORANGE,
1840     RID_SVXSTR_COLOR_DARKBRICK,
1841     RID_SVXSTR_COLOR_DARKRED,
1842     RID_SVXSTR_COLOR_DARKMAGENTA,
1843     RID_SVXSTR_COLOR_DARKPURPLE,
1844     RID_SVXSTR_COLOR_DARKINDIGO,
1845     RID_SVXSTR_COLOR_DARKBLUE,
1846     RID_SVXSTR_COLOR_DARKTEAL,
1847     RID_SVXSTR_COLOR_DARKGREEN,
1848     RID_SVXSTR_COLOR_DARKLIME,
1849     RID_SVXSTR_COLOR_VIOLET,
1850     RID_SVXSTR_COLOR_VIOLET_OUG,
1851     RID_SVXSTR_COLOR_BLUE_OUG,
1852     RID_SVXSTR_COLOR_AZURE_OUG,
1853     RID_SVXSTR_COLOR_SPRINGGREEN_OUG,
1854     RID_SVXSTR_COLOR_GREEN_OUG,
1855     RID_SVXSTR_COLOR_CHARTREUSEGREEN_OUG,
1856     RID_SVXSTR_COLOR_ORANGE_OUG,
1857     RID_SVXSTR_COLOR_RED_OUG,
1858     RID_SVXSTR_COLOR_ROSE_OUG,
1859     RID_SVXSTR_COLOR_AZURE,
1860     RID_SVXSTR_COLOR_CYAN,
1861     RID_SVXSTR_COLOR_SPRINGGREEN,
1862     RID_SVXSTR_COLOR_CHARTREUSEGREEN,
1863     RID_SVXSTR_COLOR_ROSE,
1864     RID_SVXSTR_COLOR_MATERIAL_GRAY_A,
1865     RID_SVXSTR_COLOR_MATERIAL_YELLOW_A,
1866     RID_SVXSTR_COLOR_MATERIAL_AMBER_A,
1867     RID_SVXSTR_COLOR_MATERIAL_AMBER,
1868     RID_SVXSTR_COLOR_MATERIAL_ORANGE_A,
1869     RID_SVXSTR_COLOR_MATERIAL_DEEP_ORANGE_A,
1870     RID_SVXSTR_COLOR_MATERIAL_DEEP_ORANGE,
1871     RID_SVXSTR_COLOR_MATERIAL_RED_A,
1872     RID_SVXSTR_COLOR_MATERIAL_PINK_A,
1873     RID_SVXSTR_COLOR_MATERIAL_PURPLE_A,
1874     RID_SVXSTR_COLOR_MATERIAL_DEEP_PURPLE_A,
1875     RID_SVXSTR_COLOR_MATERIAL_DEEP_PURPLE,
1876     RID_SVXSTR_COLOR_MATERIAL_INDIGO_A,
1877     RID_SVXSTR_COLOR_MATERIAL_BLUE_A,
1878     RID_SVXSTR_COLOR_MATERIAL_LIGHT_BLUE_A,
1879     RID_SVXSTR_COLOR_MATERIAL_CYAN_A,
1880     RID_SVXSTR_COLOR_MATERIAL_TEAL_A,
1881     RID_SVXSTR_COLOR_MATERIAL_GREEN_A,
1882     RID_SVXSTR_COLOR_MATERIAL_LIGHT_GREEN_A,
1883     RID_SVXSTR_COLOR_MATERIAL_LIME_A,
1884     RID_SVXSTR_COLOR_MATERIAL_BROWN_A,
1885     RID_SVXSTR_COLOR_MATERIAL_BROWN,
1886     RID_SVXSTR_COLOR_MATERIAL_BLUE_GRAY_A,
1887     RID_SVXSTR_COLOR_MATERIAL_BLUE_GRAY,
1888     RID_SVXSTR_COLOR_LIBRE_GREEN_1,
1889     RID_SVXSTR_COLOR_LIBRE_GREEN_ACCENT,
1890     RID_SVXSTR_COLOR_LIBRE_BLUE_ACCENT,
1891     RID_SVXSTR_COLOR_LIBRE_ORANGE_ACCENT,
1892     RID_SVXSTR_COLOR_LIBRE_PURPLE,
1893     RID_SVXSTR_COLOR_LIBRE_PURPLE_ACCENT,
1894     RID_SVXSTR_COLOR_LIBRE_YELLOW_ACCENT
1895 };
1896 
1897 /// @throws std::exception
1898 static bool SvxUnoConvertResourceStringBuiltIn(const char** pSourceResIds, const char** pDestResIds, int nCount, OUString& rString, bool bToApi)
1899 {
1900     //We replace e.g. "Gray 10%" with the translation of Gray, but we shouldn't
1901     //replace "Red Hat 1" with the translation of Red :-)
1902     sal_Int32 nLength = rString.getLength();
1903     while( nLength > 0 )
1904     {
1905         const sal_Unicode nChar = rString[nLength-1];
1906         if (nChar != '%' && (nChar < '0' || nChar > '9'))
1907             break;
1908         nLength--;
1909     }
1910     OUString sStr = rString.copy(0, nLength).trim();
1911 
1912     for(int i = 0; i < nCount; ++i )
1913     {
1914         if (bToApi)
1915         {
1916             OUString aStrDefName = SvxResId(pSourceResIds[i]);
1917             if( sStr == aStrDefName )
1918             {
1919                 OUString aReplace = OUString::createFromAscii(pDestResIds[i]);
1920                 rString = rString.replaceAt( 0, aStrDefName.getLength(), aReplace );
1921                 return true;
1922             }
1923         }
1924         else
1925         {
1926             if( sStr.equalsAscii(pSourceResIds[i]) )
1927             {
1928                 OUString aReplace = SvxResId(pDestResIds[i]);
1929                 rString = rString.replaceAt( 0, strlen(pSourceResIds[i]), aReplace );
1930                 return true;
1931             }
1932         }
1933     }
1934 
1935     return false;
1936 }
1937 
1938 /** if the given name is a predefined name for the current language it is replaced by
1939     the corresponding api name.
1940 */
1941 OUString SvxUnogetApiNameForItem(const sal_uInt16 nWhich, const OUString& rInternalName)
1942 {
1943     OUString aNew = rInternalName;
1944 
1945     if( nWhich == sal_uInt16(XATTR_LINECOLOR) )
1946     {
1947         if (SvxUnoConvertResourceStringBuiltIn(SvxUnoColorNameResId, SvxUnoColorNameDefResId, SAL_N_ELEMENTS(SvxUnoColorNameResId), aNew, true))
1948         {
1949             return aNew;
1950         }
1951     }
1952     else
1953     {
1954         const char** pApiResIds;
1955         const char** pIntResIds;
1956         int nCount;
1957 
1958         if( SvxUnoGetResourceRanges(nWhich, pApiResIds, pIntResIds, nCount))
1959         {
1960             if (SvxUnoConvertResourceString(pIntResIds, pApiResIds, nCount, aNew, true))
1961             {
1962                 return aNew;
1963             }
1964         }
1965     }
1966 
1967     // just use previous name, if nothing else was found.
1968     return rInternalName;
1969 }
1970 
1971 /** if the given name is a predefined api name it is replaced by the predefined name
1972     for the current language.
1973 */
1974 OUString SvxUnogetInternalNameForItem(const sal_uInt16 nWhich, const OUString& rApiName)
1975 {
1976     OUString aNew = rApiName;
1977 
1978     if( nWhich == sal_uInt16(XATTR_LINECOLOR) )
1979     {
1980         if (SvxUnoConvertResourceStringBuiltIn(SvxUnoColorNameDefResId, SvxUnoColorNameResId, SAL_N_ELEMENTS(SvxUnoColorNameResId), aNew, false))
1981         {
1982             return aNew;
1983         }
1984     }
1985     else
1986     {
1987         const char** pApiResIds;
1988         const char** pIntResIds;
1989         int nCount;
1990 
1991         if (SvxUnoGetResourceRanges(nWhich, pApiResIds, pIntResIds, nCount))
1992         {
1993             if (SvxUnoConvertResourceString(pApiResIds, pIntResIds, nCount, aNew, false))
1994             {
1995                 return aNew;
1996             }
1997         }
1998     }
1999 
2000     // just use previous name, if nothing else was found.
2001     return rApiName;
2002 }
2003 
2004 
2005 rtl::Reference<comphelper::PropertySetInfo> const & SvxPropertySetInfoPool::getOrCreate( sal_Int32 nServiceId ) throw()
2006 {
2007     SolarMutexGuard aGuard;
2008 
2009     assert( nServiceId <= SVXUNO_SERVICEID_LASTID );
2010 
2011     if( !mxInfos[ nServiceId ].is() )
2012     {
2013         mxInfos[nServiceId] = new comphelper::PropertySetInfo();
2014 
2015         switch( nServiceId )
2016         {
2017         case SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS:
2018             mxInfos[SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS]->add( ImplGetSvxDrawingDefaultsPropertyMap() );
2019             break;
2020         case SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS_WRITER:
2021             mxInfos[SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS_WRITER]->add( ImplGetSvxDrawingDefaultsPropertyMap() );
2022             mxInfos[SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS_WRITER]->remove( UNO_NAME_EDIT_PARA_IS_HANGING_PUNCTUATION );
2023             // OD 13.10.2003 #i18732# - add property map for writer item 'IsFollowingTextFlow'
2024             mxInfos[SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS_WRITER]->add( ImplGetAdditionalWriterDrawingDefaultsPropertyMap() );
2025             break;
2026 
2027         default:
2028             OSL_FAIL( "unknown service id!" );
2029         }
2030     }
2031 
2032     return mxInfos[ nServiceId ];
2033 }
2034 
2035 rtl::Reference<comphelper::PropertySetInfo> SvxPropertySetInfoPool::mxInfos[SVXUNO_SERVICEID_LASTID+1] = { nullptr };
2036 
2037 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
2038