1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_xmlscript.hxx"
26 #include "exp_share.hxx"
27
28 #include <rtl/ustrbuf.hxx>
29 #include <tools/diagnose_ex.h>
30
31 #include <com/sun/star/awt/CharSet.hpp>
32 #include <com/sun/star/awt/FontFamily.hpp>
33 #include <com/sun/star/awt/FontPitch.hpp>
34 #include <com/sun/star/awt/FontSlant.hpp>
35 #include <com/sun/star/awt/FontStrikeout.hpp>
36 #include <com/sun/star/awt/FontType.hpp>
37 #include <com/sun/star/awt/FontUnderline.hpp>
38 #include <com/sun/star/awt/FontWeight.hpp>
39 #include <com/sun/star/awt/FontWidth.hpp>
40 #include <com/sun/star/awt/ImagePosition.hpp>
41 #include <com/sun/star/awt/ImageScaleMode.hpp>
42 #include <com/sun/star/awt/LineEndFormat.hpp>
43 #include <com/sun/star/awt/PushButtonType.hpp>
44 #include <com/sun/star/awt/VisualEffect.hpp>
45
46 #include <com/sun/star/script/XScriptEventsSupplier.hpp>
47 #include <com/sun/star/script/ScriptEventDescriptor.hpp>
48
49 #include <com/sun/star/style/VerticalAlignment.hpp>
50
51 #include <com/sun/star/lang/XServiceInfo.hpp>
52 #include <com/sun/star/lang/Locale.hpp>
53 #include <com/sun/star/util/NumberFormat.hpp>
54
55 #include <com/sun/star/view/SelectionType.hpp>
56
57
58 using namespace ::com::sun::star;
59 using namespace ::com::sun::star::uno;
60 using ::rtl::OUString;
61 using ::rtl::OUStringBuffer;
62
63 namespace xmlscript
64 {
65
66 //__________________________________________________________________________________________________
createElement()67 Reference< xml::sax::XAttributeList > Style::createElement()
68 {
69 ElementDescriptor * pStyle = new ElementDescriptor(
70 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":style") ) );
71
72 // style-id
73 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":style-id") ), _id );
74
75 // background-color
76 if (_set & 0x1)
77 {
78 OUStringBuffer buf( 16 );
79 buf.append( (sal_Unicode)'0' );
80 buf.append( (sal_Unicode)'x' );
81 buf.append( OUString::valueOf( (sal_Int64)(sal_uInt64)_backgroundColor, 16 ) );
82 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":background-color") ),
83 buf.makeStringAndClear() );
84 }
85
86 // text-color
87 if (_set & 0x2)
88 {
89 OUStringBuffer buf( 16 );
90 buf.append( (sal_Unicode)'0' );
91 buf.append( (sal_Unicode)'x' );
92 buf.append( OUString::valueOf( (sal_Int64)(sal_uInt64)_textColor, 16 ) );
93 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":text-color") ),
94 buf.makeStringAndClear() );
95 }
96
97 // textline-color
98 if (_set & 0x20)
99 {
100 OUStringBuffer buf( 16 );
101 buf.append( (sal_Unicode)'0' );
102 buf.append( (sal_Unicode)'x' );
103 buf.append( OUString::valueOf( (sal_Int64)(sal_uInt64)_textLineColor, 16 ) );
104 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":textline-color") ),
105 buf.makeStringAndClear() );
106 }
107
108 // fill-color
109 if (_set & 0x10)
110 {
111 OUStringBuffer buf( 16 );
112 buf.append( (sal_Unicode)'0' );
113 buf.append( (sal_Unicode)'x' );
114 buf.append( OUString::valueOf( (sal_Int64)(sal_uInt64)_fillColor, 16 ) );
115 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":fill-color") ),
116 buf.makeStringAndClear() );
117 }
118
119 // border
120 if (_set & 0x4)
121 {
122 switch (_border)
123 {
124 case BORDER_NONE:
125 pStyle->addAttribute( OUSTR(XMLNS_DIALOGS_PREFIX ":border"),
126 OUSTR("none") );
127 break;
128 case BORDER_3D:
129 pStyle->addAttribute( OUSTR(XMLNS_DIALOGS_PREFIX ":border"),
130 OUSTR("3d") );
131 break;
132 case BORDER_SIMPLE:
133 pStyle->addAttribute( OUSTR(XMLNS_DIALOGS_PREFIX ":border"),
134 OUSTR("simple") );
135 break;
136 case BORDER_SIMPLE_COLOR: {
137 OUStringBuffer buf;
138 buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("0x") );
139 buf.append( OUString::valueOf(
140 (sal_Int64)(sal_uInt64)_borderColor, 16 ) );
141 pStyle->addAttribute( OUSTR(XMLNS_DIALOGS_PREFIX ":border"),
142 buf.makeStringAndClear() );
143 break;
144 }
145 default:
146 OSL_ENSURE( 0, "### unexpected border value!" );
147 break;
148 }
149 }
150
151 // visual effect (look)
152 if (_set & 0x40)
153 {
154 switch (_visualEffect)
155 {
156 case awt::VisualEffect::NONE:
157 pStyle->addAttribute( OUSTR(XMLNS_DIALOGS_PREFIX ":look"),
158 OUSTR("none") );
159 break;
160 case awt::VisualEffect::LOOK3D:
161 pStyle->addAttribute( OUSTR(XMLNS_DIALOGS_PREFIX ":look"),
162 OUSTR("3d") );
163 break;
164 case awt::VisualEffect::FLAT:
165 pStyle->addAttribute( OUSTR(XMLNS_DIALOGS_PREFIX ":look"),
166 OUSTR("simple") );
167 break;
168 default:
169 OSL_ENSURE( 0, "### unexpected visual effect value!" );
170 break;
171 }
172 }
173
174 // font-
175 if (_set & 0x8)
176 {
177 awt::FontDescriptor def_descr;
178
179 // dialog:font-name CDATA #IMPLIED
180 if (def_descr.Name != _descr.Name)
181 {
182 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-name") ),
183 _descr.Name );
184 }
185 // dialog:font-height %numeric; #IMPLIED
186 if (def_descr.Height != _descr.Height)
187 {
188 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-height") ),
189 OUString::valueOf( (sal_Int32)_descr.Height ) );
190 }
191 // dialog:font-width %numeric; #IMPLIED
192 if (def_descr.Width != _descr.Width)
193 {
194 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-width") ),
195 OUString::valueOf( (sal_Int32)_descr.Width ) );
196 }
197 // dialog:font-stylename CDATA #IMPLIED
198 if (def_descr.StyleName != _descr.StyleName)
199 {
200 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-stylename") ),
201 _descr.StyleName );
202 }
203 // dialog:font-family "(decorative|modern|roman|script|swiss|system)" #IMPLIED
204 if (def_descr.Family != _descr.Family)
205 {
206 switch (_descr.Family)
207 {
208 case awt::FontFamily::DECORATIVE:
209 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-family") ),
210 OUString( RTL_CONSTASCII_USTRINGPARAM("decorative") ) );
211 break;
212 case awt::FontFamily::MODERN:
213 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-family") ),
214 OUString( RTL_CONSTASCII_USTRINGPARAM("modern") ) );
215 break;
216 case awt::FontFamily::ROMAN:
217 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-family") ),
218 OUString( RTL_CONSTASCII_USTRINGPARAM("roman") ) );
219 break;
220 case awt::FontFamily::SCRIPT:
221 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-family") ),
222 OUString( RTL_CONSTASCII_USTRINGPARAM("script") ) );
223 break;
224 case awt::FontFamily::SWISS:
225 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-family") ),
226 OUString( RTL_CONSTASCII_USTRINGPARAM("swiss") ) );
227 break;
228 case awt::FontFamily::SYSTEM:
229 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-family") ),
230 OUString( RTL_CONSTASCII_USTRINGPARAM("system") ) );
231 break;
232 default:
233 OSL_ENSURE( 0, "### unexpected font-family!" );
234 break;
235 }
236 }
237 // dialog:font-charset "(ansi|mac|ibmpc_437|ibmpc_850|ibmpc_860|ibmpc_861|ibmpc_863|ibmpc_865|system|symbol)" #IMPLIED
238 if (def_descr.CharSet != _descr.CharSet)
239 {
240 switch (_descr.CharSet)
241 {
242 case awt::CharSet::ANSI:
243 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-charset") ),
244 OUString( RTL_CONSTASCII_USTRINGPARAM("ansi") ) );
245 break;
246 case awt::CharSet::MAC:
247 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-charset") ),
248 OUString( RTL_CONSTASCII_USTRINGPARAM("mac") ) );
249 break;
250 case awt::CharSet::IBMPC_437:
251 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-charset") ),
252 OUString( RTL_CONSTASCII_USTRINGPARAM("ibmpc_437") ) );
253 break;
254 case awt::CharSet::IBMPC_850:
255 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-charset") ),
256 OUString( RTL_CONSTASCII_USTRINGPARAM("ibmpc_850") ) );
257 break;
258 case awt::CharSet::IBMPC_860:
259 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-charset") ),
260 OUString( RTL_CONSTASCII_USTRINGPARAM("ibmpc_860") ) );
261 break;
262 case awt::CharSet::IBMPC_861:
263 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-charset") ),
264 OUString( RTL_CONSTASCII_USTRINGPARAM("ibmpc_861") ) );
265 break;
266 case awt::CharSet::IBMPC_863:
267 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-charset") ),
268 OUString( RTL_CONSTASCII_USTRINGPARAM("ibmpc_863") ) );
269 break;
270 case awt::CharSet::IBMPC_865:
271 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-charset") ),
272 OUString( RTL_CONSTASCII_USTRINGPARAM("ibmpc_865") ) );
273 break;
274 case awt::CharSet::SYSTEM:
275 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-charset") ),
276 OUString( RTL_CONSTASCII_USTRINGPARAM("system") ) );
277 break;
278 case awt::CharSet::SYMBOL:
279 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-charset") ),
280 OUString( RTL_CONSTASCII_USTRINGPARAM("symbol") ) );
281 break;
282 default:
283 OSL_ENSURE( 0, "### unexpected font-charset!" );
284 break;
285 }
286 }
287 // dialog:font-pitch "(fixed|variable)" #IMPLIED
288 if (def_descr.Pitch != _descr.Pitch)
289 {
290 switch (_descr.Pitch)
291 {
292 case awt::FontPitch::FIXED:
293 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-pitch") ),
294 OUString( RTL_CONSTASCII_USTRINGPARAM("fixed") ) );
295 break;
296 case awt::FontPitch::VARIABLE:
297 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-pitch") ),
298 OUString( RTL_CONSTASCII_USTRINGPARAM("variable") ) );
299 break;
300 default:
301 OSL_ENSURE( 0, "### unexpected font-pitch!" );
302 break;
303 }
304 }
305 // dialog:font-charwidth CDATA #IMPLIED
306 if (def_descr.CharacterWidth != _descr.CharacterWidth)
307 {
308 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-charwidth") ),
309 OUString::valueOf( (float)_descr.CharacterWidth ) );
310 }
311 // dialog:font-weight CDATA #IMPLIED
312 if (def_descr.Weight != _descr.Weight)
313 {
314 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-weight") ),
315 OUString::valueOf( (float)_descr.Weight ) );
316 }
317 // dialog:font-slant "(oblique|italic|reverse_oblique|reverse_italic)" #IMPLIED
318 if (def_descr.Slant != _descr.Slant)
319 {
320 switch (_descr.Slant)
321 {
322 case awt::FontSlant_OBLIQUE:
323 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-slant") ),
324 OUString( RTL_CONSTASCII_USTRINGPARAM("oblique") ) );
325 break;
326 case awt::FontSlant_ITALIC:
327 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-slant") ),
328 OUString( RTL_CONSTASCII_USTRINGPARAM("italic") ) );
329 break;
330 case awt::FontSlant_REVERSE_OBLIQUE:
331 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-slant") ),
332 OUString( RTL_CONSTASCII_USTRINGPARAM("reverse_oblique") ) );
333 break;
334 case awt::FontSlant_REVERSE_ITALIC:
335 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-slant") ),
336 OUString( RTL_CONSTASCII_USTRINGPARAM("reverse_italic") ) );
337 break;
338 default:
339 OSL_ENSURE( 0, "### unexpected font-slant!" );
340 break;
341 }
342 }
343 // dialog:font-underline "(single|double|dotted|dash|longdash|dashdot|dashdotdot|smallwave|wave|doublewave|bold|bolddotted|bolddash|boldlongdash|bolddashdot|bolddashdotdot|boldwave)" #IMPLIED
344 if (def_descr.Underline != _descr.Underline)
345 {
346 switch (_descr.Underline)
347 {
348 case awt::FontUnderline::SINGLE:
349 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-underline") ),
350 OUString( RTL_CONSTASCII_USTRINGPARAM("single") ) );
351 break;
352 case awt::FontUnderline::DOUBLE:
353 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-underline") ),
354 OUString( RTL_CONSTASCII_USTRINGPARAM("double") ) );
355 break;
356 case awt::FontUnderline::DOTTED:
357 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-underline") ),
358 OUString( RTL_CONSTASCII_USTRINGPARAM("dotted") ) );
359 break;
360 case awt::FontUnderline::DASH:
361 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-underline") ),
362 OUString( RTL_CONSTASCII_USTRINGPARAM("dash") ) );
363 break;
364 case awt::FontUnderline::LONGDASH:
365 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-underline") ),
366 OUString( RTL_CONSTASCII_USTRINGPARAM("longdash") ) );
367 break;
368 case awt::FontUnderline::DASHDOT:
369 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-underline") ),
370 OUString( RTL_CONSTASCII_USTRINGPARAM("dashdot") ) );
371 break;
372 case awt::FontUnderline::DASHDOTDOT:
373 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-underline") ),
374 OUString( RTL_CONSTASCII_USTRINGPARAM("dashdotdot") ) );
375 break;
376 case awt::FontUnderline::SMALLWAVE:
377 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-underline") ),
378 OUString( RTL_CONSTASCII_USTRINGPARAM("smallwave") ) );
379 break;
380 case awt::FontUnderline::WAVE:
381 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-underline") ),
382 OUString( RTL_CONSTASCII_USTRINGPARAM("wave") ) );
383 break;
384 case awt::FontUnderline::DOUBLEWAVE:
385 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-underline") ),
386 OUString( RTL_CONSTASCII_USTRINGPARAM("doublewave") ) );
387 break;
388 case awt::FontUnderline::BOLD:
389 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-underline") ),
390 OUString( RTL_CONSTASCII_USTRINGPARAM("bold") ) );
391 break;
392 case awt::FontUnderline::BOLDDOTTED:
393 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-underline") ),
394 OUString( RTL_CONSTASCII_USTRINGPARAM("bolddotted") ) );
395 break;
396 case awt::FontUnderline::BOLDDASH:
397 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-underline") ),
398 OUString( RTL_CONSTASCII_USTRINGPARAM("bolddash") ) );
399 break;
400 case awt::FontUnderline::BOLDLONGDASH:
401 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-underline") ),
402 OUString( RTL_CONSTASCII_USTRINGPARAM("boldlongdash") ) );
403 break;
404 case awt::FontUnderline::BOLDDASHDOT:
405 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-underline") ),
406 OUString( RTL_CONSTASCII_USTRINGPARAM("bolddashdot") ) );
407 break;
408 case awt::FontUnderline::BOLDDASHDOTDOT:
409 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-underline") ),
410 OUString( RTL_CONSTASCII_USTRINGPARAM("bolddashdotdot") ) );
411 break;
412 case awt::FontUnderline::BOLDWAVE:
413 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-underline") ),
414 OUString( RTL_CONSTASCII_USTRINGPARAM("boldwave") ) );
415 break;
416 default:
417 OSL_ENSURE( 0, "### unexpected font-underline!" );
418 break;
419 }
420 }
421 // dialog:font-strikeout "(single|double|bold|slash|x)" #IMPLIED
422 if (def_descr.Strikeout != _descr.Strikeout)
423 {
424 switch (_descr.Strikeout)
425 {
426 case awt::FontStrikeout::SINGLE:
427 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-strikeout") ),
428 OUString( RTL_CONSTASCII_USTRINGPARAM("single") ) );
429 break;
430 case awt::FontStrikeout::DOUBLE:
431 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-strikeout") ),
432 OUString( RTL_CONSTASCII_USTRINGPARAM("double") ) );
433 break;
434 case awt::FontStrikeout::BOLD:
435 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-strikeout") ),
436 OUString( RTL_CONSTASCII_USTRINGPARAM("bold") ) );
437 break;
438 case awt::FontStrikeout::SLASH:
439 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-strikeout") ),
440 OUString( RTL_CONSTASCII_USTRINGPARAM("slash") ) );
441 break;
442 case awt::FontStrikeout::X:
443 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-strikeout") ),
444 OUString( RTL_CONSTASCII_USTRINGPARAM("x") ) );
445 break;
446 default:
447 OSL_ENSURE( 0, "### unexpected font-strikeout!" );
448 break;
449 }
450 }
451 // dialog:font-orientation CDATA #IMPLIED
452 if (def_descr.Orientation != _descr.Orientation)
453 {
454 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-orientation") ),
455 OUString::valueOf( (float)_descr.Orientation ) );
456 }
457 // dialog:font-kerning %boolean; #IMPLIED
458 if ((def_descr.Kerning != sal_False) != (_descr.Kerning != sal_False))
459 {
460 pStyle->addBoolAttr( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-kerning") ),
461 _descr.Kerning );
462 }
463 // dialog:font-wordlinemode %boolean; #IMPLIED
464 if ((def_descr.WordLineMode != sal_False) != (_descr.WordLineMode != sal_False))
465 {
466 pStyle->addBoolAttr( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-wordlinemode") ),
467 _descr.WordLineMode );
468 }
469 // dialog:font-type "(raster|device|scalable)" #IMPLIED
470 if (def_descr.Type != _descr.Type)
471 {
472 switch (_descr.Type)
473 {
474 case awt::FontType::RASTER:
475 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-type") ),
476 OUString( RTL_CONSTASCII_USTRINGPARAM("raster") ) );
477 break;
478 case awt::FontType::DEVICE:
479 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-type") ),
480 OUString( RTL_CONSTASCII_USTRINGPARAM("device") ) );
481 break;
482 case awt::FontType::SCALABLE:
483 pStyle->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-type") ),
484 OUString( RTL_CONSTASCII_USTRINGPARAM("scalable") ) );
485 break;
486 default:
487 OSL_ENSURE( 0, "### unexpected font-type!" );
488 break;
489 }
490 }
491
492 // additional attributes not in FontDescriptor struct
493 // dialog:font-relief (none|embossed|engraved) #IMPLIED
494 switch (_fontRelief)
495 {
496 case awt::FontRelief::NONE: // dont export default
497 break;
498 case awt::FontRelief::EMBOSSED:
499 pStyle->addAttribute(
500 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-relief") ),
501 OUString( RTL_CONSTASCII_USTRINGPARAM("embossed") ) );
502 break;
503 case awt::FontRelief::ENGRAVED:
504 pStyle->addAttribute(
505 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-relief") ),
506 OUString( RTL_CONSTASCII_USTRINGPARAM("engraved") ) );
507 break;
508 default:
509 OSL_ENSURE( 0, "### unexpected font-relief!" );
510 break;
511 }
512 // dialog:font-emphasismark (none|dot|circle|disc|accent|above|below) #IMPLIED
513 switch (_fontEmphasisMark)
514 {
515 case awt::FontEmphasisMark::NONE: // dont export default
516 break;
517 case awt::FontEmphasisMark::DOT:
518 pStyle->addAttribute(
519 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-emphasismark") ),
520 OUString( RTL_CONSTASCII_USTRINGPARAM("dot") ) );
521 break;
522 case awt::FontEmphasisMark::CIRCLE:
523 pStyle->addAttribute(
524 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-emphasismark") ),
525 OUString( RTL_CONSTASCII_USTRINGPARAM("circle") ) );
526 break;
527 case awt::FontEmphasisMark::DISC:
528 pStyle->addAttribute(
529 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-emphasismark") ),
530 OUString( RTL_CONSTASCII_USTRINGPARAM("disc") ) );
531 break;
532 case awt::FontEmphasisMark::ACCENT:
533 pStyle->addAttribute(
534 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-emphasismark") ),
535 OUString( RTL_CONSTASCII_USTRINGPARAM("accent") ) );
536 break;
537 case awt::FontEmphasisMark::ABOVE:
538 pStyle->addAttribute(
539 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-emphasismark") ),
540 OUString( RTL_CONSTASCII_USTRINGPARAM("above") ) );
541 break;
542 case awt::FontEmphasisMark::BELOW:
543 pStyle->addAttribute(
544 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":font-emphasismark") ),
545 OUString( RTL_CONSTASCII_USTRINGPARAM("below") ) );
546 break;
547 default:
548 OSL_ENSURE( 0, "### unexpected font-emphasismark!" );
549 break;
550 }
551 }
552
553 return pStyle;
554 }
555
556 //##################################################################################################
557
558 //__________________________________________________________________________________________________
addNumberFormatAttr(Reference<beans::XPropertySet> const & xFormatProperties,OUString const &)559 void ElementDescriptor::addNumberFormatAttr(
560 Reference< beans::XPropertySet > const & xFormatProperties,
561 OUString const & /*rAttrName*/ )
562 {
563 Reference< beans::XPropertyState > xState( xFormatProperties, UNO_QUERY );
564 OUString sFormat;
565 lang::Locale locale;
566 OSL_VERIFY( xFormatProperties->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM("FormatString") ) ) >>= sFormat );
567 OSL_VERIFY( xFormatProperties->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM("Locale") ) ) >>= locale );
568
569 addAttribute(
570 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":format-code") ),
571 sFormat );
572
573 // format-locale
574 OUStringBuffer buf( 48 );
575 buf.append( locale.Language );
576 if (locale.Country.getLength())
577 {
578 buf.append( (sal_Unicode)';' );
579 buf.append( locale.Country );
580 if (locale.Variant.getLength())
581 {
582 buf.append( (sal_Unicode)';' );
583 buf.append( locale.Variant );
584 }
585 }
586 addAttribute(
587 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":format-locale") ),
588 buf.makeStringAndClear() );
589 }
590 //__________________________________________________________________________________________________
readProp(OUString const & rPropName)591 Any ElementDescriptor::readProp( OUString const & rPropName )
592 {
593 if (beans::PropertyState_DEFAULT_VALUE != _xPropState->getPropertyState( rPropName ))
594 {
595 return _xProps->getPropertyValue( rPropName );
596 }
597 return Any();
598 }
599
600 //______________________________________________________________________________
readStringAttr(OUString const & rPropName,OUString const & rAttrName)601 void ElementDescriptor::readStringAttr(
602 OUString const & rPropName, OUString const & rAttrName )
603 {
604 if (beans::PropertyState_DEFAULT_VALUE !=
605 _xPropState->getPropertyState( rPropName ))
606 {
607 Any a( _xProps->getPropertyValue( rPropName ) );
608 OUString v;
609 if (a >>= v)
610 addAttribute( rAttrName, v );
611 else
612 OSL_ENSURE( 0, "### unexpected property type!" );
613 }
614 }
615
616 //__________________________________________________________________________________________________
readHexLongAttr(OUString const & rPropName,OUString const & rAttrName)617 void ElementDescriptor::readHexLongAttr( OUString const & rPropName, OUString const & rAttrName )
618 {
619 if (beans::PropertyState_DEFAULT_VALUE != _xPropState->getPropertyState( rPropName ))
620 {
621 Any a( _xProps->getPropertyValue( rPropName ) );
622 if (a.getValueTypeClass() == TypeClass_LONG)
623 {
624 OUStringBuffer buf( 16 );
625 buf.append( (sal_Unicode)'0' );
626 buf.append( (sal_Unicode)'x' );
627 buf.append( OUString::valueOf( (sal_Int64)(sal_uInt64)*(sal_uInt32 *)a.getValue(), 16 ) );
628 addAttribute( rAttrName, buf.makeStringAndClear() );
629 }
630 }
631 }
632
633 //__________________________________________________________________________________________________
readDateFormatAttr(OUString const & rPropName,OUString const & rAttrName)634 void ElementDescriptor::readDateFormatAttr( OUString const & rPropName, OUString const & rAttrName )
635 {
636 if (beans::PropertyState_DEFAULT_VALUE != _xPropState->getPropertyState( rPropName ))
637 {
638 Any a( _xProps->getPropertyValue( rPropName ) );
639 if (a.getValueTypeClass() == TypeClass_SHORT)
640 {
641 switch (*(sal_Int16 const *)a.getValue())
642 {
643 case 0:
644 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("system_short") ) );
645 break;
646 case 1:
647 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("system_short_YY") ) );
648 break;
649 case 2:
650 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("system_short_YYYY") ) );
651 break;
652 case 3:
653 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("system_long") ) );
654 break;
655 case 4:
656 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("short_DDMMYY") ) );
657 break;
658 case 5:
659 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("short_MMDDYY") ) );
660 break;
661 case 6:
662 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("short_YYMMDD") ) );
663 break;
664 case 7:
665 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("short_DDMMYYYY") ) );
666 break;
667 case 8:
668 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("short_MMDDYYYY") ) );
669 break;
670 case 9:
671 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("short_YYYYMMDD") ) );
672 break;
673 case 10:
674 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("short_YYMMDD_DIN5008") ) );
675 break;
676 case 11:
677 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("short_YYYYMMDD_DIN5008") ) );
678 break;
679 default:
680 OSL_ENSURE( 0, "### unexpected date format!" );
681 break;
682 }
683 }
684 }
685 }
686 //__________________________________________________________________________________________________
readTimeFormatAttr(OUString const & rPropName,OUString const & rAttrName)687 void ElementDescriptor::readTimeFormatAttr( OUString const & rPropName, OUString const & rAttrName )
688 {
689 if (beans::PropertyState_DEFAULT_VALUE != _xPropState->getPropertyState( rPropName ))
690 {
691 Any a( _xProps->getPropertyValue( rPropName ) );
692 if (a.getValueTypeClass() == TypeClass_SHORT)
693 {
694 switch (*(sal_Int16 const *)a.getValue())
695 {
696 case 0:
697 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("24h_short") ) );
698 break;
699 case 1:
700 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("24h_long") ) );
701 break;
702 case 2:
703 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("12h_short") ) );
704 break;
705 case 3:
706 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("12h_long") ) );
707 break;
708 case 4:
709 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("Duration_short") ) );
710 break;
711 case 5:
712 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("Duration_long") ) );
713 break;
714 default:
715 OSL_ENSURE( 0, "### unexpected time format!" );
716 break;
717 }
718 }
719 }
720 }
721 //__________________________________________________________________________________________________
readAlignAttr(OUString const & rPropName,OUString const & rAttrName)722 void ElementDescriptor::readAlignAttr( OUString const & rPropName, OUString const & rAttrName )
723 {
724 if (beans::PropertyState_DEFAULT_VALUE != _xPropState->getPropertyState( rPropName ))
725 {
726 Any a( _xProps->getPropertyValue( rPropName ) );
727 if (a.getValueTypeClass() == TypeClass_SHORT)
728 {
729 switch (*(sal_Int16 const *)a.getValue())
730 {
731 case 0:
732 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("left") ) );
733 break;
734 case 1:
735 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("center") ) );
736 break;
737 case 2:
738 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("right") ) );
739 break;
740 default:
741 OSL_ENSURE( 0, "### illegal alignment value!" );
742 break;
743 }
744 }
745 }
746 }
747 //__________________________________________________________________________________________________
readVerticalAlignAttr(OUString const & rPropName,OUString const & rAttrName)748 void ElementDescriptor::readVerticalAlignAttr( OUString const & rPropName, OUString const & rAttrName )
749 {
750 if (beans::PropertyState_DEFAULT_VALUE != _xPropState->getPropertyState( rPropName ))
751 {
752 Any a( _xProps->getPropertyValue( rPropName ) );
753 if (a.getValueTypeClass() == TypeClass_ENUM && a.getValueType() == ::getCppuType( (style::VerticalAlignment*)0 ))
754 {
755 style::VerticalAlignment eAlign;
756 a >>= eAlign;
757 switch (eAlign)
758 {
759 case style::VerticalAlignment_TOP:
760 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("top") ) );
761 break;
762 case style::VerticalAlignment_MIDDLE:
763 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("center") ) );
764 break;
765 case style::VerticalAlignment_BOTTOM:
766 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("bottom") ) );
767 break;
768 default:
769 OSL_ENSURE( 0, "### illegal vertical alignment value!" );
770 break;
771 }
772 }
773 }
774 }
775 //__________________________________________________________________________________________________
readImageAlignAttr(OUString const & rPropName,OUString const & rAttrName)776 void ElementDescriptor::readImageAlignAttr( OUString const & rPropName, OUString const & rAttrName )
777 {
778 if (beans::PropertyState_DEFAULT_VALUE != _xPropState->getPropertyState( rPropName ))
779 {
780 Any a( _xProps->getPropertyValue( rPropName ) );
781 if (a.getValueTypeClass() == TypeClass_SHORT)
782 {
783 switch (*(sal_Int16 const *)a.getValue())
784 {
785 case 0:
786 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("left") ) );
787 break;
788 case 1:
789 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("top") ) );
790 break;
791 case 2:
792 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("right") ) );
793 break;
794 case 3:
795 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("bottom") ) );
796 break;
797 default:
798 OSL_ENSURE( 0, "### illegal image alignment value!" );
799 break;
800 }
801 }
802 }
803 }
804 //__________________________________________________________________________________________________
readImagePositionAttr(OUString const & rPropName,OUString const & rAttrName)805 void ElementDescriptor::readImagePositionAttr( OUString const & rPropName, OUString const & rAttrName )
806 {
807 if (beans::PropertyState_DEFAULT_VALUE != _xPropState->getPropertyState( rPropName ))
808 {
809 Any a( _xProps->getPropertyValue( rPropName ) );
810 if (a.getValueTypeClass() == TypeClass_SHORT)
811 {
812 switch (*(sal_Int16 const *)a.getValue())
813 {
814 case awt::ImagePosition::LeftTop:
815 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("left-top") ) );
816 break;
817 case awt::ImagePosition::LeftCenter:
818 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("left-center") ) );
819 break;
820 case awt::ImagePosition::LeftBottom:
821 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("left-bottom") ) );
822 break;
823 case awt::ImagePosition::RightTop:
824 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("right-top") ) );
825 break;
826 case awt::ImagePosition::RightCenter:
827 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("right-center") ) );
828 break;
829 case awt::ImagePosition::RightBottom:
830 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("right-bottom") ) );
831 break;
832 case awt::ImagePosition::AboveLeft:
833 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("top-left") ) );
834 break;
835 case awt::ImagePosition::AboveCenter:
836 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("top-center") ) );
837 break;
838 case awt::ImagePosition::AboveRight:
839 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("top-right") ) );
840 break;
841 case awt::ImagePosition::BelowLeft:
842 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("bottom-left") ) );
843 break;
844 case awt::ImagePosition::BelowCenter:
845 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("bottom-center") ) );
846 break;
847 case awt::ImagePosition::BelowRight:
848 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("bottom-right") ) );
849 break;
850 case awt::ImagePosition::Centered:
851 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("center") ) );
852 break;
853 default:
854 OSL_ENSURE( 0, "### illegal image position value!" );
855 break;
856 }
857 }
858 }
859 }
860 //__________________________________________________________________________________________________
readButtonTypeAttr(OUString const & rPropName,OUString const & rAttrName)861 void ElementDescriptor::readButtonTypeAttr( OUString const & rPropName, OUString const & rAttrName )
862 {
863 if (beans::PropertyState_DEFAULT_VALUE != _xPropState->getPropertyState( rPropName ))
864 {
865 Any a( _xProps->getPropertyValue( rPropName ) );
866 if (a.getValueTypeClass() == TypeClass_SHORT)
867 {
868 switch (*(sal_Int16 const *)a.getValue())
869 {
870 case awt::PushButtonType_STANDARD:
871 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("standard") ) );
872 break;
873 case awt::PushButtonType_OK:
874 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("ok") ) );
875 break;
876 case awt::PushButtonType_CANCEL:
877 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("cancel") ) );
878 break;
879 case awt::PushButtonType_HELP:
880 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("help") ) );
881 break;
882 default:
883 OSL_ENSURE( 0, "### illegal button-type value!" );
884 break;
885 }
886 }
887 }
888 }
889 //__________________________________________________________________________________________________
readOrientationAttr(OUString const & rPropName,OUString const & rAttrName)890 void ElementDescriptor::readOrientationAttr( OUString const & rPropName, OUString const & rAttrName )
891 {
892 if (beans::PropertyState_DEFAULT_VALUE != _xPropState->getPropertyState( rPropName ))
893 {
894 Any a( _xProps->getPropertyValue( rPropName ) );
895 if (a.getValueTypeClass() == TypeClass_LONG)
896 {
897 switch (*(sal_Int32 const *)a.getValue())
898 {
899 case 0:
900 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("horizontal") ) );
901 break;
902 case 1:
903 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("vertical") ) );
904 break;
905 default:
906 OSL_ENSURE( 0, "### illegal orientation value!" );
907 break;
908 }
909 }
910 }
911 }
912 //__________________________________________________________________________________________________
readLineEndFormatAttr(OUString const & rPropName,OUString const & rAttrName)913 void ElementDescriptor::readLineEndFormatAttr( OUString const & rPropName, OUString const & rAttrName )
914 {
915 if (beans::PropertyState_DEFAULT_VALUE != _xPropState->getPropertyState( rPropName ))
916 {
917 Any a( _xProps->getPropertyValue( rPropName ) );
918 if (a.getValueTypeClass() == TypeClass_SHORT)
919 {
920 switch (*(sal_Int16 const *)a.getValue())
921 {
922 case awt::LineEndFormat::CARRIAGE_RETURN:
923 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("carriage-return") ) );
924 break;
925 case awt::LineEndFormat::LINE_FEED:
926 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("line-feed") ) );
927 break;
928 case awt::LineEndFormat::CARRIAGE_RETURN_LINE_FEED:
929 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("carriage-return-line-feed") ) );
930 break;
931 default:
932 OSL_ENSURE( 0, "### illegal line end format value!" );
933 break;
934 }
935 }
936 }
937 }
938 //__________________________________________________________________________________________________
readSelectionTypeAttr(OUString const & rPropName,OUString const & rAttrName)939 void ElementDescriptor::readSelectionTypeAttr( OUString const & rPropName, OUString const & rAttrName )
940 {
941 if (beans::PropertyState_DEFAULT_VALUE != _xPropState->getPropertyState( rPropName ))
942 {
943 Any aSelectionType ( _xProps->getPropertyValue( rPropName ) );
944
945 if (aSelectionType.getValueTypeClass() == TypeClass_ENUM && aSelectionType.getValueType() == ::getCppuType( (::view::SelectionType*)0 ))
946 {
947 ::view::SelectionType eSelectionType;
948 aSelectionType >>= eSelectionType;
949
950 switch (eSelectionType)
951 {
952 case ::view::SelectionType_NONE:
953 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("none") ) );
954 break;
955 case ::view::SelectionType_SINGLE:
956 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("single") ) );
957 break;
958 case ::view::SelectionType_MULTI:
959 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("multi") ) );
960 break;
961 case ::view::SelectionType_RANGE:
962 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("range") ) );
963 break;
964 default:
965 OSL_ENSURE( 0, "### illegal selection type value!" );
966 break;
967 }
968 }
969 }
970 }
971 //__________________________________________________________________________________________________
readImageScaleModeAttr(OUString const & rPropName,OUString const & rAttrName)972 void ElementDescriptor::readImageScaleModeAttr( OUString const & rPropName, OUString const & rAttrName )
973 {
974 if (beans::PropertyState_DEFAULT_VALUE != _xPropState->getPropertyState( rPropName ))
975 {
976 Any aImageScaleMode( _xProps->getPropertyValue( rPropName ) );
977
978 if (aImageScaleMode.getValueTypeClass() == TypeClass_SHORT)
979 {
980 sal_Int16 nImageScaleMode;
981 aImageScaleMode >>= nImageScaleMode;
982
983 switch(nImageScaleMode)
984 {
985 case ::awt::ImageScaleMode::NONE:
986 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("none") ) );
987 break;
988 case ::awt::ImageScaleMode::ISOTROPIC:
989 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("isotropic") ) );
990 break;
991 case ::awt::ImageScaleMode::ANISOTROPIC:
992 addAttribute( rAttrName, OUString( RTL_CONSTASCII_USTRINGPARAM("anisotropic") ) );
993 break;
994 default:
995 OSL_ENSURE( 0, "### illegal image scale mode value.");
996 break;
997 }
998 }
999 }
1000 }
1001 //__________________________________________________________________________________________________
readDefaults(bool supportPrintable,bool supportVisible)1002 void ElementDescriptor::readDefaults( bool supportPrintable, bool supportVisible )
1003 {
1004 Any a( _xProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM("Name") ) ) );
1005 addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":id") ),
1006 * reinterpret_cast< const OUString * >( a.getValue() ) );
1007 readShortAttr( OUString( RTL_CONSTASCII_USTRINGPARAM("TabIndex") ),
1008 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":tab-index") ) );
1009
1010 sal_Bool bEnabled = sal_False;
1011 if (_xProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM("Enabled") ) ) >>= bEnabled)
1012 {
1013 if (! bEnabled)
1014 {
1015 addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":disabled") ),
1016 OUString( RTL_CONSTASCII_USTRINGPARAM("true") ) );
1017 }
1018 }
1019 else
1020 {
1021 OSL_ENSURE( 0, "unexpected property type for \"Enabled\": not bool!" );
1022 }
1023
1024 sal_Bool bVisible = sal_True;
1025 if (supportVisible) try
1026 {
1027 if (_xProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM("EnableVisible") ) ) >>= bVisible)
1028 {
1029
1030 // only write out the non default case
1031 if (! bVisible)
1032 {
1033 addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":visible") ),
1034 OUString( RTL_CONSTASCII_USTRINGPARAM("false") ) );
1035 }
1036 }
1037 }
1038 catch( Exception& )
1039 {
1040 DBG_UNHANDLED_EXCEPTION();
1041 }
1042 // force writing of pos/size
1043 a = _xProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM("PositionX") ) );
1044 if (a.getValueTypeClass() == TypeClass_LONG)
1045 {
1046 addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":left") ),
1047 OUString::valueOf( *(sal_Int32 const *)a.getValue() ) );
1048 }
1049 a = _xProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM("PositionY") ) );
1050 if (a.getValueTypeClass() == TypeClass_LONG)
1051 {
1052 addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":top") ),
1053 OUString::valueOf( *(sal_Int32 const *)a.getValue() ) );
1054 }
1055 a = _xProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM("Width") ) );
1056 if (a.getValueTypeClass() == TypeClass_LONG)
1057 {
1058 addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":width") ),
1059 OUString::valueOf( *(sal_Int32 const *)a.getValue() ) );
1060 }
1061 a = _xProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM("Height") ) );
1062 if (a.getValueTypeClass() == TypeClass_LONG)
1063 {
1064 addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":height") ),
1065 OUString::valueOf( *(sal_Int32 const *)a.getValue() ) );
1066 }
1067
1068 if (supportPrintable)
1069 {
1070 readBoolAttr(
1071 OUString( RTL_CONSTASCII_USTRINGPARAM("Printable") ),
1072 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":printable") ) );
1073 }
1074 readLongAttr( OUString( RTL_CONSTASCII_USTRINGPARAM("Step") ),
1075 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":page") ) );
1076 readStringAttr( OUString( RTL_CONSTASCII_USTRINGPARAM("Tag") ),
1077 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":tag") ) );
1078 readStringAttr( OUString( RTL_CONSTASCII_USTRINGPARAM("HelpText") ),
1079 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":help-text") ) );
1080 readStringAttr( OUString( RTL_CONSTASCII_USTRINGPARAM("HelpURL") ),
1081 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":help-url") ) );
1082 }
1083
1084 struct StringTriple
1085 {
1086 char const * first;
1087 char const * second;
1088 char const * third;
1089 };
1090 extern StringTriple const * const g_pEventTranslations;
1091
1092 //__________________________________________________________________________________________________
readEvents()1093 void ElementDescriptor::readEvents()
1094 SAL_THROW( (Exception) )
1095 {
1096 Reference< script::XScriptEventsSupplier > xSupplier( _xProps, UNO_QUERY );
1097 if (xSupplier.is())
1098 {
1099 Reference< container::XNameContainer > xEvents( xSupplier->getEvents() );
1100 if (xEvents.is())
1101 {
1102 Sequence< OUString > aNames( xEvents->getElementNames() );
1103 OUString const * pNames = aNames.getConstArray();
1104 for ( sal_Int32 nPos = 0; nPos < aNames.getLength(); ++nPos )
1105 {
1106 script::ScriptEventDescriptor descr;
1107 if (xEvents->getByName( pNames[ nPos ] ) >>= descr)
1108 {
1109 OSL_ENSURE( descr.ListenerType.getLength() > 0 &&
1110 descr.EventMethod.getLength() > 0 &&
1111 descr.ScriptCode.getLength() > 0 &&
1112 descr.ScriptType.getLength() > 0,
1113 "### invalid event descr!" );
1114
1115 OUString aEventName;
1116
1117 if (! descr.AddListenerParam.getLength())
1118 {
1119 // detection of event-name
1120 ::rtl::OString listenerType(
1121 ::rtl::OUStringToOString(
1122 descr.ListenerType,
1123 RTL_TEXTENCODING_ASCII_US ) );
1124 ::rtl::OString eventMethod(
1125 ::rtl::OUStringToOString(
1126 descr.EventMethod,
1127 RTL_TEXTENCODING_ASCII_US ) );
1128 StringTriple const * p = g_pEventTranslations;
1129 while (p->first)
1130 {
1131 if (0 == ::rtl_str_compare( p->second, eventMethod.getStr() ) &&
1132 0 == ::rtl_str_compare( p->first, listenerType.getStr() ))
1133 {
1134 aEventName = OUString( p->third, ::rtl_str_getLength( p->third ), RTL_TEXTENCODING_ASCII_US );
1135 break;
1136 }
1137 ++p;
1138 }
1139 }
1140
1141 ElementDescriptor * pElem;
1142 Reference< xml::sax::XAttributeList > xElem;
1143
1144 if (aEventName.getLength()) // script:event
1145 {
1146 pElem = new ElementDescriptor(
1147 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_SCRIPT_PREFIX ":event") ) );
1148 xElem = pElem;
1149
1150 pElem->addAttribute(
1151 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_SCRIPT_PREFIX ":event-name") ),
1152 aEventName );
1153 }
1154 else // script:listener-event
1155 {
1156 pElem = new ElementDescriptor(
1157 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_SCRIPT_PREFIX ":listener-event") ) );
1158 xElem = pElem;
1159
1160 pElem->addAttribute(
1161 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_SCRIPT_PREFIX ":listener-type") ),
1162 descr.ListenerType );
1163 pElem->addAttribute(
1164 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_SCRIPT_PREFIX ":listener-method") ),
1165 descr.EventMethod );
1166
1167 if (descr.AddListenerParam.getLength())
1168 {
1169 pElem->addAttribute(
1170 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_SCRIPT_PREFIX ":listener-param") ),
1171 descr.AddListenerParam );
1172 }
1173 }
1174 if ( descr.ScriptType.equals( OUString( RTL_CONSTASCII_USTRINGPARAM( "StarBasic" ) ) ) )
1175 {
1176 // separate optional location
1177 sal_Int32 nIndex = descr.ScriptCode.indexOf( (sal_Unicode)':' );
1178 if (nIndex >= 0)
1179 {
1180 pElem->addAttribute(
1181 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_SCRIPT_PREFIX ":location") ),
1182 descr.ScriptCode.copy( 0, nIndex ) );
1183 pElem->addAttribute(
1184 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_SCRIPT_PREFIX ":macro-name") ),
1185 descr.ScriptCode.copy( nIndex +1 ) );
1186 }
1187 else
1188 {
1189 pElem->addAttribute(
1190 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_SCRIPT_PREFIX ":macro-name") ),
1191 descr.ScriptCode );
1192 }
1193 }
1194 else
1195 {
1196 pElem->addAttribute(
1197 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_SCRIPT_PREFIX ":macro-name") ),
1198 descr.ScriptCode );
1199 }
1200
1201 // language
1202 pElem->addAttribute(
1203 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_SCRIPT_PREFIX ":language") ),
1204 descr.ScriptType );
1205
1206 addSubElement( xElem );
1207 }
1208 else
1209 {
1210 OSL_ENSURE( 0, "### unexpected event type in container!" );
1211 }
1212 }
1213 }
1214 }
1215 }
1216
1217 //##################################################################################################
1218
equalFont(Style const & style1,Style const & style2)1219 inline bool equalFont( Style const & style1, Style const & style2 )
1220 {
1221 awt::FontDescriptor const & f1 = style1._descr;
1222 awt::FontDescriptor const & f2 = style2._descr;
1223 return (
1224 f1.Name == f2.Name &&
1225 f1.Height == f2.Height &&
1226 f1.Width == f2.Width &&
1227 f1.StyleName == f2.StyleName &&
1228 f1.Family == f2.Family &&
1229 f1.CharSet == f2.CharSet &&
1230 f1.Pitch == f2.CharSet &&
1231 f1.CharacterWidth == f2.CharacterWidth &&
1232 f1.Weight == f2.Weight &&
1233 f1.Slant == f2.Slant &&
1234 f1.Underline == f2.Underline &&
1235 f1.Strikeout == f2.Strikeout &&
1236 f1.Orientation == f2.Orientation &&
1237 (f1.Kerning != sal_False) == (f2.Kerning != sal_False) &&
1238 (f1.WordLineMode != sal_False) == (f2.WordLineMode != sal_False) &&
1239 f1.Type == f2.Type &&
1240 style1._fontRelief == style2._fontRelief &&
1241 style1._fontEmphasisMark == style2._fontEmphasisMark
1242 );
1243 }
1244 //__________________________________________________________________________________________________
getStyleId(Style const & rStyle)1245 OUString StyleBag::getStyleId( Style const & rStyle )
1246 SAL_THROW( () )
1247 {
1248 if (! rStyle._set) // nothing set
1249 {
1250 return OUString(); // everything default: no need to export a specific style
1251 }
1252
1253 // lookup existing style
1254 for ( size_t nStylesPos = 0; nStylesPos < _styles.size(); ++nStylesPos )
1255 {
1256 Style * pStyle = _styles[ nStylesPos ];
1257
1258 short demanded_defaults = ~rStyle._set & rStyle._all;
1259 // test, if defaults are not set
1260 if ((~pStyle->_set & demanded_defaults) == demanded_defaults &&
1261 (rStyle._set & (pStyle->_all & ~pStyle->_set)) == 0)
1262 {
1263 short bset = rStyle._set & pStyle->_set;
1264 if ((bset & 0x1) &&
1265 rStyle._backgroundColor != pStyle->_backgroundColor)
1266 continue;
1267 if ((bset & 0x2) &&
1268 rStyle._textColor != pStyle->_textColor)
1269 continue;
1270 if ((bset & 0x20) &&
1271 rStyle._textLineColor != pStyle->_textLineColor)
1272 continue;
1273 if ((bset & 0x10) &&
1274 rStyle._fillColor != pStyle->_fillColor)
1275 continue;
1276 if ((bset & 0x4) &&
1277 (rStyle._border != pStyle->_border ||
1278 (rStyle._border == BORDER_SIMPLE_COLOR &&
1279 rStyle._borderColor != pStyle->_borderColor)))
1280 continue;
1281 if ((bset & 0x8) &&
1282 !equalFont( rStyle, *pStyle ))
1283 continue;
1284 if ((bset & 0x40) &&
1285 rStyle._visualEffect != pStyle->_visualEffect)
1286 continue;
1287
1288 // merge in
1289 short bnset = rStyle._set & ~pStyle->_set;
1290 if (bnset & 0x1)
1291 pStyle->_backgroundColor = rStyle._backgroundColor;
1292 if (bnset & 0x2)
1293 pStyle->_textColor = rStyle._textColor;
1294 if (bnset & 0x20)
1295 pStyle->_textLineColor = rStyle._textLineColor;
1296 if (bnset & 0x10)
1297 pStyle->_fillColor = rStyle._fillColor;
1298 if (bnset & 0x4) {
1299 pStyle->_border = rStyle._border;
1300 pStyle->_borderColor = rStyle._borderColor;
1301 }
1302 if (bnset & 0x8) {
1303 pStyle->_descr = rStyle._descr;
1304 pStyle->_fontRelief = rStyle._fontRelief;
1305 pStyle->_fontEmphasisMark = rStyle._fontEmphasisMark;
1306 }
1307 if (bnset & 0x40)
1308 pStyle->_visualEffect = rStyle._visualEffect;
1309
1310 pStyle->_all |= rStyle._all;
1311 pStyle->_set |= rStyle._set;
1312
1313 return pStyle->_id;
1314 }
1315 }
1316
1317 // no appr style found, append new
1318 Style * pStyle = new Style( rStyle );
1319 pStyle->_id = OUString::valueOf( (sal_Int32)_styles.size() );
1320 _styles.push_back( pStyle );
1321 return pStyle->_id;
1322 }
1323 //__________________________________________________________________________________________________
~StyleBag()1324 StyleBag::~StyleBag() SAL_THROW( () )
1325 {
1326 for ( size_t nPos = 0; nPos < _styles.size(); ++nPos )
1327 {
1328 delete _styles[ nPos ];
1329 }
1330 }
1331 //__________________________________________________________________________________________________
dump(Reference<xml::sax::XExtendedDocumentHandler> const & xOut)1332 void StyleBag::dump( Reference< xml::sax::XExtendedDocumentHandler > const & xOut )
1333 {
1334 if (! _styles.empty())
1335 {
1336 OUString aStylesName( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":styles") );
1337 xOut->ignorableWhitespace( OUString() );
1338 xOut->startElement( aStylesName, Reference< xml::sax::XAttributeList >() );
1339 // export styles
1340 for ( size_t nPos = 0; nPos < _styles.size(); ++nPos )
1341 {
1342 Reference< xml::sax::XAttributeList > xAttr( _styles[ nPos ]->createElement() );
1343 static_cast< ElementDescriptor * >( xAttr.get() )->dump( xOut.get() );
1344 }
1345 xOut->ignorableWhitespace( OUString() );
1346 xOut->endElement( aStylesName );
1347 }
1348 }
1349
1350 //##################################################################################################
1351
1352 //==================================================================================================
exportDialogModel(Reference<xml::sax::XExtendedDocumentHandler> const & xOut,Reference<container::XNameContainer> const & xDialogModel)1353 void SAL_CALL exportDialogModel(
1354 Reference< xml::sax::XExtendedDocumentHandler > const & xOut,
1355 Reference< container::XNameContainer > const & xDialogModel )
1356 SAL_THROW( (Exception) )
1357 {
1358 StyleBag all_styles;
1359 ::std::vector< Reference< xml::sax::XAttributeList > > all_elements;
1360
1361 // read out all props
1362
1363 Sequence< OUString > aElements( xDialogModel->getElementNames() );
1364 OUString const * pElements = aElements.getConstArray();
1365
1366 ElementDescriptor * pRadioGroup = 0;
1367
1368 sal_Int32 nPos;
1369 for ( nPos = 0; nPos < aElements.getLength(); ++nPos )
1370 {
1371 Any aControlModel( xDialogModel->getByName( pElements[ nPos ] ) );
1372 Reference< beans::XPropertySet > xProps;
1373 OSL_VERIFY( aControlModel >>= xProps );
1374 if (! xProps.is())
1375 continue;
1376 Reference< beans::XPropertyState > xPropState( xProps, UNO_QUERY );
1377 OSL_ENSURE( xPropState.is(), "no XPropertyState!" );
1378 if (! xPropState.is())
1379 continue;
1380 Reference< lang::XServiceInfo > xServiceInfo( xProps, UNO_QUERY );
1381 OSL_ENSURE( xServiceInfo.is(), "no XServiceInfo!" );
1382 if (! xServiceInfo.is())
1383 continue;
1384
1385 ElementDescriptor * pElem = 0;
1386 Reference< xml::sax::XAttributeList > xElem;
1387
1388 // group up radio buttons
1389 if ( xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlRadioButtonModel") ) ) )
1390 {
1391 if (! pRadioGroup) // open radiogroup
1392 {
1393 pRadioGroup = new ElementDescriptor(
1394 xProps, xPropState,
1395 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":radiogroup") ) );
1396 all_elements.push_back( pRadioGroup );
1397 }
1398
1399 pElem = new ElementDescriptor(
1400 xProps, xPropState,
1401 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":radio") ) );
1402 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1403 pElem->readRadioButtonModel( &all_styles );
1404 pRadioGroup->addSubElement( xElem );
1405 }
1406 else // no radio
1407 {
1408 pRadioGroup = 0; // close radiogroup
1409
1410 if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlButtonModel") ) ) )
1411 {
1412 pElem = new ElementDescriptor(
1413 xProps, xPropState,
1414 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":button") ) );
1415 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1416 pElem->readButtonModel( &all_styles );
1417 }
1418 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlCheckBoxModel") ) ) )
1419 {
1420 pElem = new ElementDescriptor(
1421 xProps, xPropState,
1422 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":checkbox") ) );
1423 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1424 pElem->readCheckBoxModel( &all_styles );
1425 }
1426 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlComboBoxModel") ) ) )
1427 {
1428 pElem = new ElementDescriptor(
1429 xProps, xPropState,
1430 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":combobox") ) );
1431 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1432 pElem->readComboBoxModel( &all_styles );
1433 }
1434 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlListBoxModel") ) ) )
1435 {
1436 pElem = new ElementDescriptor(
1437 xProps, xPropState,
1438 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":menulist") ) );
1439 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1440 pElem->readListBoxModel( &all_styles );
1441 }
1442 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlGroupBoxModel") ) ) )
1443 {
1444 pElem = new ElementDescriptor(
1445 xProps, xPropState,
1446 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":titledbox") ) );
1447 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1448 pElem->readGroupBoxModel( &all_styles );
1449 }
1450 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlFixedTextModel") ) ) )
1451 {
1452 pElem = new ElementDescriptor(
1453 xProps, xPropState,
1454 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":text") ) );
1455 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1456 pElem->readFixedTextModel( &all_styles );
1457 }
1458 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlEditModel") ) ) )
1459 {
1460 pElem = new ElementDescriptor(
1461 xProps, xPropState,
1462 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":textfield") ) );
1463 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1464 pElem->readEditModel( &all_styles );
1465 }
1466 // FixedHyperLink
1467 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlFixedHyperlinkModel") ) ) )
1468 {
1469 pElem = new ElementDescriptor(
1470 xProps, xPropState,
1471 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":linklabel") ) );
1472 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1473 pElem->readFixedHyperLinkModel( &all_styles );
1474 }
1475 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlImageControlModel") ) ) )
1476 {
1477 pElem = new ElementDescriptor(
1478 xProps, xPropState,
1479 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":img") ) );
1480 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1481 pElem->readImageControlModel( &all_styles );
1482 }
1483 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlFileControlModel") ) ) )
1484 {
1485 pElem = new ElementDescriptor(
1486 xProps, xPropState,
1487 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":filecontrol") ) );
1488 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1489 pElem->readFileControlModel( &all_styles );
1490 }
1491 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.tree.TreeControlModel") ) ) )
1492 {
1493 pElem = new ElementDescriptor(
1494 xProps, xPropState,
1495 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":treecontrol") ) );
1496 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1497 pElem->readTreeControlModel( &all_styles );
1498 }
1499 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlCurrencyFieldModel") ) ) )
1500 {
1501 pElem = new ElementDescriptor(
1502 xProps, xPropState,
1503 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":currencyfield") ) );
1504 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1505 pElem->readCurrencyFieldModel( &all_styles );
1506 }
1507 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlDateFieldModel") ) ) )
1508 {
1509 pElem = new ElementDescriptor(
1510 xProps, xPropState,
1511 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":datefield") ) );
1512 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1513 pElem->readDateFieldModel( &all_styles );
1514 }
1515 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlNumericFieldModel") ) ) )
1516 {
1517 pElem = new ElementDescriptor(
1518 xProps, xPropState,
1519 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":numericfield") ) );
1520 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1521 pElem->readNumericFieldModel( &all_styles );
1522 }
1523 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlTimeFieldModel") ) ) )
1524 {
1525 pElem = new ElementDescriptor(
1526 xProps, xPropState,
1527 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":timefield") ) );
1528 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1529 pElem->readTimeFieldModel( &all_styles );
1530 }
1531 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlPatternFieldModel") ) ) )
1532 {
1533 pElem = new ElementDescriptor(
1534 xProps, xPropState,
1535 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":patternfield") ) );
1536 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1537 pElem->readPatternFieldModel( &all_styles );
1538 }
1539 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlFormattedFieldModel") ) ) )
1540 {
1541 pElem = new ElementDescriptor(
1542 xProps, xPropState,
1543 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":formattedfield") ) );
1544 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1545 pElem->readFormattedFieldModel( &all_styles );
1546 }
1547 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlFixedLineModel") ) ) )
1548 {
1549 pElem = new ElementDescriptor(
1550 xProps, xPropState,
1551 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":fixedline") ) );
1552 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1553 pElem->readFixedLineModel( &all_styles );
1554 }
1555 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlScrollBarModel") ) ) )
1556 {
1557 pElem = new ElementDescriptor(
1558 xProps, xPropState,
1559 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":scrollbar") ) );
1560 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1561 pElem->readScrollBarModel( &all_styles );
1562 }
1563 else if (xServiceInfo->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlProgressBarModel") ) ) )
1564 {
1565 pElem = new ElementDescriptor(
1566 xProps, xPropState,
1567 OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":progressmeter") ) );
1568 xElem = static_cast< xml::sax::XAttributeList * >( pElem );
1569 pElem->readProgressBarModel( &all_styles );
1570 }
1571 //
1572
1573 OSL_ASSERT( xElem.is() );
1574 if (xElem.is())
1575 {
1576 all_elements.push_back( xElem );
1577 }
1578 else
1579 {
1580 OSL_ENSURE( sal_False, "unknown control type!" );
1581 continue;
1582 }
1583 }
1584 }
1585
1586 xOut->startDocument();
1587
1588 OUString aDocTypeStr( RTL_CONSTASCII_USTRINGPARAM(
1589 "<!DOCTYPE dlg:window PUBLIC \"-//OpenOffice.org//DTD OfficeDocument 1.0//EN\""
1590 " \"dialog.dtd\">" ) );
1591 xOut->unknown( aDocTypeStr );
1592 xOut->ignorableWhitespace( OUString() );
1593
1594 // window
1595 Reference< beans::XPropertySet > xProps( xDialogModel, UNO_QUERY );
1596 OSL_ASSERT( xProps.is() );
1597 Reference< beans::XPropertyState > xPropState( xProps, UNO_QUERY );
1598 OSL_ASSERT( xPropState.is() );
1599
1600 OUString aWindowName( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":window") );
1601 ElementDescriptor * pWindow = new ElementDescriptor( xProps, xPropState, aWindowName );
1602 Reference< xml::sax::XAttributeList > xWindow( pWindow );
1603 pWindow->readDialogModel( &all_styles );
1604 xOut->ignorableWhitespace( OUString() );
1605 xOut->startElement( aWindowName, xWindow );
1606 // dump out events
1607 pWindow->dumpSubElements( xOut.get() );
1608 // dump out stylebag
1609 all_styles.dump( xOut );
1610
1611 if (! all_elements.empty())
1612 {
1613 // open up bulletinboard
1614 OUString aBBoardName( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":bulletinboard") );
1615 xOut->ignorableWhitespace( OUString() );
1616 xOut->startElement( aBBoardName, Reference< xml::sax::XAttributeList >() );
1617
1618 // export control elements
1619 for ( std::size_t n = 0; n < all_elements.size(); ++n )
1620 {
1621 ElementDescriptor * pElem = static_cast< ElementDescriptor * >( all_elements[ n ].get() );
1622 pElem->dump( xOut.get() );
1623 }
1624
1625 // end bulletinboard
1626 xOut->ignorableWhitespace( OUString() );
1627 xOut->endElement( aBBoardName );
1628 }
1629
1630 // end window
1631 xOut->ignorableWhitespace( OUString() );
1632 xOut->endElement( aWindowName );
1633
1634 xOut->endDocument();
1635 }
1636
1637 }
1638