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