LCOV - code coverage report
Current view: top level - libreoffice/xmloff/source/draw - XMLImageMapContext.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 187 0.0 %
Date: 2012-12-27 Functions: 0 53 0.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10