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 "imp_share.hxx"
27
28 #include <osl/diagnose.h>
29 #include <tools/diagnose_ex.h>
30 #include <osl/mutex.hxx>
31
32 #include <rtl/ustrbuf.hxx>
33
34 #include <xmlscript/xml_import.hxx>
35 #include <comphelper/processfactory.hxx>
36
37 #include <com/sun/star/awt/CharSet.hpp>
38 #include <com/sun/star/awt/FontFamily.hpp>
39 #include <com/sun/star/awt/FontPitch.hpp>
40 #include <com/sun/star/awt/FontSlant.hpp>
41 #include <com/sun/star/awt/FontStrikeout.hpp>
42 #include <com/sun/star/awt/FontType.hpp>
43 #include <com/sun/star/awt/FontUnderline.hpp>
44 #include <com/sun/star/awt/FontWeight.hpp>
45 #include <com/sun/star/awt/FontWidth.hpp>
46 #include <com/sun/star/awt/ImagePosition.hpp>
47 #include <com/sun/star/awt/LineEndFormat.hpp>
48 #include <com/sun/star/awt/PushButtonType.hpp>
49 #include <com/sun/star/awt/VisualEffect.hpp>
50 #include <com/sun/star/style/VerticalAlignment.hpp>
51
52 #include <com/sun/star/script/XScriptEventsSupplier.hpp>
53 #include <com/sun/star/script/ScriptEventDescriptor.hpp>
54
55 #include <com/sun/star/view/SelectionType.hpp>
56
57 using namespace ::com::sun::star;
58 using namespace ::com::sun::star::uno;
59 using ::rtl::OUString;
60
61 namespace xmlscript
62 {
63
64 //__________________________________________________________________________________________________
endElement()65 void EventElement::endElement()
66 throw (xml::sax::SAXException, RuntimeException)
67 {
68 static_cast< ControlElement * >( _pParent )->_events.push_back( this );
69 }
70 //__________________________________________________________________________________________________
ControlElement(OUString const & rLocalName,Reference<xml::input::XAttributes> const & xAttributes,ElementBase * pParent,DialogImport * pImport)71 ControlElement::ControlElement(
72 OUString const & rLocalName,
73 Reference< xml::input::XAttributes > const & xAttributes,
74 ElementBase * pParent, DialogImport * pImport )
75 SAL_THROW( () )
76 : ElementBase(
77 pImport->XMLNS_DIALOGS_UID, rLocalName, xAttributes, pParent, pImport )
78 {
79 if (_pParent)
80 {
81 // inherit position
82 _nBasePosX = static_cast< ControlElement * >( _pParent )->_nBasePosX;
83 _nBasePosY = static_cast< ControlElement * >( _pParent )->_nBasePosY;
84 }
85 else
86 {
87 _nBasePosX = 0;
88 _nBasePosY = 0;
89 }
90 }
91
92 //__________________________________________________________________________________________________
getStyle(Reference<xml::input::XAttributes> const & xAttributes)93 Reference< xml::input::XElement > ControlElement::getStyle(
94 Reference< xml::input::XAttributes > const & xAttributes )
95 {
96 OUString aStyleId(
97 xAttributes->getValueByUidName(
98 _pImport->XMLNS_DIALOGS_UID,
99 OUString( RTL_CONSTASCII_USTRINGPARAM("style-id") ) ) );
100 if (aStyleId.getLength())
101 {
102 return _pImport->getStyle( aStyleId );
103 }
104 return Reference< xml::input::XElement >();
105 }
106 //__________________________________________________________________________________________________
getControlId(Reference<xml::input::XAttributes> const & xAttributes)107 OUString ControlElement::getControlId(
108 Reference< xml::input::XAttributes > const & xAttributes )
109 {
110 OUString aId(
111 xAttributes->getValueByUidName(
112 _pImport->XMLNS_DIALOGS_UID,
113 OUString( RTL_CONSTASCII_USTRINGPARAM("id") ) ) );
114 if (! aId.getLength())
115 {
116 throw xml::sax::SAXException(
117 OUString( RTL_CONSTASCII_USTRINGPARAM("missing id attribute!") ),
118 Reference< XInterface >(), Any() );
119 }
120 return aId;
121 }
122
123 //##################################################################################################
124
125 //__________________________________________________________________________________________________
importTextColorStyle(Reference<beans::XPropertySet> const & xProps)126 bool StyleElement::importTextColorStyle(
127 Reference< beans::XPropertySet > const & xProps )
128 {
129 if ((_inited & 0x2) != 0)
130 {
131 if ((_hasValue & 0x2) != 0)
132 {
133 xProps->setPropertyValue(
134 OUString( RTL_CONSTASCII_USTRINGPARAM("TextColor") ),
135 makeAny( _textColor ) );
136 return true;
137 }
138 return false;
139 }
140 _inited |= 0x2;
141
142 if (getLongAttr( &_textColor,
143 OUString( RTL_CONSTASCII_USTRINGPARAM("text-color") ),
144 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
145 {
146 _hasValue |= 0x2;
147 xProps->setPropertyValue(
148 OUString( RTL_CONSTASCII_USTRINGPARAM("TextColor") ),
149 makeAny( _textColor ) );
150 return true;
151 }
152 return false;
153 }
154 //__________________________________________________________________________________________________
importTextLineColorStyle(Reference<beans::XPropertySet> const & xProps)155 bool StyleElement::importTextLineColorStyle(
156 Reference< beans::XPropertySet > const & xProps )
157 {
158 if ((_inited & 0x20) != 0)
159 {
160 if ((_hasValue & 0x20) != 0)
161 {
162 xProps->setPropertyValue(
163 OUString( RTL_CONSTASCII_USTRINGPARAM("TextLineColor") ),
164 makeAny( _textLineColor ) );
165 return true;
166 }
167 return false;
168 }
169 _inited |= 0x20;
170
171 if (getLongAttr( &_textLineColor,
172 OUString( RTL_CONSTASCII_USTRINGPARAM("textline-color") ),
173 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
174 {
175 _hasValue |= 0x20;
176 xProps->setPropertyValue(
177 OUString( RTL_CONSTASCII_USTRINGPARAM("TextLineColor") ),
178 makeAny( _textLineColor ) );
179 return true;
180 }
181 return false;
182 }
183 //__________________________________________________________________________________________________
importFillColorStyle(Reference<beans::XPropertySet> const & xProps)184 bool StyleElement::importFillColorStyle(
185 Reference< beans::XPropertySet > const & xProps )
186 {
187 if ((_inited & 0x10) != 0)
188 {
189 if ((_hasValue & 0x10) != 0)
190 {
191 xProps->setPropertyValue(
192 OUString( RTL_CONSTASCII_USTRINGPARAM("FillColor") ), makeAny( _fillColor ) );
193 return true;
194 }
195 return false;
196 }
197 _inited |= 0x10;
198
199 if (getLongAttr(
200 &_fillColor,
201 OUString( RTL_CONSTASCII_USTRINGPARAM("fill-color") ),
202 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
203 {
204 _hasValue |= 0x10;
205 xProps->setPropertyValue(
206 OUString( RTL_CONSTASCII_USTRINGPARAM("FillColor") ),
207 makeAny( _fillColor ) );
208 return true;
209 }
210 return false;
211 }
212 //__________________________________________________________________________________________________
importBackgroundColorStyle(Reference<beans::XPropertySet> const & xProps)213 bool StyleElement::importBackgroundColorStyle(
214 Reference< beans::XPropertySet > const & xProps )
215 {
216 if ((_inited & 0x1) != 0)
217 {
218 if ((_hasValue & 0x1) != 0)
219 {
220 xProps->setPropertyValue(
221 OUString( RTL_CONSTASCII_USTRINGPARAM("BackgroundColor") ), makeAny( _backgroundColor ) );
222 return true;
223 }
224 return false;
225 }
226 _inited |= 0x1;
227
228 if (getLongAttr(
229 &_backgroundColor,
230 OUString( RTL_CONSTASCII_USTRINGPARAM("background-color") ),
231 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
232 {
233 _hasValue |= 0x1;
234 xProps->setPropertyValue(
235 OUString( RTL_CONSTASCII_USTRINGPARAM("BackgroundColor") ), makeAny( _backgroundColor ) );
236 return true;
237 }
238 return false;
239 }
240
241 //__________________________________________________________________________________________________
importBorderStyle(Reference<beans::XPropertySet> const & xProps)242 bool StyleElement::importBorderStyle(
243 Reference< beans::XPropertySet > const & xProps )
244 {
245 if ((_inited & 0x4) != 0)
246 {
247 if ((_hasValue & 0x4) != 0)
248 {
249 xProps->setPropertyValue(
250 OUSTR("Border"), makeAny( _border == BORDER_SIMPLE_COLOR
251 ? BORDER_SIMPLE : _border ) );
252 if (_border == BORDER_SIMPLE_COLOR)
253 xProps->setPropertyValue( OUSTR("BorderColor"),
254 makeAny(_borderColor) );
255 return true;
256 }
257 return false;
258 }
259 _inited |= 0x4;
260
261 OUString aValue;
262 if (getStringAttr(
263 &aValue, OUSTR("border"),
264 _xAttributes, _pImport->XMLNS_DIALOGS_UID )) {
265 if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("none") ))
266 _border = BORDER_NONE;
267 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("3d") ))
268 _border = BORDER_3D;
269 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("simple") ))
270 _border = BORDER_SIMPLE;
271 else {
272 _border = BORDER_SIMPLE_COLOR;
273 _borderColor = toInt32(aValue);
274 }
275
276 _hasValue |= 0x4;
277 importBorderStyle(xProps); // write values
278 }
279 return false;
280 }
281
282 //______________________________________________________________________________
importVisualEffectStyle(Reference<beans::XPropertySet> const & xProps)283 bool StyleElement::importVisualEffectStyle(
284 Reference<beans::XPropertySet> const & xProps )
285 {
286 if ((_inited & 0x40) != 0)
287 {
288 if ((_hasValue & 0x40) != 0)
289 {
290 xProps->setPropertyValue( OUSTR("VisualEffect"),
291 makeAny(_visualEffect) );
292 return true;
293 }
294 return false;
295 }
296 _inited |= 0x40;
297
298 OUString aValue;
299 if (getStringAttr( &aValue, OUString( RTL_CONSTASCII_USTRINGPARAM("look") ),
300 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
301 {
302 if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("none") ))
303 {
304 _visualEffect = awt::VisualEffect::NONE;
305 }
306 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("3d") ))
307 {
308 _visualEffect = awt::VisualEffect::LOOK3D;
309 }
310 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("simple") ))
311 {
312 _visualEffect = awt::VisualEffect::FLAT;
313 }
314 else
315 OSL_ASSERT( 0 );
316
317 _hasValue |= 0x40;
318 xProps->setPropertyValue( OUSTR("VisualEffect"),
319 makeAny(_visualEffect) );
320 }
321 return false;
322 }
323
324 //__________________________________________________________________________________________________
setFontProperties(Reference<beans::XPropertySet> const & xProps)325 void StyleElement::setFontProperties(
326 Reference< beans::XPropertySet > const & xProps )
327 {
328 xProps->setPropertyValue(
329 OUString( RTL_CONSTASCII_USTRINGPARAM("FontDescriptor") ), makeAny( _descr ) );
330 xProps->setPropertyValue(
331 OUString( RTL_CONSTASCII_USTRINGPARAM("FontEmphasisMark") ), makeAny( _fontEmphasisMark ) );
332 xProps->setPropertyValue(
333 OUString( RTL_CONSTASCII_USTRINGPARAM("FontRelief") ), makeAny( _fontRelief ) );
334 }
335 //__________________________________________________________________________________________________
importFontStyle(Reference<beans::XPropertySet> const & xProps)336 bool StyleElement::importFontStyle(
337 Reference< beans::XPropertySet > const & xProps )
338 {
339 if ((_inited & 0x8) != 0)
340 {
341 if ((_hasValue & 0x8) != 0)
342 {
343 setFontProperties( xProps );
344 return true;
345 }
346 return false;
347 }
348 _inited |= 0x8;
349
350 OUString aValue;
351 bool bFontImport;
352
353 // dialog:font-name CDATA #IMPLIED
354 bFontImport = getStringAttr(
355 &_descr.Name, OUString( RTL_CONSTASCII_USTRINGPARAM("font-name") ),
356 _xAttributes, _pImport->XMLNS_DIALOGS_UID );
357
358 // dialog:font-height %numeric; #IMPLIED
359 if (getStringAttr(
360 &aValue, OUString( RTL_CONSTASCII_USTRINGPARAM("font-height") ),
361 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
362 {
363 _descr.Height = (sal_Int16)toInt32( aValue );
364 bFontImport = true;
365 }
366 // dialog:font-width %numeric; #IMPLIED
367 if (getStringAttr(
368 &aValue, OUString( RTL_CONSTASCII_USTRINGPARAM("font-width") ),
369 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
370 {
371 _descr.Width = (sal_Int16)toInt32( aValue );
372 bFontImport = true;
373 }
374 // dialog:font-stylename CDATA #IMPLIED
375 bFontImport |= getStringAttr(
376 &_descr.StyleName,
377 OUString( RTL_CONSTASCII_USTRINGPARAM("font-stylename") ),
378 _xAttributes, _pImport->XMLNS_DIALOGS_UID );
379
380 // dialog:font-family "(decorative|modern|roman|script|swiss|system)" #IMPLIED
381 if (getStringAttr(
382 &aValue, OUString( RTL_CONSTASCII_USTRINGPARAM("font-family") ),
383 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
384 {
385 if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("decorative") ))
386 {
387 _descr.Family = awt::FontFamily::DECORATIVE;
388 }
389 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("modern") ))
390 {
391 _descr.Family = awt::FontFamily::MODERN;
392 }
393 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("roman") ))
394 {
395 _descr.Family = awt::FontFamily::ROMAN;
396 }
397 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("script") ))
398 {
399 _descr.Family = awt::FontFamily::SCRIPT;
400 }
401 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("swiss") ))
402 {
403 _descr.Family = awt::FontFamily::SWISS;
404 }
405 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("system") ))
406 {
407 _descr.Family = awt::FontFamily::SYSTEM;
408 }
409 else
410 {
411 throw xml::sax::SAXException(
412 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid font-family style!") ),
413 Reference< XInterface >(), Any() );
414 }
415 bFontImport = true;
416 }
417
418 // dialog:font-charset "(ansi|mac|ibmpc_437|ibmpc_850|ibmpc_860|ibmpc_861|ibmpc_863|ibmpc_865|system|symbol)" #IMPLIED
419 if (getStringAttr(
420 &aValue, OUString( RTL_CONSTASCII_USTRINGPARAM("font-charset") ),
421 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
422 {
423 if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("ansi") ))
424 {
425 _descr.CharSet = awt::CharSet::ANSI;
426 }
427 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("mac") ))
428 {
429 _descr.CharSet = awt::CharSet::MAC;
430 }
431 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("ibmpc_437") ))
432 {
433 _descr.CharSet = awt::CharSet::IBMPC_437;
434 }
435 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("ibmpc_850") ))
436 {
437 _descr.CharSet = awt::CharSet::IBMPC_850;
438 }
439 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("ibmpc_860") ))
440 {
441 _descr.CharSet = awt::CharSet::IBMPC_860;
442 }
443 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("ibmpc_861") ))
444 {
445 _descr.CharSet = awt::CharSet::IBMPC_861;
446 }
447 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("ibmpc_863") ))
448 {
449 _descr.CharSet = awt::CharSet::IBMPC_863;
450 }
451 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("ibmpc_865") ))
452 {
453 _descr.CharSet = awt::CharSet::IBMPC_865;
454 }
455 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("system") ))
456 {
457 _descr.CharSet = awt::CharSet::SYSTEM;
458 }
459 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("symbol") ))
460 {
461 _descr.CharSet = awt::CharSet::SYMBOL;
462 }
463 else
464 {
465 throw xml::sax::SAXException(
466 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid font-charset style!") ),
467 Reference< XInterface >(), Any() );
468 }
469 bFontImport = true;
470 }
471
472 // dialog:font-pitch "(fixed|variable)" #IMPLIED
473 if (getStringAttr(
474 &aValue, OUString( RTL_CONSTASCII_USTRINGPARAM("font-pitch") ),
475 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
476 {
477 if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("fixed") ))
478 {
479 _descr.Pitch = awt::FontPitch::FIXED;
480 }
481 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("variable") ))
482 {
483 _descr.Pitch = awt::FontPitch::VARIABLE;
484 }
485 else
486 {
487 throw xml::sax::SAXException(
488 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid font-pitch style!") ),
489 Reference< XInterface >(), Any() );
490 }
491 bFontImport = true;
492 }
493
494 // dialog:font-charwidth CDATA #IMPLIED
495 if (getStringAttr(
496 &aValue, OUString( RTL_CONSTASCII_USTRINGPARAM("font-charwidth") ),
497 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
498 {
499 _descr.CharacterWidth = aValue.toFloat();
500 bFontImport = true;
501 }
502 // dialog:font-weight CDATA #IMPLIED
503 if (getStringAttr(
504 &aValue, OUString( RTL_CONSTASCII_USTRINGPARAM("font-weight") ),
505 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
506 {
507 _descr.Weight = aValue.toFloat();
508 bFontImport = true;
509 }
510
511 // dialog:font-slant "(oblique|italic|reverse_oblique|reverse_italic)" #IMPLIED
512 if (getStringAttr(
513 &aValue, OUString( RTL_CONSTASCII_USTRINGPARAM("font-slant") ),
514 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
515 {
516 if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("oblique") ))
517 {
518 _descr.Slant = awt::FontSlant_OBLIQUE;
519 }
520 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("italic") ))
521 {
522 _descr.Slant = awt::FontSlant_ITALIC;
523 }
524 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("reverse_oblique") ))
525 {
526 _descr.Slant = awt::FontSlant_REVERSE_OBLIQUE;
527 }
528 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("reverse_italic") ))
529 {
530 _descr.Slant = awt::FontSlant_REVERSE_ITALIC;
531 }
532 else
533 {
534 throw xml::sax::SAXException(
535 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid font-slant style!") ),
536 Reference< XInterface >(), Any() );
537 }
538 bFontImport = true;
539 }
540
541 // dialog:font-underline "(single|double|dotted|dash|longdash|dashdot|dashdotdot|smallwave|wave|doublewave|bold|bolddotted|bolddash|boldlongdash|bolddashdot|bolddashdotdot|boldwave)" #IMPLIED
542 if (getStringAttr(
543 &aValue, OUString( RTL_CONSTASCII_USTRINGPARAM("font-underline") ),
544 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
545 {
546 if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("single") ))
547 {
548 _descr.Underline = awt::FontUnderline::SINGLE;
549 }
550 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("double") ))
551 {
552 _descr.Underline = awt::FontUnderline::DOUBLE;
553 }
554 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("dotted") ))
555 {
556 _descr.Underline = awt::FontUnderline::DOTTED;
557 }
558 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("dash") ))
559 {
560 _descr.Underline = awt::FontUnderline::DASH;
561 }
562 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("longdash") ))
563 {
564 _descr.Underline = awt::FontUnderline::LONGDASH;
565 }
566 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("dashdot") ))
567 {
568 _descr.Underline = awt::FontUnderline::DASHDOT;
569 }
570 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("dashdotdot") ))
571 {
572 _descr.Underline = awt::FontUnderline::DASHDOTDOT;
573 }
574 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("smallwave") ))
575 {
576 _descr.Underline = awt::FontUnderline::SMALLWAVE;
577 }
578 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("wave") ))
579 {
580 _descr.Underline = awt::FontUnderline::WAVE;
581 }
582 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("doublewave") ))
583 {
584 _descr.Underline = awt::FontUnderline::DOUBLEWAVE;
585 }
586 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("bold") ))
587 {
588 _descr.Underline = awt::FontUnderline::BOLD;
589 }
590 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("bolddotted") ))
591 {
592 _descr.Underline = awt::FontUnderline::BOLDDOTTED;
593 }
594 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("bolddash") ))
595 {
596 _descr.Underline = awt::FontUnderline::BOLDDASH;
597 }
598 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("boldlongdash") ))
599 {
600 _descr.Underline = awt::FontUnderline::BOLDLONGDASH;
601 }
602 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("bolddashdot") ))
603 {
604 _descr.Underline = awt::FontUnderline::BOLDDASHDOT;
605 }
606 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("bolddashdotdot") ))
607 {
608 _descr.Underline = awt::FontUnderline::BOLDDASHDOTDOT;
609 }
610 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("boldwave") ))
611 {
612 _descr.Underline = awt::FontUnderline::BOLDWAVE;
613 }
614 else
615 {
616 throw xml::sax::SAXException(
617 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid font-underline style!") ),
618 Reference< XInterface >(), Any() );
619 }
620 bFontImport = true;
621 }
622
623 // dialog:font-strikeout "(single|double|bold|slash|x)" #IMPLIED
624 if (getStringAttr(
625 &aValue, OUString( RTL_CONSTASCII_USTRINGPARAM("font-strikeout") ),
626 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
627 {
628 if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("single") ))
629 {
630 _descr.Strikeout = awt::FontStrikeout::SINGLE;
631 }
632 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("double") ))
633 {
634 _descr.Strikeout = awt::FontStrikeout::DOUBLE;
635 }
636 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("bold") ))
637 {
638 _descr.Strikeout = awt::FontStrikeout::BOLD;
639 }
640 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("slash") ))
641 {
642 _descr.Strikeout = awt::FontStrikeout::SLASH;
643 }
644 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("x") ))
645 {
646 _descr.Strikeout = awt::FontStrikeout::X;
647 }
648 else
649 {
650 throw xml::sax::SAXException(
651 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid font-strikeout style!") ),
652 Reference< XInterface >(), Any() );
653 }
654 bFontImport = true;
655 }
656
657 // dialog:font-orientation CDATA #IMPLIED
658 if (getStringAttr(
659 &aValue,
660 OUString( RTL_CONSTASCII_USTRINGPARAM("font-orientation") ),
661 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
662 {
663 _descr.Orientation = aValue.toFloat();
664 bFontImport = true;
665 }
666 // dialog:font-kerning %boolean; #IMPLIED
667 bFontImport |= getBoolAttr(
668 &_descr.Kerning,
669 OUString( RTL_CONSTASCII_USTRINGPARAM("font-kerning") ),
670 _xAttributes, _pImport->XMLNS_DIALOGS_UID );
671 // dialog:font-wordlinemode %boolean; #IMPLIED
672 bFontImport |= getBoolAttr(
673 &_descr.WordLineMode,
674 OUString( RTL_CONSTASCII_USTRINGPARAM("font-wordlinemode") ),
675 _xAttributes, _pImport->XMLNS_DIALOGS_UID );
676
677 // dialog:font-type "(raster|device|scalable)" #IMPLIED
678 if (getStringAttr(
679 &aValue, OUString( RTL_CONSTASCII_USTRINGPARAM("font-type") ),
680 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
681 {
682 if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("raster") ))
683 {
684 _descr.Type = awt::FontType::RASTER;
685 }
686 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("device") ))
687 {
688 _descr.Type = awt::FontType::DEVICE;
689 }
690 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("scalable") ))
691 {
692 _descr.Type = awt::FontType::SCALABLE;
693 }
694 else
695 {
696 throw xml::sax::SAXException(
697 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid font-type style!") ),
698 Reference< XInterface >(), Any() );
699 }
700 bFontImport = true;
701 }
702
703 // additional properties which are not part of the FontDescriptor struct
704 // dialog:font-relief (none|embossed|engraved) #IMPLIED
705 if (getStringAttr(
706 &aValue, OUString( RTL_CONSTASCII_USTRINGPARAM("font-relief") ),
707 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
708 {
709 if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("none") ))
710 {
711 _fontRelief = awt::FontRelief::NONE;
712 }
713 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("embossed") ))
714 {
715 _fontRelief = awt::FontRelief::EMBOSSED;
716 }
717 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("engraved") ))
718 {
719 _fontRelief = awt::FontRelief::ENGRAVED;
720 }
721 else
722 {
723 throw xml::sax::SAXException(
724 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid font-relief style!") ),
725 Reference< XInterface >(), Any() );
726 }
727 bFontImport = true;
728 }
729 // dialog:font-emphasismark (none|dot|circle|disc|accent|above|below) #IMPLIED
730 if (getStringAttr(
731 &aValue,
732 OUString( RTL_CONSTASCII_USTRINGPARAM("font-emphasismark") ),
733 _xAttributes, _pImport->XMLNS_DIALOGS_UID ))
734 {
735 if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("none") ))
736 {
737 _fontEmphasisMark = awt::FontEmphasisMark::NONE;
738 }
739 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("dot") ))
740 {
741 _fontEmphasisMark = awt::FontEmphasisMark::DOT;
742 }
743 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("circle") ))
744 {
745 _fontEmphasisMark = awt::FontEmphasisMark::CIRCLE;
746 }
747 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("disc") ))
748 {
749 _fontEmphasisMark = awt::FontEmphasisMark::DISC;
750 }
751 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("accent") ))
752 {
753 _fontEmphasisMark = awt::FontEmphasisMark::ACCENT;
754 }
755 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("above") ))
756 {
757 _fontEmphasisMark = awt::FontEmphasisMark::ABOVE;
758 }
759 else if (aValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("below") ))
760 {
761 _fontEmphasisMark = awt::FontEmphasisMark::BELOW;
762 }
763 else
764 {
765 throw xml::sax::SAXException(
766 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid font-emphasismark style!") ),
767 Reference< XInterface >(), Any() );
768 }
769 bFontImport = true;
770 }
771
772 // ==================================================
773 if (bFontImport)
774 {
775 _hasValue |= 0x8;
776 setFontProperties( xProps );
777 }
778
779 return bFontImport;
780 }
781
782 //##################################################################################################
783
784 //__________________________________________________________________________________________________
importStringProperty(OUString const & rPropName,OUString const & rAttrName,Reference<xml::input::XAttributes> const & xAttributes)785 bool ImportContext::importStringProperty(
786 OUString const & rPropName, OUString const & rAttrName,
787 Reference< xml::input::XAttributes > const & xAttributes )
788 {
789 OUString aValue(
790 xAttributes->getValueByUidName(
791 _pImport->XMLNS_DIALOGS_UID, rAttrName ) );
792 if (aValue.getLength())
793 {
794 _xControlModel->setPropertyValue( rPropName, makeAny( aValue ) );
795 return true;
796 }
797 return false;
798 }
799 //__________________________________________________________________________________________________
importDoubleProperty(OUString const & rPropName,OUString const & rAttrName,Reference<xml::input::XAttributes> const & xAttributes)800 bool ImportContext::importDoubleProperty(
801 OUString const & rPropName, OUString const & rAttrName,
802 Reference< xml::input::XAttributes > const & xAttributes )
803 {
804 OUString aValue(
805 xAttributes->getValueByUidName(
806 _pImport->XMLNS_DIALOGS_UID, rAttrName ) );
807 if (aValue.getLength())
808 {
809 _xControlModel->setPropertyValue( rPropName, makeAny( aValue.toDouble() ) );
810 return true;
811 }
812 return false;
813 }
814 //__________________________________________________________________________________________________
importBooleanProperty(OUString const & rPropName,OUString const & rAttrName,Reference<xml::input::XAttributes> const & xAttributes)815 bool ImportContext::importBooleanProperty(
816 OUString const & rPropName, OUString const & rAttrName,
817 Reference< xml::input::XAttributes > const & xAttributes )
818 {
819 sal_Bool bBool;
820 if (getBoolAttr(
821 &bBool, rAttrName, xAttributes, _pImport->XMLNS_DIALOGS_UID ))
822 {
823 _xControlModel->setPropertyValue( rPropName, makeAny( bBool ) );
824 return true;
825 }
826 return false;
827 }
828 //__________________________________________________________________________________________________
importLongProperty(OUString const & rPropName,OUString const & rAttrName,Reference<xml::input::XAttributes> const & xAttributes)829 bool ImportContext::importLongProperty(
830 OUString const & rPropName, OUString const & rAttrName,
831 Reference< xml::input::XAttributes > const & xAttributes )
832 {
833 OUString aValue(
834 xAttributes->getValueByUidName(
835 _pImport->XMLNS_DIALOGS_UID, rAttrName ) );
836 if (aValue.getLength())
837 {
838 _xControlModel->setPropertyValue( rPropName, makeAny( toInt32( aValue ) ) );
839 return true;
840 }
841 return false;
842 }
843 //__________________________________________________________________________________________________
importLongProperty(sal_Int32 nOffset,OUString const & rPropName,OUString const & rAttrName,Reference<xml::input::XAttributes> const & xAttributes)844 bool ImportContext::importLongProperty(
845 sal_Int32 nOffset,
846 OUString const & rPropName, OUString const & rAttrName,
847 Reference< xml::input::XAttributes > const & xAttributes )
848 {
849 OUString aValue(
850 xAttributes->getValueByUidName(
851 _pImport->XMLNS_DIALOGS_UID, rAttrName ) );
852 if (aValue.getLength())
853 {
854 _xControlModel->setPropertyValue( rPropName, makeAny( toInt32( aValue ) + nOffset ) );
855 return true;
856 }
857 return false;
858 }
859 //__________________________________________________________________________________________________
importHexLongProperty(OUString const & rPropName,OUString const & rAttrName,Reference<xml::input::XAttributes> const & xAttributes)860 bool ImportContext::importHexLongProperty(
861 OUString const & rPropName, OUString const & rAttrName,
862 Reference< xml::input::XAttributes > const & xAttributes )
863 {
864 OUString aValue(
865 xAttributes->getValueByUidName(
866 _pImport->XMLNS_DIALOGS_UID, rAttrName ) );
867 if (aValue.getLength())
868 {
869 _xControlModel->setPropertyValue( rPropName, makeAny( toInt32( aValue ) ) );
870 return true;
871 }
872 return false;
873 }
874 //__________________________________________________________________________________________________
importShortProperty(OUString const & rPropName,OUString const & rAttrName,Reference<xml::input::XAttributes> const & xAttributes)875 bool ImportContext::importShortProperty(
876 OUString const & rPropName, OUString const & rAttrName,
877 Reference< xml::input::XAttributes > const & xAttributes )
878 {
879 OUString aValue(
880 xAttributes->getValueByUidName(
881 _pImport->XMLNS_DIALOGS_UID, rAttrName ) );
882 if (aValue.getLength())
883 {
884 _xControlModel->setPropertyValue( rPropName, makeAny( (sal_Int16)toInt32( aValue ) ) );
885 return true;
886 }
887 return false;
888 }
889 //__________________________________________________________________________________________________
importAlignProperty(OUString const & rPropName,OUString const & rAttrName,Reference<xml::input::XAttributes> const & xAttributes)890 bool ImportContext::importAlignProperty(
891 OUString const & rPropName, OUString const & rAttrName,
892 Reference< xml::input::XAttributes > const & xAttributes )
893 {
894 OUString aAlign(
895 xAttributes->getValueByUidName(
896 _pImport->XMLNS_DIALOGS_UID, rAttrName ) );
897 if (aAlign.getLength())
898 {
899 sal_Int16 nAlign;
900 if (aAlign.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("left") ))
901 {
902 nAlign = 0;
903 }
904 else if (aAlign.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("center") ))
905 {
906 nAlign = 1;
907 }
908 else if (aAlign.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("right") ))
909 {
910 nAlign = 2;
911 }
912 else if (aAlign.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("none") ))
913 {
914 nAlign = 0; // default
915 }
916 else
917 {
918 throw xml::sax::SAXException(
919 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid align value!") ),
920 Reference< XInterface >(), Any() );
921 }
922
923 _xControlModel->setPropertyValue( rPropName, makeAny( nAlign ) );
924 return true;
925 }
926 return false;
927 }
928 //__________________________________________________________________________________________________
importVerticalAlignProperty(OUString const & rPropName,OUString const & rAttrName,Reference<xml::input::XAttributes> const & xAttributes)929 bool ImportContext::importVerticalAlignProperty(
930 OUString const & rPropName, OUString const & rAttrName,
931 Reference< xml::input::XAttributes > const & xAttributes )
932 {
933 OUString aAlign(
934 xAttributes->getValueByUidName(
935 _pImport->XMLNS_DIALOGS_UID, rAttrName ) );
936 if (aAlign.getLength())
937 {
938 style::VerticalAlignment eAlign;
939
940 if (aAlign.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("top") ))
941 {
942 eAlign = style::VerticalAlignment_TOP;
943 }
944 else if (aAlign.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("center") ))
945 {
946 eAlign = style::VerticalAlignment_MIDDLE;
947 }
948 else if (aAlign.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("bottom") ))
949 {
950 eAlign = style::VerticalAlignment_BOTTOM;
951 }
952 else
953 {
954 throw xml::sax::SAXException(
955 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid vertical align value!") ),
956 Reference< XInterface >(), Any() );
957 }
958
959 _xControlModel->setPropertyValue( rPropName, makeAny( eAlign ) );
960 return true;
961 }
962 return false;
963 }
964 //__________________________________________________________________________________________________
importImageAlignProperty(OUString const & rPropName,OUString const & rAttrName,Reference<xml::input::XAttributes> const & xAttributes)965 bool ImportContext::importImageAlignProperty(
966 OUString const & rPropName, OUString const & rAttrName,
967 Reference< xml::input::XAttributes > const & xAttributes )
968 {
969 OUString aAlign(
970 xAttributes->getValueByUidName(
971 _pImport->XMLNS_DIALOGS_UID, rAttrName ) );
972 if (aAlign.getLength())
973 {
974 sal_Int16 nAlign;
975 if (aAlign.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("left") ))
976 {
977 nAlign = 0;
978 }
979 else if (aAlign.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("top") ))
980 {
981 nAlign = 1;
982 }
983 else if (aAlign.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("right") ))
984 {
985 nAlign = 2;
986 }
987 else if (aAlign.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("bottom") ))
988 {
989 nAlign = 3;
990 }
991 else
992 {
993 throw xml::sax::SAXException(
994 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid image align value!") ),
995 Reference< XInterface >(), Any() );
996 }
997
998 _xControlModel->setPropertyValue( rPropName, makeAny( nAlign ) );
999 return true;
1000 }
1001 return false;
1002 }
1003 //__________________________________________________________________________________________________
importImagePositionProperty(OUString const & rPropName,OUString const & rAttrName,Reference<xml::input::XAttributes> const & xAttributes)1004 bool ImportContext::importImagePositionProperty(
1005 OUString const & rPropName, OUString const & rAttrName,
1006 Reference< xml::input::XAttributes > const & xAttributes )
1007 {
1008 OUString aPosition(
1009 xAttributes->getValueByUidName(
1010 _pImport->XMLNS_DIALOGS_UID, rAttrName ) );
1011 if (aPosition.getLength())
1012 {
1013 sal_Int16 nPosition;
1014 if (aPosition.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("left-top") ))
1015 {
1016 nPosition = awt::ImagePosition::LeftTop;
1017 }
1018 else if (aPosition.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("left-center") ))
1019 {
1020 nPosition = awt::ImagePosition::LeftCenter;
1021 }
1022 else if (aPosition.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("left-bottom") ))
1023 {
1024 nPosition = awt::ImagePosition::LeftBottom;
1025 }
1026 else if (aPosition.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("right-top") ))
1027 {
1028 nPosition = awt::ImagePosition::RightTop;
1029 }
1030 else if (aPosition.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("right-center") ))
1031 {
1032 nPosition = awt::ImagePosition::RightCenter;
1033 }
1034 else if (aPosition.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("right-bottom") ))
1035 {
1036 nPosition = awt::ImagePosition::RightBottom;
1037 }
1038 else if (aPosition.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("top-left") ))
1039 {
1040 nPosition = awt::ImagePosition::AboveLeft;
1041 }
1042 else if (aPosition.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("top-center") ))
1043 {
1044 nPosition = awt::ImagePosition::AboveCenter;
1045 }
1046 else if (aPosition.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("top-right") ))
1047 {
1048 nPosition = awt::ImagePosition::AboveRight;
1049 }
1050 else if (aPosition.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("bottom-left") ))
1051 {
1052 nPosition = awt::ImagePosition::BelowLeft;
1053 }
1054 else if (aPosition.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("bottom-center") ))
1055 {
1056 nPosition = awt::ImagePosition::BelowCenter;
1057 }
1058 else if (aPosition.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("bottom-right") ))
1059 {
1060 nPosition = awt::ImagePosition::BelowRight;
1061 }
1062 else if (aPosition.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("center") ))
1063 {
1064 nPosition = awt::ImagePosition::Centered;
1065 }
1066 else
1067 {
1068 throw xml::sax::SAXException(
1069 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid image position value!") ),
1070 Reference< XInterface >(), Any() );
1071 }
1072
1073 _xControlModel->setPropertyValue( rPropName, makeAny( nPosition ) );
1074 return true;
1075 }
1076 return false;
1077 }
1078 //__________________________________________________________________________________________________
importButtonTypeProperty(OUString const & rPropName,OUString const & rAttrName,Reference<xml::input::XAttributes> const & xAttributes)1079 bool ImportContext::importButtonTypeProperty(
1080 OUString const & rPropName, OUString const & rAttrName,
1081 Reference< xml::input::XAttributes > const & xAttributes )
1082 {
1083 OUString buttonType(
1084 xAttributes->getValueByUidName(
1085 _pImport->XMLNS_DIALOGS_UID, rAttrName ) );
1086 if (buttonType.getLength())
1087 {
1088 sal_Int16 nButtonType;
1089 if (buttonType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("standard") ))
1090 {
1091 nButtonType = awt::PushButtonType_STANDARD;
1092 }
1093 else if (buttonType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("ok") ))
1094 {
1095 nButtonType = awt::PushButtonType_OK;
1096 }
1097 else if (buttonType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("cancel") ))
1098 {
1099 nButtonType = awt::PushButtonType_CANCEL;
1100 }
1101 else if (buttonType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("help") ))
1102 {
1103 nButtonType = awt::PushButtonType_HELP;
1104 }
1105 else
1106 {
1107 throw xml::sax::SAXException(
1108 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid button-type value!") ),
1109 Reference< XInterface >(), Any() );
1110 }
1111
1112 _xControlModel->setPropertyValue( rPropName, makeAny( nButtonType ) );
1113 return true;
1114 }
1115 return false;
1116 }
1117 //__________________________________________________________________________________________________
importDateFormatProperty(OUString const & rPropName,OUString const & rAttrName,Reference<xml::input::XAttributes> const & xAttributes)1118 bool ImportContext::importDateFormatProperty(
1119 OUString const & rPropName, OUString const & rAttrName,
1120 Reference< xml::input::XAttributes > const & xAttributes )
1121 {
1122 OUString aFormat(
1123 xAttributes->getValueByUidName(
1124 _pImport->XMLNS_DIALOGS_UID, rAttrName ) );
1125 if (aFormat.getLength())
1126 {
1127 sal_Int16 nFormat;
1128 if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("system_short") ))
1129 {
1130 nFormat = 0;
1131 }
1132 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("system_short_YY") ))
1133 {
1134 nFormat = 1;
1135 }
1136 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("system_short_YYYY") ))
1137 {
1138 nFormat = 2;
1139 }
1140 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("system_long") ))
1141 {
1142 nFormat = 3;
1143 }
1144 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("short_DDMMYY") ))
1145 {
1146 nFormat = 4;
1147 }
1148 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("short_MMDDYY") ))
1149 {
1150 nFormat = 5;
1151 }
1152 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("short_YYMMDD") ))
1153 {
1154 nFormat = 6;
1155 }
1156 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("short_DDMMYYYY") ))
1157 {
1158 nFormat = 7;
1159 }
1160 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("short_MMDDYYYY") ))
1161 {
1162 nFormat = 8;
1163 }
1164 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("short_YYYYMMDD") ))
1165 {
1166 nFormat = 9;
1167 }
1168 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("short_YYMMDD_DIN5008") ))
1169 {
1170 nFormat = 10;
1171 }
1172 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("short_YYYYMMDD_DIN5008") ))
1173 {
1174 nFormat = 11;
1175 }
1176 else
1177 {
1178 throw xml::sax::SAXException(
1179 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid date-format value!") ),
1180 Reference< XInterface >(), Any() );
1181 }
1182
1183 _xControlModel->setPropertyValue( rPropName, makeAny( nFormat ) );
1184 return true;
1185 }
1186 return false;
1187 }
1188 //__________________________________________________________________________________________________
importTimeFormatProperty(OUString const & rPropName,OUString const & rAttrName,Reference<xml::input::XAttributes> const & xAttributes)1189 bool ImportContext::importTimeFormatProperty(
1190 OUString const & rPropName, OUString const & rAttrName,
1191 Reference< xml::input::XAttributes > const & xAttributes )
1192 {
1193 OUString aFormat(
1194 xAttributes->getValueByUidName(
1195 _pImport->XMLNS_DIALOGS_UID, rAttrName ) );
1196 if (aFormat.getLength())
1197 {
1198 sal_Int16 nFormat;
1199 if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("24h_short") ))
1200 {
1201 nFormat = 0;
1202 }
1203 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("24h_long") ))
1204 {
1205 nFormat = 1;
1206 }
1207 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("12h_short") ))
1208 {
1209 nFormat = 2;
1210 }
1211 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("12h_long") ))
1212 {
1213 nFormat = 3;
1214 }
1215 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("Duration_short") ))
1216 {
1217 nFormat = 4;
1218 }
1219 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("Duration_long") ))
1220 {
1221 nFormat = 5;
1222 }
1223 else
1224 {
1225 throw xml::sax::SAXException(
1226 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid time-format value!") ),
1227 Reference< XInterface >(), Any() );
1228 }
1229
1230 _xControlModel->setPropertyValue( rPropName, makeAny( nFormat ) );
1231 return true;
1232 }
1233 return false;
1234 }
1235 //__________________________________________________________________________________________________
importOrientationProperty(OUString const & rPropName,OUString const & rAttrName,Reference<xml::input::XAttributes> const & xAttributes)1236 bool ImportContext::importOrientationProperty(
1237 OUString const & rPropName, OUString const & rAttrName,
1238 Reference< xml::input::XAttributes > const & xAttributes )
1239 {
1240 OUString aOrient(
1241 xAttributes->getValueByUidName(
1242 _pImport->XMLNS_DIALOGS_UID, rAttrName ) );
1243 if (aOrient.getLength())
1244 {
1245 sal_Int32 nOrient;
1246 if (aOrient.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("horizontal") ))
1247 {
1248 nOrient = 0;
1249 }
1250 else if (aOrient.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("vertical") ))
1251 {
1252 nOrient = 1;
1253 }
1254 else
1255 {
1256 throw xml::sax::SAXException(
1257 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid orientation value!") ),
1258 Reference< XInterface >(), Any() );
1259 }
1260
1261 _xControlModel->setPropertyValue( rPropName, makeAny( nOrient ) );
1262 return true;
1263 }
1264 return false;
1265 }
1266 //__________________________________________________________________________________________________
importLineEndFormatProperty(OUString const & rPropName,OUString const & rAttrName,Reference<xml::input::XAttributes> const & xAttributes)1267 bool ImportContext::importLineEndFormatProperty(
1268 OUString const & rPropName, OUString const & rAttrName,
1269 Reference< xml::input::XAttributes > const & xAttributes )
1270 {
1271 OUString aFormat(
1272 xAttributes->getValueByUidName(
1273 _pImport->XMLNS_DIALOGS_UID, rAttrName ) );
1274 if (aFormat.getLength())
1275 {
1276 sal_Int16 nFormat;
1277 if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("carriage-return") ))
1278 {
1279 nFormat = awt::LineEndFormat::CARRIAGE_RETURN;
1280 }
1281 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("line-feed") ))
1282 {
1283 nFormat = awt::LineEndFormat::LINE_FEED;
1284 }
1285 else if (aFormat.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("carriage-return-line-feed") ))
1286 {
1287 nFormat = awt::LineEndFormat::CARRIAGE_RETURN_LINE_FEED;
1288 }
1289 else
1290 {
1291 throw xml::sax::SAXException(
1292 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid line end format value!") ),
1293 Reference< XInterface >(), Any() );
1294 }
1295
1296 _xControlModel->setPropertyValue( rPropName, makeAny( nFormat ) );
1297 return true;
1298 }
1299 return false;
1300 }
1301 //__________________________________________________________________________________________________
importSelectionTypeProperty(OUString const & rPropName,OUString const & rAttrName,Reference<xml::input::XAttributes> const & xAttributes)1302 bool ImportContext::importSelectionTypeProperty(
1303 OUString const & rPropName, OUString const & rAttrName,
1304 Reference< xml::input::XAttributes > const & xAttributes )
1305 {
1306 OUString aSelectionType(
1307 xAttributes->getValueByUidName(
1308 _pImport->XMLNS_DIALOGS_UID, rAttrName ) );
1309 if (aSelectionType.getLength())
1310 {
1311 view::SelectionType eSelectionType;
1312
1313 if (aSelectionType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("none") ))
1314 {
1315 eSelectionType = view::SelectionType_NONE;
1316 }
1317 else if (aSelectionType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("single") ))
1318 {
1319 eSelectionType = view::SelectionType_SINGLE;
1320 }
1321 else if (aSelectionType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("multi") ))
1322 {
1323 eSelectionType = view::SelectionType_MULTI;
1324 }
1325 else if (aSelectionType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("range") ))
1326 {
1327 eSelectionType = view::SelectionType_RANGE;
1328 }
1329 else
1330 {
1331 throw xml::sax::SAXException(
1332 OUString( RTL_CONSTASCII_USTRINGPARAM("invalid selection type value!") ),
1333 Reference< XInterface >(), Any() );
1334 }
1335
1336 _xControlModel->setPropertyValue( rPropName, makeAny( eSelectionType ) );
1337 return true;
1338 }
1339 return false;
1340 }
1341
1342 //==================================================================================================
1343 struct StringTriple
1344 {
1345 char const * first;
1346 char const * second;
1347 char const * third;
1348 };
1349 static StringTriple const s_aEventTranslations[] =
1350 {
1351 // from xmloff/source/forms/formevents.cxx
1352 // 28.09.2001 tbe added on-adjustmentvaluechange
1353 { "com.sun.star.form.XApproveActionListener", "approveAction", "on-approveaction" },
1354 { "com.sun.star.awt.XActionListener", "actionPerformed", "on-performaction" },
1355 { "com.sun.star.form.XChangeListener", "changed", "on-change" },
1356 { "com.sun.star.awt.XTextListener", "textChanged", "on-textchange" },
1357 { "com.sun.star.awt.XItemListener", "itemStateChanged", "on-itemstatechange" },
1358 { "com.sun.star.awt.XFocusListener", "focusGained", "on-focus" },
1359 { "com.sun.star.awt.XFocusListener", "focusLost", "on-blur" },
1360 { "com.sun.star.awt.XKeyListener", "keyPressed", "on-keydown" },
1361 { "com.sun.star.awt.XKeyListener", "keyReleased", "on-keyup" },
1362 { "com.sun.star.awt.XMouseListener", "mouseEntered", "on-mouseover" },
1363 { "com.sun.star.awt.XMouseMotionListener", "mouseDragged", "on-mousedrag" },
1364 { "com.sun.star.awt.XMouseMotionListener", "mouseMoved", "on-mousemove" },
1365 { "com.sun.star.awt.XMouseListener", "mousePressed", "on-mousedown" },
1366 { "com.sun.star.awt.XMouseListener", "mouseReleased", "on-mouseup" },
1367 { "com.sun.star.awt.XMouseListener", "mouseExited", "on-mouseout" },
1368 { "com.sun.star.form.XResetListener", "approveReset", "on-approvereset" },
1369 { "com.sun.star.form.XResetListener", "resetted", "on-reset" },
1370 { "com.sun.star.form.XSubmitListener", "approveSubmit", "on-submit" },
1371 { "com.sun.star.form.XUpdateListener", "approveUpdate", "on-approveupdate" },
1372 { "com.sun.star.form.XUpdateListener", "updated", "on-update" },
1373 { "com.sun.star.form.XLoadListener", "loaded", "on-load" },
1374 { "com.sun.star.form.XLoadListener", "reloading", "on-startreload" },
1375 { "com.sun.star.form.XLoadListener", "reloaded", "on-reload" },
1376 { "com.sun.star.form.XLoadListener", "unloading", "on-startunload" },
1377 { "com.sun.star.form.XLoadListener", "unloaded", "on-unload" },
1378 { "com.sun.star.form.XConfirmDeleteListener", "confirmDelete", "on-confirmdelete" },
1379 { "com.sun.star.sdb.XRowSetApproveListener", "approveRowChange", "on-approverowchange" },
1380 { "com.sun.star.sdbc.XRowSetListener", "rowChanged", "on-rowchange" },
1381 { "com.sun.star.sdb.XRowSetApproveListener", "approveCursorMove", "on-approvecursormove" },
1382 { "com.sun.star.sdbc.XRowSetListener", "cursorMoved", "on-cursormove" },
1383 { "com.sun.star.form.XDatabaseParameterListener", "approveParameter", "on-supplyparameter" },
1384 { "com.sun.star.sdb.XSQLErrorListener", "errorOccured", "on-error" },
1385 { "com.sun.star.awt.XAdjustmentListener", "adjustmentValueChanged", "on-adjustmentvaluechange" },
1386 { 0, 0, 0 }
1387 };
1388 extern StringTriple const * const g_pEventTranslations;
1389 StringTriple const * const g_pEventTranslations = s_aEventTranslations;
1390
1391 //__________________________________________________________________________________________________
importEvents(::std::vector<Reference<xml::input::XElement>> const & rEvents)1392 void ImportContext::importEvents(
1393 ::std::vector< Reference< xml::input::XElement > > const & rEvents )
1394 {
1395 Reference< script::XScriptEventsSupplier > xSupplier(
1396 _xControlModel, UNO_QUERY );
1397 if (xSupplier.is())
1398 {
1399 Reference< container::XNameContainer > xEvents( xSupplier->getEvents() );
1400 if (xEvents.is())
1401 {
1402 for ( size_t nPos = 0; nPos < rEvents.size(); ++nPos )
1403 {
1404 script::ScriptEventDescriptor descr;
1405
1406 EventElement * pEventElement = static_cast< EventElement * >( rEvents[ nPos ].get() );
1407 sal_Int32 nUid = pEventElement->getUid();
1408 OUString aLocalName( pEventElement->getLocalName() );
1409 Reference< xml::input::XAttributes > xAttributes(
1410 pEventElement->getAttributes() );
1411
1412 // nowadays script events
1413 if (_pImport->XMLNS_SCRIPT_UID == nUid)
1414 {
1415 if (!getStringAttr( &descr.ScriptType,
1416 OUString( RTL_CONSTASCII_USTRINGPARAM(
1417 "language") ),
1418 xAttributes,
1419 _pImport->XMLNS_SCRIPT_UID ) ||
1420 !getStringAttr( &descr.ScriptCode,
1421 OUString( RTL_CONSTASCII_USTRINGPARAM(
1422 "macro-name") ),
1423 xAttributes,
1424 _pImport->XMLNS_SCRIPT_UID ))
1425 {
1426 throw xml::sax::SAXException(
1427 OUString( RTL_CONSTASCII_USTRINGPARAM(
1428 "missing language or macro-name "
1429 "attribute(s) of event!") ),
1430 Reference< XInterface >(), Any() );
1431 }
1432 if ( descr.ScriptType.equals( OUString( RTL_CONSTASCII_USTRINGPARAM( "StarBasic" ) ) ) )
1433 {
1434 OUString aLocation;
1435 if (getStringAttr( &aLocation,
1436 OUString( RTL_CONSTASCII_USTRINGPARAM(
1437 "location") ),
1438 xAttributes,
1439 _pImport->XMLNS_SCRIPT_UID ))
1440 {
1441 // prepend location
1442 ::rtl::OUStringBuffer buf;
1443 buf.append( aLocation );
1444 buf.append( (sal_Unicode)':' );
1445 buf.append( descr.ScriptCode );
1446 descr.ScriptCode = buf.makeStringAndClear();
1447 }
1448 }
1449 else if ( descr.ScriptType.equals( OUString( RTL_CONSTASCII_USTRINGPARAM( "Script" ) ) ) )
1450 {
1451 // Check if there is a protocol, if not assume
1452 // this is an early scripting framework url ( without
1453 // the protocol ) and fix it up!!
1454 if ( descr.ScriptCode.indexOf( ':' ) == -1 )
1455 {
1456 ::rtl::OUStringBuffer buf;
1457 buf.append( OUString( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.script:" ) ) );
1458 buf.append( descr.ScriptCode );
1459 descr.ScriptCode = buf.makeStringAndClear();
1460 }
1461 }
1462
1463 // script:event element
1464 if (aLocalName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("event") ))
1465 {
1466 OUString aEventName;
1467 if (! getStringAttr(
1468 &aEventName,
1469 OUString(
1470 RTL_CONSTASCII_USTRINGPARAM("event-name") ),
1471 xAttributes,
1472 _pImport->XMLNS_SCRIPT_UID ))
1473 {
1474 throw xml::sax::SAXException(
1475 OUString(
1476 RTL_CONSTASCII_USTRINGPARAM(
1477 "missing event-name attribute!") ),
1478 Reference< XInterface >(), Any() );
1479 }
1480
1481 // lookup in table
1482 ::rtl::OString str(
1483 ::rtl::OUStringToOString(
1484 aEventName, RTL_TEXTENCODING_ASCII_US ) );
1485 StringTriple const * p = g_pEventTranslations;
1486 while (p->first)
1487 {
1488 if (0 == ::rtl_str_compare( p->third, str.getStr() ))
1489 {
1490 descr.ListenerType = OUString(
1491 p->first, ::rtl_str_getLength( p->first ),
1492 RTL_TEXTENCODING_ASCII_US );
1493 descr.EventMethod = OUString(
1494 p->second, ::rtl_str_getLength( p->second ),
1495 RTL_TEXTENCODING_ASCII_US );
1496 break;
1497 }
1498 ++p;
1499 }
1500
1501 if (! p->first)
1502 {
1503 throw xml::sax::SAXException(
1504 OUString( RTL_CONSTASCII_USTRINGPARAM("no matching event-name found!") ),
1505 Reference< XInterface >(), Any() );
1506 }
1507 }
1508 else // script:listener-event element
1509 {
1510 OSL_ASSERT( aLocalName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("listener-event") ) );
1511
1512 if (!getStringAttr(
1513 &descr.ListenerType,
1514 OUString( RTL_CONSTASCII_USTRINGPARAM(
1515 "listener-type") ),
1516 xAttributes,
1517 _pImport->XMLNS_SCRIPT_UID ) ||
1518 !getStringAttr(
1519 &descr.EventMethod,
1520 OUString( RTL_CONSTASCII_USTRINGPARAM(
1521 "listener-method") ),
1522 xAttributes, _pImport->XMLNS_SCRIPT_UID ))
1523 {
1524 throw xml::sax::SAXException(
1525 OUString(
1526 RTL_CONSTASCII_USTRINGPARAM(
1527 "missing listener-type or "
1528 "listener-method attribute(s)!") ),
1529 Reference< XInterface >(), Any() );
1530 }
1531 // optional listener param
1532 getStringAttr(
1533 &descr.AddListenerParam,
1534 OUString( RTL_CONSTASCII_USTRINGPARAM(
1535 "listener-param") ),
1536 xAttributes, _pImport->XMLNS_SCRIPT_UID );
1537 }
1538 }
1539 else // deprecated dlg:event element
1540 {
1541 OSL_ASSERT(
1542 _pImport->XMLNS_DIALOGS_UID == nUid &&
1543 aLocalName.equalsAsciiL(
1544 RTL_CONSTASCII_STRINGPARAM("event") ) );
1545
1546 if (!getStringAttr( &descr.ListenerType,
1547 OUString( RTL_CONSTASCII_USTRINGPARAM(
1548 "listener-type") ),
1549 xAttributes,
1550 _pImport->XMLNS_DIALOGS_UID ) ||
1551 !getStringAttr( &descr.EventMethod,
1552 OUString( RTL_CONSTASCII_USTRINGPARAM(
1553 "event-method") ),
1554 xAttributes,
1555 _pImport->XMLNS_DIALOGS_UID ))
1556 {
1557 throw xml::sax::SAXException(
1558 OUString( RTL_CONSTASCII_USTRINGPARAM("missing listener-type or event-method attribute(s)!") ),
1559 Reference< XInterface >(), Any() );
1560 }
1561
1562 getStringAttr(
1563 &descr.ScriptType,
1564 OUString( RTL_CONSTASCII_USTRINGPARAM("script-type") ),
1565 xAttributes, _pImport->XMLNS_DIALOGS_UID );
1566 getStringAttr(
1567 &descr.ScriptCode,
1568 OUString( RTL_CONSTASCII_USTRINGPARAM("script-code") ),
1569 xAttributes, _pImport->XMLNS_DIALOGS_UID );
1570 getStringAttr(
1571 &descr.AddListenerParam,
1572 OUString( RTL_CONSTASCII_USTRINGPARAM("param") ),
1573 xAttributes, _pImport->XMLNS_DIALOGS_UID );
1574 }
1575
1576 ::rtl::OUStringBuffer buf;
1577 buf.append( descr.ListenerType );
1578 buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("::") );
1579 buf.append( descr.EventMethod );
1580 xEvents->insertByName( buf.makeStringAndClear(), makeAny( descr ) );
1581 }
1582 }
1583 }
1584 }
1585 //__________________________________________________________________________________________________
importDefaults(sal_Int32 nBaseX,sal_Int32 nBaseY,Reference<xml::input::XAttributes> const & xAttributes,bool supportPrintable)1586 void ImportContext::importDefaults(
1587 sal_Int32 nBaseX, sal_Int32 nBaseY,
1588 Reference< xml::input::XAttributes > const & xAttributes,
1589 bool supportPrintable )
1590 {
1591 _xControlModel->setPropertyValue(
1592 OUString( RTL_CONSTASCII_USTRINGPARAM("Name") ),
1593 makeAny( _aId ) );
1594
1595 importShortProperty( OUString( RTL_CONSTASCII_USTRINGPARAM("TabIndex") ),
1596 OUString( RTL_CONSTASCII_USTRINGPARAM("tab-index") ),
1597 xAttributes );
1598
1599 sal_Bool bDisable = sal_False;
1600 if (getBoolAttr(
1601 &bDisable, OUString( RTL_CONSTASCII_USTRINGPARAM("disabled") ),
1602 xAttributes, _pImport->XMLNS_DIALOGS_UID ) &&
1603 bDisable)
1604 {
1605 _xControlModel->setPropertyValue(
1606 OUString( RTL_CONSTASCII_USTRINGPARAM("Enabled") ), makeAny( sal_False ) );
1607 }
1608
1609 sal_Bool bVisible = sal_True;
1610 if (getBoolAttr(
1611 &bVisible, OUString( RTL_CONSTASCII_USTRINGPARAM("visible") ),
1612 xAttributes, _pImport->XMLNS_DIALOGS_UID ) && !bVisible)
1613 {
1614 try
1615 {
1616
1617 _xControlModel->setPropertyValue(
1618 OUString( RTL_CONSTASCII_USTRINGPARAM("EnableVisible") ), makeAny( sal_False ) );
1619 }
1620 catch( Exception& )
1621 {
1622 DBG_UNHANDLED_EXCEPTION();
1623 }
1624 }
1625
1626 if (!importLongProperty( nBaseX,
1627 OUString( RTL_CONSTASCII_USTRINGPARAM("PositionX") ),
1628 OUString( RTL_CONSTASCII_USTRINGPARAM("left") ),
1629 xAttributes ) ||
1630 !importLongProperty( nBaseY,
1631 OUString( RTL_CONSTASCII_USTRINGPARAM("PositionY") ),
1632 OUString( RTL_CONSTASCII_USTRINGPARAM("top") ),
1633 xAttributes ) ||
1634 !importLongProperty( OUString( RTL_CONSTASCII_USTRINGPARAM("Width") ),
1635 OUString( RTL_CONSTASCII_USTRINGPARAM("width") ),
1636 xAttributes ) ||
1637 !importLongProperty( OUString( RTL_CONSTASCII_USTRINGPARAM("Height") ),
1638 OUString( RTL_CONSTASCII_USTRINGPARAM("height") ),
1639 xAttributes ))
1640 {
1641 throw xml::sax::SAXException(
1642 OUString( RTL_CONSTASCII_USTRINGPARAM("missing pos size attribute(s)!") ),
1643 Reference< XInterface >(), Any() );
1644 }
1645
1646 if (supportPrintable)
1647 {
1648 importBooleanProperty(
1649 OUString( RTL_CONSTASCII_USTRINGPARAM("Printable") ),
1650 OUString( RTL_CONSTASCII_USTRINGPARAM("printable") ),
1651 xAttributes );
1652 }
1653
1654 sal_Int32 nLong;
1655 if (! getLongAttr(
1656 &nLong,
1657 OUString( RTL_CONSTASCII_USTRINGPARAM("page") ),
1658 xAttributes, _pImport->XMLNS_DIALOGS_UID ))
1659 {
1660 nLong = 0;
1661 }
1662 _xControlModel->setPropertyValue(
1663 OUString( RTL_CONSTASCII_USTRINGPARAM("Step") ),
1664 makeAny( nLong ) );
1665
1666 importStringProperty( OUString( RTL_CONSTASCII_USTRINGPARAM("Tag") ),
1667 OUString( RTL_CONSTASCII_USTRINGPARAM("tag") ),
1668 xAttributes );
1669 importStringProperty( OUString( RTL_CONSTASCII_USTRINGPARAM("HelpText") ),
1670 OUString( RTL_CONSTASCII_USTRINGPARAM("help-text") ),
1671 xAttributes );
1672 importStringProperty( OUString( RTL_CONSTASCII_USTRINGPARAM("HelpURL") ),
1673 OUString( RTL_CONSTASCII_USTRINGPARAM("help-url") ),
1674 xAttributes );
1675 }
1676
1677 //##################################################################################################
1678
1679 //__________________________________________________________________________________________________
getParent()1680 Reference< xml::input::XElement > ElementBase::getParent()
1681 throw (RuntimeException)
1682 {
1683 return static_cast< xml::input::XElement * >( _pParent );
1684 }
1685 //__________________________________________________________________________________________________
getLocalName()1686 OUString ElementBase::getLocalName()
1687 throw (RuntimeException)
1688 {
1689 return _aLocalName;
1690 }
1691 //__________________________________________________________________________________________________
getUid()1692 sal_Int32 ElementBase::getUid()
1693 throw (RuntimeException)
1694 {
1695 return _nUid;
1696 }
1697 //__________________________________________________________________________________________________
getAttributes()1698 Reference< xml::input::XAttributes > ElementBase::getAttributes()
1699 throw (RuntimeException)
1700 {
1701 return _xAttributes;
1702 }
1703 //__________________________________________________________________________________________________
ignorableWhitespace(OUString const &)1704 void ElementBase::ignorableWhitespace(
1705 OUString const & /*rWhitespaces*/ )
1706 throw (xml::sax::SAXException, RuntimeException)
1707 {
1708 // not used
1709 }
1710 //__________________________________________________________________________________________________
characters(OUString const &)1711 void ElementBase::characters( OUString const & /*rChars*/ )
1712 throw (xml::sax::SAXException, RuntimeException)
1713 {
1714 // not used, all characters ignored
1715 }
1716 //__________________________________________________________________________________________________
endElement()1717 void ElementBase::endElement()
1718 throw (xml::sax::SAXException, RuntimeException)
1719 {
1720 }
1721 //______________________________________________________________________________
processingInstruction(OUString const &,OUString const &)1722 void ElementBase::processingInstruction(
1723 OUString const & /*Target*/, OUString const & /*Data*/ )
1724 throw (xml::sax::SAXException, RuntimeException)
1725 {
1726 }
1727 //__________________________________________________________________________________________________
startChildElement(sal_Int32,OUString const &,Reference<xml::input::XAttributes> const &)1728 Reference< xml::input::XElement > ElementBase::startChildElement(
1729 sal_Int32 /*nUid*/, OUString const & /*rLocalName*/,
1730 Reference< xml::input::XAttributes > const & /*xAttributes*/ )
1731 throw (xml::sax::SAXException, RuntimeException)
1732 {
1733 throw xml::sax::SAXException(
1734 OUString( RTL_CONSTASCII_USTRINGPARAM("unexpected element!") ),
1735 Reference< XInterface >(), Any() );
1736 }
1737
1738 //__________________________________________________________________________________________________
ElementBase(sal_Int32 nUid,OUString const & rLocalName,Reference<xml::input::XAttributes> const & xAttributes,ElementBase * pParent,DialogImport * pImport)1739 ElementBase::ElementBase(
1740 sal_Int32 nUid, OUString const & rLocalName,
1741 Reference< xml::input::XAttributes > const & xAttributes,
1742 ElementBase * pParent, DialogImport * pImport )
1743 SAL_THROW( () )
1744 : _pImport( pImport )
1745 , _pParent( pParent )
1746 , _nUid( nUid )
1747 , _aLocalName( rLocalName )
1748 , _xAttributes( xAttributes )
1749 {
1750 _pImport->acquire();
1751
1752 if (_pParent)
1753 {
1754 _pParent->acquire();
1755 }
1756 }
1757 //__________________________________________________________________________________________________
~ElementBase()1758 ElementBase::~ElementBase()
1759 SAL_THROW( () )
1760 {
1761 _pImport->release();
1762
1763 if (_pParent)
1764 {
1765 _pParent->release();
1766 }
1767
1768 #if OSL_DEBUG_LEVEL > 1
1769 ::rtl::OString aStr( ::rtl::OUStringToOString(
1770 _aLocalName, RTL_TEXTENCODING_ASCII_US ) );
1771 OSL_TRACE( "ElementBase::~ElementBase(): %s\n", aStr.getStr() );
1772 #endif
1773 }
1774
1775 //##################################################################################################
1776
1777 // XRoot
1778 //
1779
1780 //______________________________________________________________________________
startDocument(Reference<xml::input::XNamespaceMapping> const & xNamespaceMapping)1781 void DialogImport::startDocument(
1782 Reference< xml::input::XNamespaceMapping > const & xNamespaceMapping )
1783 throw (xml::sax::SAXException, RuntimeException)
1784 {
1785 XMLNS_DIALOGS_UID = xNamespaceMapping->getUidByUri(
1786 OUSTR(XMLNS_DIALOGS_URI) );
1787 XMLNS_SCRIPT_UID = xNamespaceMapping->getUidByUri(
1788 OUSTR(XMLNS_SCRIPT_URI) );
1789 }
1790 //__________________________________________________________________________________________________
endDocument()1791 void DialogImport::endDocument()
1792 throw (xml::sax::SAXException, RuntimeException)
1793 {
1794 // ignored
1795 }
1796 //__________________________________________________________________________________________________
processingInstruction(OUString const &,OUString const &)1797 void DialogImport::processingInstruction(
1798 OUString const & /*rTarget*/, OUString const & /*rData*/ )
1799 throw (xml::sax::SAXException, RuntimeException)
1800 {
1801 // ignored for now: xxx todo
1802 }
1803 //__________________________________________________________________________________________________
setDocumentLocator(Reference<xml::sax::XLocator> const &)1804 void DialogImport::setDocumentLocator(
1805 Reference< xml::sax::XLocator > const & /*xLocator*/ )
1806 throw (xml::sax::SAXException, RuntimeException)
1807 {
1808 // ignored for now: xxx todo
1809 }
1810 //__________________________________________________________________________________________________
startRootElement(sal_Int32 nUid,OUString const & rLocalName,Reference<xml::input::XAttributes> const & xAttributes)1811 Reference< xml::input::XElement > DialogImport::startRootElement(
1812 sal_Int32 nUid, OUString const & rLocalName,
1813 Reference< xml::input::XAttributes > const & xAttributes )
1814 throw (xml::sax::SAXException, RuntimeException)
1815 {
1816 if (XMLNS_DIALOGS_UID != nUid)
1817 {
1818 throw xml::sax::SAXException(
1819 OUString( RTL_CONSTASCII_USTRINGPARAM("illegal namespace!") ),
1820 Reference< XInterface >(), Any() );
1821 }
1822 // window
1823 else if (rLocalName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("window") ))
1824 {
1825 return new WindowElement( rLocalName, xAttributes, 0, this );
1826 }
1827 else
1828 {
1829 throw xml::sax::SAXException(
1830 OUString( RTL_CONSTASCII_USTRINGPARAM(
1831 "illegal root element (expected window) given: ") ) +
1832 rLocalName, Reference< XInterface >(), Any() );
1833 }
1834 }
1835 //__________________________________________________________________________________________________
~DialogImport()1836 DialogImport::~DialogImport()
1837 SAL_THROW( () )
1838 {
1839 #if OSL_DEBUG_LEVEL > 1
1840 OSL_TRACE( "DialogImport::~DialogImport().\n" );
1841 #endif
1842 }
1843 //__________________________________________________________________________________________________
getNumberFormatsSupplier()1844 Reference< util::XNumberFormatsSupplier > const & DialogImport::getNumberFormatsSupplier()
1845 {
1846 if (! _xSupplier.is())
1847 {
1848 Reference< XComponentContext > xContext( getComponentContext() );
1849 Reference< util::XNumberFormatsSupplier > xSupplier(
1850 xContext->getServiceManager()->createInstanceWithContext(
1851 OUString( RTL_CONSTASCII_USTRINGPARAM(
1852 "com.sun.star.util.NumberFormatsSupplier") ),
1853 xContext ), UNO_QUERY );
1854
1855 ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
1856 if (! _xSupplier.is())
1857 {
1858 _xSupplier = xSupplier;
1859 }
1860 }
1861 return _xSupplier;
1862 }
1863
1864 //__________________________________________________________________________________________________
addStyle(OUString const & rStyleId,Reference<xml::input::XElement> const & xStyle)1865 void DialogImport::addStyle(
1866 OUString const & rStyleId,
1867 Reference< xml::input::XElement > const & xStyle )
1868 SAL_THROW( () )
1869 {
1870 _styleNames.push_back( rStyleId );
1871 _styles.push_back( xStyle );
1872 }
1873 //__________________________________________________________________________________________________
getStyle(OUString const & rStyleId) const1874 Reference< xml::input::XElement > DialogImport::getStyle(
1875 OUString const & rStyleId ) const
1876 SAL_THROW( () )
1877 {
1878 for ( size_t nPos = 0; nPos < _styleNames.size(); ++nPos )
1879 {
1880 if (_styleNames[ nPos ] == rStyleId)
1881 {
1882 return _styles[ nPos ];
1883 }
1884 }
1885 return 0;
1886 }
1887
1888 //##################################################################################################
1889
1890 //==================================================================================================
importDialogModel(Reference<container::XNameContainer> const & xDialogModel,Reference<XComponentContext> const & xContext)1891 Reference< xml::sax::XDocumentHandler > SAL_CALL importDialogModel(
1892 Reference< container::XNameContainer > const & xDialogModel,
1893 Reference< XComponentContext > const & xContext )
1894 SAL_THROW( (Exception) )
1895 {
1896 return ::xmlscript::createDocumentHandler(
1897 static_cast< xml::input::XRoot * >(
1898 new DialogImport( xContext, xDialogModel ) ) );
1899 }
1900
1901 }
1902