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