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