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