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