1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22 // MARKER(update_precomp.py): autogen include statement, do not remove
23 #include "precompiled_xmloff.hxx"
24 #include "XMLImageMapContext.hxx"
25 #include <rtl/ustrbuf.hxx>
26 #include <com/sun/star/uno/Reference.h>
27 #include <com/sun/star/beans/XPropertySet.hpp>
28 #include <com/sun/star/beans/XPropertySetInfo.hpp>
29 #include <com/sun/star/xml/sax/XAttributeList.hpp>
30 #include <com/sun/star/container/XIndexContainer.hpp>
31 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
32 #include <com/sun/star/drawing/PointSequenceSequence.hpp>
33 #include <com/sun/star/document/XEventsSupplier.hpp>
34 #include <com/sun/star/awt/Rectangle.hpp>
35 #include <xmloff/xmltoken.hxx>
36 #include <xmloff/xmlimp.hxx>
37 #include <xmloff/xmltkmap.hxx>
38 #include "xmloff/xmlnmspe.hxx"
39 #include <xmloff/nmspmap.hxx>
40 #include <xmloff/xmluconv.hxx>
41 #include "xexptran.hxx"
42 #include "xmloff/xmlerror.hxx"
43 #include <xmloff/XMLEventsImportContext.hxx>
44 #include "XMLStringBufferImportContext.hxx"
45 #include <tools/debug.hxx>
46 #include <basegfx/polygon/b2dpolygon.hxx>
47 #include <basegfx/polygon/b2dpolygontools.hxx>
48
49 using namespace ::com::sun::star;
50 using namespace ::xmloff::token;
51
52 using ::rtl::OUString;
53 using ::rtl::OUStringBuffer;
54 using ::com::sun::star::beans::XPropertySet;
55 using ::com::sun::star::beans::XPropertySetInfo;
56 using ::com::sun::star::container::XIndexContainer;
57 using ::com::sun::star::lang::XMultiServiceFactory;
58 using ::com::sun::star::uno::Reference;
59 using ::com::sun::star::uno::UNO_QUERY;
60 using ::com::sun::star::xml::sax::XAttributeList;
61 using ::com::sun::star::uno::XInterface;
62 using ::com::sun::star::uno::Any;
63 using ::com::sun::star::drawing::PointSequenceSequence;
64 using ::com::sun::star::document::XEventsSupplier;
65
66
67 enum XMLImageMapToken
68 {
69 XML_TOK_IMAP_URL,
70 XML_TOK_IMAP_X,
71 XML_TOK_IMAP_Y,
72 XML_TOK_IMAP_CENTER_X,
73 XML_TOK_IMAP_CENTER_Y,
74 XML_TOK_IMAP_WIDTH,
75 XML_TOK_IMAP_HEIGTH,
76 XML_TOK_IMAP_POINTS,
77 XML_TOK_IMAP_VIEWBOX,
78 XML_TOK_IMAP_NOHREF,
79 XML_TOK_IMAP_NAME,
80 XML_TOK_IMAP_RADIUS,
81 XML_TOK_IMAP_TARGET
82 };
83
84 static __FAR_DATA SvXMLTokenMapEntry aImageMapObjectTokenMap[] =
85 {
86 { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_IMAP_URL },
87 { XML_NAMESPACE_OFFICE, XML_NAME, XML_TOK_IMAP_NAME },
88 { XML_NAMESPACE_DRAW, XML_NOHREF, XML_TOK_IMAP_NOHREF },
89 { XML_NAMESPACE_SVG, XML_X, XML_TOK_IMAP_X },
90 { XML_NAMESPACE_SVG, XML_Y, XML_TOK_IMAP_Y },
91 { XML_NAMESPACE_SVG, XML_CX, XML_TOK_IMAP_CENTER_X },
92 { XML_NAMESPACE_SVG, XML_CY, XML_TOK_IMAP_CENTER_Y },
93 { XML_NAMESPACE_SVG, XML_WIDTH, XML_TOK_IMAP_WIDTH },
94 { XML_NAMESPACE_SVG, XML_HEIGHT, XML_TOK_IMAP_HEIGTH },
95 { XML_NAMESPACE_SVG, XML_R, XML_TOK_IMAP_RADIUS },
96 { XML_NAMESPACE_SVG, XML_VIEWBOX, XML_TOK_IMAP_VIEWBOX },
97 { XML_NAMESPACE_DRAW, XML_POINTS, XML_TOK_IMAP_POINTS },
98 { XML_NAMESPACE_OFFICE, XML_TARGET_FRAME_NAME, XML_TOK_IMAP_TARGET },
99 XML_TOKEN_MAP_END
100 };
101
102
103
104 class XMLImageMapObjectContext : public SvXMLImportContext
105 {
106
107 protected:
108
109 const ::rtl::OUString sBoundary;
110 const ::rtl::OUString sCenter;
111 const ::rtl::OUString sTitle;
112 const ::rtl::OUString sDescription;
113 const ::rtl::OUString sImageMap;
114 const ::rtl::OUString sIsActive;
115 const ::rtl::OUString sName;
116 const ::rtl::OUString sPolygon;
117 const ::rtl::OUString sRadius;
118 const ::rtl::OUString sTarget;
119 const ::rtl::OUString sURL;
120
121 ::rtl::OUString sServiceName;
122
123 Reference<XIndexContainer> xImageMap; /// the image map
124 Reference<XPropertySet> xMapEntry; /// one map-entry (one area)
125
126 ::rtl::OUString sUrl;
127 ::rtl::OUString sTargt;
128 ::rtl::OUStringBuffer sDescriptionBuffer;
129 ::rtl::OUStringBuffer sTitleBuffer;
130 ::rtl::OUString sNam;
131 sal_Bool bIsActive;
132
133 sal_Bool bValid;
134
135 public:
136 TYPEINFO();
137
138 XMLImageMapObjectContext(
139 SvXMLImport& rImport,
140 sal_uInt16 nPrefix,
141 const ::rtl::OUString& rLocalName,
142 ::com::sun::star::uno::Reference<
143 ::com::sun::star::container::XIndexContainer> xMap,
144 const sal_Char* pServiceName);
145
146 void StartElement(
147 const ::com::sun::star::uno::Reference<
148 ::com::sun::star::xml::sax::XAttributeList >& xAttrList );
149
150 void EndElement();
151
152 SvXMLImportContext *CreateChildContext(
153 sal_uInt16 nPrefix,
154 const ::rtl::OUString& rLocalName,
155 const ::com::sun::star::uno::Reference<
156 ::com::sun::star::xml::sax::XAttributeList> & xAttrList );
157
158 protected:
159
160 virtual void ProcessAttribute(
161 enum XMLImageMapToken eToken,
162 const ::rtl::OUString& rValue);
163
164 virtual void Prepare(
165 ::com::sun::star::uno::Reference<
166 ::com::sun::star::beans::XPropertySet> & rPropertySet);
167 };
168
169
170 TYPEINIT1( XMLImageMapObjectContext, SvXMLImportContext );
171
XMLImageMapObjectContext(SvXMLImport & rImport,sal_uInt16 nPrefix,const OUString & rLocalName,Reference<XIndexContainer> xMap,const sal_Char * pServiceName)172 XMLImageMapObjectContext::XMLImageMapObjectContext(
173 SvXMLImport& rImport,
174 sal_uInt16 nPrefix,
175 const OUString& rLocalName,
176 Reference<XIndexContainer> xMap,
177 const sal_Char* pServiceName) :
178 SvXMLImportContext(rImport, nPrefix, rLocalName),
179 sBoundary(RTL_CONSTASCII_USTRINGPARAM("Boundary")),
180 sCenter(RTL_CONSTASCII_USTRINGPARAM("Center")),
181 sTitle(RTL_CONSTASCII_USTRINGPARAM("Title")),
182 sDescription(RTL_CONSTASCII_USTRINGPARAM("Description")),
183 sImageMap(RTL_CONSTASCII_USTRINGPARAM("ImageMap")),
184 sIsActive(RTL_CONSTASCII_USTRINGPARAM("IsActive")),
185 sName(RTL_CONSTASCII_USTRINGPARAM("Name")),
186 sPolygon(RTL_CONSTASCII_USTRINGPARAM("Polygon")),
187 sRadius(RTL_CONSTASCII_USTRINGPARAM("Radius")),
188 sTarget(RTL_CONSTASCII_USTRINGPARAM("Target")),
189 sURL(RTL_CONSTASCII_USTRINGPARAM("URL")),
190 xImageMap(xMap),
191 bIsActive(sal_True),
192 bValid(sal_False)
193 {
194 DBG_ASSERT(NULL != pServiceName,
195 "Please supply the image map object service name");
196
197 Reference<XMultiServiceFactory> xFactory(GetImport().GetModel(),UNO_QUERY);
198 if( xFactory.is() )
199 {
200 Reference<XInterface> xIfc = xFactory->createInstance(
201 OUString::createFromAscii(pServiceName));
202 DBG_ASSERT(xIfc.is(), "can't create image map object!");
203 if( xIfc.is() )
204 {
205 Reference<XPropertySet> xPropertySet( xIfc, UNO_QUERY );
206
207 xMapEntry = xPropertySet;
208 }
209 // else: can't create service -> ignore
210 }
211 // else: can't even get factory -> ignore
212 }
213
StartElement(const Reference<XAttributeList> & xAttrList)214 void XMLImageMapObjectContext::StartElement(
215 const Reference<XAttributeList >& xAttrList )
216 {
217 SvXMLTokenMap aMap(aImageMapObjectTokenMap);
218
219 sal_Int16 nLength = xAttrList->getLength();
220 for(sal_Int16 nAttr = 0; nAttr < nLength; nAttr++)
221 {
222 OUString sLocalName;
223 sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
224 GetKeyByAttrName( xAttrList->getNameByIndex(nAttr),
225 &sLocalName );
226 OUString sValue = xAttrList->getValueByIndex(nAttr);
227
228 ProcessAttribute(
229 (enum XMLImageMapToken)aMap.Get(nPrefix, sLocalName), sValue);
230 }
231 }
232
EndElement()233 void XMLImageMapObjectContext::EndElement()
234 {
235 // only create and insert image map object if validity flag is set
236 // (and we actually have an image map)
237 if ( bValid && xImageMap.is() && xMapEntry.is() )
238 {
239 // set values
240 Prepare( xMapEntry );
241
242 // insert into image map
243 Any aAny;
244 aAny <<= xMapEntry;
245 xImageMap->insertByIndex( xImageMap->getCount(), aAny );
246 }
247 // else: not valid -> don't create and insert
248 }
249
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const Reference<XAttributeList> & xAttrList)250 SvXMLImportContext* XMLImageMapObjectContext::CreateChildContext(
251 sal_uInt16 nPrefix,
252 const OUString& rLocalName,
253 const Reference<XAttributeList> & xAttrList )
254 {
255 if ( (XML_NAMESPACE_OFFICE == nPrefix) &&
256 IsXMLToken(rLocalName, XML_EVENT_LISTENERS) )
257 {
258 Reference<XEventsSupplier> xEvents( xMapEntry, UNO_QUERY );
259 return new XMLEventsImportContext(
260 GetImport(), nPrefix, rLocalName, xEvents);
261 }
262 else if ( (XML_NAMESPACE_SVG == nPrefix) &&
263 IsXMLToken(rLocalName, XML_TITLE) )
264 {
265 return new XMLStringBufferImportContext(
266 GetImport(), nPrefix, rLocalName, sTitleBuffer);
267 }
268 else if ( (XML_NAMESPACE_SVG == nPrefix) &&
269 IsXMLToken(rLocalName, XML_DESC) )
270 {
271 return new XMLStringBufferImportContext(
272 GetImport(), nPrefix, rLocalName, sDescriptionBuffer);
273 }
274 else
275 return SvXMLImportContext::CreateChildContext(nPrefix, rLocalName,
276 xAttrList);
277
278 }
279
ProcessAttribute(enum XMLImageMapToken eToken,const OUString & rValue)280 void XMLImageMapObjectContext::ProcessAttribute(
281 enum XMLImageMapToken eToken,
282 const OUString& rValue)
283 {
284 switch (eToken)
285 {
286 case XML_TOK_IMAP_URL:
287 sUrl = GetImport().GetAbsoluteReference(rValue);
288 break;
289
290 case XML_TOK_IMAP_TARGET:
291 sTargt = rValue;
292 break;
293
294 case XML_TOK_IMAP_NOHREF:
295 bIsActive = ! IsXMLToken(rValue, XML_NOHREF);
296 break;
297
298 case XML_TOK_IMAP_NAME:
299 sNam = rValue;
300 break;
301 default:
302 // do nothing
303 break;
304 }
305 }
306
Prepare(Reference<XPropertySet> & rPropertySet)307 void XMLImageMapObjectContext::Prepare(
308 Reference<XPropertySet> & rPropertySet)
309 {
310 rPropertySet->setPropertyValue( sURL, Any( sUrl ) );
311 rPropertySet->setPropertyValue( sTitle, Any( sTitleBuffer.makeStringAndClear() ) );
312 rPropertySet->setPropertyValue( sDescription, Any( sDescriptionBuffer.makeStringAndClear() ) );
313 rPropertySet->setPropertyValue( sTarget, Any( sTargt ) );
314 rPropertySet->setPropertyValue( sIsActive, Any( bIsActive ) );
315 rPropertySet->setPropertyValue( sName, Any( sNam ) );
316 }
317
318
319
320 class XMLImageMapRectangleContext : public XMLImageMapObjectContext
321 {
322 awt::Rectangle aRectangle;
323
324 sal_Bool bXOK;
325 sal_Bool bYOK;
326 sal_Bool bWidthOK;
327 sal_Bool bHeightOK;
328
329 public:
330 TYPEINFO();
331
332 XMLImageMapRectangleContext(
333 SvXMLImport& rImport,
334 sal_uInt16 nPrefix,
335 const ::rtl::OUString& rLocalName,
336 ::com::sun::star::uno::Reference<
337 ::com::sun::star::container::XIndexContainer> xMap);
338
339 virtual ~XMLImageMapRectangleContext();
340
341 protected:
342 virtual void ProcessAttribute(
343 enum XMLImageMapToken eToken,
344 const ::rtl::OUString& rValue);
345
346 virtual void Prepare(
347 ::com::sun::star::uno::Reference<
348 ::com::sun::star::beans::XPropertySet> & rPropertySet);
349 };
350
351
352
353 TYPEINIT1(XMLImageMapRectangleContext, XMLImageMapObjectContext);
354
XMLImageMapRectangleContext(SvXMLImport & rImport,sal_uInt16 nPrefix,const OUString & rLocalName,Reference<XIndexContainer> xMap)355 XMLImageMapRectangleContext::XMLImageMapRectangleContext(
356 SvXMLImport& rImport,
357 sal_uInt16 nPrefix,
358 const OUString& rLocalName,
359 Reference<XIndexContainer> xMap) :
360 XMLImageMapObjectContext(rImport, nPrefix, rLocalName, xMap,
361 "com.sun.star.image.ImageMapRectangleObject"),
362 bXOK(sal_False),
363 bYOK(sal_False),
364 bWidthOK(sal_False),
365 bHeightOK(sal_False)
366 {
367 }
368
~XMLImageMapRectangleContext()369 XMLImageMapRectangleContext::~XMLImageMapRectangleContext()
370 {
371 }
372
ProcessAttribute(enum XMLImageMapToken eToken,const OUString & rValue)373 void XMLImageMapRectangleContext::ProcessAttribute(
374 enum XMLImageMapToken eToken,
375 const OUString& rValue)
376 {
377 sal_Int32 nTmp;
378 switch (eToken)
379 {
380 case XML_TOK_IMAP_X:
381 if (GetImport().GetMM100UnitConverter().convertMeasure(nTmp,
382 rValue))
383 {
384 aRectangle.X = nTmp;
385 bXOK = sal_True;
386 }
387 break;
388 case XML_TOK_IMAP_Y:
389 if (GetImport().GetMM100UnitConverter().convertMeasure(nTmp,
390 rValue))
391 {
392 aRectangle.Y = nTmp;
393 bYOK = sal_True;
394 }
395 break;
396 case XML_TOK_IMAP_WIDTH:
397 if (GetImport().GetMM100UnitConverter().convertMeasure(nTmp,
398 rValue))
399 {
400 aRectangle.Width = nTmp;
401 bWidthOK = sal_True;
402 }
403 break;
404 case XML_TOK_IMAP_HEIGTH:
405 if (GetImport().GetMM100UnitConverter().convertMeasure(nTmp,
406 rValue))
407 {
408 aRectangle.Height = nTmp;
409 bHeightOK = sal_True;
410 }
411 break;
412 default:
413 XMLImageMapObjectContext::ProcessAttribute(eToken, rValue);
414 }
415
416 bValid = bHeightOK && bXOK && bYOK && bWidthOK;
417 }
418
Prepare(Reference<XPropertySet> & rPropertySet)419 void XMLImageMapRectangleContext::Prepare(
420 Reference<XPropertySet> & rPropertySet)
421 {
422 Any aAny;
423 aAny <<= aRectangle;
424 rPropertySet->setPropertyValue( sBoundary, aAny );
425
426 // common properties handled by super class
427 XMLImageMapObjectContext::Prepare(rPropertySet);
428 }
429
430
431 class XMLImageMapPolygonContext : public XMLImageMapObjectContext
432 {
433 ::rtl::OUString sViewBoxString;
434 ::rtl::OUString sPointsString;
435
436 sal_Bool bViewBoxOK;
437 sal_Bool bPointsOK;
438
439 public:
440 TYPEINFO();
441
442 XMLImageMapPolygonContext(
443 SvXMLImport& rImport,
444 sal_uInt16 nPrefix,
445 const ::rtl::OUString& rLocalName,
446 ::com::sun::star::uno::Reference<
447 ::com::sun::star::container::XIndexContainer> xMap);
448
449 virtual ~XMLImageMapPolygonContext();
450
451 protected:
452 virtual void ProcessAttribute(
453 enum XMLImageMapToken eToken,
454 const ::rtl::OUString& rValue);
455
456 virtual void Prepare(
457 ::com::sun::star::uno::Reference<
458 ::com::sun::star::beans::XPropertySet> & rPropertySet);
459 };
460
461
462
463 TYPEINIT1(XMLImageMapPolygonContext, XMLImageMapObjectContext);
464
XMLImageMapPolygonContext(SvXMLImport & rImport,sal_uInt16 nPrefix,const OUString & rLocalName,Reference<XIndexContainer> xMap)465 XMLImageMapPolygonContext::XMLImageMapPolygonContext(
466 SvXMLImport& rImport,
467 sal_uInt16 nPrefix,
468 const OUString& rLocalName,
469 Reference<XIndexContainer> xMap) :
470 XMLImageMapObjectContext(rImport, nPrefix, rLocalName, xMap,
471 "com.sun.star.image.ImageMapPolygonObject"),
472 bViewBoxOK(sal_False),
473 bPointsOK(sal_False)
474 {
475 }
476
~XMLImageMapPolygonContext()477 XMLImageMapPolygonContext::~XMLImageMapPolygonContext()
478 {
479 }
480
ProcessAttribute(enum XMLImageMapToken eToken,const OUString & rValue)481 void XMLImageMapPolygonContext::ProcessAttribute(
482 enum XMLImageMapToken eToken,
483 const OUString& rValue)
484 {
485 switch (eToken)
486 {
487 case XML_TOK_IMAP_POINTS:
488 sPointsString = rValue;
489 bPointsOK = sal_True;
490 break;
491 case XML_TOK_IMAP_VIEWBOX:
492 sViewBoxString = rValue;
493 bViewBoxOK = sal_True;
494 break;
495 default:
496 XMLImageMapObjectContext::ProcessAttribute(eToken, rValue);
497 break;
498 }
499
500 bValid = bViewBoxOK && bPointsOK;
501 }
502
Prepare(Reference<XPropertySet> & rPropertySet)503 void XMLImageMapPolygonContext::Prepare(Reference<XPropertySet> & rPropertySet)
504 {
505 // process view box
506 SdXMLImExViewBox aViewBox(sViewBoxString, GetImport().GetMM100UnitConverter());
507
508 // get polygon sequence
509 basegfx::B2DPolygon aPolygon;
510
511 if(basegfx::tools::importFromSvgPoints(aPolygon, sPointsString))
512 {
513 if(aPolygon.count())
514 {
515 com::sun::star::drawing::PointSequence aPointSequence;
516 uno::Any aAny;
517
518 basegfx::tools::B2DPolygonToUnoPointSequence(aPolygon, aPointSequence);
519 aAny <<= aPointSequence;
520 rPropertySet->setPropertyValue(sPolygon, aAny);
521 }
522 }
523
524 // parent properties
525 XMLImageMapObjectContext::Prepare(rPropertySet);
526 }
527
528 class XMLImageMapCircleContext : public XMLImageMapObjectContext
529 {
530 awt::Point aCenter;
531 sal_Int32 nRadius;
532
533 sal_Bool bXOK;
534 sal_Bool bYOK;
535 sal_Bool bRadiusOK;
536
537 public:
538 TYPEINFO();
539
540 XMLImageMapCircleContext(
541 SvXMLImport& rImport,
542 sal_uInt16 nPrefix,
543 const ::rtl::OUString& rLocalName,
544 ::com::sun::star::uno::Reference<
545 ::com::sun::star::container::XIndexContainer> xMap);
546
547 virtual ~XMLImageMapCircleContext();
548
549 protected:
550 virtual void ProcessAttribute(
551 enum XMLImageMapToken eToken,
552 const ::rtl::OUString& rValue);
553
554 virtual void Prepare(
555 ::com::sun::star::uno::Reference<
556 ::com::sun::star::beans::XPropertySet> & rPropertySet);
557 };
558
559 TYPEINIT1(XMLImageMapCircleContext, XMLImageMapObjectContext);
560
XMLImageMapCircleContext(SvXMLImport & rImport,sal_uInt16 nPrefix,const OUString & rLocalName,Reference<XIndexContainer> xMap)561 XMLImageMapCircleContext::XMLImageMapCircleContext(
562 SvXMLImport& rImport,
563 sal_uInt16 nPrefix,
564 const OUString& rLocalName,
565 Reference<XIndexContainer> xMap) :
566 XMLImageMapObjectContext(rImport, nPrefix, rLocalName, xMap,
567 "com.sun.star.image.ImageMapCircleObject"),
568 bXOK(sal_False),
569 bYOK(sal_False),
570 bRadiusOK(sal_False)
571 {
572 }
573
~XMLImageMapCircleContext()574 XMLImageMapCircleContext::~XMLImageMapCircleContext()
575 {
576 }
577
ProcessAttribute(enum XMLImageMapToken eToken,const OUString & rValue)578 void XMLImageMapCircleContext::ProcessAttribute(
579 enum XMLImageMapToken eToken,
580 const OUString& rValue)
581 {
582 sal_Int32 nTmp;
583 switch (eToken)
584 {
585 case XML_TOK_IMAP_CENTER_X:
586 if (GetImport().GetMM100UnitConverter().convertMeasure(nTmp,
587 rValue))
588 {
589 aCenter.X = nTmp;
590 bXOK = sal_True;
591 }
592 break;
593 case XML_TOK_IMAP_CENTER_Y:
594 if (GetImport().GetMM100UnitConverter().convertMeasure(nTmp,
595 rValue))
596 {
597 aCenter.Y = nTmp;
598 bYOK = sal_True;
599 }
600 break;
601 case XML_TOK_IMAP_RADIUS:
602 if (GetImport().GetMM100UnitConverter().convertMeasure(nTmp,
603 rValue))
604 {
605 nRadius = nTmp;
606 bRadiusOK = sal_True;
607 }
608 break;
609 default:
610 XMLImageMapObjectContext::ProcessAttribute(eToken, rValue);
611 }
612
613 bValid = bRadiusOK && bXOK && bYOK;
614 }
615
Prepare(Reference<XPropertySet> & rPropertySet)616 void XMLImageMapCircleContext::Prepare(
617 Reference<XPropertySet> & rPropertySet)
618 {
619 // center (x,y)
620 Any aAny;
621 aAny <<= aCenter;
622 rPropertySet->setPropertyValue( sCenter, aAny );
623
624 // radius
625 aAny <<= nRadius;
626 rPropertySet->setPropertyValue( sRadius, aAny );
627
628 // common properties handled by super class
629 XMLImageMapObjectContext::Prepare(rPropertySet);
630 }
631
632
633
634
635
636
637
638
639
640
641 TYPEINIT1(XMLImageMapContext, SvXMLImportContext);
642
XMLImageMapContext(SvXMLImport & rImport,sal_uInt16 nPrefix,const OUString & rLocalName,Reference<XPropertySet> & rPropertySet)643 XMLImageMapContext::XMLImageMapContext(
644 SvXMLImport& rImport,
645 sal_uInt16 nPrefix,
646 const OUString& rLocalName,
647 Reference<XPropertySet> & rPropertySet) :
648 SvXMLImportContext(rImport, nPrefix, rLocalName),
649 sImageMap(RTL_CONSTASCII_USTRINGPARAM("ImageMap")),
650 xPropertySet(rPropertySet)
651
652 {
653 try
654 {
655 Reference < XPropertySetInfo > xInfo =
656 xPropertySet->getPropertySetInfo();
657 if( xInfo.is() && xInfo->hasPropertyByName( sImageMap ) )
658 xPropertySet->getPropertyValue(sImageMap) >>= xImageMap;
659 }
660 catch( com::sun::star::uno::Exception e )
661 {
662 uno::Sequence<OUString> aSeq(0);
663 rImport.SetError( XMLERROR_FLAG_WARNING | XMLERROR_API, aSeq, e.Message, NULL );
664 }
665 }
666
~XMLImageMapContext()667 XMLImageMapContext::~XMLImageMapContext()
668 {
669 }
670
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const Reference<XAttributeList> & xAttrList)671 SvXMLImportContext *XMLImageMapContext::CreateChildContext(
672 sal_uInt16 nPrefix,
673 const OUString& rLocalName,
674 const Reference<XAttributeList> & xAttrList )
675 {
676 SvXMLImportContext* pContext = NULL;
677
678 if ( XML_NAMESPACE_DRAW == nPrefix )
679 {
680 if ( IsXMLToken(rLocalName, XML_AREA_RECTANGLE) )
681 {
682 pContext = new XMLImageMapRectangleContext(
683 GetImport(), nPrefix, rLocalName, xImageMap);
684 }
685 else if ( IsXMLToken(rLocalName, XML_AREA_POLYGON) )
686 {
687 pContext = new XMLImageMapPolygonContext(
688 GetImport(), nPrefix, rLocalName, xImageMap);
689 }
690 else if ( IsXMLToken(rLocalName, XML_AREA_CIRCLE) )
691 {
692 pContext = new XMLImageMapCircleContext(
693 GetImport(), nPrefix, rLocalName, xImageMap);
694 }
695 }
696 else
697 pContext = SvXMLImportContext::CreateChildContext(nPrefix, rLocalName,
698 xAttrList);
699
700 return pContext;
701 }
702
EndElement()703 void XMLImageMapContext::EndElement()
704 {
705 Reference < XPropertySetInfo > xInfo =
706 xPropertySet->getPropertySetInfo();
707 if( xInfo.is() && xInfo->hasPropertyByName( sImageMap ) )
708 xPropertySet->setPropertyValue(sImageMap, uno::makeAny( xImageMap ) );
709 }
710
711