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