xref: /AOO41X/main/xmloff/source/draw/ximpshap.cxx (revision a5258243accf51c522d45cf65e4b16cb17a336f7)
1cdf0e10cSrcweir /*************************************************************************
2cdf0e10cSrcweir  *
3cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4cdf0e10cSrcweir  *
5cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6cdf0e10cSrcweir  *
7cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8cdf0e10cSrcweir  *
9cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10cdf0e10cSrcweir  *
11cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14cdf0e10cSrcweir  *
15cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20cdf0e10cSrcweir  *
21cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25cdf0e10cSrcweir  *
26cdf0e10cSrcweir  ************************************************************************/
27cdf0e10cSrcweir 
28cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29cdf0e10cSrcweir #include "precompiled_xmloff.hxx"
30cdf0e10cSrcweir 
31cdf0e10cSrcweir 
32cdf0e10cSrcweir 
33cdf0e10cSrcweir #include <tools/debug.hxx>
34cdf0e10cSrcweir #include <com/sun/star/document/XEventsSupplier.hpp>
35cdf0e10cSrcweir #include <com/sun/star/container/XNameReplace.hpp>
36cdf0e10cSrcweir #include <com/sun/star/presentation/ClickAction.hpp>
37cdf0e10cSrcweir #include <com/sun/star/drawing/FillStyle.hpp>
38cdf0e10cSrcweir #include <com/sun/star/drawing/LineStyle.hpp>
39cdf0e10cSrcweir #include "unointerfacetouniqueidentifiermapper.hxx"
40cdf0e10cSrcweir #include <com/sun/star/drawing/XGluePointsSupplier.hpp>
41cdf0e10cSrcweir #include <com/sun/star/container/XIdentifierAccess.hpp>
42cdf0e10cSrcweir #include <com/sun/star/drawing/GluePoint2.hpp>
43cdf0e10cSrcweir #include <com/sun/star/drawing/Alignment.hpp>
44cdf0e10cSrcweir #include <com/sun/star/drawing/EscapeDirection.hpp>
45cdf0e10cSrcweir #include <com/sun/star/media/ZoomLevel.hpp>
46cdf0e10cSrcweir #include <com/sun/star/awt/Rectangle.hpp>
47cdf0e10cSrcweir 
48cdf0e10cSrcweir #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
49cdf0e10cSrcweir #include <com/sun/star/container/XNameAccess.hpp>
50cdf0e10cSrcweir #include <comphelper/extract.hxx>
51cdf0e10cSrcweir #include "ximpshap.hxx"
52cdf0e10cSrcweir #include <xmloff/XMLBase64ImportContext.hxx>
53cdf0e10cSrcweir #include <xmloff/XMLShapeStyleContext.hxx>
54cdf0e10cSrcweir #include <xmloff/xmluconv.hxx>
55cdf0e10cSrcweir #include <com/sun/star/container/XNamed.hpp>
56cdf0e10cSrcweir #include <com/sun/star/drawing/CircleKind.hpp>
57cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
58cdf0e10cSrcweir #include <com/sun/star/awt/XControlModel.hpp>
59cdf0e10cSrcweir #include <com/sun/star/drawing/XControlShape.hpp>
60cdf0e10cSrcweir #include <com/sun/star/drawing/PointSequenceSequence.hpp>
61cdf0e10cSrcweir #include <com/sun/star/drawing/PointSequence.hpp>
62cdf0e10cSrcweir #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
63cdf0e10cSrcweir #include <com/sun/star/lang/XServiceInfo.hpp>
64cdf0e10cSrcweir #include <com/sun/star/util/XCloneable.hpp>
65cdf0e10cSrcweir #include <com/sun/star/beans/XMultiPropertyStates.hpp>
66cdf0e10cSrcweir #include "xexptran.hxx"
67cdf0e10cSrcweir #include <com/sun/star/drawing/PolyPolygonBezierCoords.hpp>
68cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySetInfo.hpp>
69cdf0e10cSrcweir #include <com/sun/star/drawing/ConnectorType.hpp>
70cdf0e10cSrcweir #include <com/sun/star/drawing/HomogenMatrix3.hpp>
71cdf0e10cSrcweir #include "PropertySetMerger.hxx"
72cdf0e10cSrcweir #include <xmloff/families.hxx>
73cdf0e10cSrcweir #include "ximpstyl.hxx"
74cdf0e10cSrcweir #include"xmloff/xmlnmspe.hxx"
75cdf0e10cSrcweir #include <xmloff/xmltoken.hxx>
76cdf0e10cSrcweir #include "EnhancedCustomShapeToken.hxx"
77cdf0e10cSrcweir #include "XMLReplacementImageContext.hxx"
78cdf0e10cSrcweir #include "XMLImageMapContext.hxx"
79cdf0e10cSrcweir #include "sdpropls.hxx"
80cdf0e10cSrcweir #include "eventimp.hxx"
81cdf0e10cSrcweir 
82cdf0e10cSrcweir #include "descriptionimp.hxx"
83cdf0e10cSrcweir #include "ximpcustomshape.hxx"
84cdf0e10cSrcweir #include "XMLEmbeddedObjectImportContext.hxx"
85cdf0e10cSrcweir #include "xmloff/xmlerror.hxx"
86cdf0e10cSrcweir #include <basegfx/matrix/b2dhommatrix.hxx>
87cdf0e10cSrcweir #include <tools/string.hxx>
88cdf0e10cSrcweir #include <com/sun/star/drawing/XEnhancedCustomShapeDefaulter.hpp>
89cdf0e10cSrcweir 
90cdf0e10cSrcweir // --> OD 2006-02-22 #b6382898#
91cdf0e10cSrcweir #include <com/sun/star/text/XTextDocument.hpp>
92cdf0e10cSrcweir // <--
93cdf0e10cSrcweir 
94cdf0e10cSrcweir using ::rtl::OUString;
95cdf0e10cSrcweir using ::rtl::OUStringBuffer;
96cdf0e10cSrcweir 
97cdf0e10cSrcweir using namespace ::com::sun::star;
98cdf0e10cSrcweir using namespace ::com::sun::star::uno;
99cdf0e10cSrcweir using namespace ::com::sun::star::drawing;
100cdf0e10cSrcweir using namespace ::com::sun::star::style;
101cdf0e10cSrcweir using namespace ::com::sun::star::container;
102cdf0e10cSrcweir using namespace ::com::sun::star::document;
103cdf0e10cSrcweir using namespace ::xmloff::token;
104cdf0e10cSrcweir using namespace ::xmloff::EnhancedCustomShapeToken;
105cdf0e10cSrcweir 
106cdf0e10cSrcweir SvXMLEnumMapEntry aXML_GlueAlignment_EnumMap[] =
107cdf0e10cSrcweir {
108cdf0e10cSrcweir 	{ XML_TOP_LEFT, 	drawing::Alignment_TOP_LEFT },
109cdf0e10cSrcweir 	{ XML_TOP,			drawing::Alignment_TOP },
110cdf0e10cSrcweir 	{ XML_TOP_RIGHT,	drawing::Alignment_TOP_RIGHT },
111cdf0e10cSrcweir 	{ XML_LEFT,		    drawing::Alignment_LEFT },
112cdf0e10cSrcweir 	{ XML_CENTER,		drawing::Alignment_CENTER },
113cdf0e10cSrcweir 	{ XML_RIGHT,		drawing::Alignment_RIGHT },
114cdf0e10cSrcweir 	{ XML_BOTTOM_LEFT,	drawing::Alignment_BOTTOM_LEFT },
115cdf0e10cSrcweir 	{ XML_BOTTOM,		drawing::Alignment_BOTTOM },
116cdf0e10cSrcweir 	{ XML_BOTTOM_RIGHT, drawing::Alignment_BOTTOM_RIGHT },
117cdf0e10cSrcweir 	{ XML_TOKEN_INVALID, 0 }
118cdf0e10cSrcweir };
119cdf0e10cSrcweir 
120cdf0e10cSrcweir SvXMLEnumMapEntry aXML_GlueEscapeDirection_EnumMap[] =
121cdf0e10cSrcweir {
122cdf0e10cSrcweir 	{ XML_AUTO, 		drawing::EscapeDirection_SMART },
123cdf0e10cSrcweir 	{ XML_LEFT,	    	drawing::EscapeDirection_LEFT },
124cdf0e10cSrcweir     { XML_RIGHT,		drawing::EscapeDirection_RIGHT },
125cdf0e10cSrcweir     { XML_UP,			drawing::EscapeDirection_UP },
126cdf0e10cSrcweir     { XML_DOWN,		    drawing::EscapeDirection_DOWN },
127cdf0e10cSrcweir     { XML_HORIZONTAL,	drawing::EscapeDirection_HORIZONTAL },
128cdf0e10cSrcweir     { XML_VERTICAL,	    drawing::EscapeDirection_VERTICAL },
129cdf0e10cSrcweir 	{ XML_TOKEN_INVALID, 0 }
130cdf0e10cSrcweir };
131cdf0e10cSrcweir 
132cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
133cdf0e10cSrcweir 
134cdf0e10cSrcweir static bool ImpIsEmptyURL( const ::rtl::OUString& rURL )
135cdf0e10cSrcweir {
136cdf0e10cSrcweir     if( rURL.getLength() == 0 )
137cdf0e10cSrcweir         return true;
138cdf0e10cSrcweir 
139cdf0e10cSrcweir     // #i13140# Also compare against 'toplevel' URLs. which also
140cdf0e10cSrcweir     // result in empty filename strings.
141cdf0e10cSrcweir     if( 0 == rURL.compareToAscii( "#./" ) )
142cdf0e10cSrcweir         return true;
143cdf0e10cSrcweir 
144cdf0e10cSrcweir     return false;
145cdf0e10cSrcweir }
146cdf0e10cSrcweir 
147cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
148cdf0e10cSrcweir 
149cdf0e10cSrcweir TYPEINIT1( SvXMLShapeContext, SvXMLImportContext );
150cdf0e10cSrcweir TYPEINIT1( SdXMLShapeContext, SvXMLShapeContext );
151cdf0e10cSrcweir 
152cdf0e10cSrcweir SdXMLShapeContext::SdXMLShapeContext(
153cdf0e10cSrcweir 	SvXMLImport& rImport,
154cdf0e10cSrcweir 	sal_uInt16 nPrfx,
155cdf0e10cSrcweir 	const OUString& rLocalName,
156cdf0e10cSrcweir 	const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
157cdf0e10cSrcweir 	uno::Reference< drawing::XShapes >& rShapes,
158cdf0e10cSrcweir     sal_Bool bTemporaryShape)
159cdf0e10cSrcweir :	SvXMLShapeContext( rImport, nPrfx, rLocalName, bTemporaryShape )
160cdf0e10cSrcweir ,	mxShapes( rShapes )
161cdf0e10cSrcweir ,	mxAttrList(xAttrList)
162cdf0e10cSrcweir ,	mbListContextPushed( false )
163cdf0e10cSrcweir ,	mnStyleFamily(XML_STYLE_FAMILY_SD_GRAPHICS_ID)
164cdf0e10cSrcweir ,	mbIsPlaceholder(sal_False)
165cdf0e10cSrcweir ,	mbClearDefaultAttributes( true )
166cdf0e10cSrcweir ,	mbIsUserTransformed(sal_False)
167cdf0e10cSrcweir ,	mnZOrder(-1)
168cdf0e10cSrcweir ,	maSize(1, 1)
169cdf0e10cSrcweir ,	maPosition(0, 0)
170cdf0e10cSrcweir ,	mbVisible(true)
171cdf0e10cSrcweir ,	mbPrintable(true)
172cdf0e10cSrcweir {
173cdf0e10cSrcweir }
174cdf0e10cSrcweir 
175cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
176cdf0e10cSrcweir 
177cdf0e10cSrcweir SdXMLShapeContext::~SdXMLShapeContext()
178cdf0e10cSrcweir {
179cdf0e10cSrcweir }
180cdf0e10cSrcweir 
181cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
182cdf0e10cSrcweir 
183cdf0e10cSrcweir SvXMLImportContext *SdXMLShapeContext::CreateChildContext( sal_uInt16 p_nPrefix,
184cdf0e10cSrcweir 	const OUString& rLocalName,
185cdf0e10cSrcweir 	const uno::Reference< xml::sax::XAttributeList>& xAttrList )
186cdf0e10cSrcweir {
187cdf0e10cSrcweir 	SvXMLImportContext * pContext = NULL;
188cdf0e10cSrcweir 
189cdf0e10cSrcweir 	// #i68101#
190cdf0e10cSrcweir 	if( p_nPrefix == XML_NAMESPACE_SVG &&
191cdf0e10cSrcweir 		(IsXMLToken( rLocalName, XML_TITLE ) || IsXMLToken( rLocalName, XML_DESC ) ) )
192cdf0e10cSrcweir 	{
193cdf0e10cSrcweir 		pContext = new SdXMLDescriptionContext( GetImport(), p_nPrefix, rLocalName, xAttrList, mxShape );
194cdf0e10cSrcweir 	}
195cdf0e10cSrcweir 	else if( p_nPrefix == XML_NAMESPACE_OFFICE && IsXMLToken( rLocalName, XML_EVENT_LISTENERS ) )
196cdf0e10cSrcweir 	{
197cdf0e10cSrcweir 		pContext = new SdXMLEventsContext( GetImport(), p_nPrefix, rLocalName, xAttrList, mxShape );
198cdf0e10cSrcweir 	}
199cdf0e10cSrcweir 	else if( p_nPrefix == XML_NAMESPACE_DRAW && IsXMLToken( rLocalName, XML_GLUE_POINT ) )
200cdf0e10cSrcweir 	{
201cdf0e10cSrcweir 		addGluePoint( xAttrList );
202cdf0e10cSrcweir 	}
203cdf0e10cSrcweir 	else if( p_nPrefix == XML_NAMESPACE_DRAW && IsXMLToken( rLocalName, XML_THUMBNAIL ) )
204cdf0e10cSrcweir 	{
205cdf0e10cSrcweir 		// search attributes for xlink:href
206cdf0e10cSrcweir 		sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
207cdf0e10cSrcweir 		for(sal_Int16 i=0; i < nAttrCount; i++)
208cdf0e10cSrcweir 		{
209cdf0e10cSrcweir 			OUString sAttrName = xAttrList->getNameByIndex( i );
210cdf0e10cSrcweir 			OUString aLocalName;
211cdf0e10cSrcweir 			sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName );
212cdf0e10cSrcweir 
213cdf0e10cSrcweir 			if( nPrefix == XML_NAMESPACE_XLINK )
214cdf0e10cSrcweir 			{
215cdf0e10cSrcweir 				if( IsXMLToken( aLocalName, XML_HREF ) )
216cdf0e10cSrcweir 				{
217cdf0e10cSrcweir 					maThumbnailURL = xAttrList->getValueByIndex( i );
218cdf0e10cSrcweir 					break;
219cdf0e10cSrcweir 				}
220cdf0e10cSrcweir 			}
221cdf0e10cSrcweir 		}
222cdf0e10cSrcweir 	}
223cdf0e10cSrcweir 	else
224cdf0e10cSrcweir 	{
225cdf0e10cSrcweir 		// create text cursor on demand
226cdf0e10cSrcweir 		if( !mxCursor.is() )
227cdf0e10cSrcweir 		{
228cdf0e10cSrcweir 			uno::Reference< text::XText > xText( mxShape, uno::UNO_QUERY );
229cdf0e10cSrcweir 			if( xText.is() )
230cdf0e10cSrcweir 			{
231cdf0e10cSrcweir 				UniReference < XMLTextImportHelper > xTxtImport =
232cdf0e10cSrcweir 					GetImport().GetTextImport();
233cdf0e10cSrcweir 				mxOldCursor = xTxtImport->GetCursor();
234cdf0e10cSrcweir 				mxCursor = xText->createTextCursor();
235cdf0e10cSrcweir 				if( mxCursor.is() )
236cdf0e10cSrcweir 				{
237cdf0e10cSrcweir 					xTxtImport->SetCursor( mxCursor );
238cdf0e10cSrcweir 				}
239cdf0e10cSrcweir 
240cdf0e10cSrcweir 				// remember old list item and block (#91964#) and reset them
241cdf0e10cSrcweir 				// for the text frame
242cdf0e10cSrcweir                 xTxtImport->PushListContext();
243cdf0e10cSrcweir                 mbListContextPushed = true;
244cdf0e10cSrcweir 			}
245cdf0e10cSrcweir 		}
246cdf0e10cSrcweir 
247cdf0e10cSrcweir 		// if we have a text cursor, lets  try to import some text
248cdf0e10cSrcweir 		if( mxCursor.is() )
249cdf0e10cSrcweir 		{
250cdf0e10cSrcweir 			pContext = GetImport().GetTextImport()->CreateTextChildContext(
251cdf0e10cSrcweir 				GetImport(), p_nPrefix, rLocalName, xAttrList );
252cdf0e10cSrcweir 		}
253cdf0e10cSrcweir 	}
254cdf0e10cSrcweir 
255cdf0e10cSrcweir 	// call parent for content
256cdf0e10cSrcweir 	if(!pContext)
257cdf0e10cSrcweir 		pContext = SvXMLImportContext::CreateChildContext( p_nPrefix, rLocalName, xAttrList );
258cdf0e10cSrcweir 
259cdf0e10cSrcweir 	return pContext;
260cdf0e10cSrcweir }
261cdf0e10cSrcweir 
262cdf0e10cSrcweir void SdXMLShapeContext::addGluePoint( const uno::Reference< xml::sax::XAttributeList>& xAttrList )
263cdf0e10cSrcweir {
264cdf0e10cSrcweir 	// get the glue points container for this shape if its not already there
265cdf0e10cSrcweir 	if( !mxGluePoints.is() )
266cdf0e10cSrcweir 	{
267cdf0e10cSrcweir 		uno::Reference< drawing::XGluePointsSupplier > xSupplier( mxShape, uno::UNO_QUERY );
268cdf0e10cSrcweir 		if( !xSupplier.is() )
269cdf0e10cSrcweir 			return;
270cdf0e10cSrcweir 
271cdf0e10cSrcweir 		mxGluePoints = uno::Reference< container::XIdentifierContainer >::query( xSupplier->getGluePoints() );
272cdf0e10cSrcweir 
273cdf0e10cSrcweir 		if( !mxGluePoints.is() )
274cdf0e10cSrcweir 			return;
275cdf0e10cSrcweir 	}
276cdf0e10cSrcweir 
277cdf0e10cSrcweir 	drawing::GluePoint2 aGluePoint;
278cdf0e10cSrcweir 	aGluePoint.IsUserDefined = sal_True;
279cdf0e10cSrcweir 	aGluePoint.Position.X = 0;
280cdf0e10cSrcweir 	aGluePoint.Position.Y = 0;
281cdf0e10cSrcweir 	aGluePoint.Escape = drawing::EscapeDirection_SMART;
282cdf0e10cSrcweir 	aGluePoint.PositionAlignment = drawing::Alignment_CENTER;
283cdf0e10cSrcweir 	aGluePoint.IsRelative = sal_True;
284cdf0e10cSrcweir 
285cdf0e10cSrcweir 	sal_Int32 nId = -1;
286cdf0e10cSrcweir 
287cdf0e10cSrcweir 	// read attributes for the 3DScene
288cdf0e10cSrcweir 	sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
289cdf0e10cSrcweir 	for(sal_Int16 i=0; i < nAttrCount; i++)
290cdf0e10cSrcweir 	{
291cdf0e10cSrcweir 		OUString sAttrName = xAttrList->getNameByIndex( i );
292cdf0e10cSrcweir 		OUString aLocalName;
293cdf0e10cSrcweir 		sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName );
294cdf0e10cSrcweir 		const OUString sValue( xAttrList->getValueByIndex( i ) );
295cdf0e10cSrcweir 
296cdf0e10cSrcweir 		if( nPrefix == XML_NAMESPACE_SVG )
297cdf0e10cSrcweir 		{
298cdf0e10cSrcweir 			if( IsXMLToken( aLocalName, XML_X ) )
299cdf0e10cSrcweir 			{
300cdf0e10cSrcweir 				GetImport().GetMM100UnitConverter().convertMeasure(aGluePoint.Position.X, sValue);
301cdf0e10cSrcweir 			}
302cdf0e10cSrcweir 			else if( IsXMLToken( aLocalName, XML_Y ) )
303cdf0e10cSrcweir 			{
304cdf0e10cSrcweir 				GetImport().GetMM100UnitConverter().convertMeasure(aGluePoint.Position.Y, sValue);
305cdf0e10cSrcweir 			}
306cdf0e10cSrcweir 		}
307cdf0e10cSrcweir 		else if( nPrefix == XML_NAMESPACE_DRAW )
308cdf0e10cSrcweir 		{
309cdf0e10cSrcweir 			if( IsXMLToken( aLocalName, XML_ID ) )
310cdf0e10cSrcweir 			{
311cdf0e10cSrcweir 				nId = sValue.toInt32();
312cdf0e10cSrcweir 			}
313cdf0e10cSrcweir 			else if( IsXMLToken( aLocalName, XML_ALIGN ) )
314cdf0e10cSrcweir 			{
315cdf0e10cSrcweir 				sal_uInt16 eKind;
316cdf0e10cSrcweir 				if( SvXMLUnitConverter::convertEnum( eKind, sValue, aXML_GlueAlignment_EnumMap ) )
317cdf0e10cSrcweir 				{
318cdf0e10cSrcweir 					aGluePoint.PositionAlignment = (drawing::Alignment)eKind;
319cdf0e10cSrcweir 					aGluePoint.IsRelative = sal_False;
320cdf0e10cSrcweir 				}
321cdf0e10cSrcweir 			}
322cdf0e10cSrcweir 			else if( IsXMLToken( aLocalName, XML_ESCAPE_DIRECTION ) )
323cdf0e10cSrcweir 			{
324cdf0e10cSrcweir 				sal_uInt16 eKind;
325cdf0e10cSrcweir 				if( SvXMLUnitConverter::convertEnum( eKind, sValue, aXML_GlueEscapeDirection_EnumMap ) )
326cdf0e10cSrcweir 				{
327cdf0e10cSrcweir 					aGluePoint.Escape = (drawing::EscapeDirection)eKind;
328cdf0e10cSrcweir 				}
329cdf0e10cSrcweir 			}
330cdf0e10cSrcweir 		}
331cdf0e10cSrcweir 	}
332cdf0e10cSrcweir 
333cdf0e10cSrcweir 	if( nId != -1 )
334cdf0e10cSrcweir 	{
335cdf0e10cSrcweir 		try
336cdf0e10cSrcweir 		{
337cdf0e10cSrcweir 			sal_Int32 nInternalId = mxGluePoints->insert( uno::makeAny( aGluePoint ) );
338cdf0e10cSrcweir 			GetImport().GetShapeImport()->addGluePointMapping( mxShape, nId, nInternalId );
339cdf0e10cSrcweir 		}
340cdf0e10cSrcweir 		catch( uno::Exception& )
341cdf0e10cSrcweir 		{
342cdf0e10cSrcweir 			DBG_ERROR( "exception during setting of glue points!");
343cdf0e10cSrcweir 		}
344cdf0e10cSrcweir 	}
345cdf0e10cSrcweir }
346cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
347cdf0e10cSrcweir 
348cdf0e10cSrcweir void SdXMLShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>&)
349cdf0e10cSrcweir {
350cdf0e10cSrcweir     GetImport().GetShapeImport()->finishShape( mxShape, mxAttrList, mxShapes );
351cdf0e10cSrcweir }
352cdf0e10cSrcweir 
353cdf0e10cSrcweir void SdXMLShapeContext::EndElement()
354cdf0e10cSrcweir {
355cdf0e10cSrcweir 	if(mxCursor.is())
356cdf0e10cSrcweir 	{
357cdf0e10cSrcweir 		// delete addition newline
358cdf0e10cSrcweir 		const OUString aEmpty;
359cdf0e10cSrcweir 		mxCursor->gotoEnd( sal_False );
360cdf0e10cSrcweir 		mxCursor->goLeft( 1, sal_True );
361cdf0e10cSrcweir 		mxCursor->setString( aEmpty );
362cdf0e10cSrcweir 
363cdf0e10cSrcweir 		// reset cursor
364cdf0e10cSrcweir 		GetImport().GetTextImport()->ResetCursor();
365cdf0e10cSrcweir 	}
366cdf0e10cSrcweir 
367cdf0e10cSrcweir 	if(mxOldCursor.is())
368cdf0e10cSrcweir 		GetImport().GetTextImport()->SetCursor( mxOldCursor );
369cdf0e10cSrcweir 
370cdf0e10cSrcweir     // reinstall old list item (if necessary) #91964#
371cdf0e10cSrcweir     if (mbListContextPushed) {
372cdf0e10cSrcweir         GetImport().GetTextImport()->PopListContext();
373cdf0e10cSrcweir     }
374cdf0e10cSrcweir 
375cdf0e10cSrcweir 	if( msHyperlink.getLength() != 0 ) try
376cdf0e10cSrcweir 	{
377cdf0e10cSrcweir 		const OUString sBookmark( RTL_CONSTASCII_USTRINGPARAM( "Bookmark" ) );
378cdf0e10cSrcweir 
379cdf0e10cSrcweir         Reference< XEventsSupplier > xEventsSupplier( mxShape, UNO_QUERY );
380cdf0e10cSrcweir 		if( xEventsSupplier.is() )
381cdf0e10cSrcweir 		{
382cdf0e10cSrcweir 			const OUString sEventType( RTL_CONSTASCII_USTRINGPARAM( "EventType" ) );
383cdf0e10cSrcweir 			const OUString sClickAction( RTL_CONSTASCII_USTRINGPARAM( "ClickAction" ) );
384cdf0e10cSrcweir 
385cdf0e10cSrcweir 			Reference< XNameReplace > xEvents( xEventsSupplier->getEvents(), UNO_QUERY_THROW );
386cdf0e10cSrcweir 
387cdf0e10cSrcweir 			uno::Sequence< beans::PropertyValue > aProperties( 3 );
388cdf0e10cSrcweir 			aProperties[0].Name = sEventType;
389cdf0e10cSrcweir 			aProperties[0].Handle = -1;
390cdf0e10cSrcweir 			aProperties[0].Value <<= OUString( RTL_CONSTASCII_USTRINGPARAM("Presentation") );
391cdf0e10cSrcweir 			aProperties[0].State = beans::PropertyState_DIRECT_VALUE;
392cdf0e10cSrcweir 
393cdf0e10cSrcweir 			aProperties[1].Name = sClickAction;
394cdf0e10cSrcweir 			aProperties[1].Handle = -1;
395cdf0e10cSrcweir 			aProperties[1].Value <<= ::com::sun::star::presentation::ClickAction_DOCUMENT;
396cdf0e10cSrcweir 			aProperties[1].State = beans::PropertyState_DIRECT_VALUE;
397cdf0e10cSrcweir 
398cdf0e10cSrcweir 			aProperties[2].Name = sBookmark;
399cdf0e10cSrcweir 			aProperties[2].Handle = -1;
400cdf0e10cSrcweir 			aProperties[2].Value <<= msHyperlink;
401cdf0e10cSrcweir 			aProperties[2].State = beans::PropertyState_DIRECT_VALUE;
402cdf0e10cSrcweir 
403cdf0e10cSrcweir 			const OUString sAPIEventName( RTL_CONSTASCII_USTRINGPARAM( "OnClick" ) );
404cdf0e10cSrcweir 			xEvents->replaceByName( sAPIEventName, Any( aProperties ) );
405cdf0e10cSrcweir 		}
406cdf0e10cSrcweir 		else
407cdf0e10cSrcweir 		{
408cdf0e10cSrcweir 			// in draw use the Bookmark property
409cdf0e10cSrcweir 			Reference< beans::XPropertySet > xSet( mxShape, UNO_QUERY_THROW );
410cdf0e10cSrcweir 			xSet->setPropertyValue( sBookmark, Any( msHyperlink ) );
411cdf0e10cSrcweir 			xSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "OnClick" ) ), Any( ::com::sun::star::presentation::ClickAction_DOCUMENT ) );
412cdf0e10cSrcweir 		}
413cdf0e10cSrcweir 	}
414cdf0e10cSrcweir 	catch( Exception& )
415cdf0e10cSrcweir 	{
416cdf0e10cSrcweir 		DBG_ERROR("xmloff::SdXMLShapeContext::EndElement(), exception caught while setting hyperlink!");
417cdf0e10cSrcweir 	}
418cdf0e10cSrcweir 
419cdf0e10cSrcweir 	if( mxLockable.is() )
420cdf0e10cSrcweir 		mxLockable->removeActionLock();
421cdf0e10cSrcweir }
422cdf0e10cSrcweir 
423cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
424cdf0e10cSrcweir 
425cdf0e10cSrcweir void SdXMLShapeContext::AddShape(uno::Reference< drawing::XShape >& xShape)
426cdf0e10cSrcweir {
427cdf0e10cSrcweir 	if(xShape.is())
428cdf0e10cSrcweir 	{
429cdf0e10cSrcweir 		// set shape local
430cdf0e10cSrcweir 		mxShape = xShape;
431cdf0e10cSrcweir 
432cdf0e10cSrcweir 		if(maShapeName.getLength())
433cdf0e10cSrcweir 		{
434cdf0e10cSrcweir 			uno::Reference< container::XNamed > xNamed( mxShape, uno::UNO_QUERY );
435cdf0e10cSrcweir 			if( xNamed.is() )
436cdf0e10cSrcweir 				xNamed->setName( maShapeName );
437cdf0e10cSrcweir 		}
438cdf0e10cSrcweir 
439cdf0e10cSrcweir 		UniReference< XMLShapeImportHelper > xImp( GetImport().GetShapeImport() );
440cdf0e10cSrcweir 		xImp->addShape( xShape, mxAttrList, mxShapes );
441cdf0e10cSrcweir 
442cdf0e10cSrcweir 		if( mbClearDefaultAttributes )
443cdf0e10cSrcweir 		{
444cdf0e10cSrcweir 	        uno::Reference<beans::XMultiPropertyStates> xMultiPropertyStates(xShape, uno::UNO_QUERY );
445cdf0e10cSrcweir 		    if (xMultiPropertyStates.is())
446cdf0e10cSrcweir 			    xMultiPropertyStates->setAllPropertiesToDefault();
447cdf0e10cSrcweir 		}
448cdf0e10cSrcweir 
449cdf0e10cSrcweir 		if( !mbVisible || !mbPrintable ) try
450cdf0e10cSrcweir 		{
451cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xSet( xShape, uno::UNO_QUERY_THROW );
452cdf0e10cSrcweir 			if( !mbVisible )
453cdf0e10cSrcweir 				xSet->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Visible" ) ), uno::Any( sal_False ) );
454cdf0e10cSrcweir 
455cdf0e10cSrcweir 			if( !mbPrintable )
456cdf0e10cSrcweir 				xSet->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Printable" ) ), uno::Any( sal_False ) );
457cdf0e10cSrcweir 		}
458cdf0e10cSrcweir 		catch( Exception& )
459cdf0e10cSrcweir 		{
460cdf0e10cSrcweir 			DBG_ERROR( "SdXMLShapeContext::AddShape(), exception caught!" );
461cdf0e10cSrcweir 		}
462cdf0e10cSrcweir 
463cdf0e10cSrcweir 		// #107848#
464cdf0e10cSrcweir 		if(!mbTemporaryShape && (!GetImport().HasTextImport()
465cdf0e10cSrcweir 			|| !GetImport().GetTextImport()->IsInsideDeleteContext()))
466cdf0e10cSrcweir 		{
467cdf0e10cSrcweir 			xImp->shapeWithZIndexAdded( xShape, mnZOrder );
468cdf0e10cSrcweir 		}
469cdf0e10cSrcweir 
470cdf0e10cSrcweir 		if( maShapeId.getLength() )
471cdf0e10cSrcweir 		{
472cdf0e10cSrcweir 			uno::Reference< uno::XInterface > xRef( xShape, uno::UNO_QUERY );
473cdf0e10cSrcweir 			GetImport().getInterfaceToIdentifierMapper().registerReference( maShapeId, xRef );
474cdf0e10cSrcweir 		}
475cdf0e10cSrcweir 
476cdf0e10cSrcweir 		// #91065# count only if counting for shape import is enabled
477cdf0e10cSrcweir 		if(GetImport().GetShapeImport()->IsHandleProgressBarEnabled())
478cdf0e10cSrcweir 		{
479cdf0e10cSrcweir 			// #80365# increment progress bar at load once for each draw object
480cdf0e10cSrcweir 			GetImport().GetProgressBarHelper()->Increment();
481cdf0e10cSrcweir 		}
482cdf0e10cSrcweir 	}
483cdf0e10cSrcweir 
484cdf0e10cSrcweir 	mxLockable = uno::Reference< document::XActionLockable >::query( xShape );
485cdf0e10cSrcweir 
486cdf0e10cSrcweir 	if( mxLockable.is() )
487cdf0e10cSrcweir 		mxLockable->addActionLock();
488cdf0e10cSrcweir 
489cdf0e10cSrcweir }
490cdf0e10cSrcweir 
491cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
492cdf0e10cSrcweir 
493cdf0e10cSrcweir void SdXMLShapeContext::AddShape(const char* pServiceName )
494cdf0e10cSrcweir {
495cdf0e10cSrcweir 	uno::Reference< lang::XMultiServiceFactory > xServiceFact(GetImport().GetModel(), uno::UNO_QUERY);
496cdf0e10cSrcweir 	if(xServiceFact.is())
497cdf0e10cSrcweir 	{
498cdf0e10cSrcweir         try
499cdf0e10cSrcweir         {
500cdf0e10cSrcweir             // --> OD 2006-02-22 #b6382898#
501cdf0e10cSrcweir             // Since fix for issue i33294 the Writer model doesn't support
502cdf0e10cSrcweir             // com.sun.star.drawing.OLE2Shape anymore.
503cdf0e10cSrcweir             // To handle Draw OLE objects it's decided to import these
504cdf0e10cSrcweir             // objects as com.sun.star.drawing.OLE2Shape and convert these
505cdf0e10cSrcweir             // objects after the import into com.sun.star.drawing.GraphicObjectShape.
506cdf0e10cSrcweir             uno::Reference< drawing::XShape > xShape;
507cdf0e10cSrcweir             if ( OUString::createFromAscii(pServiceName).compareToAscii( "com.sun.star.drawing.OLE2Shape" ) == 0 &&
508cdf0e10cSrcweir                  uno::Reference< text::XTextDocument >(GetImport().GetModel(), uno::UNO_QUERY).is() )
509cdf0e10cSrcweir             {
510cdf0e10cSrcweir                 xShape = uno::Reference< drawing::XShape >(xServiceFact->createInstance(OUString::createFromAscii("com.sun.star.drawing.temporaryForXMLImportOLE2Shape")), uno::UNO_QUERY);
511cdf0e10cSrcweir             }
512cdf0e10cSrcweir             else
513cdf0e10cSrcweir             {
514cdf0e10cSrcweir                 xShape = uno::Reference< drawing::XShape >(xServiceFact->createInstance(OUString::createFromAscii(pServiceName)), uno::UNO_QUERY);
515cdf0e10cSrcweir             }
516cdf0e10cSrcweir             // <--
517cdf0e10cSrcweir             if( xShape.is() )
518cdf0e10cSrcweir                 AddShape( xShape );
519cdf0e10cSrcweir         }
520cdf0e10cSrcweir         catch( const uno::Exception& e )
521cdf0e10cSrcweir         {
522cdf0e10cSrcweir             uno::Sequence<rtl::OUString> aSeq( 1 );
523cdf0e10cSrcweir             aSeq[0] = OUString::createFromAscii(pServiceName);
524cdf0e10cSrcweir             GetImport().SetError( XMLERROR_FLAG_ERROR | XMLERROR_API,
525cdf0e10cSrcweir                                   aSeq, e.Message, NULL );
526cdf0e10cSrcweir         }
527cdf0e10cSrcweir 	}
528cdf0e10cSrcweir }
529cdf0e10cSrcweir 
530cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
531cdf0e10cSrcweir 
532cdf0e10cSrcweir void SdXMLShapeContext::SetTransformation()
533cdf0e10cSrcweir {
534cdf0e10cSrcweir 	if(mxShape.is())
535cdf0e10cSrcweir 	{
536cdf0e10cSrcweir 		uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY);
537cdf0e10cSrcweir 		if(xPropSet.is())
538cdf0e10cSrcweir 		{
539cdf0e10cSrcweir 			::basegfx::B2DHomMatrix aTransformation;
540cdf0e10cSrcweir 
541cdf0e10cSrcweir 			if(maSize.Width != 1 || maSize.Height != 1)
542cdf0e10cSrcweir 			{
543cdf0e10cSrcweir 				// take care there are no zeros used by error
544cdf0e10cSrcweir 				if(0 == maSize.Width)
545cdf0e10cSrcweir 					maSize.Width = 1;
546cdf0e10cSrcweir 				if(0 == maSize.Height)
547cdf0e10cSrcweir 					maSize.Height = 1;
548cdf0e10cSrcweir 
549cdf0e10cSrcweir 				// set global size. This should always be used.
550cdf0e10cSrcweir 				aTransformation.scale(maSize.Width, maSize.Height);
551cdf0e10cSrcweir 			}
552cdf0e10cSrcweir 
553cdf0e10cSrcweir 			if(maPosition.X != 0 || maPosition.Y != 0)
554cdf0e10cSrcweir 			{
555cdf0e10cSrcweir 				// if global position is used, add it to transformation
556cdf0e10cSrcweir 				aTransformation.translate(maPosition.X, maPosition.Y);
557cdf0e10cSrcweir 			}
558cdf0e10cSrcweir 
559cdf0e10cSrcweir 			if(mnTransform.NeedsAction())
560cdf0e10cSrcweir 			{
561cdf0e10cSrcweir 				// transformation is used, apply to object.
562cdf0e10cSrcweir 				// NOTICE: The transformation is applied AFTER evtl. used
563cdf0e10cSrcweir 				// global positioning and scaling is used, so any shear or
564cdf0e10cSrcweir 				// rotate used herein is applied around the (0,0) position
565cdf0e10cSrcweir 				// of the PAGE object !!!
566cdf0e10cSrcweir 				::basegfx::B2DHomMatrix aMat;
567cdf0e10cSrcweir 				mnTransform.GetFullTransform(aMat);
568cdf0e10cSrcweir 
569cdf0e10cSrcweir 				// now add to transformation
570cdf0e10cSrcweir 				aTransformation *= aMat;
571cdf0e10cSrcweir 			}
572cdf0e10cSrcweir 
573cdf0e10cSrcweir 			// now set transformation for this object
574cdf0e10cSrcweir 			uno::Any aAny;
575cdf0e10cSrcweir 			drawing::HomogenMatrix3 aMatrix;
576cdf0e10cSrcweir 
577cdf0e10cSrcweir 			aMatrix.Line1.Column1 = aTransformation.get(0, 0);
578cdf0e10cSrcweir 			aMatrix.Line1.Column2 = aTransformation.get(0, 1);
579cdf0e10cSrcweir 			aMatrix.Line1.Column3 = aTransformation.get(0, 2);
580cdf0e10cSrcweir 
581cdf0e10cSrcweir 			aMatrix.Line2.Column1 = aTransformation.get(1, 0);
582cdf0e10cSrcweir 			aMatrix.Line2.Column2 = aTransformation.get(1, 1);
583cdf0e10cSrcweir 			aMatrix.Line2.Column3 = aTransformation.get(1, 2);
584cdf0e10cSrcweir 
585cdf0e10cSrcweir 			aMatrix.Line3.Column1 = aTransformation.get(2, 0);
586cdf0e10cSrcweir 			aMatrix.Line3.Column2 = aTransformation.get(2, 1);
587cdf0e10cSrcweir 			aMatrix.Line3.Column3 = aTransformation.get(2, 2);
588cdf0e10cSrcweir 
589cdf0e10cSrcweir 			aAny <<= aMatrix;
590cdf0e10cSrcweir 
591cdf0e10cSrcweir 			xPropSet->setPropertyValue(
592cdf0e10cSrcweir 				OUString(RTL_CONSTASCII_USTRINGPARAM("Transformation")), aAny);
593cdf0e10cSrcweir         }
594cdf0e10cSrcweir 	}
595cdf0e10cSrcweir }
596cdf0e10cSrcweir 
597cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
598cdf0e10cSrcweir 
599cdf0e10cSrcweir void SdXMLShapeContext::SetStyle( bool bSupportsStyle /* = true */)
600cdf0e10cSrcweir {
601cdf0e10cSrcweir 	try
602cdf0e10cSrcweir 	{
603cdf0e10cSrcweir 		uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY);
604cdf0e10cSrcweir 		if( !xPropSet.is() )
605cdf0e10cSrcweir 			return;
606cdf0e10cSrcweir 
607cdf0e10cSrcweir 		do
608cdf0e10cSrcweir 		{
609cdf0e10cSrcweir 			XMLPropStyleContext* pDocStyle = NULL;
610cdf0e10cSrcweir 
611cdf0e10cSrcweir 			// set style on shape
612cdf0e10cSrcweir 			if(maDrawStyleName.getLength() == 0)
613cdf0e10cSrcweir 				break;
614cdf0e10cSrcweir 
615cdf0e10cSrcweir 			const SvXMLStyleContext* pStyle = 0L;
616cdf0e10cSrcweir 			sal_Bool bAutoStyle(sal_False);
617cdf0e10cSrcweir 
618cdf0e10cSrcweir 			if(GetImport().GetShapeImport()->GetAutoStylesContext())
619cdf0e10cSrcweir 				pStyle = GetImport().GetShapeImport()->GetAutoStylesContext()->FindStyleChildContext(mnStyleFamily, maDrawStyleName);
620cdf0e10cSrcweir 
621cdf0e10cSrcweir 			if(pStyle)
622cdf0e10cSrcweir 				bAutoStyle = sal_True;
623cdf0e10cSrcweir 
624cdf0e10cSrcweir 			if(!pStyle && GetImport().GetShapeImport()->GetStylesContext())
625cdf0e10cSrcweir 				pStyle = GetImport().GetShapeImport()->GetStylesContext()->FindStyleChildContext(mnStyleFamily, maDrawStyleName);
626cdf0e10cSrcweir 
627cdf0e10cSrcweir 			OUString aStyleName = maDrawStyleName;
628cdf0e10cSrcweir 			uno::Reference< style::XStyle > xStyle;
629cdf0e10cSrcweir 
630cdf0e10cSrcweir 			if( pStyle && pStyle->ISA(XMLShapeStyleContext) )
631cdf0e10cSrcweir 			{
632cdf0e10cSrcweir 				pDocStyle = PTR_CAST( XMLShapeStyleContext, pStyle );
633cdf0e10cSrcweir 
634cdf0e10cSrcweir 				if( pDocStyle->GetStyle().is() )
635cdf0e10cSrcweir 				{
636cdf0e10cSrcweir 					xStyle = pDocStyle->GetStyle();
637cdf0e10cSrcweir 				}
638cdf0e10cSrcweir 				else
639cdf0e10cSrcweir 				{
640cdf0e10cSrcweir                     aStyleName = pDocStyle->GetParentName();
641cdf0e10cSrcweir 				}
642cdf0e10cSrcweir 			}
643cdf0e10cSrcweir 
644cdf0e10cSrcweir 			if( !xStyle.is() && aStyleName.getLength() )
645cdf0e10cSrcweir 			{
646cdf0e10cSrcweir 				try
647cdf0e10cSrcweir 				{
648cdf0e10cSrcweir 
649cdf0e10cSrcweir 					uno::Reference< style::XStyleFamiliesSupplier > xFamiliesSupplier( GetImport().GetModel(), uno::UNO_QUERY );
650cdf0e10cSrcweir 
651cdf0e10cSrcweir 					if( xFamiliesSupplier.is() )
652cdf0e10cSrcweir 					{
653cdf0e10cSrcweir 						uno::Reference< container::XNameAccess > xFamilies( xFamiliesSupplier->getStyleFamilies() );
654cdf0e10cSrcweir 						if( xFamilies.is() )
655cdf0e10cSrcweir 						{
656cdf0e10cSrcweir 
657cdf0e10cSrcweir 							uno::Reference< container::XNameAccess > xFamily;
658cdf0e10cSrcweir 
659cdf0e10cSrcweir 							if( XML_STYLE_FAMILY_SD_PRESENTATION_ID == mnStyleFamily )
660cdf0e10cSrcweir 							{
661cdf0e10cSrcweir 								aStyleName = GetImport().GetStyleDisplayName(
662cdf0e10cSrcweir 									XML_STYLE_FAMILY_SD_PRESENTATION_ID,
663cdf0e10cSrcweir 									aStyleName );
664cdf0e10cSrcweir 								sal_Int32 nPos = aStyleName.lastIndexOf( sal_Unicode('-') );
665cdf0e10cSrcweir 								if( -1 != nPos )
666cdf0e10cSrcweir 								{
667cdf0e10cSrcweir 									OUString aFamily( aStyleName.copy( 0, nPos ) );
668cdf0e10cSrcweir 
669cdf0e10cSrcweir 									xFamilies->getByName( aFamily ) >>= xFamily;
670cdf0e10cSrcweir 									aStyleName = aStyleName.copy( nPos + 1 );
671cdf0e10cSrcweir 								}
672cdf0e10cSrcweir 							}
673cdf0e10cSrcweir 							else
674cdf0e10cSrcweir 							{
675cdf0e10cSrcweir 								// get graphics familie
676cdf0e10cSrcweir 								xFamilies->getByName( OUString( RTL_CONSTASCII_USTRINGPARAM( "graphics" ) ) ) >>= xFamily;
677cdf0e10cSrcweir 								aStyleName = GetImport().GetStyleDisplayName(
678cdf0e10cSrcweir 									XML_STYLE_FAMILY_SD_GRAPHICS_ID,
679cdf0e10cSrcweir 									aStyleName );
680cdf0e10cSrcweir 							}
681cdf0e10cSrcweir 
682cdf0e10cSrcweir 							if( xFamily.is() )
683cdf0e10cSrcweir 								xFamily->getByName( aStyleName ) >>= xStyle;
684cdf0e10cSrcweir 						}
685cdf0e10cSrcweir 					}
686cdf0e10cSrcweir 				}
687cdf0e10cSrcweir 				catch( uno::Exception& )
688cdf0e10cSrcweir 				{
689cdf0e10cSrcweir 					DBG_ERROR( "could not find style for shape!" );
690cdf0e10cSrcweir 				}
691cdf0e10cSrcweir 			}
692cdf0e10cSrcweir 
693cdf0e10cSrcweir 			if( bSupportsStyle && xStyle.is() )
694cdf0e10cSrcweir 			{
695cdf0e10cSrcweir 				try
696cdf0e10cSrcweir 				{
697cdf0e10cSrcweir 					// set style on object
698cdf0e10cSrcweir 					uno::Any aAny;
699cdf0e10cSrcweir 					aAny <<= xStyle;
700cdf0e10cSrcweir 					xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("Style")), aAny);
701cdf0e10cSrcweir 				}
702cdf0e10cSrcweir 				catch( uno::Exception& )
703cdf0e10cSrcweir 				{
704cdf0e10cSrcweir 					DBG_ERROR( "could not find style for shape!" );
705cdf0e10cSrcweir 				}
706cdf0e10cSrcweir 			}
707cdf0e10cSrcweir 
708cdf0e10cSrcweir 			// if this is an auto style, set its properties
709cdf0e10cSrcweir 			if(bAutoStyle && pDocStyle)
710cdf0e10cSrcweir 			{
711cdf0e10cSrcweir 				// set PropertySet on object
712cdf0e10cSrcweir 				pDocStyle->FillPropertySet(xPropSet);
713cdf0e10cSrcweir 			}
714cdf0e10cSrcweir 
715cdf0e10cSrcweir 		} while(0);
716cdf0e10cSrcweir 
717cdf0e10cSrcweir 		// try to set text auto style
718cdf0e10cSrcweir 		do
719cdf0e10cSrcweir 		{
720cdf0e10cSrcweir 			// set style on shape
721cdf0e10cSrcweir 			if( 0 == maTextStyleName.getLength() )
722cdf0e10cSrcweir 				break;
723cdf0e10cSrcweir 
724cdf0e10cSrcweir 			if( NULL == GetImport().GetShapeImport()->GetAutoStylesContext())
725cdf0e10cSrcweir 				break;
726cdf0e10cSrcweir 
727cdf0e10cSrcweir             const SvXMLStyleContext* pTempStyle = GetImport().GetShapeImport()->GetAutoStylesContext()->FindStyleChildContext(XML_STYLE_FAMILY_TEXT_PARAGRAPH, maTextStyleName);
728cdf0e10cSrcweir 			XMLPropStyleContext* pStyle = PTR_CAST( XMLPropStyleContext, pTempStyle ); // use temp var, PTR_CAST is a bad macro, FindStyleChildContext will be called twice
729cdf0e10cSrcweir 			if( pStyle == NULL )
730cdf0e10cSrcweir 				break;
731cdf0e10cSrcweir 
732cdf0e10cSrcweir 			// set PropertySet on object
733cdf0e10cSrcweir 			pStyle->FillPropertySet(xPropSet);
734cdf0e10cSrcweir 
735cdf0e10cSrcweir 		} while(0);
736cdf0e10cSrcweir 	}
737cdf0e10cSrcweir 	catch( uno::Exception& )
738cdf0e10cSrcweir 	{
739cdf0e10cSrcweir 	}
740cdf0e10cSrcweir }
741cdf0e10cSrcweir 
742cdf0e10cSrcweir void SdXMLShapeContext::SetLayer()
743cdf0e10cSrcweir {
744cdf0e10cSrcweir 	if( maLayerName.getLength() )
745cdf0e10cSrcweir 	{
746cdf0e10cSrcweir 		try
747cdf0e10cSrcweir 		{
748cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY);
749cdf0e10cSrcweir 			if(xPropSet.is() )
750cdf0e10cSrcweir 			{
751cdf0e10cSrcweir 				uno::Any aAny;
752cdf0e10cSrcweir 				aAny <<= maLayerName;
753cdf0e10cSrcweir 
754cdf0e10cSrcweir 				xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("LayerName")), aAny);
755cdf0e10cSrcweir 				return;
756cdf0e10cSrcweir 			}
757cdf0e10cSrcweir 		}
758cdf0e10cSrcweir 		catch( uno::Exception e )
759cdf0e10cSrcweir 		{
760cdf0e10cSrcweir 		}
761cdf0e10cSrcweir 	}
762cdf0e10cSrcweir }
763cdf0e10cSrcweir 
764cdf0e10cSrcweir void SdXMLShapeContext::SetThumbnail()
765cdf0e10cSrcweir {
766cdf0e10cSrcweir 	if( 0 == maThumbnailURL.getLength() )
767cdf0e10cSrcweir 		return;
768cdf0e10cSrcweir 
769cdf0e10cSrcweir 	try
770cdf0e10cSrcweir 	{
771cdf0e10cSrcweir 		uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY);
772cdf0e10cSrcweir 		if( !xPropSet.is() )
773cdf0e10cSrcweir 			return;
774cdf0e10cSrcweir 
775cdf0e10cSrcweir 		const OUString sProperty(RTL_CONSTASCII_USTRINGPARAM("ThumbnailGraphicURL"));
776cdf0e10cSrcweir 
777cdf0e10cSrcweir 		uno::Reference< beans::XPropertySetInfo > xPropSetInfo( xPropSet->getPropertySetInfo() );
778cdf0e10cSrcweir 		if( xPropSetInfo.is() && xPropSetInfo->hasPropertyByName( sProperty ) )
779cdf0e10cSrcweir 		{
780cdf0e10cSrcweir 			// load the thumbnail graphic and export it to a wmf stream so we can set
781cdf0e10cSrcweir 			// it at the api
782cdf0e10cSrcweir 
783cdf0e10cSrcweir 			const OUString aInternalURL( GetImport().ResolveGraphicObjectURL( maThumbnailURL, sal_False ) );
784cdf0e10cSrcweir 			xPropSet->setPropertyValue( sProperty, uno::makeAny( aInternalURL ) );
785cdf0e10cSrcweir 		}
786cdf0e10cSrcweir 	}
787cdf0e10cSrcweir 	catch( uno::Exception e )
788cdf0e10cSrcweir 	{
789cdf0e10cSrcweir 	}
790cdf0e10cSrcweir }
791cdf0e10cSrcweir 
792cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
793cdf0e10cSrcweir void SdXMLShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
794cdf0e10cSrcweir {
795cdf0e10cSrcweir     bool bHaveXmlId( false );
796cdf0e10cSrcweir 	if( (XML_NAMESPACE_DRAW == nPrefix) || (XML_NAMESPACE_DRAW_EXT == nPrefix) )
797cdf0e10cSrcweir 	{
798cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_ZINDEX ) )
799cdf0e10cSrcweir 		{
800cdf0e10cSrcweir 			mnZOrder = rValue.toInt32();
801cdf0e10cSrcweir 		}
802cdf0e10cSrcweir 		else if( IsXMLToken( rLocalName, XML_ID ) )
803cdf0e10cSrcweir         {
804cdf0e10cSrcweir             if (!bHaveXmlId) { maShapeId = rValue; };
805cdf0e10cSrcweir         }
806cdf0e10cSrcweir 		else if( IsXMLToken( rLocalName, XML_NAME ) )
807cdf0e10cSrcweir 		{
808cdf0e10cSrcweir 			maShapeName = rValue;
809cdf0e10cSrcweir 		}
810cdf0e10cSrcweir 		else if( IsXMLToken( rLocalName, XML_STYLE_NAME ) )
811cdf0e10cSrcweir 		{
812cdf0e10cSrcweir 			maDrawStyleName = rValue;
813cdf0e10cSrcweir 		}
814cdf0e10cSrcweir 		else if( IsXMLToken( rLocalName, XML_TEXT_STYLE_NAME ) )
815cdf0e10cSrcweir 		{
816cdf0e10cSrcweir 			maTextStyleName = rValue;
817cdf0e10cSrcweir 		}
818cdf0e10cSrcweir 		else if( IsXMLToken( rLocalName, XML_LAYER ) )
819cdf0e10cSrcweir 		{
820cdf0e10cSrcweir 			maLayerName = rValue;
821cdf0e10cSrcweir 		}
822cdf0e10cSrcweir 		else if( IsXMLToken( rLocalName, XML_TRANSFORM ) )
823cdf0e10cSrcweir 		{
824cdf0e10cSrcweir 			mnTransform.SetString(rValue, GetImport().GetMM100UnitConverter());
825cdf0e10cSrcweir 		}
826cdf0e10cSrcweir 		else if( IsXMLToken( rLocalName, XML_DISPLAY ) )
827cdf0e10cSrcweir 		{
828cdf0e10cSrcweir 			mbVisible = IsXMLToken( rValue, XML_ALWAYS ) || IsXMLToken( rValue, XML_SCREEN );
829cdf0e10cSrcweir 			mbPrintable = IsXMLToken( rValue, XML_ALWAYS ) || IsXMLToken( rValue, XML_PRINTER );
830cdf0e10cSrcweir 		}
831cdf0e10cSrcweir 	}
832cdf0e10cSrcweir 	else if( XML_NAMESPACE_PRESENTATION == nPrefix )
833cdf0e10cSrcweir 	{
834cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_USER_TRANSFORMED ) )
835cdf0e10cSrcweir 		{
836cdf0e10cSrcweir 			mbIsUserTransformed = IsXMLToken( rValue, XML_TRUE );
837cdf0e10cSrcweir 		}
838cdf0e10cSrcweir 		else if( IsXMLToken( rLocalName, XML_PLACEHOLDER ) )
839cdf0e10cSrcweir 		{
840cdf0e10cSrcweir 			mbIsPlaceholder = IsXMLToken( rValue, XML_TRUE );
841cdf0e10cSrcweir 			if( mbIsPlaceholder )
842cdf0e10cSrcweir 				mbClearDefaultAttributes = false;
843cdf0e10cSrcweir 		}
844cdf0e10cSrcweir 		else if( IsXMLToken( rLocalName, XML_CLASS ) )
845cdf0e10cSrcweir 		{
846cdf0e10cSrcweir 			maPresentationClass = rValue;
847cdf0e10cSrcweir 		}
848cdf0e10cSrcweir 		else if( IsXMLToken( rLocalName, XML_STYLE_NAME ) )
849cdf0e10cSrcweir 		{
850cdf0e10cSrcweir 			maDrawStyleName = rValue;
851cdf0e10cSrcweir 			mnStyleFamily = XML_STYLE_FAMILY_SD_PRESENTATION_ID;
852cdf0e10cSrcweir 		}
853cdf0e10cSrcweir 	}
854cdf0e10cSrcweir 	else if( XML_NAMESPACE_SVG == nPrefix )
855cdf0e10cSrcweir 	{
856cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_X ) )
857cdf0e10cSrcweir 		{
858cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(maPosition.X, rValue);
859cdf0e10cSrcweir 		}
860cdf0e10cSrcweir 		else if( IsXMLToken( rLocalName, XML_Y ) )
861cdf0e10cSrcweir 		{
862cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(maPosition.Y, rValue);
863cdf0e10cSrcweir 		}
864cdf0e10cSrcweir 		else if( IsXMLToken( rLocalName, XML_WIDTH ) )
865cdf0e10cSrcweir 		{
866cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(maSize.Width, rValue);
867cdf0e10cSrcweir 			if( maSize.Width > 0 )
868cdf0e10cSrcweir 				maSize.Width += 1;
869cdf0e10cSrcweir 			else if( maSize.Width < 0 )
870cdf0e10cSrcweir 				maSize.Width -= 1;
871cdf0e10cSrcweir 		}
872cdf0e10cSrcweir 		else if( IsXMLToken( rLocalName, XML_HEIGHT ) )
873cdf0e10cSrcweir 		{
874cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(maSize.Height, rValue);
875cdf0e10cSrcweir 			if( maSize.Height > 0 )
876cdf0e10cSrcweir 				maSize.Height += 1;
877cdf0e10cSrcweir 			else if( maSize.Height < 0 )
878cdf0e10cSrcweir 				maSize.Height -= 1;
879cdf0e10cSrcweir 		}
880cdf0e10cSrcweir 		else if( IsXMLToken( rLocalName, XML_TRANSFORM ) )
881cdf0e10cSrcweir 		{
882cdf0e10cSrcweir 			// because of #85127# take svg:transform into account and hanle like
883cdf0e10cSrcweir 			// draw:transform for compatibility
884cdf0e10cSrcweir 			mnTransform.SetString(rValue, GetImport().GetMM100UnitConverter());
885cdf0e10cSrcweir 		}
886cdf0e10cSrcweir 
887cdf0e10cSrcweir 		// #i68101#
888cdf0e10cSrcweir 		else if( IsXMLToken( rLocalName, XML_TITLE ) )
889cdf0e10cSrcweir 		{
890cdf0e10cSrcweir 			maShapeTitle = rValue;
891cdf0e10cSrcweir 		}
892cdf0e10cSrcweir 		else if( IsXMLToken( rLocalName, XML_DESC ) )
893cdf0e10cSrcweir 		{
894cdf0e10cSrcweir 			maShapeDescription = rValue;
895cdf0e10cSrcweir 		}
896cdf0e10cSrcweir 	}
897cdf0e10cSrcweir 	else if( (XML_NAMESPACE_NONE == nPrefix) || (XML_NAMESPACE_XML == nPrefix) )
898cdf0e10cSrcweir 	{
899cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_ID ) )
900cdf0e10cSrcweir 		{
901cdf0e10cSrcweir 			maShapeId = rValue;
902cdf0e10cSrcweir             bHaveXmlId = true;
903cdf0e10cSrcweir         }
904cdf0e10cSrcweir     }
905cdf0e10cSrcweir }
906cdf0e10cSrcweir 
907cdf0e10cSrcweir sal_Bool SdXMLShapeContext::isPresentationShape() const
908cdf0e10cSrcweir {
909cdf0e10cSrcweir 	if( maPresentationClass.getLength() && (const_cast<SdXMLShapeContext*>(this))->GetImport().GetShapeImport()->IsPresentationShapesSupported() )
910cdf0e10cSrcweir 	{
911cdf0e10cSrcweir 		if(XML_STYLE_FAMILY_SD_PRESENTATION_ID == mnStyleFamily)
912cdf0e10cSrcweir 		{
913cdf0e10cSrcweir 			return sal_True;
914cdf0e10cSrcweir 		}
915cdf0e10cSrcweir 
916cdf0e10cSrcweir 		if( IsXMLToken( maPresentationClass, XML_HEADER ) || IsXMLToken( maPresentationClass, XML_FOOTER ) ||
917cdf0e10cSrcweir 			IsXMLToken( maPresentationClass, XML_PAGE_NUMBER ) || IsXMLToken( maPresentationClass, XML_DATE_TIME ) )
918cdf0e10cSrcweir 		{
919cdf0e10cSrcweir 			return sal_True;
920cdf0e10cSrcweir 		}
921cdf0e10cSrcweir 	}
922cdf0e10cSrcweir 
923cdf0e10cSrcweir 	return sal_False;
924cdf0e10cSrcweir }
925cdf0e10cSrcweir 
926cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
927cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
928cdf0e10cSrcweir 
929cdf0e10cSrcweir TYPEINIT1( SdXMLRectShapeContext, SdXMLShapeContext );
930cdf0e10cSrcweir 
931cdf0e10cSrcweir SdXMLRectShapeContext::SdXMLRectShapeContext(
932cdf0e10cSrcweir 	SvXMLImport& rImport,
933cdf0e10cSrcweir 	sal_uInt16 nPrfx,
934cdf0e10cSrcweir 	const OUString& rLocalName,
935cdf0e10cSrcweir 	const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
936cdf0e10cSrcweir 	uno::Reference< drawing::XShapes >& rShapes,
937cdf0e10cSrcweir     sal_Bool bTemporaryShape)
938cdf0e10cSrcweir :	SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ),
939cdf0e10cSrcweir 	mnRadius( 0L )
940cdf0e10cSrcweir {
941cdf0e10cSrcweir }
942cdf0e10cSrcweir 
943cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
944cdf0e10cSrcweir 
945cdf0e10cSrcweir SdXMLRectShapeContext::~SdXMLRectShapeContext()
946cdf0e10cSrcweir {
947cdf0e10cSrcweir }
948cdf0e10cSrcweir 
949cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
950cdf0e10cSrcweir 
951cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
952cdf0e10cSrcweir void SdXMLRectShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
953cdf0e10cSrcweir {
954cdf0e10cSrcweir 	if( XML_NAMESPACE_DRAW == nPrefix )
955cdf0e10cSrcweir 	{
956cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_CORNER_RADIUS ) )
957cdf0e10cSrcweir 		{
958cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(mnRadius, rValue);
959cdf0e10cSrcweir 			return;
960cdf0e10cSrcweir 		}
961cdf0e10cSrcweir 	}
962cdf0e10cSrcweir 
963cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
964cdf0e10cSrcweir }
965cdf0e10cSrcweir 
966cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
967cdf0e10cSrcweir 
968cdf0e10cSrcweir void SdXMLRectShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList)
969cdf0e10cSrcweir {
970cdf0e10cSrcweir 	// create rectangle shape
971cdf0e10cSrcweir 	AddShape("com.sun.star.drawing.RectangleShape");
972cdf0e10cSrcweir 	if(mxShape.is())
973cdf0e10cSrcweir 	{
974cdf0e10cSrcweir 		// Add, set Style and properties from base shape
975cdf0e10cSrcweir 		SetStyle();
976cdf0e10cSrcweir 		SetLayer();
977cdf0e10cSrcweir 
978cdf0e10cSrcweir 		// set pos, size, shear and rotate
979cdf0e10cSrcweir 		SetTransformation();
980cdf0e10cSrcweir 
981cdf0e10cSrcweir 		if(mnRadius)
982cdf0e10cSrcweir 		{
983cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY);
984cdf0e10cSrcweir 			if(xPropSet.is())
985cdf0e10cSrcweir 			{
986cdf0e10cSrcweir 				try
987cdf0e10cSrcweir 				{
988cdf0e10cSrcweir 					xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("CornerRadius")), uno::makeAny( mnRadius ) );
989cdf0e10cSrcweir 				}
990cdf0e10cSrcweir 				catch( uno::Exception& )
991cdf0e10cSrcweir 				{
992cdf0e10cSrcweir 					DBG_ERROR( "exception during setting of corner radius!");
993cdf0e10cSrcweir 				}
994cdf0e10cSrcweir 			}
995cdf0e10cSrcweir 		}
996cdf0e10cSrcweir 		SdXMLShapeContext::StartElement(xAttrList);
997cdf0e10cSrcweir 	}
998cdf0e10cSrcweir }
999cdf0e10cSrcweir 
1000cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1001cdf0e10cSrcweir ////////////////////////////////////////3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1002cdf0e10cSrcweir 
1003cdf0e10cSrcweir TYPEINIT1( SdXMLLineShapeContext, SdXMLShapeContext );
1004cdf0e10cSrcweir 
1005cdf0e10cSrcweir SdXMLLineShapeContext::SdXMLLineShapeContext(
1006cdf0e10cSrcweir 	SvXMLImport& rImport,
1007cdf0e10cSrcweir 	sal_uInt16 nPrfx,
1008cdf0e10cSrcweir 	const OUString& rLocalName,
1009cdf0e10cSrcweir 	const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
1010cdf0e10cSrcweir 	uno::Reference< drawing::XShapes >& rShapes,
1011cdf0e10cSrcweir     sal_Bool bTemporaryShape)
1012cdf0e10cSrcweir :	SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ),
1013cdf0e10cSrcweir 	mnX1( 0L ),
1014cdf0e10cSrcweir 	mnY1( 0L ),
1015cdf0e10cSrcweir 	mnX2( 1L ),
1016cdf0e10cSrcweir 	mnY2( 1L )
1017cdf0e10cSrcweir {
1018cdf0e10cSrcweir }
1019cdf0e10cSrcweir 
1020cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1021cdf0e10cSrcweir 
1022cdf0e10cSrcweir SdXMLLineShapeContext::~SdXMLLineShapeContext()
1023cdf0e10cSrcweir {
1024cdf0e10cSrcweir }
1025cdf0e10cSrcweir 
1026cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1027cdf0e10cSrcweir 
1028cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
1029cdf0e10cSrcweir void SdXMLLineShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
1030cdf0e10cSrcweir {
1031cdf0e10cSrcweir 	if( XML_NAMESPACE_SVG == nPrefix )
1032cdf0e10cSrcweir 	{
1033cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_X1 ) )
1034cdf0e10cSrcweir 		{
1035cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(mnX1, rValue);
1036cdf0e10cSrcweir 			return;
1037cdf0e10cSrcweir 		}
1038cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_Y1 ) )
1039cdf0e10cSrcweir 		{
1040cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(mnY1, rValue);
1041cdf0e10cSrcweir 			return;
1042cdf0e10cSrcweir 		}
1043cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_X2 ) )
1044cdf0e10cSrcweir 		{
1045cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(mnX2, rValue);
1046cdf0e10cSrcweir 			return;
1047cdf0e10cSrcweir 		}
1048cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_Y2 ) )
1049cdf0e10cSrcweir 		{
1050cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(mnY2, rValue);
1051cdf0e10cSrcweir 			return;
1052cdf0e10cSrcweir 		}
1053cdf0e10cSrcweir 	}
1054cdf0e10cSrcweir 
1055cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
1056cdf0e10cSrcweir }
1057cdf0e10cSrcweir 
1058cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1059cdf0e10cSrcweir 
1060cdf0e10cSrcweir void SdXMLLineShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList)
1061cdf0e10cSrcweir {
1062cdf0e10cSrcweir 	// #85920# use SetTransformation() to handle import of simple lines.
1063cdf0e10cSrcweir 	// This is necessary to kake into account all anchor positions and
1064cdf0e10cSrcweir 	// other things. All shape imports use the same import schemata now.
1065cdf0e10cSrcweir 	// create necessary shape (Line Shape)
1066cdf0e10cSrcweir 	AddShape("com.sun.star.drawing.PolyLineShape");
1067cdf0e10cSrcweir 
1068cdf0e10cSrcweir 	if(mxShape.is())
1069cdf0e10cSrcweir 	{
1070cdf0e10cSrcweir 		// Add, set Style and properties from base shape
1071cdf0e10cSrcweir 		SetStyle();
1072cdf0e10cSrcweir 		SetLayer();
1073cdf0e10cSrcweir 
1074cdf0e10cSrcweir 		// get sizes and offsets
1075cdf0e10cSrcweir 		awt::Point aTopLeft(mnX1, mnY1);
1076cdf0e10cSrcweir 		awt::Point aBottomRight(mnX2, mnY2);
1077cdf0e10cSrcweir 
1078cdf0e10cSrcweir 		if(mnX1 > mnX2)
1079cdf0e10cSrcweir 		{
1080cdf0e10cSrcweir 			aTopLeft.X = mnX2;
1081cdf0e10cSrcweir 			aBottomRight.X = mnX1;
1082cdf0e10cSrcweir 		}
1083cdf0e10cSrcweir 
1084cdf0e10cSrcweir 		if(mnY1 > mnY2)
1085cdf0e10cSrcweir 		{
1086cdf0e10cSrcweir 			aTopLeft.Y = mnY2;
1087cdf0e10cSrcweir 			aBottomRight.Y = mnY1;
1088cdf0e10cSrcweir 		}
1089cdf0e10cSrcweir 
1090cdf0e10cSrcweir 		// set local parameters on shape
1091cdf0e10cSrcweir 		uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY);
1092cdf0e10cSrcweir 		if(xPropSet.is())
1093cdf0e10cSrcweir 		{
1094cdf0e10cSrcweir 			drawing::PointSequenceSequence aPolyPoly(1L);
1095cdf0e10cSrcweir 			drawing::PointSequence* pOuterSequence = aPolyPoly.getArray();
1096cdf0e10cSrcweir 			pOuterSequence->realloc(2L);
1097cdf0e10cSrcweir 			awt::Point* pInnerSequence = pOuterSequence->getArray();
1098cdf0e10cSrcweir 			uno::Any aAny;
1099cdf0e10cSrcweir 
1100cdf0e10cSrcweir 			*pInnerSequence = awt::Point( mnX1 - aTopLeft.X, mnY1 - aTopLeft.Y);
1101cdf0e10cSrcweir 			pInnerSequence++;
1102cdf0e10cSrcweir 			*pInnerSequence = awt::Point( mnX2 - aTopLeft.X, mnY2 - aTopLeft.Y);
1103cdf0e10cSrcweir 
1104cdf0e10cSrcweir 			aAny <<= aPolyPoly;
1105cdf0e10cSrcweir 			xPropSet->setPropertyValue(
1106cdf0e10cSrcweir 				OUString(RTL_CONSTASCII_USTRINGPARAM("Geometry")), aAny);
1107cdf0e10cSrcweir 		}
1108cdf0e10cSrcweir 
1109cdf0e10cSrcweir 		// set sizes for transformation
1110cdf0e10cSrcweir 		maSize.Width = aBottomRight.X - aTopLeft.X;
1111cdf0e10cSrcweir 		maSize.Height = aBottomRight.Y - aTopLeft.Y;
1112cdf0e10cSrcweir 		maPosition.X = aTopLeft.X;
1113cdf0e10cSrcweir 		maPosition.Y = aTopLeft.Y;
1114cdf0e10cSrcweir 
1115cdf0e10cSrcweir 		// set pos, size, shear and rotate and get copy of matrix
1116cdf0e10cSrcweir 		SetTransformation();
1117cdf0e10cSrcweir 
1118cdf0e10cSrcweir 		SdXMLShapeContext::StartElement(xAttrList);
1119cdf0e10cSrcweir 	}
1120cdf0e10cSrcweir }
1121cdf0e10cSrcweir 
1122cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1123cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1124cdf0e10cSrcweir 
1125cdf0e10cSrcweir TYPEINIT1( SdXMLEllipseShapeContext, SdXMLShapeContext );
1126cdf0e10cSrcweir 
1127cdf0e10cSrcweir SdXMLEllipseShapeContext::SdXMLEllipseShapeContext(
1128cdf0e10cSrcweir 	SvXMLImport& rImport,
1129cdf0e10cSrcweir 	sal_uInt16 nPrfx,
1130cdf0e10cSrcweir 	const OUString& rLocalName,
1131cdf0e10cSrcweir 	const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
1132cdf0e10cSrcweir 	uno::Reference< drawing::XShapes >& rShapes,
1133cdf0e10cSrcweir     sal_Bool bTemporaryShape)
1134cdf0e10cSrcweir :	SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ),
1135cdf0e10cSrcweir 	mnCX( 0L ),
1136cdf0e10cSrcweir 	mnCY( 0L ),
1137cdf0e10cSrcweir 	mnRX( 1L ),
1138cdf0e10cSrcweir 	mnRY( 1L ),
1139cdf0e10cSrcweir 	meKind( drawing::CircleKind_FULL ),
1140cdf0e10cSrcweir 	mnStartAngle( 0 ),
1141cdf0e10cSrcweir 	mnEndAngle( 0 )
1142cdf0e10cSrcweir {
1143cdf0e10cSrcweir }
1144cdf0e10cSrcweir 
1145cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1146cdf0e10cSrcweir 
1147cdf0e10cSrcweir SdXMLEllipseShapeContext::~SdXMLEllipseShapeContext()
1148cdf0e10cSrcweir {
1149cdf0e10cSrcweir }
1150cdf0e10cSrcweir 
1151cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1152cdf0e10cSrcweir 
1153cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
1154cdf0e10cSrcweir void SdXMLEllipseShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
1155cdf0e10cSrcweir {
1156cdf0e10cSrcweir 	if( XML_NAMESPACE_SVG == nPrefix )
1157cdf0e10cSrcweir 	{
1158cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_RX ) )
1159cdf0e10cSrcweir 		{
1160cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(mnRX, rValue);
1161cdf0e10cSrcweir 			return;
1162cdf0e10cSrcweir 		}
1163cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_RY ) )
1164cdf0e10cSrcweir 		{
1165cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(mnRY, rValue);
1166cdf0e10cSrcweir 			return;
1167cdf0e10cSrcweir 		}
1168cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_CX ) )
1169cdf0e10cSrcweir 		{
1170cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(mnCX, rValue);
1171cdf0e10cSrcweir 			return;
1172cdf0e10cSrcweir 		}
1173cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_CY ) )
1174cdf0e10cSrcweir 		{
1175cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(mnCY, rValue);
1176cdf0e10cSrcweir 			return;
1177cdf0e10cSrcweir 		}
1178cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_R ) )
1179cdf0e10cSrcweir 		{
1180cdf0e10cSrcweir 			// single radius, it's a circle and both radii are the same
1181cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(mnRX, rValue);
1182cdf0e10cSrcweir 			mnRY = mnRX;
1183cdf0e10cSrcweir 			return;
1184cdf0e10cSrcweir 		}
1185cdf0e10cSrcweir 	}
1186cdf0e10cSrcweir 	else if( XML_NAMESPACE_DRAW == nPrefix )
1187cdf0e10cSrcweir 	{
1188cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_KIND ) )
1189cdf0e10cSrcweir 		{
1190cdf0e10cSrcweir 			sal_uInt16 eKind;
1191cdf0e10cSrcweir 			if( SvXMLUnitConverter::convertEnum( eKind, rValue, aXML_CircleKind_EnumMap ) )
1192cdf0e10cSrcweir 			{
1193cdf0e10cSrcweir 				meKind = eKind;
1194cdf0e10cSrcweir 			}
1195cdf0e10cSrcweir 			return;
1196cdf0e10cSrcweir 		}
1197cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_START_ANGLE ) )
1198cdf0e10cSrcweir 		{
1199cdf0e10cSrcweir 			double dStartAngle;
1200cdf0e10cSrcweir 			if( SvXMLUnitConverter::convertDouble( dStartAngle, rValue ) )
1201cdf0e10cSrcweir 				mnStartAngle = (sal_Int32)(dStartAngle * 100.0);
1202cdf0e10cSrcweir 			return;
1203cdf0e10cSrcweir 		}
1204cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_END_ANGLE ) )
1205cdf0e10cSrcweir 		{
1206cdf0e10cSrcweir 			double dEndAngle;
1207cdf0e10cSrcweir 			if( SvXMLUnitConverter::convertDouble( dEndAngle, rValue ) )
1208cdf0e10cSrcweir 				mnEndAngle = (sal_Int32)(dEndAngle * 100.0);
1209cdf0e10cSrcweir 			return;
1210cdf0e10cSrcweir 		}
1211cdf0e10cSrcweir 	}
1212cdf0e10cSrcweir 
1213cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
1214cdf0e10cSrcweir }
1215cdf0e10cSrcweir 
1216cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1217cdf0e10cSrcweir 
1218cdf0e10cSrcweir void SdXMLEllipseShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList)
1219cdf0e10cSrcweir {
1220cdf0e10cSrcweir 	// create rectangle shape
1221cdf0e10cSrcweir 	AddShape("com.sun.star.drawing.EllipseShape");
1222cdf0e10cSrcweir 	if(mxShape.is())
1223cdf0e10cSrcweir 	{
1224cdf0e10cSrcweir 		// Add, set Style and properties from base shape
1225cdf0e10cSrcweir 		SetStyle();
1226cdf0e10cSrcweir 		SetLayer();
1227cdf0e10cSrcweir 
1228cdf0e10cSrcweir 		// set pos, size, shear and rotate
1229cdf0e10cSrcweir 		SetTransformation();
1230cdf0e10cSrcweir 
1231cdf0e10cSrcweir 		if( meKind != drawing::CircleKind_FULL )
1232cdf0e10cSrcweir 		{
1233cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xPropSet( mxShape, uno::UNO_QUERY );
1234cdf0e10cSrcweir 			if( xPropSet.is() )
1235cdf0e10cSrcweir 			{
1236cdf0e10cSrcweir 				uno::Any aAny;
1237cdf0e10cSrcweir 				aAny <<= (drawing::CircleKind)meKind;
1238cdf0e10cSrcweir 				xPropSet->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("CircleKind")), aAny );
1239cdf0e10cSrcweir 
1240cdf0e10cSrcweir 				aAny <<= mnStartAngle;
1241cdf0e10cSrcweir 				xPropSet->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("CircleStartAngle")), aAny );
1242cdf0e10cSrcweir 
1243cdf0e10cSrcweir 				aAny <<= mnEndAngle;
1244cdf0e10cSrcweir 				xPropSet->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("CircleEndAngle")), aAny );
1245cdf0e10cSrcweir 			}
1246cdf0e10cSrcweir 		}
1247cdf0e10cSrcweir 
1248cdf0e10cSrcweir 		SdXMLShapeContext::StartElement(xAttrList);
1249cdf0e10cSrcweir 	}
1250cdf0e10cSrcweir }
1251cdf0e10cSrcweir 
1252cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1253cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1254cdf0e10cSrcweir 
1255cdf0e10cSrcweir TYPEINIT1( SdXMLPolygonShapeContext, SdXMLShapeContext );
1256cdf0e10cSrcweir 
1257cdf0e10cSrcweir SdXMLPolygonShapeContext::SdXMLPolygonShapeContext(
1258cdf0e10cSrcweir 	SvXMLImport& rImport,
1259cdf0e10cSrcweir 	sal_uInt16 nPrfx,
1260cdf0e10cSrcweir 	const OUString& rLocalName,
1261cdf0e10cSrcweir 	const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
1262cdf0e10cSrcweir 	uno::Reference< drawing::XShapes >& rShapes, sal_Bool bClosed, sal_Bool bTemporaryShape)
1263cdf0e10cSrcweir :	SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ),
1264cdf0e10cSrcweir 	mbClosed( bClosed )
1265cdf0e10cSrcweir {
1266cdf0e10cSrcweir }
1267cdf0e10cSrcweir 
1268cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1269cdf0e10cSrcweir 
1270cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
1271cdf0e10cSrcweir void SdXMLPolygonShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
1272cdf0e10cSrcweir {
1273cdf0e10cSrcweir 	if( XML_NAMESPACE_SVG == nPrefix )
1274cdf0e10cSrcweir 	{
1275cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_VIEWBOX ) )
1276cdf0e10cSrcweir 		{
1277cdf0e10cSrcweir 			maViewBox = rValue;
1278cdf0e10cSrcweir 			return;
1279cdf0e10cSrcweir 		}
1280cdf0e10cSrcweir 	}
1281cdf0e10cSrcweir 	else if( XML_NAMESPACE_DRAW == nPrefix )
1282cdf0e10cSrcweir 	{
1283cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_POINTS ) )
1284cdf0e10cSrcweir 		{
1285cdf0e10cSrcweir 			maPoints = rValue;
1286cdf0e10cSrcweir 			return;
1287cdf0e10cSrcweir 		}
1288cdf0e10cSrcweir 	}
1289cdf0e10cSrcweir 
1290cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
1291cdf0e10cSrcweir }
1292cdf0e10cSrcweir 
1293cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1294cdf0e10cSrcweir 
1295cdf0e10cSrcweir SdXMLPolygonShapeContext::~SdXMLPolygonShapeContext()
1296cdf0e10cSrcweir {
1297cdf0e10cSrcweir }
1298cdf0e10cSrcweir 
1299cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1300cdf0e10cSrcweir 
1301cdf0e10cSrcweir void SdXMLPolygonShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList)
1302cdf0e10cSrcweir {
1303cdf0e10cSrcweir 	// Add, set Style and properties from base shape
1304cdf0e10cSrcweir 	if(mbClosed)
1305cdf0e10cSrcweir 		AddShape("com.sun.star.drawing.PolyPolygonShape");
1306cdf0e10cSrcweir 	else
1307cdf0e10cSrcweir 		AddShape("com.sun.star.drawing.PolyLineShape");
1308cdf0e10cSrcweir 
1309cdf0e10cSrcweir 	if( mxShape.is() )
1310cdf0e10cSrcweir 	{
1311cdf0e10cSrcweir 		SetStyle();
1312cdf0e10cSrcweir 		SetLayer();
1313cdf0e10cSrcweir 
1314cdf0e10cSrcweir 		// set local parameters on shape
1315cdf0e10cSrcweir 		uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY);
1316cdf0e10cSrcweir 		if(xPropSet.is())
1317cdf0e10cSrcweir 		{
1318cdf0e10cSrcweir 			// set polygon
1319cdf0e10cSrcweir 			if(maPoints.getLength() && maViewBox.getLength())
1320cdf0e10cSrcweir 			{
1321cdf0e10cSrcweir 				SdXMLImExViewBox aViewBox(maViewBox, GetImport().GetMM100UnitConverter());
1322cdf0e10cSrcweir 				awt::Size aSize(aViewBox.GetWidth(), aViewBox.GetHeight());
1323cdf0e10cSrcweir 				if (maSize.Width != 0 && maSize.Height !=0)
1324cdf0e10cSrcweir 				{
1325cdf0e10cSrcweir 					aSize = maSize;
1326cdf0e10cSrcweir 				}
1327cdf0e10cSrcweir 				awt::Point aPosition(aViewBox.GetX(), aViewBox.GetY());
1328cdf0e10cSrcweir 				SdXMLImExPointsElement aPoints(maPoints, aViewBox,
1329cdf0e10cSrcweir 					aPosition, aSize, GetImport().GetMM100UnitConverter());
1330cdf0e10cSrcweir 
1331cdf0e10cSrcweir 				uno::Any aAny;
1332cdf0e10cSrcweir 				aAny <<= aPoints.GetPointSequenceSequence();
1333cdf0e10cSrcweir 				xPropSet->setPropertyValue(
1334cdf0e10cSrcweir 					OUString(RTL_CONSTASCII_USTRINGPARAM("Geometry")), aAny);
1335cdf0e10cSrcweir 			}
1336cdf0e10cSrcweir 		}
1337cdf0e10cSrcweir 
1338cdf0e10cSrcweir 		// set pos, size, shear and rotate and get copy of matrix
1339cdf0e10cSrcweir 		SetTransformation();
1340cdf0e10cSrcweir 
1341cdf0e10cSrcweir 		SdXMLShapeContext::StartElement(xAttrList);
1342cdf0e10cSrcweir 	}
1343cdf0e10cSrcweir }
1344cdf0e10cSrcweir 
1345cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1346cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1347cdf0e10cSrcweir 
1348cdf0e10cSrcweir TYPEINIT1( SdXMLPathShapeContext, SdXMLShapeContext );
1349cdf0e10cSrcweir 
1350cdf0e10cSrcweir SdXMLPathShapeContext::SdXMLPathShapeContext(
1351cdf0e10cSrcweir 	SvXMLImport& rImport,
1352cdf0e10cSrcweir 	sal_uInt16 nPrfx,
1353cdf0e10cSrcweir 	const OUString& rLocalName,
1354cdf0e10cSrcweir 	const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
1355cdf0e10cSrcweir 	uno::Reference< drawing::XShapes >& rShapes,
1356cdf0e10cSrcweir     sal_Bool bTemporaryShape)
1357cdf0e10cSrcweir :	SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ),
1358cdf0e10cSrcweir 	mbClosed( sal_True )
1359cdf0e10cSrcweir {
1360cdf0e10cSrcweir }
1361cdf0e10cSrcweir 
1362cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1363cdf0e10cSrcweir 
1364cdf0e10cSrcweir SdXMLPathShapeContext::~SdXMLPathShapeContext()
1365cdf0e10cSrcweir {
1366cdf0e10cSrcweir }
1367cdf0e10cSrcweir 
1368cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1369cdf0e10cSrcweir 
1370cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
1371cdf0e10cSrcweir void SdXMLPathShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
1372cdf0e10cSrcweir {
1373cdf0e10cSrcweir 	if( XML_NAMESPACE_SVG == nPrefix )
1374cdf0e10cSrcweir 	{
1375cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_VIEWBOX ) )
1376cdf0e10cSrcweir 		{
1377cdf0e10cSrcweir 			maViewBox = rValue;
1378cdf0e10cSrcweir 			return;
1379cdf0e10cSrcweir 		}
1380cdf0e10cSrcweir 		else if( IsXMLToken( rLocalName, XML_D ) )
1381cdf0e10cSrcweir 		{
1382cdf0e10cSrcweir 			maD = rValue;
1383cdf0e10cSrcweir 			return;
1384cdf0e10cSrcweir 		}
1385cdf0e10cSrcweir 	}
1386cdf0e10cSrcweir 
1387cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
1388cdf0e10cSrcweir }
1389cdf0e10cSrcweir 
1390cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1391cdf0e10cSrcweir 
1392cdf0e10cSrcweir void SdXMLPathShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList)
1393cdf0e10cSrcweir {
1394cdf0e10cSrcweir 	// create polygon shape
1395cdf0e10cSrcweir 	if(maD.getLength())
1396cdf0e10cSrcweir 	{
1397cdf0e10cSrcweir 		// prepare some of the parameters
1398cdf0e10cSrcweir 		SdXMLImExViewBox aViewBox(maViewBox, GetImport().GetMM100UnitConverter());
1399cdf0e10cSrcweir 		awt::Size aSize(aViewBox.GetWidth(), aViewBox.GetHeight());
1400cdf0e10cSrcweir 		awt::Point aPosition(aViewBox.GetX(), aViewBox.GetY());
1401cdf0e10cSrcweir 		if (maSize.Width != 0 && maSize.Height !=0)
1402cdf0e10cSrcweir 		{
1403cdf0e10cSrcweir 			aSize = maSize;
1404cdf0e10cSrcweir 		}
1405cdf0e10cSrcweir 		SdXMLImExSvgDElement aPoints(maD, aViewBox,
1406cdf0e10cSrcweir 			aPosition, aSize, GetImport().GetMM100UnitConverter());
1407cdf0e10cSrcweir 
1408cdf0e10cSrcweir 		const char* pService;
1409cdf0e10cSrcweir 		// now create shape
1410cdf0e10cSrcweir 		if(aPoints.IsCurve())
1411cdf0e10cSrcweir 		{
1412cdf0e10cSrcweir 			if(aPoints.IsClosed())
1413cdf0e10cSrcweir 			{
1414cdf0e10cSrcweir 				pService = "com.sun.star.drawing.ClosedBezierShape";
1415cdf0e10cSrcweir 			}
1416cdf0e10cSrcweir 			else
1417cdf0e10cSrcweir 			{
1418cdf0e10cSrcweir 				pService = "com.sun.star.drawing.OpenBezierShape";
1419cdf0e10cSrcweir 			}
1420cdf0e10cSrcweir 		}
1421cdf0e10cSrcweir 		else
1422cdf0e10cSrcweir 		{
1423cdf0e10cSrcweir 			if(aPoints.IsClosed())
1424cdf0e10cSrcweir 			{
1425cdf0e10cSrcweir 				pService = "com.sun.star.drawing.PolyPolygonShape";
1426cdf0e10cSrcweir 			}
1427cdf0e10cSrcweir 			else
1428cdf0e10cSrcweir 			{
1429cdf0e10cSrcweir 				pService = "com.sun.star.drawing.PolyLineShape";
1430cdf0e10cSrcweir 			}
1431cdf0e10cSrcweir 		}
1432cdf0e10cSrcweir 
1433cdf0e10cSrcweir 		// Add, set Style and properties from base shape
1434cdf0e10cSrcweir 		AddShape(pService);
1435cdf0e10cSrcweir 
1436cdf0e10cSrcweir 		// #89344# test for mxShape.is() and not for mxShapes.is() to support
1437cdf0e10cSrcweir 		// shape import helper classes WITHOUT XShapes (member mxShapes). This
1438cdf0e10cSrcweir 		// is used by the writer.
1439cdf0e10cSrcweir 		if( mxShape.is() )
1440cdf0e10cSrcweir 		{
1441cdf0e10cSrcweir 			SetStyle();
1442cdf0e10cSrcweir 			SetLayer();
1443cdf0e10cSrcweir 
1444cdf0e10cSrcweir 			// set local parameters on shape
1445cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY);
1446cdf0e10cSrcweir 			if(xPropSet.is())
1447cdf0e10cSrcweir 			{
1448cdf0e10cSrcweir 				uno::Any aAny;
1449cdf0e10cSrcweir 
1450cdf0e10cSrcweir 				// set svg:d
1451cdf0e10cSrcweir 				if(maD.getLength())
1452cdf0e10cSrcweir 				{
1453cdf0e10cSrcweir 					if(aPoints.IsCurve())
1454cdf0e10cSrcweir 					{
1455cdf0e10cSrcweir 						drawing::PolyPolygonBezierCoords aSourcePolyPolygon(
1456cdf0e10cSrcweir 							aPoints.GetPointSequenceSequence(),
1457cdf0e10cSrcweir 							aPoints.GetFlagSequenceSequence());
1458cdf0e10cSrcweir 
1459cdf0e10cSrcweir 						aAny <<= aSourcePolyPolygon;
1460cdf0e10cSrcweir 						xPropSet->setPropertyValue(
1461cdf0e10cSrcweir 							OUString(RTL_CONSTASCII_USTRINGPARAM("Geometry")), aAny);
1462cdf0e10cSrcweir 					}
1463cdf0e10cSrcweir 					else
1464cdf0e10cSrcweir 					{
1465cdf0e10cSrcweir 						aAny <<= aPoints.GetPointSequenceSequence();
1466cdf0e10cSrcweir 						xPropSet->setPropertyValue(
1467cdf0e10cSrcweir 							OUString(RTL_CONSTASCII_USTRINGPARAM("Geometry")), aAny);
1468cdf0e10cSrcweir 					}
1469cdf0e10cSrcweir 				}
1470cdf0e10cSrcweir 			}
1471cdf0e10cSrcweir 
1472cdf0e10cSrcweir 			// set pos, size, shear and rotate
1473cdf0e10cSrcweir 			SetTransformation();
1474cdf0e10cSrcweir 
1475cdf0e10cSrcweir 			SdXMLShapeContext::StartElement(xAttrList);
1476cdf0e10cSrcweir 		}
1477cdf0e10cSrcweir 	}
1478cdf0e10cSrcweir }
1479cdf0e10cSrcweir 
1480cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1481cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1482cdf0e10cSrcweir 
1483cdf0e10cSrcweir TYPEINIT1( SdXMLTextBoxShapeContext, SdXMLShapeContext );
1484cdf0e10cSrcweir 
1485cdf0e10cSrcweir SdXMLTextBoxShapeContext::SdXMLTextBoxShapeContext(
1486cdf0e10cSrcweir 	SvXMLImport& rImport,
1487cdf0e10cSrcweir 	sal_uInt16 nPrfx,
1488cdf0e10cSrcweir 	const OUString& rLocalName,
1489cdf0e10cSrcweir 	const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
1490cdf0e10cSrcweir 	uno::Reference< drawing::XShapes >& rShapes,
1491cdf0e10cSrcweir     sal_Bool bTemporaryShape)
1492cdf0e10cSrcweir :	SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ),
1493cdf0e10cSrcweir 	mnRadius(0)
1494cdf0e10cSrcweir {
1495cdf0e10cSrcweir }
1496cdf0e10cSrcweir 
1497cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1498cdf0e10cSrcweir 
1499cdf0e10cSrcweir SdXMLTextBoxShapeContext::~SdXMLTextBoxShapeContext()
1500cdf0e10cSrcweir {
1501cdf0e10cSrcweir }
1502cdf0e10cSrcweir 
1503cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1504cdf0e10cSrcweir 
1505cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
1506cdf0e10cSrcweir void SdXMLTextBoxShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
1507cdf0e10cSrcweir {
1508cdf0e10cSrcweir 	if( XML_NAMESPACE_DRAW == nPrefix )
1509cdf0e10cSrcweir 	{
1510cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_CORNER_RADIUS ) )
1511cdf0e10cSrcweir 		{
1512cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(mnRadius, rValue);
1513cdf0e10cSrcweir 			return;
1514cdf0e10cSrcweir 		}
1515cdf0e10cSrcweir 	}
1516cdf0e10cSrcweir 
1517cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
1518cdf0e10cSrcweir }
1519cdf0e10cSrcweir 
1520cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1521cdf0e10cSrcweir 
1522cdf0e10cSrcweir void SdXMLTextBoxShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>&)
1523cdf0e10cSrcweir {
1524cdf0e10cSrcweir 	// create textbox shape
1525cdf0e10cSrcweir 	sal_Bool bIsPresShape = sal_False;
1526cdf0e10cSrcweir 	bool bClearText = false;
1527cdf0e10cSrcweir 
1528cdf0e10cSrcweir 	const char *pService = NULL;
1529cdf0e10cSrcweir 
1530cdf0e10cSrcweir 	if( isPresentationShape() )
1531cdf0e10cSrcweir 	{
1532cdf0e10cSrcweir 		// check if the current document supports presentation shapes
1533cdf0e10cSrcweir 		if( GetImport().GetShapeImport()->IsPresentationShapesSupported() )
1534cdf0e10cSrcweir 		{
1535cdf0e10cSrcweir 			if( IsXMLToken( maPresentationClass, XML_PRESENTATION_SUBTITLE ))
1536cdf0e10cSrcweir 			{
1537cdf0e10cSrcweir 				// XmlShapeTypePresSubtitleShape
1538cdf0e10cSrcweir 				pService = "com.sun.star.presentation.SubtitleShape";
1539cdf0e10cSrcweir 			}
1540cdf0e10cSrcweir 			else if( IsXMLToken( maPresentationClass, XML_PRESENTATION_OUTLINE ) )
1541cdf0e10cSrcweir 			{
1542cdf0e10cSrcweir 				// XmlShapeTypePresOutlinerShape
1543cdf0e10cSrcweir 				pService = "com.sun.star.presentation.OutlinerShape";
1544cdf0e10cSrcweir 			}
1545cdf0e10cSrcweir 			else if( IsXMLToken( maPresentationClass, XML_PRESENTATION_NOTES ) )
1546cdf0e10cSrcweir 			{
1547cdf0e10cSrcweir 				// XmlShapeTypePresNotesShape
1548cdf0e10cSrcweir 				pService = "com.sun.star.presentation.NotesShape";
1549cdf0e10cSrcweir 			}
1550cdf0e10cSrcweir 			else if( IsXMLToken( maPresentationClass, XML_HEADER ) )
1551cdf0e10cSrcweir 			{
1552cdf0e10cSrcweir 				// XmlShapeTypePresHeaderShape
1553cdf0e10cSrcweir 				pService = "com.sun.star.presentation.HeaderShape";
1554cdf0e10cSrcweir 				bClearText = true;
1555cdf0e10cSrcweir 			}
1556cdf0e10cSrcweir 			else if( IsXMLToken( maPresentationClass, XML_FOOTER ) )
1557cdf0e10cSrcweir 			{
1558cdf0e10cSrcweir 				// XmlShapeTypePresFooterShape
1559cdf0e10cSrcweir 				pService = "com.sun.star.presentation.FooterShape";
1560cdf0e10cSrcweir 				bClearText = true;
1561cdf0e10cSrcweir 			}
1562cdf0e10cSrcweir 			else if( IsXMLToken( maPresentationClass, XML_PAGE_NUMBER ) )
1563cdf0e10cSrcweir 			{
1564cdf0e10cSrcweir 				// XmlShapeTypePresSlideNumberShape
1565cdf0e10cSrcweir 				pService = "com.sun.star.presentation.SlideNumberShape";
1566cdf0e10cSrcweir 				bClearText = true;
1567cdf0e10cSrcweir 			}
1568cdf0e10cSrcweir 			else if( IsXMLToken( maPresentationClass, XML_DATE_TIME ) )
1569cdf0e10cSrcweir 			{
1570cdf0e10cSrcweir 				// XmlShapeTypePresDateTimeShape
1571cdf0e10cSrcweir 				pService = "com.sun.star.presentation.DateTimeShape";
1572cdf0e10cSrcweir 				bClearText = true;
1573cdf0e10cSrcweir 			}
1574cdf0e10cSrcweir 			else //  IsXMLToken( maPresentationClass, XML_PRESENTATION_TITLE ) )
1575cdf0e10cSrcweir 			{
1576cdf0e10cSrcweir 				// XmlShapeTypePresTitleTextShape
1577cdf0e10cSrcweir 				pService = "com.sun.star.presentation.TitleTextShape";
1578cdf0e10cSrcweir 			}
1579cdf0e10cSrcweir 			bIsPresShape = sal_True;
1580cdf0e10cSrcweir 		}
1581cdf0e10cSrcweir 	}
1582cdf0e10cSrcweir 
1583cdf0e10cSrcweir 	if( NULL == pService )
1584cdf0e10cSrcweir 	{
1585cdf0e10cSrcweir 		// normal text shape
1586cdf0e10cSrcweir 		pService = "com.sun.star.drawing.TextShape";
1587cdf0e10cSrcweir 	}
1588cdf0e10cSrcweir 
1589cdf0e10cSrcweir 	// Add, set Style and properties from base shape
1590cdf0e10cSrcweir 	AddShape(pService);
1591cdf0e10cSrcweir 
1592cdf0e10cSrcweir 	if( mxShape.is() )
1593cdf0e10cSrcweir 	{
1594cdf0e10cSrcweir 		SetStyle();
1595cdf0e10cSrcweir 		SetLayer();
1596cdf0e10cSrcweir 
1597cdf0e10cSrcweir 		if(bIsPresShape)
1598cdf0e10cSrcweir 		{
1599cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xProps(mxShape, uno::UNO_QUERY);
1600cdf0e10cSrcweir 			if(xProps.is())
1601cdf0e10cSrcweir 			{
1602cdf0e10cSrcweir 				uno::Reference< beans::XPropertySetInfo > xPropsInfo( xProps->getPropertySetInfo() );
1603cdf0e10cSrcweir 				if( xPropsInfo.is() )
1604cdf0e10cSrcweir 				{
1605cdf0e10cSrcweir 					if( !mbIsPlaceholder && xPropsInfo->hasPropertyByName(OUString(RTL_CONSTASCII_USTRINGPARAM("IsEmptyPresentationObject") )))
1606cdf0e10cSrcweir 						xProps->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("IsEmptyPresentationObject") ), ::cppu::bool2any( sal_False ) );
1607cdf0e10cSrcweir 
1608cdf0e10cSrcweir 					if( mbIsUserTransformed && xPropsInfo->hasPropertyByName(OUString(RTL_CONSTASCII_USTRINGPARAM("IsPlaceholderDependent") )))
1609cdf0e10cSrcweir 						xProps->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("IsPlaceholderDependent") ), ::cppu::bool2any( sal_False ) );
1610cdf0e10cSrcweir 				}
1611cdf0e10cSrcweir 			}
1612cdf0e10cSrcweir 		}
1613cdf0e10cSrcweir 
1614cdf0e10cSrcweir 		if( bClearText )
1615cdf0e10cSrcweir 		{
1616cdf0e10cSrcweir 			uno::Reference< text::XText > xText( mxShape, uno::UNO_QUERY );
1617cdf0e10cSrcweir 			OUString aEmpty;
1618cdf0e10cSrcweir 			xText->setString( aEmpty );
1619cdf0e10cSrcweir 		}
1620cdf0e10cSrcweir 
1621cdf0e10cSrcweir 		// set parameters on shape
1622cdf0e10cSrcweir //A AW->CL: Eventually You need to strip scale and translate from the transformation
1623cdf0e10cSrcweir //A to reach the same goal again.
1624cdf0e10cSrcweir //A		if(!bIsPresShape || mbIsUserTransformed)
1625cdf0e10cSrcweir //A		{
1626cdf0e10cSrcweir //A			// set pos and size on shape, this should remove binding
1627cdf0e10cSrcweir //A			// to pres object on masterpage
1628cdf0e10cSrcweir //A			SetSizeAndPosition();
1629cdf0e10cSrcweir //A		}
1630cdf0e10cSrcweir 
1631cdf0e10cSrcweir 		// set pos, size, shear and rotate
1632cdf0e10cSrcweir 		SetTransformation();
1633cdf0e10cSrcweir 
1634cdf0e10cSrcweir 		if(mnRadius)
1635cdf0e10cSrcweir 		{
1636cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY);
1637cdf0e10cSrcweir 			if(xPropSet.is())
1638cdf0e10cSrcweir 			{
1639cdf0e10cSrcweir 				try
1640cdf0e10cSrcweir 				{
1641cdf0e10cSrcweir 					xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("CornerRadius")), uno::makeAny( mnRadius ) );
1642cdf0e10cSrcweir 				}
1643cdf0e10cSrcweir 				catch( uno::Exception& )
1644cdf0e10cSrcweir 				{
1645cdf0e10cSrcweir 					DBG_ERROR( "exception during setting of corner radius!");
1646cdf0e10cSrcweir 				}
1647cdf0e10cSrcweir 			}
1648cdf0e10cSrcweir 		}
1649cdf0e10cSrcweir 
1650cdf0e10cSrcweir 		SdXMLShapeContext::StartElement(mxAttrList);
1651cdf0e10cSrcweir 	}
1652cdf0e10cSrcweir }
1653cdf0e10cSrcweir 
1654cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1655cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1656cdf0e10cSrcweir 
1657cdf0e10cSrcweir TYPEINIT1( SdXMLControlShapeContext, SdXMLShapeContext );
1658cdf0e10cSrcweir 
1659cdf0e10cSrcweir SdXMLControlShapeContext::SdXMLControlShapeContext(
1660cdf0e10cSrcweir 	SvXMLImport& rImport,
1661cdf0e10cSrcweir 	sal_uInt16 nPrfx,
1662cdf0e10cSrcweir 	const OUString& rLocalName,
1663cdf0e10cSrcweir 	const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
1664cdf0e10cSrcweir 	uno::Reference< drawing::XShapes >& rShapes,
1665cdf0e10cSrcweir     sal_Bool bTemporaryShape)
1666cdf0e10cSrcweir :	SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape )
1667cdf0e10cSrcweir {
1668cdf0e10cSrcweir }
1669cdf0e10cSrcweir 
1670cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1671cdf0e10cSrcweir 
1672cdf0e10cSrcweir SdXMLControlShapeContext::~SdXMLControlShapeContext()
1673cdf0e10cSrcweir {
1674cdf0e10cSrcweir }
1675cdf0e10cSrcweir 
1676cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1677cdf0e10cSrcweir 
1678cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
1679cdf0e10cSrcweir void SdXMLControlShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
1680cdf0e10cSrcweir {
1681cdf0e10cSrcweir 	if( XML_NAMESPACE_DRAW == nPrefix )
1682cdf0e10cSrcweir 	{
1683cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_CONTROL ) )
1684cdf0e10cSrcweir 		{
1685cdf0e10cSrcweir 			maFormId = rValue;
1686cdf0e10cSrcweir 			return;
1687cdf0e10cSrcweir 		}
1688cdf0e10cSrcweir 	}
1689cdf0e10cSrcweir 
1690cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
1691cdf0e10cSrcweir }
1692cdf0e10cSrcweir 
1693cdf0e10cSrcweir void SdXMLControlShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList)
1694cdf0e10cSrcweir {
1695cdf0e10cSrcweir 	// create Control shape
1696cdf0e10cSrcweir 	// add, set style and properties from base shape
1697cdf0e10cSrcweir 	AddShape("com.sun.star.drawing.ControlShape");
1698cdf0e10cSrcweir 	if( mxShape.is() )
1699cdf0e10cSrcweir 	{
1700cdf0e10cSrcweir 		DBG_ASSERT( maFormId.getLength(), "draw:control without a form:id attribute!" );
1701cdf0e10cSrcweir 		if( maFormId.getLength() )
1702cdf0e10cSrcweir 		{
1703cdf0e10cSrcweir #ifndef SVX_LIGHT
1704cdf0e10cSrcweir 			if( GetImport().IsFormsSupported() )
1705cdf0e10cSrcweir 			{
1706cdf0e10cSrcweir 				uno::Reference< awt::XControlModel > xControlModel( GetImport().GetFormImport()->lookupControl( maFormId ), uno::UNO_QUERY );
1707cdf0e10cSrcweir 				if( xControlModel.is() )
1708cdf0e10cSrcweir 				{
1709cdf0e10cSrcweir 					uno::Reference< drawing::XControlShape > xControl( mxShape, uno::UNO_QUERY );
1710cdf0e10cSrcweir 					if( xControl.is() )
1711cdf0e10cSrcweir 						xControl->setControl(  xControlModel );
1712cdf0e10cSrcweir 
1713cdf0e10cSrcweir 				}
1714cdf0e10cSrcweir 			}
1715cdf0e10cSrcweir #endif // #ifndef SVX_LIGHT
1716cdf0e10cSrcweir 		}
1717cdf0e10cSrcweir 
1718cdf0e10cSrcweir 		SetStyle();
1719cdf0e10cSrcweir 		SetLayer();
1720cdf0e10cSrcweir 
1721cdf0e10cSrcweir 		// set pos, size, shear and rotate
1722cdf0e10cSrcweir 		SetTransformation();
1723cdf0e10cSrcweir 
1724cdf0e10cSrcweir 		SdXMLShapeContext::StartElement(xAttrList);
1725cdf0e10cSrcweir 	}
1726cdf0e10cSrcweir }
1727cdf0e10cSrcweir 
1728cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1729cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1730cdf0e10cSrcweir 
1731cdf0e10cSrcweir TYPEINIT1( SdXMLConnectorShapeContext, SdXMLShapeContext );
1732cdf0e10cSrcweir 
1733cdf0e10cSrcweir SdXMLConnectorShapeContext::SdXMLConnectorShapeContext(
1734cdf0e10cSrcweir 	SvXMLImport& rImport,
1735cdf0e10cSrcweir 	sal_uInt16 nPrfx,
1736cdf0e10cSrcweir 	const OUString& rLocalName,
1737cdf0e10cSrcweir 	const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
1738cdf0e10cSrcweir 	uno::Reference< drawing::XShapes >& rShapes,
1739cdf0e10cSrcweir     sal_Bool bTemporaryShape)
1740cdf0e10cSrcweir :	SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ),
1741cdf0e10cSrcweir 	maStart(0,0),
1742cdf0e10cSrcweir 	maEnd(1,1),
1743cdf0e10cSrcweir 	mnType( (sal_uInt16)drawing::ConnectorType_STANDARD ),
1744cdf0e10cSrcweir 	mnStartGlueId(-1),
1745cdf0e10cSrcweir 	mnEndGlueId(-1),
1746cdf0e10cSrcweir 	mnDelta1(0),
1747cdf0e10cSrcweir 	mnDelta2(0),
1748cdf0e10cSrcweir 	mnDelta3(0)
1749cdf0e10cSrcweir {
1750cdf0e10cSrcweir }
1751cdf0e10cSrcweir 
1752cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1753cdf0e10cSrcweir 
1754cdf0e10cSrcweir SdXMLConnectorShapeContext::~SdXMLConnectorShapeContext()
1755cdf0e10cSrcweir {
1756cdf0e10cSrcweir }
1757cdf0e10cSrcweir 
1758cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1759cdf0e10cSrcweir 
1760cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
1761cdf0e10cSrcweir void SdXMLConnectorShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
1762cdf0e10cSrcweir {
1763cdf0e10cSrcweir 	switch( nPrefix )
1764cdf0e10cSrcweir 	{
1765cdf0e10cSrcweir 	case XML_NAMESPACE_DRAW:
1766cdf0e10cSrcweir 	{
1767cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_START_SHAPE ) )
1768cdf0e10cSrcweir 		{
1769cdf0e10cSrcweir 			maStartShapeId = rValue;
1770cdf0e10cSrcweir 			return;
1771cdf0e10cSrcweir 		}
1772cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_START_GLUE_POINT ) )
1773cdf0e10cSrcweir 		{
1774cdf0e10cSrcweir 			mnStartGlueId = rValue.toInt32();
1775cdf0e10cSrcweir 			return;
1776cdf0e10cSrcweir 		}
1777cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_END_SHAPE ) )
1778cdf0e10cSrcweir 		{
1779cdf0e10cSrcweir 			maEndShapeId = rValue;
1780cdf0e10cSrcweir 			return;
1781cdf0e10cSrcweir 		}
1782cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_END_GLUE_POINT ) )
1783cdf0e10cSrcweir 		{
1784cdf0e10cSrcweir 			mnEndGlueId = rValue.toInt32();
1785cdf0e10cSrcweir 			return;
1786cdf0e10cSrcweir 		}
1787cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_LINE_SKEW ) )
1788cdf0e10cSrcweir 		{
1789cdf0e10cSrcweir 			SvXMLTokenEnumerator aTokenEnum( rValue );
1790cdf0e10cSrcweir 			OUString aToken;
1791cdf0e10cSrcweir 			if( aTokenEnum.getNextToken( aToken ) )
1792cdf0e10cSrcweir 			{
1793cdf0e10cSrcweir 				GetImport().GetMM100UnitConverter().convertMeasure(mnDelta1, aToken);
1794cdf0e10cSrcweir 				if( aTokenEnum.getNextToken( aToken ) )
1795cdf0e10cSrcweir 				{
1796cdf0e10cSrcweir 					GetImport().GetMM100UnitConverter().convertMeasure(mnDelta2, aToken);
1797cdf0e10cSrcweir 					if( aTokenEnum.getNextToken( aToken ) )
1798cdf0e10cSrcweir 					{
1799cdf0e10cSrcweir 						GetImport().GetMM100UnitConverter().convertMeasure(mnDelta3, aToken);
1800cdf0e10cSrcweir 					}
1801cdf0e10cSrcweir 				}
1802cdf0e10cSrcweir 			}
1803cdf0e10cSrcweir 			return;
1804cdf0e10cSrcweir 		}
1805cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_TYPE ) )
1806cdf0e10cSrcweir 		{
1807cdf0e10cSrcweir 			SvXMLUnitConverter::convertEnum( mnType, rValue, aXML_ConnectionKind_EnumMap );
1808cdf0e10cSrcweir 			return;
1809cdf0e10cSrcweir 		}
1810cdf0e10cSrcweir 	}
1811cdf0e10cSrcweir 	case XML_NAMESPACE_SVG:
1812cdf0e10cSrcweir 	{
1813cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_X1 ) )
1814cdf0e10cSrcweir 		{
1815cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(maStart.X, rValue);
1816cdf0e10cSrcweir 			return;
1817cdf0e10cSrcweir 		}
1818cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_Y1 ) )
1819cdf0e10cSrcweir 		{
1820cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(maStart.Y, rValue);
1821cdf0e10cSrcweir 			return;
1822cdf0e10cSrcweir 		}
1823cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_X2 ) )
1824cdf0e10cSrcweir 		{
1825cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(maEnd.X, rValue);
1826cdf0e10cSrcweir 			return;
1827cdf0e10cSrcweir 		}
1828cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_Y2 ) )
1829cdf0e10cSrcweir 		{
1830cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(maEnd.Y, rValue);
1831cdf0e10cSrcweir 			return;
1832cdf0e10cSrcweir 		}
1833cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_D ) )
1834cdf0e10cSrcweir 		{
1835cdf0e10cSrcweir 			SdXMLImExViewBox aViewBox( 0, 0, 1, 1 );
1836cdf0e10cSrcweir 			awt::Point aPoint( 0, 0 );
1837cdf0e10cSrcweir 			awt::Size aSize( 1, 1 );
1838cdf0e10cSrcweir 
1839cdf0e10cSrcweir 			SdXMLImExSvgDElement aPoints( rValue, aViewBox,
1840cdf0e10cSrcweir 				aPoint, aSize, GetImport().GetMM100UnitConverter() );
1841cdf0e10cSrcweir 
1842cdf0e10cSrcweir 			if ( aPoints.IsCurve() )
1843cdf0e10cSrcweir 			{
1844cdf0e10cSrcweir 				drawing::PolyPolygonBezierCoords aSourcePolyPolygon(
1845cdf0e10cSrcweir 					aPoints.GetPointSequenceSequence(),
1846cdf0e10cSrcweir 					aPoints.GetFlagSequenceSequence());
1847cdf0e10cSrcweir 				maPath <<= aSourcePolyPolygon;
1848cdf0e10cSrcweir 			}
1849cdf0e10cSrcweir 			else
1850cdf0e10cSrcweir 			{
1851cdf0e10cSrcweir 				const drawing::PointSequenceSequence& rOuterSeq = aPoints.GetPointSequenceSequence();
1852cdf0e10cSrcweir 				drawing::FlagSequenceSequence aFlagSeqSeq( rOuterSeq.getLength() );
1853cdf0e10cSrcweir 				for ( int a = 0; a < rOuterSeq.getLength(); a++ )
1854cdf0e10cSrcweir 					aFlagSeqSeq[ a ] = drawing::FlagSequence( rOuterSeq[ a ].getLength() );
1855cdf0e10cSrcweir 
1856cdf0e10cSrcweir 				drawing::PolyPolygonBezierCoords aSourcePolyPolygon(
1857cdf0e10cSrcweir 					aPoints.GetPointSequenceSequence(),
1858cdf0e10cSrcweir 					aFlagSeqSeq );
1859cdf0e10cSrcweir 				maPath <<= aSourcePolyPolygon;
1860cdf0e10cSrcweir 			}
1861cdf0e10cSrcweir 		}
1862cdf0e10cSrcweir 	}
1863cdf0e10cSrcweir 	}
1864cdf0e10cSrcweir 
1865cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
1866cdf0e10cSrcweir }
1867cdf0e10cSrcweir 
1868cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1869cdf0e10cSrcweir 
1870cdf0e10cSrcweir void SdXMLConnectorShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList)
1871cdf0e10cSrcweir {
1872cdf0e10cSrcweir 	// #107928#
1873cdf0e10cSrcweir 	// For security reasons, do not add empty connectors. There may have been an error in EA2
1874cdf0e10cSrcweir 	// that created empty, far set off connectors (e.g. 63 meters below top of document). This
1875cdf0e10cSrcweir 	// is not guaranteed, but it's definitely safe to not add empty connectors.
1876cdf0e10cSrcweir 	sal_Bool bDoAdd(sal_True);
1877cdf0e10cSrcweir 
1878cdf0e10cSrcweir 	if(    0 == maStartShapeId.getLength()
1879cdf0e10cSrcweir 		&& 0 == maEndShapeId.getLength()
1880cdf0e10cSrcweir 		&& maStart.X == maEnd.X
1881cdf0e10cSrcweir 		&& maStart.Y == maEnd.Y
1882cdf0e10cSrcweir 		&& 0 == mnDelta1
1883cdf0e10cSrcweir 		&& 0 == mnDelta2
1884cdf0e10cSrcweir 		&& 0 == mnDelta3
1885cdf0e10cSrcweir 		)
1886cdf0e10cSrcweir 	{
1887cdf0e10cSrcweir 		bDoAdd = sal_False;
1888cdf0e10cSrcweir 	}
1889cdf0e10cSrcweir 
1890cdf0e10cSrcweir 	if(bDoAdd)
1891cdf0e10cSrcweir 	{
1892cdf0e10cSrcweir 		// create Connector shape
1893cdf0e10cSrcweir 		// add, set style and properties from base shape
1894cdf0e10cSrcweir 		AddShape("com.sun.star.drawing.ConnectorShape");
1895cdf0e10cSrcweir 		if(mxShape.is())
1896cdf0e10cSrcweir 		{
1897cdf0e10cSrcweir 			// add connection ids
1898cdf0e10cSrcweir 			if( maStartShapeId.getLength() )
1899cdf0e10cSrcweir 				GetImport().GetShapeImport()->addShapeConnection( mxShape, sal_True, maStartShapeId, mnStartGlueId );
1900cdf0e10cSrcweir 			if( maEndShapeId.getLength() )
1901cdf0e10cSrcweir 				GetImport().GetShapeImport()->addShapeConnection( mxShape, sal_False, maEndShapeId, mnEndGlueId );
1902cdf0e10cSrcweir 
1903cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xProps( mxShape, uno::UNO_QUERY );
1904cdf0e10cSrcweir 			if( xProps.is() )
1905cdf0e10cSrcweir 			{
1906cdf0e10cSrcweir 				uno::Any aAny;
1907cdf0e10cSrcweir 				aAny <<= maStart;
1908cdf0e10cSrcweir 				xProps->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("StartPosition")), aAny);
1909cdf0e10cSrcweir 
1910cdf0e10cSrcweir 				aAny <<= maEnd;
1911cdf0e10cSrcweir 				xProps->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("EndPosition")), aAny );
1912cdf0e10cSrcweir 
1913cdf0e10cSrcweir 				aAny <<= (drawing::ConnectorType)mnType;
1914cdf0e10cSrcweir 				xProps->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("EdgeKind")), aAny );
1915cdf0e10cSrcweir 
1916cdf0e10cSrcweir 				aAny <<= mnDelta1;
1917cdf0e10cSrcweir 				xProps->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("EdgeLine1Delta")), aAny );
1918cdf0e10cSrcweir 
1919cdf0e10cSrcweir 				aAny <<= mnDelta2;
1920cdf0e10cSrcweir 				xProps->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("EdgeLine2Delta")), aAny );
1921cdf0e10cSrcweir 
1922cdf0e10cSrcweir 				aAny <<= mnDelta3;
1923cdf0e10cSrcweir 				xProps->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("EdgeLine3Delta")), aAny );
1924cdf0e10cSrcweir 			}
1925cdf0e10cSrcweir 			SetStyle();
1926cdf0e10cSrcweir 			SetLayer();
1927cdf0e10cSrcweir 
1928cdf0e10cSrcweir 			if ( maPath.hasValue() )
1929cdf0e10cSrcweir             {
1930cdf0e10cSrcweir                 // --> OD #i115492#
1931cdf0e10cSrcweir                 // Ignore svg:d attribute for text documents created by OpenOffice.org
1932cdf0e10cSrcweir                 // versions before OOo 3.3, because these OOo versions are storing
1933cdf0e10cSrcweir                 // svg:d values not using the correct unit.
1934cdf0e10cSrcweir                 bool bApplySVGD( true );
1935cdf0e10cSrcweir                 if ( uno::Reference< text::XTextDocument >(GetImport().GetModel(), uno::UNO_QUERY).is() )
1936cdf0e10cSrcweir                 {
1937cdf0e10cSrcweir                     sal_Int32 nUPD( 0 );
1938cdf0e10cSrcweir                     sal_Int32 nBuild( 0 );
1939cdf0e10cSrcweir                     const bool bBuildIdFound = GetImport().getBuildIds( nUPD, nBuild );
1940cdf0e10cSrcweir                     if ( GetImport().IsTextDocInOOoFileFormat() ||
1941cdf0e10cSrcweir                          ( bBuildIdFound &&
1942cdf0e10cSrcweir                            ( ( nUPD == 641 ) || ( nUPD == 645 ) ||  // prior OOo 2.0
1943cdf0e10cSrcweir                              ( nUPD == 680 ) ||                     // OOo 2.x
1944cdf0e10cSrcweir                              ( nUPD == 300 ) ||                     // OOo 3.0 - OOo 3.0.1
1945cdf0e10cSrcweir                              ( nUPD == 310 ) ||                     // OOo 3.1 - OOo 3.1.1
1946cdf0e10cSrcweir                              ( nUPD == 320 ) ) ) )                  // OOo 3.2 - OOo 3.2.1
1947cdf0e10cSrcweir                     {
1948cdf0e10cSrcweir                         bApplySVGD = false;
1949cdf0e10cSrcweir                     }
1950cdf0e10cSrcweir                 }
1951cdf0e10cSrcweir 
1952cdf0e10cSrcweir                 if ( bApplySVGD )
1953cdf0e10cSrcweir                 {
1954cdf0e10cSrcweir                     xProps->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("PolyPolygonBezier") ), maPath );
1955cdf0e10cSrcweir                 }
1956cdf0e10cSrcweir                 // <--
1957cdf0e10cSrcweir             }
1958cdf0e10cSrcweir 
1959cdf0e10cSrcweir 			SdXMLShapeContext::StartElement(xAttrList);
1960cdf0e10cSrcweir 		}
1961cdf0e10cSrcweir 	}
1962cdf0e10cSrcweir }
1963cdf0e10cSrcweir 
1964cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1965cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1966cdf0e10cSrcweir 
1967cdf0e10cSrcweir TYPEINIT1( SdXMLMeasureShapeContext, SdXMLShapeContext );
1968cdf0e10cSrcweir 
1969cdf0e10cSrcweir SdXMLMeasureShapeContext::SdXMLMeasureShapeContext(
1970cdf0e10cSrcweir 	SvXMLImport& rImport,
1971cdf0e10cSrcweir 	sal_uInt16 nPrfx,
1972cdf0e10cSrcweir 	const OUString& rLocalName,
1973cdf0e10cSrcweir 	const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
1974cdf0e10cSrcweir 	uno::Reference< drawing::XShapes >& rShapes,
1975cdf0e10cSrcweir     sal_Bool bTemporaryShape)
1976cdf0e10cSrcweir :	SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ),
1977cdf0e10cSrcweir 	maStart(0,0),
1978cdf0e10cSrcweir 	maEnd(1,1)
1979cdf0e10cSrcweir {
1980cdf0e10cSrcweir }
1981cdf0e10cSrcweir 
1982cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
1983cdf0e10cSrcweir 
1984cdf0e10cSrcweir SdXMLMeasureShapeContext::~SdXMLMeasureShapeContext()
1985cdf0e10cSrcweir {
1986cdf0e10cSrcweir }
1987cdf0e10cSrcweir 
1988cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
1989cdf0e10cSrcweir void SdXMLMeasureShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
1990cdf0e10cSrcweir {
1991cdf0e10cSrcweir 	switch( nPrefix )
1992cdf0e10cSrcweir 	{
1993cdf0e10cSrcweir 	case XML_NAMESPACE_SVG:
1994cdf0e10cSrcweir 	{
1995cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_X1 ) )
1996cdf0e10cSrcweir 		{
1997cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(maStart.X, rValue);
1998cdf0e10cSrcweir 			return;
1999cdf0e10cSrcweir 		}
2000cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_Y1 ) )
2001cdf0e10cSrcweir 		{
2002cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(maStart.Y, rValue);
2003cdf0e10cSrcweir 			return;
2004cdf0e10cSrcweir 		}
2005cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_X2 ) )
2006cdf0e10cSrcweir 		{
2007cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(maEnd.X, rValue);
2008cdf0e10cSrcweir 			return;
2009cdf0e10cSrcweir 		}
2010cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_Y2 ) )
2011cdf0e10cSrcweir 		{
2012cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(maEnd.Y, rValue);
2013cdf0e10cSrcweir 			return;
2014cdf0e10cSrcweir 		}
2015cdf0e10cSrcweir 	}
2016cdf0e10cSrcweir 	}
2017cdf0e10cSrcweir 
2018cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
2019cdf0e10cSrcweir }
2020cdf0e10cSrcweir 
2021cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
2022cdf0e10cSrcweir 
2023cdf0e10cSrcweir void SdXMLMeasureShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList)
2024cdf0e10cSrcweir {
2025cdf0e10cSrcweir 	// create Measure shape
2026cdf0e10cSrcweir 	// add, set style and properties from base shape
2027cdf0e10cSrcweir 	AddShape("com.sun.star.drawing.MeasureShape");
2028cdf0e10cSrcweir 	if(mxShape.is())
2029cdf0e10cSrcweir 	{
2030cdf0e10cSrcweir 		SetStyle();
2031cdf0e10cSrcweir 		SetLayer();
2032cdf0e10cSrcweir 
2033cdf0e10cSrcweir 		uno::Reference< beans::XPropertySet > xProps( mxShape, uno::UNO_QUERY );
2034cdf0e10cSrcweir 		if( xProps.is() )
2035cdf0e10cSrcweir 		{
2036cdf0e10cSrcweir 			uno::Any aAny;
2037cdf0e10cSrcweir 			aAny <<= maStart;
2038cdf0e10cSrcweir 			xProps->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("StartPosition")), aAny);
2039cdf0e10cSrcweir 
2040cdf0e10cSrcweir 			aAny <<= maEnd;
2041cdf0e10cSrcweir 			xProps->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("EndPosition")), aAny );
2042cdf0e10cSrcweir 		}
2043cdf0e10cSrcweir 
2044cdf0e10cSrcweir 		// delete pre created fields
2045cdf0e10cSrcweir 		uno::Reference< text::XText > xText( mxShape, uno::UNO_QUERY );
2046cdf0e10cSrcweir 		if( xText.is() )
2047cdf0e10cSrcweir 		{
2048cdf0e10cSrcweir 			const OUString aEmpty( RTL_CONSTASCII_USTRINGPARAM( " " ) );
2049cdf0e10cSrcweir 			xText->setString( aEmpty );
2050cdf0e10cSrcweir 		}
2051cdf0e10cSrcweir 
2052cdf0e10cSrcweir 		SdXMLShapeContext::StartElement(xAttrList);
2053cdf0e10cSrcweir 	}
2054cdf0e10cSrcweir }
2055cdf0e10cSrcweir 
2056cdf0e10cSrcweir void SdXMLMeasureShapeContext::EndElement()
2057cdf0e10cSrcweir {
2058cdf0e10cSrcweir 	do
2059cdf0e10cSrcweir 	{
2060cdf0e10cSrcweir 		// delete pre created fields
2061cdf0e10cSrcweir 		uno::Reference< text::XText > xText( mxShape, uno::UNO_QUERY );
2062cdf0e10cSrcweir 		if( !xText.is() )
2063cdf0e10cSrcweir 			break;
2064cdf0e10cSrcweir 
2065cdf0e10cSrcweir 		uno::Reference< text::XTextCursor > xCursor( xText->createTextCursor() );
2066cdf0e10cSrcweir 		if( !xCursor.is() )
2067cdf0e10cSrcweir 			break;
2068cdf0e10cSrcweir 
2069cdf0e10cSrcweir 		const OUString aEmpty;
2070cdf0e10cSrcweir 		xCursor->collapseToStart();
2071cdf0e10cSrcweir 		xCursor->goRight( 1, sal_True );
2072cdf0e10cSrcweir 		xCursor->setString( aEmpty );
2073cdf0e10cSrcweir 	}
2074cdf0e10cSrcweir 	while(0);
2075cdf0e10cSrcweir 
2076cdf0e10cSrcweir 	SdXMLShapeContext::EndElement();
2077cdf0e10cSrcweir }
2078cdf0e10cSrcweir 
2079cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2080cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2081cdf0e10cSrcweir 
2082cdf0e10cSrcweir TYPEINIT1( SdXMLPageShapeContext, SdXMLShapeContext );
2083cdf0e10cSrcweir 
2084cdf0e10cSrcweir SdXMLPageShapeContext::SdXMLPageShapeContext(
2085cdf0e10cSrcweir 	SvXMLImport& rImport,
2086cdf0e10cSrcweir 	sal_uInt16 nPrfx,
2087cdf0e10cSrcweir 	const OUString& rLocalName,
2088cdf0e10cSrcweir 	const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
2089cdf0e10cSrcweir 	uno::Reference< drawing::XShapes >& rShapes,
2090cdf0e10cSrcweir     sal_Bool bTemporaryShape)
2091cdf0e10cSrcweir :	SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ), mnPageNumber(0)
2092cdf0e10cSrcweir {
2093cdf0e10cSrcweir 	mbClearDefaultAttributes = false;
2094cdf0e10cSrcweir }
2095cdf0e10cSrcweir 
2096cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
2097cdf0e10cSrcweir 
2098cdf0e10cSrcweir SdXMLPageShapeContext::~SdXMLPageShapeContext()
2099cdf0e10cSrcweir {
2100cdf0e10cSrcweir }
2101cdf0e10cSrcweir 
2102cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
2103cdf0e10cSrcweir 
2104cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
2105cdf0e10cSrcweir void SdXMLPageShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
2106cdf0e10cSrcweir {
2107cdf0e10cSrcweir 	if( XML_NAMESPACE_DRAW == nPrefix )
2108cdf0e10cSrcweir 	{
2109cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_PAGE_NUMBER ) )
2110cdf0e10cSrcweir 		{
2111cdf0e10cSrcweir 			mnPageNumber = rValue.toInt32();
2112cdf0e10cSrcweir 			return;
2113cdf0e10cSrcweir 		}
2114cdf0e10cSrcweir 	}
2115cdf0e10cSrcweir 
2116cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
2117cdf0e10cSrcweir }
2118cdf0e10cSrcweir 
2119cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
2120cdf0e10cSrcweir 
2121cdf0e10cSrcweir void SdXMLPageShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList)
2122cdf0e10cSrcweir {
2123cdf0e10cSrcweir 	// create Page shape
2124cdf0e10cSrcweir 	// add, set style and properties from base shape
2125cdf0e10cSrcweir 
2126cdf0e10cSrcweir 	// #86163# take into account which type of PageShape needs to
2127cdf0e10cSrcweir 	// be constructed. It's an pres shape if presentation:XML_CLASS == XML_PRESENTATION_PAGE.
2128cdf0e10cSrcweir 	sal_Bool bIsPresentation = maPresentationClass.getLength() &&
2129cdf0e10cSrcweir 		   GetImport().GetShapeImport()->IsPresentationShapesSupported();
2130cdf0e10cSrcweir 
2131cdf0e10cSrcweir 	uno::Reference< lang::XServiceInfo > xInfo( mxShapes, uno::UNO_QUERY );
2132cdf0e10cSrcweir 	const sal_Bool bIsOnHandoutPage = xInfo.is() && xInfo->supportsService( OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.HandoutMasterPage")) );
2133cdf0e10cSrcweir 
2134cdf0e10cSrcweir 	if( bIsOnHandoutPage )
2135cdf0e10cSrcweir 	{
2136cdf0e10cSrcweir 		AddShape("com.sun.star.presentation.HandoutShape");
2137cdf0e10cSrcweir 	}
2138cdf0e10cSrcweir 	else
2139cdf0e10cSrcweir 	{
2140cdf0e10cSrcweir 		if(bIsPresentation && !IsXMLToken( maPresentationClass, XML_PRESENTATION_PAGE ) )
2141cdf0e10cSrcweir 		{
2142cdf0e10cSrcweir 			bIsPresentation = sal_False;
2143cdf0e10cSrcweir 		}
2144cdf0e10cSrcweir 
2145cdf0e10cSrcweir 		if(bIsPresentation)
2146cdf0e10cSrcweir 		{
2147cdf0e10cSrcweir 			AddShape("com.sun.star.presentation.PageShape");
2148cdf0e10cSrcweir 		}
2149cdf0e10cSrcweir 		else
2150cdf0e10cSrcweir 		{
2151cdf0e10cSrcweir 			AddShape("com.sun.star.drawing.PageShape");
2152cdf0e10cSrcweir 		}
2153cdf0e10cSrcweir 	}
2154cdf0e10cSrcweir 
2155cdf0e10cSrcweir 	if(mxShape.is())
2156cdf0e10cSrcweir 	{
2157cdf0e10cSrcweir 		SetStyle();
2158cdf0e10cSrcweir 		SetLayer();
2159cdf0e10cSrcweir 
2160cdf0e10cSrcweir 		// set pos, size, shear and rotate
2161cdf0e10cSrcweir 		SetTransformation();
2162cdf0e10cSrcweir 
2163cdf0e10cSrcweir 		uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY);
2164cdf0e10cSrcweir 		if(xPropSet.is())
2165cdf0e10cSrcweir 		{
2166cdf0e10cSrcweir 			uno::Reference< beans::XPropertySetInfo > xPropSetInfo( xPropSet->getPropertySetInfo() );
2167cdf0e10cSrcweir 			const OUString aPageNumberStr(RTL_CONSTASCII_USTRINGPARAM("PageNumber"));
2168cdf0e10cSrcweir 			if( xPropSetInfo.is() && xPropSetInfo->hasPropertyByName(aPageNumberStr))
2169cdf0e10cSrcweir 				xPropSet->setPropertyValue(aPageNumberStr, uno::makeAny( mnPageNumber ));
2170cdf0e10cSrcweir 		}
2171cdf0e10cSrcweir 
2172cdf0e10cSrcweir 		SdXMLShapeContext::StartElement(xAttrList);
2173cdf0e10cSrcweir 	}
2174cdf0e10cSrcweir }
2175cdf0e10cSrcweir 
2176cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2177cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2178cdf0e10cSrcweir 
2179cdf0e10cSrcweir TYPEINIT1( SdXMLCaptionShapeContext, SdXMLShapeContext );
2180cdf0e10cSrcweir 
2181cdf0e10cSrcweir SdXMLCaptionShapeContext::SdXMLCaptionShapeContext(
2182cdf0e10cSrcweir 	SvXMLImport& rImport,
2183cdf0e10cSrcweir 	sal_uInt16 nPrfx,
2184cdf0e10cSrcweir 	const OUString& rLocalName,
2185cdf0e10cSrcweir 	const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
2186cdf0e10cSrcweir 	uno::Reference< drawing::XShapes >& rShapes,
2187cdf0e10cSrcweir     sal_Bool bTemporaryShape)
2188cdf0e10cSrcweir :	SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ),
2189cdf0e10cSrcweir 	// #86616# for correct edge rounding import mnRadius needs to be initialized
2190cdf0e10cSrcweir 	mnRadius( 0L )
2191cdf0e10cSrcweir {
2192cdf0e10cSrcweir }
2193cdf0e10cSrcweir 
2194cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
2195cdf0e10cSrcweir 
2196cdf0e10cSrcweir SdXMLCaptionShapeContext::~SdXMLCaptionShapeContext()
2197cdf0e10cSrcweir {
2198cdf0e10cSrcweir }
2199cdf0e10cSrcweir 
2200cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
2201cdf0e10cSrcweir 
2202cdf0e10cSrcweir void SdXMLCaptionShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList)
2203cdf0e10cSrcweir {
2204cdf0e10cSrcweir 	// create Caption shape
2205cdf0e10cSrcweir 	// add, set style and properties from base shape
2206cdf0e10cSrcweir 	AddShape("com.sun.star.drawing.CaptionShape");
2207cdf0e10cSrcweir 	if( mxShape.is() )
2208cdf0e10cSrcweir 	{
2209cdf0e10cSrcweir 		SetStyle();
2210cdf0e10cSrcweir 		SetLayer();
2211cdf0e10cSrcweir 
2212cdf0e10cSrcweir 		uno::Reference< beans::XPropertySet > xProps( mxShape, uno::UNO_QUERY );
2213cdf0e10cSrcweir 
2214cdf0e10cSrcweir 		// SJ: If AutoGrowWidthItem is set, SetTransformation will lead to the wrong SnapRect
2215cdf0e10cSrcweir 		// because NbcAdjustTextFrameWidthAndHeight() is called (text is set later and center alignment
2216cdf0e10cSrcweir 		// is the default setting, so the top left reference point that is used by the caption point is
2217cdf0e10cSrcweir 		// no longer correct) There are two ways to solve this problem, temporarily disabling the
2218cdf0e10cSrcweir 		// autogrowwith as we are doing here or to apply the CaptionPoint after setting text
2219cdf0e10cSrcweir 		sal_Bool bIsAutoGrowWidth = sal_False;
2220cdf0e10cSrcweir 		if ( xProps.is() )
2221cdf0e10cSrcweir 		{
2222cdf0e10cSrcweir 			uno::Any aAny( xProps->getPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("TextAutoGrowWidth") ) ) );
2223cdf0e10cSrcweir 			aAny >>= bIsAutoGrowWidth;
2224cdf0e10cSrcweir 
2225cdf0e10cSrcweir 			if ( bIsAutoGrowWidth )
2226cdf0e10cSrcweir 				xProps->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("TextAutoGrowWidth")), uno::makeAny( sal_False ) );
2227cdf0e10cSrcweir 		}
2228cdf0e10cSrcweir 
2229cdf0e10cSrcweir 		// set pos, size, shear and rotate
2230cdf0e10cSrcweir 		SetTransformation();
2231cdf0e10cSrcweir 		if( xProps.is() )
2232cdf0e10cSrcweir 			xProps->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("CaptionPoint")), uno::makeAny( maCaptionPoint ) );
2233cdf0e10cSrcweir 
2234cdf0e10cSrcweir 		if ( bIsAutoGrowWidth )
2235cdf0e10cSrcweir 			xProps->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("TextAutoGrowWidth")), uno::makeAny( sal_True ) );
2236cdf0e10cSrcweir 
2237cdf0e10cSrcweir 		if(mnRadius)
2238cdf0e10cSrcweir 		{
2239cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY);
2240cdf0e10cSrcweir 			if(xPropSet.is())
2241cdf0e10cSrcweir 			{
2242cdf0e10cSrcweir 				try
2243cdf0e10cSrcweir 				{
2244cdf0e10cSrcweir 					xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("CornerRadius")), uno::makeAny( mnRadius ) );
2245cdf0e10cSrcweir 				}
2246cdf0e10cSrcweir 				catch( uno::Exception& )
2247cdf0e10cSrcweir 				{
2248cdf0e10cSrcweir 					DBG_ERROR( "exception during setting of corner radius!");
2249cdf0e10cSrcweir 				}
2250cdf0e10cSrcweir 			}
2251cdf0e10cSrcweir 		}
2252cdf0e10cSrcweir 
2253cdf0e10cSrcweir 		SdXMLShapeContext::StartElement(xAttrList);
2254cdf0e10cSrcweir 	}
2255cdf0e10cSrcweir }
2256cdf0e10cSrcweir 
2257cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
2258cdf0e10cSrcweir void SdXMLCaptionShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
2259cdf0e10cSrcweir {
2260cdf0e10cSrcweir 	if( XML_NAMESPACE_DRAW == nPrefix )
2261cdf0e10cSrcweir 	{
2262cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_CAPTION_POINT_X ) )
2263cdf0e10cSrcweir 		{
2264cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(maCaptionPoint.X, rValue);
2265cdf0e10cSrcweir 			return;
2266cdf0e10cSrcweir 		}
2267cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_CAPTION_POINT_Y ) )
2268cdf0e10cSrcweir 		{
2269cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(maCaptionPoint.Y, rValue);
2270cdf0e10cSrcweir 			return;
2271cdf0e10cSrcweir 		}
2272cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_CORNER_RADIUS ) )
2273cdf0e10cSrcweir 		{
2274cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertMeasure(mnRadius, rValue);
2275cdf0e10cSrcweir 			return;
2276cdf0e10cSrcweir 		}
2277cdf0e10cSrcweir 	}
2278cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
2279cdf0e10cSrcweir }
2280cdf0e10cSrcweir 
2281cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2282cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2283cdf0e10cSrcweir 
2284cdf0e10cSrcweir TYPEINIT1( SdXMLGraphicObjectShapeContext, SdXMLShapeContext );
2285cdf0e10cSrcweir 
2286cdf0e10cSrcweir SdXMLGraphicObjectShapeContext::SdXMLGraphicObjectShapeContext(
2287cdf0e10cSrcweir 	SvXMLImport& rImport,
2288cdf0e10cSrcweir 	sal_uInt16 nPrfx,
2289cdf0e10cSrcweir 	const OUString& rLocalName,
2290cdf0e10cSrcweir 	const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
2291cdf0e10cSrcweir 	uno::Reference< drawing::XShapes >& rShapes,
2292cdf0e10cSrcweir     sal_Bool bTemporaryShape)
2293cdf0e10cSrcweir :	SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ),
2294cdf0e10cSrcweir 	maURL()
2295cdf0e10cSrcweir {
2296cdf0e10cSrcweir }
2297cdf0e10cSrcweir 
2298cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
2299cdf0e10cSrcweir 
2300cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
2301cdf0e10cSrcweir void SdXMLGraphicObjectShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
2302cdf0e10cSrcweir {
2303cdf0e10cSrcweir 	if( XML_NAMESPACE_XLINK == nPrefix )
2304cdf0e10cSrcweir 	{
2305cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_HREF ) )
2306cdf0e10cSrcweir 		{
2307cdf0e10cSrcweir 			maURL = rValue;
2308cdf0e10cSrcweir 			return;
2309cdf0e10cSrcweir 		}
2310cdf0e10cSrcweir 	}
2311cdf0e10cSrcweir 
2312cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
2313cdf0e10cSrcweir }
2314cdf0e10cSrcweir 
2315cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
2316cdf0e10cSrcweir 
2317cdf0e10cSrcweir void SdXMLGraphicObjectShapeContext::StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& )
2318cdf0e10cSrcweir {
2319cdf0e10cSrcweir 	// create graphic object shape
2320cdf0e10cSrcweir 	const char *pService;
2321cdf0e10cSrcweir 
2322cdf0e10cSrcweir 	if( IsXMLToken( maPresentationClass, XML_GRAPHIC ) && GetImport().GetShapeImport()->IsPresentationShapesSupported() )
2323cdf0e10cSrcweir 	{
2324cdf0e10cSrcweir 		pService = "com.sun.star.presentation.GraphicObjectShape";
2325cdf0e10cSrcweir 	}
2326cdf0e10cSrcweir 	else
2327cdf0e10cSrcweir 	{
2328cdf0e10cSrcweir 		pService = "com.sun.star.drawing.GraphicObjectShape";
2329cdf0e10cSrcweir 	}
2330cdf0e10cSrcweir 
2331cdf0e10cSrcweir 	AddShape( pService );
2332cdf0e10cSrcweir 
2333cdf0e10cSrcweir 	if(mxShape.is())
2334cdf0e10cSrcweir 	{
2335cdf0e10cSrcweir 		SetStyle();
2336cdf0e10cSrcweir 		SetLayer();
2337cdf0e10cSrcweir 
2338cdf0e10cSrcweir 		uno::Reference< beans::XPropertySet > xPropset(mxShape, uno::UNO_QUERY);
2339cdf0e10cSrcweir 		if(xPropset.is())
2340cdf0e10cSrcweir 		{
2341cdf0e10cSrcweir 			// since OOo 1.x had no line or fill style for graphics, but may create
2342cdf0e10cSrcweir 			// documents with them, we have to override them here
2343cdf0e10cSrcweir 			sal_Int32 nUPD, nBuildId;
2344cdf0e10cSrcweir 			if( GetImport().getBuildIds( nUPD, nBuildId ) && (nUPD == 645) ) try
2345cdf0e10cSrcweir 			{
2346cdf0e10cSrcweir 				xPropset->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("FillStyle")), Any( FillStyle_NONE ) );
2347cdf0e10cSrcweir 				xPropset->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("LineStyle")), Any( LineStyle_NONE ) );
2348cdf0e10cSrcweir 			}
2349cdf0e10cSrcweir 			catch( Exception& )
2350cdf0e10cSrcweir 			{
2351cdf0e10cSrcweir 			}
2352cdf0e10cSrcweir 
2353cdf0e10cSrcweir 			uno::Reference< beans::XPropertySetInfo > xPropsInfo( xPropset->getPropertySetInfo() );
2354cdf0e10cSrcweir 			if( xPropsInfo.is() && xPropsInfo->hasPropertyByName(OUString(RTL_CONSTASCII_USTRINGPARAM("IsEmptyPresentationObject") )))
2355cdf0e10cSrcweir 				xPropset->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("IsEmptyPresentationObject") ), ::cppu::bool2any( mbIsPlaceholder ) );
2356cdf0e10cSrcweir 
2357cdf0e10cSrcweir 			if( !mbIsPlaceholder )
2358cdf0e10cSrcweir 			{
2359cdf0e10cSrcweir 				if( maURL.getLength() )
2360cdf0e10cSrcweir 				{
2361cdf0e10cSrcweir 					uno::Any aAny;
2362cdf0e10cSrcweir 					aAny <<= GetImport().ResolveGraphicObjectURL( maURL, GetImport().isGraphicLoadOnDemandSupported() );
2363cdf0e10cSrcweir 					try
2364cdf0e10cSrcweir 					{
2365cdf0e10cSrcweir 						xPropset->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("GraphicURL") ), aAny );
2366cdf0e10cSrcweir 						xPropset->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("GraphicStreamURL") ), aAny );
2367cdf0e10cSrcweir 					}
2368cdf0e10cSrcweir 					catch (lang::IllegalArgumentException const &)
2369cdf0e10cSrcweir 					{
2370cdf0e10cSrcweir 					}
2371cdf0e10cSrcweir 				}
2372cdf0e10cSrcweir 			}
2373cdf0e10cSrcweir 		}
2374cdf0e10cSrcweir 
2375cdf0e10cSrcweir 		if(mbIsUserTransformed)
2376cdf0e10cSrcweir 		{
2377cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xProps(mxShape, uno::UNO_QUERY);
2378cdf0e10cSrcweir 			if(xProps.is())
2379cdf0e10cSrcweir 			{
2380cdf0e10cSrcweir 				uno::Reference< beans::XPropertySetInfo > xPropsInfo( xProps->getPropertySetInfo() );
2381cdf0e10cSrcweir 				if( xPropsInfo.is() )
2382cdf0e10cSrcweir 				{
2383cdf0e10cSrcweir 					if( xPropsInfo->hasPropertyByName(OUString(RTL_CONSTASCII_USTRINGPARAM("IsPlaceholderDependent") )))
2384cdf0e10cSrcweir 						xProps->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("IsPlaceholderDependent") ), ::cppu::bool2any( sal_False ) );
2385cdf0e10cSrcweir 				}
2386cdf0e10cSrcweir 			}
2387cdf0e10cSrcweir 		}
2388cdf0e10cSrcweir 
2389cdf0e10cSrcweir 		// set pos, size, shear and rotate
2390cdf0e10cSrcweir 		SetTransformation();
2391cdf0e10cSrcweir 
2392cdf0e10cSrcweir 		SdXMLShapeContext::StartElement(mxAttrList);
2393cdf0e10cSrcweir 	}
2394cdf0e10cSrcweir }
2395cdf0e10cSrcweir 
2396cdf0e10cSrcweir void SdXMLGraphicObjectShapeContext::EndElement()
2397cdf0e10cSrcweir {
2398cdf0e10cSrcweir 	if( mxBase64Stream.is() )
2399cdf0e10cSrcweir 	{
2400cdf0e10cSrcweir 		OUString sURL( GetImport().ResolveGraphicObjectURLFromBase64( mxBase64Stream ) );
2401cdf0e10cSrcweir 		if( sURL.getLength() )
2402cdf0e10cSrcweir 		{
2403cdf0e10cSrcweir 			try
2404cdf0e10cSrcweir 			{
2405cdf0e10cSrcweir 				uno::Reference< beans::XPropertySet > xProps(mxShape, uno::UNO_QUERY);
2406cdf0e10cSrcweir 				if(xProps.is())
2407cdf0e10cSrcweir 				{
2408cdf0e10cSrcweir 					const uno::Any aAny( uno::makeAny( sURL ) );
2409cdf0e10cSrcweir 					xProps->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("GraphicURL") ), aAny );
2410cdf0e10cSrcweir 					xProps->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("GraphicStreamURL") ), aAny );
2411cdf0e10cSrcweir 				}
2412cdf0e10cSrcweir 			}
2413cdf0e10cSrcweir 			catch (lang::IllegalArgumentException const &)
2414cdf0e10cSrcweir 			{
2415cdf0e10cSrcweir 			}
2416cdf0e10cSrcweir 		}
2417cdf0e10cSrcweir 	}
2418cdf0e10cSrcweir 
2419cdf0e10cSrcweir 	SdXMLShapeContext::EndElement();
2420cdf0e10cSrcweir }
2421cdf0e10cSrcweir 
2422cdf0e10cSrcweir 
2423cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
2424cdf0e10cSrcweir 
2425cdf0e10cSrcweir SvXMLImportContext* SdXMLGraphicObjectShapeContext::CreateChildContext(
2426cdf0e10cSrcweir 	sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName,
2427cdf0e10cSrcweir 	const uno::Reference<xml::sax::XAttributeList>& xAttrList )
2428cdf0e10cSrcweir {
2429cdf0e10cSrcweir 	SvXMLImportContext* pContext = NULL;
2430cdf0e10cSrcweir 
2431cdf0e10cSrcweir 	if( (XML_NAMESPACE_OFFICE == nPrefix) &&
2432cdf0e10cSrcweir 			 xmloff::token::IsXMLToken( rLocalName, xmloff::token::XML_BINARY_DATA ) )
2433cdf0e10cSrcweir 	{
2434cdf0e10cSrcweir 		if( !maURL.getLength() && !mxBase64Stream.is() )
2435cdf0e10cSrcweir 		{
2436cdf0e10cSrcweir 			mxBase64Stream = GetImport().GetStreamForGraphicObjectURLFromBase64();
2437cdf0e10cSrcweir 			if( mxBase64Stream.is() )
2438cdf0e10cSrcweir 				pContext = new XMLBase64ImportContext( GetImport(), nPrefix,
2439cdf0e10cSrcweir 													rLocalName, xAttrList,
2440cdf0e10cSrcweir 													mxBase64Stream );
2441cdf0e10cSrcweir 		}
2442cdf0e10cSrcweir 	}
2443cdf0e10cSrcweir 
2444cdf0e10cSrcweir 	// delegate to parent class if no context could be created
2445cdf0e10cSrcweir 	if ( NULL == pContext )
2446cdf0e10cSrcweir 		pContext = SdXMLShapeContext::CreateChildContext(nPrefix, rLocalName,
2447cdf0e10cSrcweir 														 xAttrList);
2448cdf0e10cSrcweir 
2449cdf0e10cSrcweir 	return pContext;
2450cdf0e10cSrcweir }
2451cdf0e10cSrcweir 
2452cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
2453cdf0e10cSrcweir 
2454cdf0e10cSrcweir SdXMLGraphicObjectShapeContext::~SdXMLGraphicObjectShapeContext()
2455cdf0e10cSrcweir {
2456cdf0e10cSrcweir 
2457cdf0e10cSrcweir }
2458cdf0e10cSrcweir 
2459cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2460cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2461cdf0e10cSrcweir 
2462cdf0e10cSrcweir TYPEINIT1( SdXMLChartShapeContext, SdXMLShapeContext );
2463cdf0e10cSrcweir 
2464cdf0e10cSrcweir SdXMLChartShapeContext::SdXMLChartShapeContext(
2465cdf0e10cSrcweir 	SvXMLImport& rImport,
2466cdf0e10cSrcweir 	sal_uInt16 nPrfx,
2467cdf0e10cSrcweir 	const OUString& rLocalName,
2468cdf0e10cSrcweir 	const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
2469cdf0e10cSrcweir 	uno::Reference< drawing::XShapes >& rShapes,
2470cdf0e10cSrcweir     sal_Bool bTemporaryShape)
2471cdf0e10cSrcweir :	SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ),
2472cdf0e10cSrcweir 	mpChartContext( NULL )
2473cdf0e10cSrcweir {
2474cdf0e10cSrcweir }
2475cdf0e10cSrcweir 
2476cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
2477cdf0e10cSrcweir 
2478cdf0e10cSrcweir SdXMLChartShapeContext::~SdXMLChartShapeContext()
2479cdf0e10cSrcweir {
2480cdf0e10cSrcweir 	if( mpChartContext )
2481cdf0e10cSrcweir 		delete mpChartContext;
2482cdf0e10cSrcweir }
2483cdf0e10cSrcweir 
2484cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
2485cdf0e10cSrcweir 
2486cdf0e10cSrcweir void SdXMLChartShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList)
2487cdf0e10cSrcweir {
2488cdf0e10cSrcweir 	const sal_Bool bIsPresentation = isPresentationShape();
2489cdf0e10cSrcweir 
2490cdf0e10cSrcweir 	AddShape( bIsPresentation ? "com.sun.star.presentation.ChartShape" : "com.sun.star.drawing.OLE2Shape" );
2491cdf0e10cSrcweir 
2492cdf0e10cSrcweir 	if(mxShape.is())
2493cdf0e10cSrcweir 	{
2494cdf0e10cSrcweir 		SetStyle();
2495cdf0e10cSrcweir 		SetLayer();
2496cdf0e10cSrcweir 
2497cdf0e10cSrcweir 		if( !mbIsPlaceholder )
2498cdf0e10cSrcweir 		{
2499cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xProps(mxShape, uno::UNO_QUERY);
2500cdf0e10cSrcweir 			if(xProps.is())
2501cdf0e10cSrcweir 			{
2502cdf0e10cSrcweir 				uno::Reference< beans::XPropertySetInfo > xPropsInfo( xProps->getPropertySetInfo() );
2503cdf0e10cSrcweir 				if( xPropsInfo.is() && xPropsInfo->hasPropertyByName(OUString(RTL_CONSTASCII_USTRINGPARAM("IsEmptyPresentationObject") )))
2504cdf0e10cSrcweir 					xProps->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("IsEmptyPresentationObject") ), ::cppu::bool2any( sal_False ) );
2505cdf0e10cSrcweir 
2506cdf0e10cSrcweir 				uno::Any aAny;
2507cdf0e10cSrcweir 
2508cdf0e10cSrcweir 				const OUString aCLSID( RTL_CONSTASCII_USTRINGPARAM("12DCAE26-281F-416F-a234-c3086127382e"));
2509cdf0e10cSrcweir 
2510cdf0e10cSrcweir 				aAny <<= aCLSID;
2511cdf0e10cSrcweir 				xProps->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("CLSID") ), aAny );
2512cdf0e10cSrcweir 
2513cdf0e10cSrcweir #ifndef SVX_LIGHT
2514cdf0e10cSrcweir 				aAny = xProps->getPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("Model") ) );
2515cdf0e10cSrcweir 				uno::Reference< frame::XModel > xChartModel;
2516cdf0e10cSrcweir 				if( aAny >>= xChartModel )
2517cdf0e10cSrcweir 				{
2518cdf0e10cSrcweir 					mpChartContext = GetImport().GetChartImport()->CreateChartContext( GetImport(), XML_NAMESPACE_SVG, GetXMLToken(XML_CHART), xChartModel, xAttrList );
2519cdf0e10cSrcweir 				}
2520cdf0e10cSrcweir #endif
2521cdf0e10cSrcweir 			}
2522cdf0e10cSrcweir 		}
2523cdf0e10cSrcweir 
2524cdf0e10cSrcweir 		if(mbIsUserTransformed)
2525cdf0e10cSrcweir 		{
2526cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xProps(mxShape, uno::UNO_QUERY);
2527cdf0e10cSrcweir 			if(xProps.is())
2528cdf0e10cSrcweir 			{
2529cdf0e10cSrcweir 				uno::Reference< beans::XPropertySetInfo > xPropsInfo( xProps->getPropertySetInfo() );
2530cdf0e10cSrcweir 				if( xPropsInfo.is() )
2531cdf0e10cSrcweir 				{
2532cdf0e10cSrcweir 					if( xPropsInfo->hasPropertyByName(OUString(RTL_CONSTASCII_USTRINGPARAM("IsPlaceholderDependent") )))
2533cdf0e10cSrcweir 						xProps->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("IsPlaceholderDependent") ), ::cppu::bool2any( sal_False ) );
2534cdf0e10cSrcweir 				}
2535cdf0e10cSrcweir 			}
2536cdf0e10cSrcweir 		}
2537cdf0e10cSrcweir 
2538cdf0e10cSrcweir 
2539cdf0e10cSrcweir 		// set pos, size, shear and rotate
2540cdf0e10cSrcweir 		SetTransformation();
2541cdf0e10cSrcweir 
2542cdf0e10cSrcweir 		SdXMLShapeContext::StartElement(xAttrList);
2543cdf0e10cSrcweir 
2544cdf0e10cSrcweir 		if( mpChartContext )
2545cdf0e10cSrcweir 			mpChartContext->StartElement( xAttrList );
2546cdf0e10cSrcweir 	}
2547cdf0e10cSrcweir }
2548cdf0e10cSrcweir 
2549cdf0e10cSrcweir void SdXMLChartShapeContext::EndElement()
2550cdf0e10cSrcweir {
2551cdf0e10cSrcweir 	if( mpChartContext )
2552cdf0e10cSrcweir 		mpChartContext->EndElement();
2553cdf0e10cSrcweir 
2554cdf0e10cSrcweir 	SdXMLShapeContext::EndElement();
2555cdf0e10cSrcweir }
2556cdf0e10cSrcweir 
2557cdf0e10cSrcweir void SdXMLChartShapeContext::Characters( const ::rtl::OUString& rChars )
2558cdf0e10cSrcweir {
2559cdf0e10cSrcweir 	if( mpChartContext )
2560cdf0e10cSrcweir 		mpChartContext->Characters( rChars );
2561cdf0e10cSrcweir }
2562cdf0e10cSrcweir 
2563cdf0e10cSrcweir SvXMLImportContext * SdXMLChartShapeContext::CreateChildContext( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName,
2564cdf0e10cSrcweir 		const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList )
2565cdf0e10cSrcweir {
2566cdf0e10cSrcweir 	if( mpChartContext )
2567cdf0e10cSrcweir 		return mpChartContext->CreateChildContext( nPrefix, rLocalName, xAttrList );
2568cdf0e10cSrcweir 
2569cdf0e10cSrcweir 	return NULL;
2570cdf0e10cSrcweir }
2571cdf0e10cSrcweir 
2572cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
2573cdf0e10cSrcweir 
2574cdf0e10cSrcweir TYPEINIT1( SdXMLObjectShapeContext, SdXMLShapeContext );
2575cdf0e10cSrcweir 
2576cdf0e10cSrcweir SdXMLObjectShapeContext::SdXMLObjectShapeContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
2577cdf0e10cSrcweir 		const rtl::OUString& rLocalName,
2578cdf0e10cSrcweir 		const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
2579cdf0e10cSrcweir 		com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >& rShapes,
2580cdf0e10cSrcweir         sal_Bool bTemporaryShape)
2581cdf0e10cSrcweir : SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape )
2582cdf0e10cSrcweir {
2583cdf0e10cSrcweir }
2584cdf0e10cSrcweir 
2585cdf0e10cSrcweir SdXMLObjectShapeContext::~SdXMLObjectShapeContext()
2586cdf0e10cSrcweir {
2587cdf0e10cSrcweir }
2588cdf0e10cSrcweir 
2589cdf0e10cSrcweir void SdXMLObjectShapeContext::StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& )
2590cdf0e10cSrcweir {
2591cdf0e10cSrcweir 	// #96717# in theorie, if we don't have a url we shouldn't even
2592cdf0e10cSrcweir 	// export this ole shape. But practical its to risky right now
2593cdf0e10cSrcweir 	// to change this so we better dispose this on load
2594cdf0e10cSrcweir 	//if( !mbIsPlaceholder && ImpIsEmptyURL(maHref) )
2595cdf0e10cSrcweir 	//	return;
2596cdf0e10cSrcweir 
2597cdf0e10cSrcweir 	// #100592# this BugFix prevents that a shape is created. CL
2598cdf0e10cSrcweir 	// is thinking about an alternative.
2599cdf0e10cSrcweir     // #i13140# Check for more than empty string in maHref, there are
2600cdf0e10cSrcweir     // other possibilities that maHref results in empty container
2601cdf0e10cSrcweir     // storage names
2602cdf0e10cSrcweir 	if( !(GetImport().getImportFlags() & IMPORT_EMBEDDED) && !mbIsPlaceholder && ImpIsEmptyURL(maHref) )
2603cdf0e10cSrcweir 		return;
2604cdf0e10cSrcweir 
2605cdf0e10cSrcweir 	const char* pService = "com.sun.star.drawing.OLE2Shape";
2606cdf0e10cSrcweir 
2607cdf0e10cSrcweir 	sal_Bool bIsPresShape = maPresentationClass.getLength() && GetImport().GetShapeImport()->IsPresentationShapesSupported();
2608cdf0e10cSrcweir 
2609cdf0e10cSrcweir 	if( bIsPresShape )
2610cdf0e10cSrcweir 	{
2611cdf0e10cSrcweir 		if( IsXMLToken( maPresentationClass, XML_PRESENTATION_CHART ) )
2612cdf0e10cSrcweir 		{
2613cdf0e10cSrcweir 			pService = "com.sun.star.presentation.ChartShape";
2614cdf0e10cSrcweir 		}
2615cdf0e10cSrcweir 		else if( IsXMLToken( maPresentationClass, XML_PRESENTATION_TABLE ) )
2616cdf0e10cSrcweir 		{
2617cdf0e10cSrcweir 			pService = "com.sun.star.presentation.CalcShape";
2618cdf0e10cSrcweir 		}
2619cdf0e10cSrcweir 		else if( IsXMLToken( maPresentationClass, XML_PRESENTATION_OBJECT ) )
2620cdf0e10cSrcweir 		{
2621cdf0e10cSrcweir 			pService = "com.sun.star.presentation.OLE2Shape";
2622cdf0e10cSrcweir 		}
2623cdf0e10cSrcweir 	}
2624cdf0e10cSrcweir 
2625cdf0e10cSrcweir 	AddShape( pService );
2626cdf0e10cSrcweir 
2627cdf0e10cSrcweir 	if( mxShape.is() )
2628cdf0e10cSrcweir 	{
2629cdf0e10cSrcweir 		SetLayer();
2630cdf0e10cSrcweir 
2631cdf0e10cSrcweir 		if(bIsPresShape)
2632cdf0e10cSrcweir 		{
2633cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xProps(mxShape, uno::UNO_QUERY);
2634cdf0e10cSrcweir 			if(xProps.is())
2635cdf0e10cSrcweir 			{
2636cdf0e10cSrcweir 				uno::Reference< beans::XPropertySetInfo > xPropsInfo( xProps->getPropertySetInfo() );
2637cdf0e10cSrcweir 				if( xPropsInfo.is() )
2638cdf0e10cSrcweir 				{
2639cdf0e10cSrcweir 					if( !mbIsPlaceholder && xPropsInfo->hasPropertyByName(OUString(RTL_CONSTASCII_USTRINGPARAM("IsEmptyPresentationObject") )))
2640cdf0e10cSrcweir 						xProps->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("IsEmptyPresentationObject") ), ::cppu::bool2any( sal_False ) );
2641cdf0e10cSrcweir 
2642cdf0e10cSrcweir 					if( mbIsUserTransformed && xPropsInfo->hasPropertyByName(OUString(RTL_CONSTASCII_USTRINGPARAM("IsPlaceholderDependent") )))
2643cdf0e10cSrcweir 						xProps->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("IsPlaceholderDependent") ), ::cppu::bool2any( sal_False ) );
2644cdf0e10cSrcweir 				}
2645cdf0e10cSrcweir 			}
2646cdf0e10cSrcweir 		}
2647cdf0e10cSrcweir 
2648cdf0e10cSrcweir 		if( !mbIsPlaceholder && maHref.getLength() )
2649cdf0e10cSrcweir 		{
2650cdf0e10cSrcweir         	uno::Reference< beans::XPropertySet > xProps( mxShape, uno::UNO_QUERY );
2651cdf0e10cSrcweir 
2652cdf0e10cSrcweir             if( xProps.is() )
2653cdf0e10cSrcweir         	{
2654cdf0e10cSrcweir 				OUString aPersistName = GetImport().ResolveEmbeddedObjectURL( maHref, maCLSID );
2655cdf0e10cSrcweir 
2656cdf0e10cSrcweir 				if ( GetImport().IsPackageURL( maHref ) )
2657cdf0e10cSrcweir 				{
2658cdf0e10cSrcweir 					const OUString  sURL(RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.EmbeddedObject:" ));
2659cdf0e10cSrcweir 
2660cdf0e10cSrcweir 					if ( aPersistName.compareTo( sURL, sURL.getLength() ) == 0 )
2661cdf0e10cSrcweir 						aPersistName = aPersistName.copy( sURL.getLength() );
2662cdf0e10cSrcweir 
2663cdf0e10cSrcweir         			xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "PersistName" ) ),
2664cdf0e10cSrcweir 											  uno::makeAny( aPersistName ) );
2665cdf0e10cSrcweir 				}
2666cdf0e10cSrcweir 				else
2667cdf0e10cSrcweir 				{
2668cdf0e10cSrcweir 					// this is OOo link object
2669cdf0e10cSrcweir 					xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "LinkURL" ) ),
2670cdf0e10cSrcweir 											  uno::makeAny( aPersistName ) );
2671cdf0e10cSrcweir 				}
2672cdf0e10cSrcweir 			}
2673cdf0e10cSrcweir 		}
2674cdf0e10cSrcweir 
2675cdf0e10cSrcweir 		// set pos, size, shear and rotate
2676cdf0e10cSrcweir 		SetTransformation();
2677cdf0e10cSrcweir 
2678cdf0e10cSrcweir 		SetStyle();
2679cdf0e10cSrcweir 
2680cdf0e10cSrcweir 		GetImport().GetShapeImport()->finishShape( mxShape, mxAttrList, mxShapes );
2681cdf0e10cSrcweir 	}
2682cdf0e10cSrcweir }
2683cdf0e10cSrcweir 
2684cdf0e10cSrcweir void SdXMLObjectShapeContext::EndElement()
2685cdf0e10cSrcweir {
2686*a5258243SPedro Giffuni     // #i67705#
2687*a5258243SPedro Giffuni     const sal_uInt16 nGeneratorVersion(GetImport().getGeneratorVersion());
2688*a5258243SPedro Giffuni 
2689*a5258243SPedro Giffuni     if(nGeneratorVersion < SvXMLImport::OOo_34x)
2690*a5258243SPedro Giffuni     {
2691*a5258243SPedro Giffuni         // #i118485#
2692*a5258243SPedro Giffuni         // If it's an old file from us written before OOo3.4, we need to correct
2693*a5258243SPedro Giffuni         // FillStyle and LineStyle for OLE2 objects. The error was that the old paint
2694*a5258243SPedro Giffuni         // implementations just ignored added fill/linestyles completely, thus
2695*a5258243SPedro Giffuni         // those objects need to be corrected to not show blue and hairline which
2696*a5258243SPedro Giffuni         // always was the default, but would be shown now
2697*a5258243SPedro Giffuni 		uno::Reference< beans::XPropertySet > xProps(mxShape, uno::UNO_QUERY);
2698*a5258243SPedro Giffuni 
2699*a5258243SPedro Giffuni         if( xProps.is() )
2700*a5258243SPedro Giffuni         {
2701*a5258243SPedro Giffuni             xProps->setPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FillStyle")), uno::makeAny(drawing::FillStyle_NONE));
2702*a5258243SPedro Giffuni             xProps->setPropertyValue(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("LineStyle")), uno::makeAny(drawing::LineStyle_NONE));
2703*a5258243SPedro Giffuni         }
2704*a5258243SPedro Giffuni     }
2705*a5258243SPedro Giffuni 
2706cdf0e10cSrcweir     // #100592#
2707cdf0e10cSrcweir 	if( mxBase64Stream.is() )
2708cdf0e10cSrcweir 	{
2709cdf0e10cSrcweir 		OUString aPersistName( GetImport().ResolveEmbeddedObjectURLFromBase64() );
2710cdf0e10cSrcweir 		const OUString  sURL(RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.EmbeddedObject:" ));
2711cdf0e10cSrcweir 
2712cdf0e10cSrcweir         aPersistName = aPersistName.copy( sURL.getLength() );
2713cdf0e10cSrcweir 
2714cdf0e10cSrcweir 		uno::Reference< beans::XPropertySet > xProps(mxShape, uno::UNO_QUERY);
2715cdf0e10cSrcweir 		if( xProps.is() )
2716cdf0e10cSrcweir 			xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "PersistName" ) ), uno::makeAny( aPersistName ) );
2717cdf0e10cSrcweir 	}
2718cdf0e10cSrcweir 
2719cdf0e10cSrcweir 	SdXMLShapeContext::EndElement();
2720cdf0e10cSrcweir }
2721cdf0e10cSrcweir 
2722cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
2723cdf0e10cSrcweir void SdXMLObjectShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
2724cdf0e10cSrcweir {
2725cdf0e10cSrcweir 	switch( nPrefix )
2726cdf0e10cSrcweir 	{
2727cdf0e10cSrcweir 	case XML_NAMESPACE_DRAW:
2728cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_CLASS_ID ) )
2729cdf0e10cSrcweir 		{
2730cdf0e10cSrcweir 			maCLSID = rValue;
2731cdf0e10cSrcweir 			return;
2732cdf0e10cSrcweir 		}
2733cdf0e10cSrcweir 		break;
2734cdf0e10cSrcweir 	case XML_NAMESPACE_XLINK:
2735cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_HREF ) )
2736cdf0e10cSrcweir 		{
2737cdf0e10cSrcweir 			maHref = rValue;
2738cdf0e10cSrcweir 			return;
2739cdf0e10cSrcweir 		}
2740cdf0e10cSrcweir 		break;
2741cdf0e10cSrcweir 	}
2742cdf0e10cSrcweir 
2743cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
2744cdf0e10cSrcweir }
2745cdf0e10cSrcweir 
2746cdf0e10cSrcweir SvXMLImportContext* SdXMLObjectShapeContext::CreateChildContext(
2747cdf0e10cSrcweir 	sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName,
2748cdf0e10cSrcweir 	const uno::Reference<xml::sax::XAttributeList>& xAttrList )
2749cdf0e10cSrcweir {
2750cdf0e10cSrcweir 	// #100592#
2751cdf0e10cSrcweir 	SvXMLImportContext* pContext = NULL;
2752cdf0e10cSrcweir 
2753cdf0e10cSrcweir 	if((XML_NAMESPACE_OFFICE == nPrefix) && IsXMLToken(rLocalName, XML_BINARY_DATA))
2754cdf0e10cSrcweir 	{
2755cdf0e10cSrcweir 		mxBase64Stream = GetImport().GetStreamForEmbeddedObjectURLFromBase64();
2756cdf0e10cSrcweir 		if( mxBase64Stream.is() )
2757cdf0e10cSrcweir 			pContext = new XMLBase64ImportContext( GetImport(), nPrefix,
2758cdf0e10cSrcweir 												rLocalName, xAttrList,
2759cdf0e10cSrcweir 												mxBase64Stream );
2760cdf0e10cSrcweir 	}
2761cdf0e10cSrcweir 	else if( ((XML_NAMESPACE_OFFICE == nPrefix) && IsXMLToken(rLocalName, XML_DOCUMENT)) ||
2762cdf0e10cSrcweir 				((XML_NAMESPACE_MATH == nPrefix) && IsXMLToken(rLocalName, XML_MATH)) )
2763cdf0e10cSrcweir 	{
2764cdf0e10cSrcweir 		XMLEmbeddedObjectImportContext *pEContext =
2765cdf0e10cSrcweir 			new XMLEmbeddedObjectImportContext( GetImport(), nPrefix,
2766cdf0e10cSrcweir 												rLocalName, xAttrList );
2767cdf0e10cSrcweir 		maCLSID = pEContext->GetFilterCLSID();
2768cdf0e10cSrcweir 		if( maCLSID.getLength() != 0 )
2769cdf0e10cSrcweir 		{
2770cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY);
2771cdf0e10cSrcweir 			if( xPropSet.is() )
2772cdf0e10cSrcweir 			{
2773cdf0e10cSrcweir 				xPropSet->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("CLSID") ), uno::makeAny( maCLSID ) );
2774cdf0e10cSrcweir 
2775cdf0e10cSrcweir 				uno::Reference< lang::XComponent > xComp;
2776cdf0e10cSrcweir 				xPropSet->getPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("Model") ) ) >>= xComp;
2777cdf0e10cSrcweir 				DBG_ASSERT( xComp.is(), "no xModel for own OLE format" );
2778cdf0e10cSrcweir 				pEContext->SetComponent( xComp );
2779cdf0e10cSrcweir 			}
2780cdf0e10cSrcweir 		}
2781cdf0e10cSrcweir 		pContext = pEContext;
2782cdf0e10cSrcweir 	}
2783cdf0e10cSrcweir 
2784cdf0e10cSrcweir 	// delegate to parent class if no context could be created
2785cdf0e10cSrcweir 	if(!pContext)
2786cdf0e10cSrcweir 		pContext = SdXMLShapeContext::CreateChildContext(nPrefix, rLocalName, xAttrList);
2787cdf0e10cSrcweir 
2788cdf0e10cSrcweir 	return pContext;
2789cdf0e10cSrcweir }
2790cdf0e10cSrcweir 
2791cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
2792cdf0e10cSrcweir 
2793cdf0e10cSrcweir TYPEINIT1( SdXMLAppletShapeContext, SdXMLShapeContext );
2794cdf0e10cSrcweir 
2795cdf0e10cSrcweir SdXMLAppletShapeContext::SdXMLAppletShapeContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
2796cdf0e10cSrcweir 		const rtl::OUString& rLocalName,
2797cdf0e10cSrcweir 		const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
2798cdf0e10cSrcweir 		com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >& rShapes,
2799cdf0e10cSrcweir         sal_Bool bTemporaryShape)
2800cdf0e10cSrcweir : SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ),
2801cdf0e10cSrcweir   mbIsScript( sal_False )
2802cdf0e10cSrcweir {
2803cdf0e10cSrcweir }
2804cdf0e10cSrcweir 
2805cdf0e10cSrcweir SdXMLAppletShapeContext::~SdXMLAppletShapeContext()
2806cdf0e10cSrcweir {
2807cdf0e10cSrcweir }
2808cdf0e10cSrcweir 
2809cdf0e10cSrcweir void SdXMLAppletShapeContext::StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& )
2810cdf0e10cSrcweir {
2811cdf0e10cSrcweir 	const char* pService = "com.sun.star.drawing.AppletShape";
2812cdf0e10cSrcweir 	AddShape( pService );
2813cdf0e10cSrcweir 
2814cdf0e10cSrcweir 	if( mxShape.is() )
2815cdf0e10cSrcweir 	{
2816cdf0e10cSrcweir 		SetLayer();
2817cdf0e10cSrcweir 
2818cdf0e10cSrcweir 		// set pos, size, shear and rotate
2819cdf0e10cSrcweir 		SetTransformation();
2820cdf0e10cSrcweir 		GetImport().GetShapeImport()->finishShape( mxShape, mxAttrList, mxShapes );
2821cdf0e10cSrcweir 	}
2822cdf0e10cSrcweir }
2823cdf0e10cSrcweir 
2824cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
2825cdf0e10cSrcweir void SdXMLAppletShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
2826cdf0e10cSrcweir {
2827cdf0e10cSrcweir 	switch( nPrefix )
2828cdf0e10cSrcweir 	{
2829cdf0e10cSrcweir 	case XML_NAMESPACE_DRAW:
2830cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_APPLET_NAME ) )
2831cdf0e10cSrcweir 		{
2832cdf0e10cSrcweir 			maAppletName = rValue;
2833cdf0e10cSrcweir 			return;
2834cdf0e10cSrcweir 		}
2835cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_CODE ) )
2836cdf0e10cSrcweir 		{
2837cdf0e10cSrcweir 			maAppletCode = rValue;
2838cdf0e10cSrcweir 			return;
2839cdf0e10cSrcweir 		}
2840cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_MAY_SCRIPT ) )
2841cdf0e10cSrcweir 		{
2842cdf0e10cSrcweir 			mbIsScript = IsXMLToken( rValue, XML_TRUE );
2843cdf0e10cSrcweir 			return;
2844cdf0e10cSrcweir 		}
2845cdf0e10cSrcweir 		break;
2846cdf0e10cSrcweir 	case XML_NAMESPACE_XLINK:
2847cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_HREF ) )
2848cdf0e10cSrcweir 		{
2849cdf0e10cSrcweir 			maHref = GetImport().GetAbsoluteReference(rValue);
2850cdf0e10cSrcweir 			return;
2851cdf0e10cSrcweir 		}
2852cdf0e10cSrcweir 		break;
2853cdf0e10cSrcweir 	}
2854cdf0e10cSrcweir 
2855cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
2856cdf0e10cSrcweir }
2857cdf0e10cSrcweir 
2858cdf0e10cSrcweir void SdXMLAppletShapeContext::EndElement()
2859cdf0e10cSrcweir {
2860cdf0e10cSrcweir 	uno::Reference< beans::XPropertySet > xProps( mxShape, uno::UNO_QUERY );
2861cdf0e10cSrcweir 	if( xProps.is() )
2862cdf0e10cSrcweir 	{
2863cdf0e10cSrcweir 		uno::Any aAny;
2864cdf0e10cSrcweir 
2865cdf0e10cSrcweir 		if ( maSize.Width && maSize.Height )
2866cdf0e10cSrcweir 		{
2867cdf0e10cSrcweir 			// the visual area for applet must be set on loading
2868cdf0e10cSrcweir 			awt::Rectangle aRect( 0, 0, maSize.Width, maSize.Height );
2869cdf0e10cSrcweir 			aAny <<= aRect;
2870cdf0e10cSrcweir 			xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "VisibleArea" ) ), aAny );
2871cdf0e10cSrcweir 		}
2872cdf0e10cSrcweir 
2873cdf0e10cSrcweir 		if( maParams.getLength() )
2874cdf0e10cSrcweir 		{
2875cdf0e10cSrcweir 			aAny <<= maParams;
2876cdf0e10cSrcweir 			xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "AppletCommands" ) ), aAny );
2877cdf0e10cSrcweir 		}
2878cdf0e10cSrcweir 
2879cdf0e10cSrcweir 		if( maHref.getLength() )
2880cdf0e10cSrcweir 		{
2881cdf0e10cSrcweir 			aAny <<= maHref;
2882cdf0e10cSrcweir 			xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "AppletCodeBase" ) ), aAny );
2883cdf0e10cSrcweir 		}
2884cdf0e10cSrcweir 
2885cdf0e10cSrcweir 		if( maAppletName.getLength() )
2886cdf0e10cSrcweir 		{
2887cdf0e10cSrcweir 			aAny <<= maAppletName;
2888cdf0e10cSrcweir 			xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "AppletName" ) ), aAny );
2889cdf0e10cSrcweir 		}
2890cdf0e10cSrcweir 
2891cdf0e10cSrcweir 		if( mbIsScript )
2892cdf0e10cSrcweir 		{
2893cdf0e10cSrcweir 			aAny <<= mbIsScript;
2894cdf0e10cSrcweir 			xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "AppletIsScript" ) ), aAny );
2895cdf0e10cSrcweir 
2896cdf0e10cSrcweir 		}
2897cdf0e10cSrcweir 
2898cdf0e10cSrcweir 		if( maAppletCode.getLength() )
2899cdf0e10cSrcweir 		{
2900cdf0e10cSrcweir 			aAny <<= maAppletCode;
2901cdf0e10cSrcweir 			xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "AppletCode" ) ), aAny );
2902cdf0e10cSrcweir 		}
2903cdf0e10cSrcweir 
2904cdf0e10cSrcweir         aAny <<= ::rtl::OUString( GetImport().GetDocumentBase() );
2905cdf0e10cSrcweir         xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "AppletDocBase" ) ), aAny );
2906cdf0e10cSrcweir 
2907cdf0e10cSrcweir 		SetThumbnail();
2908cdf0e10cSrcweir 	}
2909cdf0e10cSrcweir 
2910cdf0e10cSrcweir 	SdXMLShapeContext::EndElement();
2911cdf0e10cSrcweir }
2912cdf0e10cSrcweir 
2913cdf0e10cSrcweir SvXMLImportContext * SdXMLAppletShapeContext::CreateChildContext( sal_uInt16 p_nPrefix, const ::rtl::OUString& rLocalName, const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList )
2914cdf0e10cSrcweir {
2915cdf0e10cSrcweir 	if( p_nPrefix == XML_NAMESPACE_DRAW && IsXMLToken( rLocalName, XML_PARAM ) )
2916cdf0e10cSrcweir 	{
2917cdf0e10cSrcweir 		OUString aParamName, aParamValue;
2918cdf0e10cSrcweir 		const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
2919cdf0e10cSrcweir 		// now parse the attribute list and look for draw:name and draw:value
2920cdf0e10cSrcweir 		for(sal_Int16 a(0); a < nAttrCount; a++)
2921cdf0e10cSrcweir 		{
2922cdf0e10cSrcweir 			const OUString& rAttrName = xAttrList->getNameByIndex(a);
2923cdf0e10cSrcweir 			OUString aLocalName;
2924cdf0e10cSrcweir 			sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName(rAttrName, &aLocalName);
2925cdf0e10cSrcweir 			const OUString aValue( xAttrList->getValueByIndex(a) );
2926cdf0e10cSrcweir 
2927cdf0e10cSrcweir 			if( nPrefix == XML_NAMESPACE_DRAW )
2928cdf0e10cSrcweir 			{
2929cdf0e10cSrcweir 				if( IsXMLToken( aLocalName, XML_NAME ) )
2930cdf0e10cSrcweir 				{
2931cdf0e10cSrcweir 					aParamName = aValue;
2932cdf0e10cSrcweir 				}
2933cdf0e10cSrcweir 				else if( IsXMLToken( aLocalName, XML_VALUE ) )
2934cdf0e10cSrcweir 				{
2935cdf0e10cSrcweir 					aParamValue = aValue;
2936cdf0e10cSrcweir 				}
2937cdf0e10cSrcweir 			}
2938cdf0e10cSrcweir 		}
2939cdf0e10cSrcweir 
2940cdf0e10cSrcweir 		if( aParamName.getLength() )
2941cdf0e10cSrcweir 		{
2942cdf0e10cSrcweir 			sal_Int32 nIndex = maParams.getLength();
2943cdf0e10cSrcweir 			maParams.realloc( nIndex + 1 );
2944cdf0e10cSrcweir 			maParams[nIndex].Name = aParamName;
2945cdf0e10cSrcweir 			maParams[nIndex].Handle = -1;
2946cdf0e10cSrcweir 			maParams[nIndex].Value <<= aParamValue;
2947cdf0e10cSrcweir 			maParams[nIndex].State = beans::PropertyState_DIRECT_VALUE;
2948cdf0e10cSrcweir 		}
2949cdf0e10cSrcweir 
2950cdf0e10cSrcweir 		return new SvXMLImportContext( GetImport(), p_nPrefix, rLocalName );
2951cdf0e10cSrcweir 	}
2952cdf0e10cSrcweir 
2953cdf0e10cSrcweir 	return SdXMLShapeContext::CreateChildContext( p_nPrefix, rLocalName, xAttrList );
2954cdf0e10cSrcweir }
2955cdf0e10cSrcweir 
2956cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
2957cdf0e10cSrcweir 
2958cdf0e10cSrcweir TYPEINIT1( SdXMLPluginShapeContext, SdXMLShapeContext );
2959cdf0e10cSrcweir 
2960cdf0e10cSrcweir SdXMLPluginShapeContext::SdXMLPluginShapeContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
2961cdf0e10cSrcweir 		const rtl::OUString& rLocalName,
2962cdf0e10cSrcweir 		const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
2963cdf0e10cSrcweir 		com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >& rShapes,
2964cdf0e10cSrcweir         sal_Bool bTemporaryShape) :
2965cdf0e10cSrcweir SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ),
2966cdf0e10cSrcweir mbMedia( false )
2967cdf0e10cSrcweir {
2968cdf0e10cSrcweir }
2969cdf0e10cSrcweir 
2970cdf0e10cSrcweir SdXMLPluginShapeContext::~SdXMLPluginShapeContext()
2971cdf0e10cSrcweir {
2972cdf0e10cSrcweir }
2973cdf0e10cSrcweir 
2974cdf0e10cSrcweir void SdXMLPluginShapeContext::StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList)
2975cdf0e10cSrcweir {
2976cdf0e10cSrcweir 	// watch for MimeType attribute to see if we have a media object
2977cdf0e10cSrcweir 	for( sal_Int16 n = 0, nAttrCount = ( xAttrList.is() ? xAttrList->getLength() : 0 ); n < nAttrCount; ++n )
2978cdf0e10cSrcweir 	{
2979cdf0e10cSrcweir 		OUString 	aLocalName;
2980cdf0e10cSrcweir 		sal_uInt16 	nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( xAttrList->getNameByIndex( n ), &aLocalName );
2981cdf0e10cSrcweir 
2982cdf0e10cSrcweir 		if( nPrefix == XML_NAMESPACE_DRAW && IsXMLToken( aLocalName, XML_MIME_TYPE ) )
2983cdf0e10cSrcweir 		{
2984cdf0e10cSrcweir 			if( 0 == xAttrList->getValueByIndex( n ).compareToAscii( "application/vnd.sun.star.media" ) )
2985cdf0e10cSrcweir 				mbMedia = true;
2986cdf0e10cSrcweir 
2987cdf0e10cSrcweir 			// leave this loop
2988cdf0e10cSrcweir 			n = nAttrCount - 1;
2989cdf0e10cSrcweir 		}
2990cdf0e10cSrcweir 	}
2991cdf0e10cSrcweir 
2992cdf0e10cSrcweir 	const char* pService;
2993cdf0e10cSrcweir 
2994cdf0e10cSrcweir 	sal_Bool bIsPresShape = sal_False;
2995cdf0e10cSrcweir 
2996cdf0e10cSrcweir 	if( mbMedia )
2997cdf0e10cSrcweir 	{
2998cdf0e10cSrcweir 		pService = "com.sun.star.drawing.MediaShape";
2999cdf0e10cSrcweir 
3000cdf0e10cSrcweir 		bIsPresShape = maPresentationClass.getLength() && GetImport().GetShapeImport()->IsPresentationShapesSupported();
3001cdf0e10cSrcweir 		if( bIsPresShape )
3002cdf0e10cSrcweir 		{
3003cdf0e10cSrcweir 			if( IsXMLToken( maPresentationClass, XML_PRESENTATION_OBJECT ) )
3004cdf0e10cSrcweir 			{
3005cdf0e10cSrcweir 				pService = "com.sun.star.presentation.MediaShape";
3006cdf0e10cSrcweir 			}
3007cdf0e10cSrcweir 		}
3008cdf0e10cSrcweir 	}
3009cdf0e10cSrcweir 	else
3010cdf0e10cSrcweir 		pService = "com.sun.star.drawing.PluginShape";
3011cdf0e10cSrcweir 
3012cdf0e10cSrcweir 	AddShape( pService );
3013cdf0e10cSrcweir 
3014cdf0e10cSrcweir 	if( mxShape.is() )
3015cdf0e10cSrcweir 	{
3016cdf0e10cSrcweir 		SetLayer();
3017cdf0e10cSrcweir 
3018cdf0e10cSrcweir 		if(bIsPresShape)
3019cdf0e10cSrcweir 		{
3020cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xProps( mxShape, uno::UNO_QUERY );
3021cdf0e10cSrcweir 			if(xProps.is())
3022cdf0e10cSrcweir 			{
3023cdf0e10cSrcweir 				uno::Reference< beans::XPropertySetInfo > xPropsInfo( xProps->getPropertySetInfo() );
3024cdf0e10cSrcweir 				if( xPropsInfo.is() )
3025cdf0e10cSrcweir 				{
3026cdf0e10cSrcweir 					if( !mbIsPlaceholder && xPropsInfo->hasPropertyByName(OUString(RTL_CONSTASCII_USTRINGPARAM("IsEmptyPresentationObject") )))
3027cdf0e10cSrcweir 						xProps->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("IsEmptyPresentationObject") ), ::cppu::bool2any( sal_False ) );
3028cdf0e10cSrcweir 
3029cdf0e10cSrcweir 					if( mbIsUserTransformed && xPropsInfo->hasPropertyByName(OUString(RTL_CONSTASCII_USTRINGPARAM("IsPlaceholderDependent") )))
3030cdf0e10cSrcweir 						xProps->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("IsPlaceholderDependent") ), ::cppu::bool2any( sal_False ) );
3031cdf0e10cSrcweir 				}
3032cdf0e10cSrcweir 			}
3033cdf0e10cSrcweir 		}
3034cdf0e10cSrcweir 
3035cdf0e10cSrcweir 		// set pos, size, shear and rotate
3036cdf0e10cSrcweir 		SetTransformation();
3037cdf0e10cSrcweir 		GetImport().GetShapeImport()->finishShape( mxShape, mxAttrList, mxShapes );
3038cdf0e10cSrcweir 	}
3039cdf0e10cSrcweir }
3040cdf0e10cSrcweir 
3041cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
3042cdf0e10cSrcweir void SdXMLPluginShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
3043cdf0e10cSrcweir {
3044cdf0e10cSrcweir 	switch( nPrefix )
3045cdf0e10cSrcweir 	{
3046cdf0e10cSrcweir 	case XML_NAMESPACE_DRAW:
3047cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_MIME_TYPE ) )
3048cdf0e10cSrcweir 		{
3049cdf0e10cSrcweir 			maMimeType = rValue;
3050cdf0e10cSrcweir 			return;
3051cdf0e10cSrcweir 		}
3052cdf0e10cSrcweir 		break;
3053cdf0e10cSrcweir 	case XML_NAMESPACE_XLINK:
3054cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_HREF ) )
3055cdf0e10cSrcweir 		{
3056cdf0e10cSrcweir 			maHref = GetImport().GetAbsoluteReference(rValue);
3057cdf0e10cSrcweir 			return;
3058cdf0e10cSrcweir 		}
3059cdf0e10cSrcweir 		break;
3060cdf0e10cSrcweir 	}
3061cdf0e10cSrcweir 
3062cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
3063cdf0e10cSrcweir }
3064cdf0e10cSrcweir 
3065cdf0e10cSrcweir void SdXMLPluginShapeContext::EndElement()
3066cdf0e10cSrcweir {
3067cdf0e10cSrcweir 	uno::Reference< beans::XPropertySet > xProps( mxShape, uno::UNO_QUERY );
3068cdf0e10cSrcweir 
3069cdf0e10cSrcweir 	if( xProps.is() )
3070cdf0e10cSrcweir 	{
3071cdf0e10cSrcweir 		uno::Any aAny;
3072cdf0e10cSrcweir 
3073cdf0e10cSrcweir 		if ( maSize.Width && maSize.Height )
3074cdf0e10cSrcweir 		{
3075cdf0e10cSrcweir 			const rtl::OUString sVisibleArea( RTL_CONSTASCII_USTRINGPARAM( "VisibleArea" ) );
3076cdf0e10cSrcweir 			uno::Reference< beans::XPropertySetInfo > aXPropSetInfo( xProps->getPropertySetInfo() );
3077cdf0e10cSrcweir             if ( !aXPropSetInfo.is() || aXPropSetInfo->hasPropertyByName( sVisibleArea ) )
3078cdf0e10cSrcweir 			{
3079cdf0e10cSrcweir 				// the visual area for a plugin must be set on loading
3080cdf0e10cSrcweir 				awt::Rectangle aRect( 0, 0, maSize.Width, maSize.Height );
3081cdf0e10cSrcweir 				aAny <<= aRect;
3082cdf0e10cSrcweir 				xProps->setPropertyValue( sVisibleArea, aAny );
3083cdf0e10cSrcweir 			}
3084cdf0e10cSrcweir 		}
3085cdf0e10cSrcweir 
3086cdf0e10cSrcweir 		if( !mbMedia )
3087cdf0e10cSrcweir 		{
3088cdf0e10cSrcweir 			// in case we have a plugin object
3089cdf0e10cSrcweir 			if( maParams.getLength() )
3090cdf0e10cSrcweir 			{
3091cdf0e10cSrcweir 				aAny <<= maParams;
3092cdf0e10cSrcweir 				xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "PluginCommands" ) ), aAny );
3093cdf0e10cSrcweir 			}
3094cdf0e10cSrcweir 
3095cdf0e10cSrcweir 			if( maMimeType.getLength() )
3096cdf0e10cSrcweir 			{
3097cdf0e10cSrcweir 				aAny <<= maMimeType;
3098cdf0e10cSrcweir 				xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "PluginMimeType" ) ), aAny );
3099cdf0e10cSrcweir 			}
3100cdf0e10cSrcweir 
3101cdf0e10cSrcweir 			if( maHref.getLength() )
3102cdf0e10cSrcweir 			{
3103cdf0e10cSrcweir 				aAny <<= maHref;
3104cdf0e10cSrcweir 				xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "PluginURL" ) ), aAny );
3105cdf0e10cSrcweir 			}
3106cdf0e10cSrcweir 		}
3107cdf0e10cSrcweir 		else
3108cdf0e10cSrcweir 		{
3109cdf0e10cSrcweir 			// in case we have a media object
3110cdf0e10cSrcweir 
3111cdf0e10cSrcweir 			OUString sTempRef;
3112cdf0e10cSrcweir 
3113cdf0e10cSrcweir 			// check for package URL
3114cdf0e10cSrcweir 			if( GetImport().IsPackageURL( maHref ) )
3115cdf0e10cSrcweir 			{
3116cdf0e10cSrcweir 			    sTempRef = OUString( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.Package:" ) );
3117cdf0e10cSrcweir 			}
3118cdf0e10cSrcweir 
3119cdf0e10cSrcweir 			sTempRef += maHref;
3120cdf0e10cSrcweir 
3121cdf0e10cSrcweir 			xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "MediaURL" ) ), uno::makeAny( sTempRef ) );
3122cdf0e10cSrcweir 
3123cdf0e10cSrcweir 			for( sal_Int32 nParam = 0; nParam < maParams.getLength(); ++nParam )
3124cdf0e10cSrcweir 			{
3125cdf0e10cSrcweir 				const OUString& rName = maParams[ nParam ].Name;
3126cdf0e10cSrcweir 
3127cdf0e10cSrcweir 				if( 0 == rName.compareToAscii( "Loop" ) )
3128cdf0e10cSrcweir 				{
3129cdf0e10cSrcweir 					OUString aValueStr;
3130cdf0e10cSrcweir 					maParams[ nParam ].Value >>= aValueStr;
3131cdf0e10cSrcweir 					xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Loop" ) ),
3132cdf0e10cSrcweir 						uno::makeAny( static_cast< sal_Bool >( 0 == aValueStr.compareToAscii( "true" ) ) ) );
3133cdf0e10cSrcweir 				}
3134cdf0e10cSrcweir 				else if( 0 == rName.compareToAscii( "Mute" ) )
3135cdf0e10cSrcweir 				{
3136cdf0e10cSrcweir 					OUString aValueStr;
3137cdf0e10cSrcweir 					maParams[ nParam ].Value >>= aValueStr;
3138cdf0e10cSrcweir 					xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Mute" ) ),
3139cdf0e10cSrcweir 						uno::makeAny( static_cast< sal_Bool >( 0 == aValueStr.compareToAscii( "true" ) ) ) );
3140cdf0e10cSrcweir 				}
3141cdf0e10cSrcweir 				else if( 0 == rName.compareToAscii( "VolumeDB" ) )
3142cdf0e10cSrcweir 				{
3143cdf0e10cSrcweir 					OUString aValueStr;
3144cdf0e10cSrcweir 					maParams[ nParam ].Value >>= aValueStr;
3145cdf0e10cSrcweir 					xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "VolumeDB" ) ),
3146cdf0e10cSrcweir 					                            uno::makeAny( static_cast< sal_Int16 >( aValueStr.toInt32() ) ) );
3147cdf0e10cSrcweir 				}
3148cdf0e10cSrcweir 				else if( 0 == rName.compareToAscii( "Zoom" ) )
3149cdf0e10cSrcweir 				{
3150cdf0e10cSrcweir 					OUString 			aZoomStr;
3151cdf0e10cSrcweir 					media::ZoomLevel	eZoomLevel;
3152cdf0e10cSrcweir 
3153cdf0e10cSrcweir 					maParams[ nParam ].Value >>= aZoomStr;
3154cdf0e10cSrcweir 
3155cdf0e10cSrcweir 					if( 0 == aZoomStr.compareToAscii( "25%" ) )
3156cdf0e10cSrcweir 						eZoomLevel = media::ZoomLevel_ZOOM_1_TO_4;
3157cdf0e10cSrcweir 					else if( 0 == aZoomStr.compareToAscii( "50%" ) )
3158cdf0e10cSrcweir 						eZoomLevel = media::ZoomLevel_ZOOM_1_TO_2;
3159cdf0e10cSrcweir 					else if( 0 == aZoomStr.compareToAscii( "100%" ) )
3160cdf0e10cSrcweir 						eZoomLevel = media::ZoomLevel_ORIGINAL;
3161cdf0e10cSrcweir 					else if( 0 == aZoomStr.compareToAscii( "200%" ) )
3162cdf0e10cSrcweir 						eZoomLevel = media::ZoomLevel_ZOOM_2_TO_1;
3163cdf0e10cSrcweir 					else if( 0 == aZoomStr.compareToAscii( "400%" ) )
3164cdf0e10cSrcweir 						eZoomLevel = media::ZoomLevel_ZOOM_4_TO_1;
3165cdf0e10cSrcweir 					else if( 0 == aZoomStr.compareToAscii( "fit" ) )
3166cdf0e10cSrcweir 						eZoomLevel = media::ZoomLevel_FIT_TO_WINDOW;
3167cdf0e10cSrcweir 					else if( 0 == aZoomStr.compareToAscii( "fixedfit" ) )
3168cdf0e10cSrcweir 						eZoomLevel = media::ZoomLevel_FIT_TO_WINDOW_FIXED_ASPECT;
3169cdf0e10cSrcweir 					else if( 0 == aZoomStr.compareToAscii( "fullscreen" ) )
3170cdf0e10cSrcweir 						eZoomLevel = media::ZoomLevel_FULLSCREEN;
3171cdf0e10cSrcweir 					else
3172cdf0e10cSrcweir 						eZoomLevel = media::ZoomLevel_NOT_AVAILABLE;
3173cdf0e10cSrcweir 
3174cdf0e10cSrcweir 					xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Zoom" ) ), uno::makeAny( eZoomLevel ) );
3175cdf0e10cSrcweir 				}
3176cdf0e10cSrcweir 			}
3177cdf0e10cSrcweir 		}
3178cdf0e10cSrcweir 
3179cdf0e10cSrcweir 		SetThumbnail();
3180cdf0e10cSrcweir 	}
3181cdf0e10cSrcweir 
3182cdf0e10cSrcweir 	SdXMLShapeContext::EndElement();
3183cdf0e10cSrcweir }
3184cdf0e10cSrcweir 
3185cdf0e10cSrcweir SvXMLImportContext * SdXMLPluginShapeContext::CreateChildContext( sal_uInt16 p_nPrefix, const ::rtl::OUString& rLocalName, const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList )
3186cdf0e10cSrcweir {
3187cdf0e10cSrcweir 	if( p_nPrefix == XML_NAMESPACE_DRAW && IsXMLToken( rLocalName, XML_PARAM ) )
3188cdf0e10cSrcweir 	{
3189cdf0e10cSrcweir 		OUString aParamName, aParamValue;
3190cdf0e10cSrcweir 		const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
3191cdf0e10cSrcweir 		// now parse the attribute list and look for draw:name and draw:value
3192cdf0e10cSrcweir 		for(sal_Int16 a(0); a < nAttrCount; a++)
3193cdf0e10cSrcweir 		{
3194cdf0e10cSrcweir 			const OUString& rAttrName = xAttrList->getNameByIndex(a);
3195cdf0e10cSrcweir 			OUString aLocalName;
3196cdf0e10cSrcweir 			sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName(rAttrName, &aLocalName);
3197cdf0e10cSrcweir 			const OUString aValue( xAttrList->getValueByIndex(a) );
3198cdf0e10cSrcweir 
3199cdf0e10cSrcweir 			if( nPrefix == XML_NAMESPACE_DRAW )
3200cdf0e10cSrcweir 			{
3201cdf0e10cSrcweir 				if( IsXMLToken( aLocalName, XML_NAME ) )
3202cdf0e10cSrcweir 				{
3203cdf0e10cSrcweir 					aParamName = aValue;
3204cdf0e10cSrcweir 				}
3205cdf0e10cSrcweir 				else if( IsXMLToken( aLocalName, XML_VALUE ) )
3206cdf0e10cSrcweir 				{
3207cdf0e10cSrcweir 					aParamValue = aValue;
3208cdf0e10cSrcweir 				}
3209cdf0e10cSrcweir 			}
3210cdf0e10cSrcweir 
3211cdf0e10cSrcweir 			if( aParamName.getLength() )
3212cdf0e10cSrcweir 			{
3213cdf0e10cSrcweir 				sal_Int32 nIndex = maParams.getLength();
3214cdf0e10cSrcweir 				maParams.realloc( nIndex + 1 );
3215cdf0e10cSrcweir 				maParams[nIndex].Name = aParamName;
3216cdf0e10cSrcweir 				maParams[nIndex].Handle = -1;
3217cdf0e10cSrcweir 				maParams[nIndex].Value <<= aParamValue;
3218cdf0e10cSrcweir 				maParams[nIndex].State = beans::PropertyState_DIRECT_VALUE;
3219cdf0e10cSrcweir 			}
3220cdf0e10cSrcweir 		}
3221cdf0e10cSrcweir 
3222cdf0e10cSrcweir 		return new SvXMLImportContext( GetImport(), p_nPrefix, rLocalName );
3223cdf0e10cSrcweir 	}
3224cdf0e10cSrcweir 
3225cdf0e10cSrcweir 	return SdXMLShapeContext::CreateChildContext( p_nPrefix, rLocalName, xAttrList );
3226cdf0e10cSrcweir }
3227cdf0e10cSrcweir 
3228cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
3229cdf0e10cSrcweir 
3230cdf0e10cSrcweir TYPEINIT1( SdXMLFloatingFrameShapeContext, SdXMLShapeContext );
3231cdf0e10cSrcweir 
3232cdf0e10cSrcweir SdXMLFloatingFrameShapeContext::SdXMLFloatingFrameShapeContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
3233cdf0e10cSrcweir 		const rtl::OUString& rLocalName,
3234cdf0e10cSrcweir 		const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
3235cdf0e10cSrcweir 		com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >& rShapes,
3236cdf0e10cSrcweir         sal_Bool bTemporaryShape)
3237cdf0e10cSrcweir : SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape )
3238cdf0e10cSrcweir {
3239cdf0e10cSrcweir }
3240cdf0e10cSrcweir 
3241cdf0e10cSrcweir SdXMLFloatingFrameShapeContext::~SdXMLFloatingFrameShapeContext()
3242cdf0e10cSrcweir {
3243cdf0e10cSrcweir }
3244cdf0e10cSrcweir 
3245cdf0e10cSrcweir void SdXMLFloatingFrameShapeContext::StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& )
3246cdf0e10cSrcweir {
3247cdf0e10cSrcweir 	const char* pService = "com.sun.star.drawing.FrameShape";
3248cdf0e10cSrcweir 	AddShape( pService );
3249cdf0e10cSrcweir 
3250cdf0e10cSrcweir 	if( mxShape.is() )
3251cdf0e10cSrcweir 	{
3252cdf0e10cSrcweir 		SetLayer();
3253cdf0e10cSrcweir 
3254cdf0e10cSrcweir 		// set pos, size, shear and rotate
3255cdf0e10cSrcweir 		SetTransformation();
3256cdf0e10cSrcweir 
3257cdf0e10cSrcweir 		uno::Reference< beans::XPropertySet > xProps( mxShape, uno::UNO_QUERY );
3258cdf0e10cSrcweir 		if( xProps.is() )
3259cdf0e10cSrcweir 		{
3260cdf0e10cSrcweir 			uno::Any aAny;
3261cdf0e10cSrcweir 
3262cdf0e10cSrcweir 			if( maFrameName.getLength() )
3263cdf0e10cSrcweir 			{
3264cdf0e10cSrcweir 				aAny <<= maFrameName;
3265cdf0e10cSrcweir 				xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "FrameName" ) ), aAny );
3266cdf0e10cSrcweir 			}
3267cdf0e10cSrcweir 
3268cdf0e10cSrcweir 			if( maHref.getLength() )
3269cdf0e10cSrcweir 			{
3270cdf0e10cSrcweir 				aAny <<= maHref;
3271cdf0e10cSrcweir 				xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "FrameURL" ) ), aAny );
3272cdf0e10cSrcweir 			}
3273cdf0e10cSrcweir 		}
3274cdf0e10cSrcweir 
3275cdf0e10cSrcweir 		SetStyle();
3276cdf0e10cSrcweir 
3277cdf0e10cSrcweir 		GetImport().GetShapeImport()->finishShape( mxShape, mxAttrList, mxShapes );
3278cdf0e10cSrcweir 	}
3279cdf0e10cSrcweir }
3280cdf0e10cSrcweir 
3281cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
3282cdf0e10cSrcweir void SdXMLFloatingFrameShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
3283cdf0e10cSrcweir {
3284cdf0e10cSrcweir 	switch( nPrefix )
3285cdf0e10cSrcweir 	{
3286cdf0e10cSrcweir 	case XML_NAMESPACE_DRAW:
3287cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_FRAME_NAME ) )
3288cdf0e10cSrcweir 		{
3289cdf0e10cSrcweir 			maFrameName = rValue;
3290cdf0e10cSrcweir 			return;
3291cdf0e10cSrcweir 		}
3292cdf0e10cSrcweir 		break;
3293cdf0e10cSrcweir 	case XML_NAMESPACE_XLINK:
3294cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_HREF ) )
3295cdf0e10cSrcweir 		{
3296cdf0e10cSrcweir 			maHref = GetImport().GetAbsoluteReference(rValue);
3297cdf0e10cSrcweir 			return;
3298cdf0e10cSrcweir 		}
3299cdf0e10cSrcweir 		break;
3300cdf0e10cSrcweir 	}
3301cdf0e10cSrcweir 
3302cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
3303cdf0e10cSrcweir }
3304cdf0e10cSrcweir 
3305cdf0e10cSrcweir void SdXMLFloatingFrameShapeContext::EndElement()
3306cdf0e10cSrcweir {
3307cdf0e10cSrcweir 	uno::Reference< beans::XPropertySet > xProps( mxShape, uno::UNO_QUERY );
3308cdf0e10cSrcweir 
3309cdf0e10cSrcweir 	if( xProps.is() )
3310cdf0e10cSrcweir 	{
3311cdf0e10cSrcweir 		if ( maSize.Width && maSize.Height )
3312cdf0e10cSrcweir 		{
3313cdf0e10cSrcweir 			// the visual area for a floating frame must be set on loading
3314cdf0e10cSrcweir 			awt::Rectangle aRect( 0, 0, maSize.Width, maSize.Height );
3315cdf0e10cSrcweir 			uno::Any aAny;
3316cdf0e10cSrcweir 			aAny <<= aRect;
3317cdf0e10cSrcweir 			xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "VisibleArea" ) ), aAny );
3318cdf0e10cSrcweir 		}
3319cdf0e10cSrcweir 	}
3320cdf0e10cSrcweir 
3321cdf0e10cSrcweir 	SetThumbnail();
3322cdf0e10cSrcweir 	SdXMLShapeContext::EndElement();
3323cdf0e10cSrcweir }
3324cdf0e10cSrcweir 
3325cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
3326cdf0e10cSrcweir 
3327cdf0e10cSrcweir TYPEINIT1( SdXMLFrameShapeContext, SdXMLShapeContext );
3328cdf0e10cSrcweir 
3329cdf0e10cSrcweir SdXMLFrameShapeContext::SdXMLFrameShapeContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
3330cdf0e10cSrcweir 		const rtl::OUString& rLocalName,
3331cdf0e10cSrcweir 		const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
3332cdf0e10cSrcweir 		com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >& rShapes,
3333cdf0e10cSrcweir         sal_Bool bTemporaryShape)
3334cdf0e10cSrcweir : SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ),
3335cdf0e10cSrcweir 	mbSupportsReplacement( sal_False )
3336cdf0e10cSrcweir {
3337cdf0e10cSrcweir 	uno::Reference < util::XCloneable > xClone( xAttrList, uno::UNO_QUERY );
3338cdf0e10cSrcweir 	if( xClone.is() )
3339cdf0e10cSrcweir 		mxAttrList.set( xClone->createClone(), uno::UNO_QUERY );
3340cdf0e10cSrcweir 	else
3341cdf0e10cSrcweir 		mxAttrList = new SvXMLAttributeList( xAttrList );
3342cdf0e10cSrcweir 
3343cdf0e10cSrcweir }
3344cdf0e10cSrcweir 
3345cdf0e10cSrcweir SdXMLFrameShapeContext::~SdXMLFrameShapeContext()
3346cdf0e10cSrcweir {
3347cdf0e10cSrcweir }
3348cdf0e10cSrcweir 
3349cdf0e10cSrcweir SvXMLImportContext *SdXMLFrameShapeContext::CreateChildContext( sal_uInt16 nPrefix,
3350cdf0e10cSrcweir 	const OUString& rLocalName,
3351cdf0e10cSrcweir 	const uno::Reference< xml::sax::XAttributeList>& xAttrList )
3352cdf0e10cSrcweir {
3353cdf0e10cSrcweir 	SvXMLImportContext * pContext = 0;
3354cdf0e10cSrcweir 
3355cdf0e10cSrcweir 	if( !mxImplContext.Is() )
3356cdf0e10cSrcweir 	{
3357cdf0e10cSrcweir 		pContext = GetImport().GetShapeImport()->CreateFrameChildContext(
3358cdf0e10cSrcweir 						GetImport(), nPrefix, rLocalName, xAttrList, mxShapes, mxAttrList );
3359cdf0e10cSrcweir 
3360cdf0e10cSrcweir 		mxImplContext = pContext;
3361cdf0e10cSrcweir 		mbSupportsReplacement = IsXMLToken( rLocalName, XML_OBJECT ) ||
3362cdf0e10cSrcweir 								IsXMLToken( rLocalName, XML_OBJECT_OLE );
3363cdf0e10cSrcweir 	}
3364cdf0e10cSrcweir 	else if( mbSupportsReplacement && !mxReplImplContext &&
3365cdf0e10cSrcweir 			 XML_NAMESPACE_DRAW == nPrefix &&
3366cdf0e10cSrcweir 			 IsXMLToken( rLocalName, XML_IMAGE ) )
3367cdf0e10cSrcweir 	{
3368cdf0e10cSrcweir 		// read replacement image
3369cdf0e10cSrcweir 		SvXMLImportContext *pImplContext = &mxImplContext;
3370cdf0e10cSrcweir 		SdXMLShapeContext *pSContext =
3371cdf0e10cSrcweir 			PTR_CAST( SdXMLShapeContext, pImplContext );
3372cdf0e10cSrcweir 		if( pSContext )
3373cdf0e10cSrcweir 		{
3374cdf0e10cSrcweir 			uno::Reference < beans::XPropertySet > xPropSet(
3375cdf0e10cSrcweir 					pSContext->getShape(), uno::UNO_QUERY );
3376cdf0e10cSrcweir 			if( xPropSet.is() )
3377cdf0e10cSrcweir 			{
3378cdf0e10cSrcweir 				pContext = new XMLReplacementImageContext( GetImport(),
3379cdf0e10cSrcweir 									nPrefix, rLocalName, xAttrList, xPropSet );
3380cdf0e10cSrcweir 				mxReplImplContext = pContext;
3381cdf0e10cSrcweir 			}
3382cdf0e10cSrcweir 		}
3383cdf0e10cSrcweir 	}
3384cdf0e10cSrcweir 	else if(
3385cdf0e10cSrcweir 			( nPrefix == XML_NAMESPACE_SVG &&	// #i68101#
3386cdf0e10cSrcweir 				(IsXMLToken( rLocalName, XML_TITLE ) || IsXMLToken( rLocalName, XML_DESC ) ) ) ||
3387cdf0e10cSrcweir 			 (nPrefix == XML_NAMESPACE_OFFICE && IsXMLToken( rLocalName, XML_EVENT_LISTENERS ) ) ||
3388cdf0e10cSrcweir 			 (nPrefix == XML_NAMESPACE_DRAW && (IsXMLToken( rLocalName, XML_GLUE_POINT ) ||
3389cdf0e10cSrcweir 												IsXMLToken( rLocalName, XML_THUMBNAIL ) ) ) )
3390cdf0e10cSrcweir 	{
3391cdf0e10cSrcweir 		SvXMLImportContext *pImplContext = &mxImplContext;
3392cdf0e10cSrcweir 		pContext = PTR_CAST( SdXMLShapeContext, pImplContext )->CreateChildContext( nPrefix,
3393cdf0e10cSrcweir 																		rLocalName, xAttrList );
3394cdf0e10cSrcweir 	}
3395cdf0e10cSrcweir 	else if ( (XML_NAMESPACE_DRAW == nPrefix) && IsXMLToken( rLocalName, XML_IMAGE_MAP ) )
3396cdf0e10cSrcweir 	{
3397cdf0e10cSrcweir 		SdXMLShapeContext *pSContext = dynamic_cast< SdXMLShapeContext* >( &mxImplContext );
3398cdf0e10cSrcweir 		if( pSContext )
3399cdf0e10cSrcweir 		{
3400cdf0e10cSrcweir 			uno::Reference < beans::XPropertySet > xPropSet( pSContext->getShape(), uno::UNO_QUERY );
3401cdf0e10cSrcweir 			if (xPropSet.is())
3402cdf0e10cSrcweir 			{
3403cdf0e10cSrcweir 				pContext = new XMLImageMapContext(GetImport(), nPrefix, rLocalName, xPropSet);
3404cdf0e10cSrcweir 			}
3405cdf0e10cSrcweir 		}
3406cdf0e10cSrcweir 	}
3407cdf0e10cSrcweir 
3408cdf0e10cSrcweir 	// call parent for content
3409cdf0e10cSrcweir 	if(!pContext)
3410cdf0e10cSrcweir 		pContext = SvXMLImportContext::CreateChildContext( nPrefix, rLocalName, xAttrList );
3411cdf0e10cSrcweir 
3412cdf0e10cSrcweir 	return pContext;
3413cdf0e10cSrcweir }
3414cdf0e10cSrcweir 
3415cdf0e10cSrcweir void SdXMLFrameShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>&)
3416cdf0e10cSrcweir {
3417cdf0e10cSrcweir 	// ignore
3418cdf0e10cSrcweir }
3419cdf0e10cSrcweir 
3420cdf0e10cSrcweir void SdXMLFrameShapeContext::EndElement()
3421cdf0e10cSrcweir {
3422cdf0e10cSrcweir 	if( !mxImplContext.Is() )
3423cdf0e10cSrcweir 	{
3424cdf0e10cSrcweir 		// now check if this is an empty presentation object
3425cdf0e10cSrcweir 		sal_Int16 nAttrCount = mxAttrList.is() ? mxAttrList->getLength() : 0;
3426cdf0e10cSrcweir 		for(sal_Int16 a(0); a < nAttrCount; a++)
3427cdf0e10cSrcweir 		{
3428cdf0e10cSrcweir 			OUString aLocalName;
3429cdf0e10cSrcweir 			sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName(mxAttrList->getNameByIndex(a), &aLocalName);
3430cdf0e10cSrcweir 
3431cdf0e10cSrcweir 			if( nPrefix == XML_NAMESPACE_PRESENTATION )
3432cdf0e10cSrcweir 			{
3433cdf0e10cSrcweir 				if( IsXMLToken( aLocalName, XML_PLACEHOLDER ) )
3434cdf0e10cSrcweir 				{
3435cdf0e10cSrcweir 					mbIsPlaceholder = IsXMLToken( mxAttrList->getValueByIndex(a), XML_TRUE );
3436cdf0e10cSrcweir 				}
3437cdf0e10cSrcweir 				else if( IsXMLToken( aLocalName, XML_CLASS ) )
3438cdf0e10cSrcweir 				{
3439cdf0e10cSrcweir 					maPresentationClass = mxAttrList->getValueByIndex(a);
3440cdf0e10cSrcweir 				}
3441cdf0e10cSrcweir 			}
3442cdf0e10cSrcweir 		}
3443cdf0e10cSrcweir 
3444cdf0e10cSrcweir 		if( (maPresentationClass.getLength() != 0) && mbIsPlaceholder )
3445cdf0e10cSrcweir 		{
3446cdf0e10cSrcweir 			uno::Reference< xml::sax::XAttributeList> xEmpty;
3447cdf0e10cSrcweir 
3448cdf0e10cSrcweir 			enum XMLTokenEnum eToken = XML_TEXT_BOX;
3449cdf0e10cSrcweir 
3450cdf0e10cSrcweir 			if( IsXMLToken( maPresentationClass, XML_GRAPHIC ) )
3451cdf0e10cSrcweir 			{
3452cdf0e10cSrcweir 				eToken = XML_IMAGE;
3453cdf0e10cSrcweir 
3454cdf0e10cSrcweir 			}
3455cdf0e10cSrcweir 			else if( IsXMLToken( maPresentationClass, XML_PRESENTATION_PAGE ) )
3456cdf0e10cSrcweir 			{
3457cdf0e10cSrcweir 				eToken = XML_PAGE_THUMBNAIL;
3458cdf0e10cSrcweir 			}
3459cdf0e10cSrcweir 			else if( IsXMLToken( maPresentationClass, XML_PRESENTATION_CHART ) ||
3460cdf0e10cSrcweir 					 IsXMLToken( maPresentationClass, XML_PRESENTATION_TABLE ) ||
3461cdf0e10cSrcweir 					 IsXMLToken( maPresentationClass, XML_PRESENTATION_OBJECT ) )
3462cdf0e10cSrcweir 			{
3463cdf0e10cSrcweir 				eToken = XML_OBJECT;
3464cdf0e10cSrcweir 			}
3465cdf0e10cSrcweir 
3466cdf0e10cSrcweir 			mxImplContext = GetImport().GetShapeImport()->CreateFrameChildContext(
3467cdf0e10cSrcweir 					GetImport(), XML_NAMESPACE_DRAW, GetXMLToken( eToken ), mxAttrList, mxShapes, xEmpty );
3468cdf0e10cSrcweir 
3469cdf0e10cSrcweir 			if( mxImplContext.Is() )
3470cdf0e10cSrcweir 			{
3471cdf0e10cSrcweir 				mxImplContext->StartElement( mxAttrList );
3472cdf0e10cSrcweir 				mxImplContext->EndElement();
3473cdf0e10cSrcweir 			}
3474cdf0e10cSrcweir 		}
3475cdf0e10cSrcweir 	}
3476cdf0e10cSrcweir 
3477cdf0e10cSrcweir 	mxImplContext = 0;
3478cdf0e10cSrcweir 	SdXMLShapeContext::EndElement();
3479cdf0e10cSrcweir }
3480cdf0e10cSrcweir 
3481cdf0e10cSrcweir void SdXMLFrameShapeContext::processAttribute( sal_uInt16,
3482cdf0e10cSrcweir 		const ::rtl::OUString&, const ::rtl::OUString& )
3483cdf0e10cSrcweir {
3484cdf0e10cSrcweir 	// ignore
3485cdf0e10cSrcweir }
3486cdf0e10cSrcweir 
3487cdf0e10cSrcweir TYPEINIT1( SdXMLCustomShapeContext, SdXMLShapeContext );
3488cdf0e10cSrcweir 
3489cdf0e10cSrcweir SdXMLCustomShapeContext::SdXMLCustomShapeContext(
3490cdf0e10cSrcweir 	SvXMLImport& rImport,
3491cdf0e10cSrcweir 	sal_uInt16 nPrfx,
3492cdf0e10cSrcweir 	const OUString& rLocalName,
3493cdf0e10cSrcweir 	const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
3494cdf0e10cSrcweir 	uno::Reference< drawing::XShapes >& rShapes,
3495cdf0e10cSrcweir     sal_Bool bTemporaryShape)
3496cdf0e10cSrcweir :	SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape )
3497cdf0e10cSrcweir {
3498cdf0e10cSrcweir }
3499cdf0e10cSrcweir 
3500cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
3501cdf0e10cSrcweir 
3502cdf0e10cSrcweir SdXMLCustomShapeContext::~SdXMLCustomShapeContext()
3503cdf0e10cSrcweir {
3504cdf0e10cSrcweir }
3505cdf0e10cSrcweir 
3506cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
3507cdf0e10cSrcweir 
3508cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
3509cdf0e10cSrcweir void SdXMLCustomShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
3510cdf0e10cSrcweir {
3511cdf0e10cSrcweir 	if( XML_NAMESPACE_DRAW == nPrefix )
3512cdf0e10cSrcweir 	{
3513cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_ENGINE ) )
3514cdf0e10cSrcweir 		{
3515cdf0e10cSrcweir 			maCustomShapeEngine = rValue;
3516cdf0e10cSrcweir 			return;
3517cdf0e10cSrcweir 		}
3518cdf0e10cSrcweir 		if ( IsXMLToken( rLocalName, XML_DATA ) )
3519cdf0e10cSrcweir 		{
3520cdf0e10cSrcweir 			maCustomShapeData = rValue;
3521cdf0e10cSrcweir 			return;
3522cdf0e10cSrcweir 		}
3523cdf0e10cSrcweir 	}
3524cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
3525cdf0e10cSrcweir }
3526cdf0e10cSrcweir 
3527cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
3528cdf0e10cSrcweir 
3529cdf0e10cSrcweir void SdXMLCustomShapeContext::StartElement( const uno::Reference< xml::sax::XAttributeList >& xAttrList )
3530cdf0e10cSrcweir {
3531cdf0e10cSrcweir 	// create rectangle shape
3532cdf0e10cSrcweir 	AddShape("com.sun.star.drawing.CustomShape");
3533cdf0e10cSrcweir 	if ( mxShape.is() )
3534cdf0e10cSrcweir 	{
3535cdf0e10cSrcweir 		// Add, set Style and properties from base shape
3536cdf0e10cSrcweir 		SetStyle();
3537cdf0e10cSrcweir 		SetLayer();
3538cdf0e10cSrcweir 
3539cdf0e10cSrcweir 		// set pos, size, shear and rotate
3540cdf0e10cSrcweir 		SetTransformation();
3541cdf0e10cSrcweir 
3542cdf0e10cSrcweir 		try
3543cdf0e10cSrcweir 		{
3544cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xPropSet( mxShape, uno::UNO_QUERY );
3545cdf0e10cSrcweir 			if( xPropSet.is() )
3546cdf0e10cSrcweir 			{
3547cdf0e10cSrcweir 				if ( maCustomShapeEngine.getLength() )
3548cdf0e10cSrcweir 				{
3549cdf0e10cSrcweir 					uno::Any aAny;
3550cdf0e10cSrcweir 					aAny <<= maCustomShapeEngine;
3551cdf0e10cSrcweir 					xPropSet->setPropertyValue( EASGet( EAS_CustomShapeEngine ), aAny );
3552cdf0e10cSrcweir 				}
3553cdf0e10cSrcweir 				if ( maCustomShapeData.getLength() )
3554cdf0e10cSrcweir 				{
3555cdf0e10cSrcweir 					uno::Any aAny;
3556cdf0e10cSrcweir 					aAny <<= maCustomShapeData;
3557cdf0e10cSrcweir 					xPropSet->setPropertyValue( EASGet( EAS_CustomShapeData ), aAny );
3558cdf0e10cSrcweir 				}
3559cdf0e10cSrcweir 			}
3560cdf0e10cSrcweir 		}
3561cdf0e10cSrcweir 		catch( uno::Exception& )
3562cdf0e10cSrcweir 		{
3563cdf0e10cSrcweir 			DBG_ERROR( "could not set enhanced customshape geometry" );
3564cdf0e10cSrcweir 		}
3565cdf0e10cSrcweir 		SdXMLShapeContext::StartElement(xAttrList);
3566cdf0e10cSrcweir 	}
3567cdf0e10cSrcweir }
3568cdf0e10cSrcweir 
3569cdf0e10cSrcweir void SdXMLCustomShapeContext::EndElement()
3570cdf0e10cSrcweir {
3571cdf0e10cSrcweir 	if ( !maCustomShapeGeometry.empty() )
3572cdf0e10cSrcweir 	{
3573cdf0e10cSrcweir 		const rtl::OUString	sCustomShapeGeometry	( RTL_CONSTASCII_USTRINGPARAM( "CustomShapeGeometry" ) );
3574cdf0e10cSrcweir 
3575cdf0e10cSrcweir 		// converting the vector to a sequence
3576cdf0e10cSrcweir 		uno::Sequence< beans::PropertyValue > aSeq( maCustomShapeGeometry.size() );
3577cdf0e10cSrcweir 		beans::PropertyValue* pValues = aSeq.getArray();
3578cdf0e10cSrcweir 		std::vector< beans::PropertyValue >::const_iterator aIter( maCustomShapeGeometry.begin() );
3579cdf0e10cSrcweir 		std::vector< beans::PropertyValue >::const_iterator aEnd( maCustomShapeGeometry.end() );
3580cdf0e10cSrcweir 		while ( aIter != aEnd )
3581cdf0e10cSrcweir 			*pValues++ = *aIter++;
3582cdf0e10cSrcweir 
3583cdf0e10cSrcweir 		try
3584cdf0e10cSrcweir 		{
3585cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xPropSet( mxShape, uno::UNO_QUERY );
3586cdf0e10cSrcweir 			if( xPropSet.is() )
3587cdf0e10cSrcweir 			{
3588cdf0e10cSrcweir 				uno::Any aAny;
3589cdf0e10cSrcweir 				aAny <<= aSeq;
3590cdf0e10cSrcweir 				xPropSet->setPropertyValue( sCustomShapeGeometry, aAny );
3591cdf0e10cSrcweir 			}
3592cdf0e10cSrcweir 		}
3593cdf0e10cSrcweir 		catch( uno::Exception& )
3594cdf0e10cSrcweir 		{
3595cdf0e10cSrcweir 			DBG_ERROR( "could not set enhanced customshape geometry" );
3596cdf0e10cSrcweir 		}
3597cdf0e10cSrcweir 
3598cdf0e10cSrcweir         sal_Int32 nUPD( 0 );
3599cdf0e10cSrcweir         sal_Int32 nBuild( 0 );
3600cdf0e10cSrcweir         GetImport().getBuildIds( nUPD, nBuild );
3601cdf0e10cSrcweir         if( ((nUPD >= 640 && nUPD <= 645) || (nUPD == 680)) && (nBuild <= 9221) )
3602cdf0e10cSrcweir 		{
3603cdf0e10cSrcweir 			Reference< drawing::XEnhancedCustomShapeDefaulter > xDefaulter( mxShape, UNO_QUERY );
3604cdf0e10cSrcweir 			if( xDefaulter.is() )
3605cdf0e10cSrcweir 			{
3606cdf0e10cSrcweir 				rtl::OUString aEmptyType;
3607cdf0e10cSrcweir 				xDefaulter->createCustomShapeDefaults( aEmptyType );
3608cdf0e10cSrcweir 			}
3609cdf0e10cSrcweir 		}
3610cdf0e10cSrcweir 	}
3611cdf0e10cSrcweir 
3612cdf0e10cSrcweir 	SdXMLShapeContext::EndElement();
3613cdf0e10cSrcweir }
3614cdf0e10cSrcweir 
3615cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
3616cdf0e10cSrcweir 
3617cdf0e10cSrcweir SvXMLImportContext* SdXMLCustomShapeContext::CreateChildContext(
3618cdf0e10cSrcweir 	sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName,
3619cdf0e10cSrcweir 	const uno::Reference<xml::sax::XAttributeList>& xAttrList )
3620cdf0e10cSrcweir {
3621cdf0e10cSrcweir 	SvXMLImportContext* pContext = NULL;
3622cdf0e10cSrcweir 	if ( XML_NAMESPACE_DRAW == nPrefix )
3623cdf0e10cSrcweir 	{
3624cdf0e10cSrcweir 		if ( IsXMLToken( rLocalName, XML_ENHANCED_GEOMETRY ) )
3625cdf0e10cSrcweir 		{
3626cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xPropSet( mxShape,uno::UNO_QUERY );
3627cdf0e10cSrcweir 			if ( xPropSet.is() )
3628cdf0e10cSrcweir 				pContext = new XMLEnhancedCustomShapeContext( GetImport(), mxShape, nPrefix, rLocalName, maCustomShapeGeometry );
3629cdf0e10cSrcweir 		}
3630cdf0e10cSrcweir 	}
3631cdf0e10cSrcweir 	// delegate to parent class if no context could be created
3632cdf0e10cSrcweir 	if ( NULL == pContext )
3633cdf0e10cSrcweir 		pContext = SdXMLShapeContext::CreateChildContext( nPrefix, rLocalName,
3634cdf0e10cSrcweir 														 xAttrList);
3635cdf0e10cSrcweir 	return pContext;
3636cdf0e10cSrcweir }
3637cdf0e10cSrcweir 
3638cdf0e10cSrcweir ///////////////////////////////////////////////////////////////////////
3639cdf0e10cSrcweir 
3640cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
3641cdf0e10cSrcweir 
3642cdf0e10cSrcweir TYPEINIT1( SdXMLTableShapeContext, SdXMLShapeContext );
3643cdf0e10cSrcweir 
3644cdf0e10cSrcweir SdXMLTableShapeContext::SdXMLTableShapeContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const rtl::OUString& rLocalName, const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >& rShapes )
3645cdf0e10cSrcweir : SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, sal_False )
3646cdf0e10cSrcweir {
3647cdf0e10cSrcweir 	memset( &maTemplateStylesUsed, 0, sizeof( maTemplateStylesUsed ) );
3648cdf0e10cSrcweir }
3649cdf0e10cSrcweir 
3650cdf0e10cSrcweir SdXMLTableShapeContext::~SdXMLTableShapeContext()
3651cdf0e10cSrcweir {
3652cdf0e10cSrcweir }
3653cdf0e10cSrcweir 
3654cdf0e10cSrcweir void SdXMLTableShapeContext::StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList )
3655cdf0e10cSrcweir {
3656cdf0e10cSrcweir 	const char* pService = "com.sun.star.drawing.TableShape";
3657cdf0e10cSrcweir 
3658cdf0e10cSrcweir 	sal_Bool bIsPresShape = maPresentationClass.getLength() && GetImport().GetShapeImport()->IsPresentationShapesSupported();
3659cdf0e10cSrcweir 	if( bIsPresShape )
3660cdf0e10cSrcweir 	{
3661cdf0e10cSrcweir 		if( IsXMLToken( maPresentationClass, XML_PRESENTATION_TABLE ) )
3662cdf0e10cSrcweir 		{
3663cdf0e10cSrcweir 			pService = "com.sun.star.presentation.TableShape";
3664cdf0e10cSrcweir 		}
3665cdf0e10cSrcweir 	}
3666cdf0e10cSrcweir 
3667cdf0e10cSrcweir 	AddShape( pService );
3668cdf0e10cSrcweir 
3669cdf0e10cSrcweir 	if( mxShape.is() )
3670cdf0e10cSrcweir 	{
3671cdf0e10cSrcweir 		SetLayer();
3672cdf0e10cSrcweir 
3673cdf0e10cSrcweir 		uno::Reference< beans::XPropertySet > xProps(mxShape, uno::UNO_QUERY);
3674cdf0e10cSrcweir 
3675cdf0e10cSrcweir 		if(bIsPresShape)
3676cdf0e10cSrcweir 		{
3677cdf0e10cSrcweir 			if(xProps.is())
3678cdf0e10cSrcweir 			{
3679cdf0e10cSrcweir 				uno::Reference< beans::XPropertySetInfo > xPropsInfo( xProps->getPropertySetInfo() );
3680cdf0e10cSrcweir 				if( xPropsInfo.is() )
3681cdf0e10cSrcweir 				{
3682cdf0e10cSrcweir 					if( !mbIsPlaceholder && xPropsInfo->hasPropertyByName(OUString(RTL_CONSTASCII_USTRINGPARAM("IsEmptyPresentationObject") )))
3683cdf0e10cSrcweir 						xProps->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("IsEmptyPresentationObject") ), ::cppu::bool2any( sal_False ) );
3684cdf0e10cSrcweir 
3685cdf0e10cSrcweir 					if( mbIsUserTransformed && xPropsInfo->hasPropertyByName(OUString(RTL_CONSTASCII_USTRINGPARAM("IsPlaceholderDependent") )))
3686cdf0e10cSrcweir 						xProps->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("IsPlaceholderDependent") ), ::cppu::bool2any( sal_False ) );
3687cdf0e10cSrcweir 				}
3688cdf0e10cSrcweir 			}
3689cdf0e10cSrcweir 		}
3690cdf0e10cSrcweir 
3691cdf0e10cSrcweir 		SetStyle();
3692cdf0e10cSrcweir 
3693cdf0e10cSrcweir 		if( xProps.is() )
3694cdf0e10cSrcweir 		{
3695cdf0e10cSrcweir 			if( msTemplateStyleName.getLength() ) try
3696cdf0e10cSrcweir 			{
3697cdf0e10cSrcweir 				Reference< XStyleFamiliesSupplier > xFamiliesSupp( GetImport().GetModel(), UNO_QUERY_THROW );
3698cdf0e10cSrcweir 				Reference< XNameAccess > xFamilies( xFamiliesSupp->getStyleFamilies() );
3699cdf0e10cSrcweir 				const OUString sFamilyName( RTL_CONSTASCII_USTRINGPARAM("table" ) );
3700cdf0e10cSrcweir 				Reference< XNameAccess > xTableFamily( xFamilies->getByName( sFamilyName ), UNO_QUERY_THROW );
3701cdf0e10cSrcweir 				Reference< XStyle > xTableStyle( xTableFamily->getByName( msTemplateStyleName ), UNO_QUERY_THROW );
3702cdf0e10cSrcweir 				xProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TableTemplate" ) ), Any( xTableStyle ) );
3703cdf0e10cSrcweir 			}
3704cdf0e10cSrcweir 			catch( Exception& )
3705cdf0e10cSrcweir 			{
3706cdf0e10cSrcweir 				DBG_ERROR("SdXMLTableShapeContext::StartElement(), exception caught!");
3707cdf0e10cSrcweir 			}
3708cdf0e10cSrcweir 
3709cdf0e10cSrcweir 			const XMLPropertyMapEntry* pEntry = &aXMLTableShapeAttributes[0];
3710cdf0e10cSrcweir 			for( int i = 0; pEntry->msApiName && (i < 6); i++, pEntry++ )
3711cdf0e10cSrcweir 			{
3712cdf0e10cSrcweir 			    try
3713cdf0e10cSrcweir 			    {
3714cdf0e10cSrcweir 				    const OUString sAPIPropertyName( OUString(pEntry->msApiName, pEntry->nApiNameLength, RTL_TEXTENCODING_ASCII_US ) );
3715cdf0e10cSrcweir 				    xProps->setPropertyValue( sAPIPropertyName, Any( maTemplateStylesUsed[i] ) );
3716cdf0e10cSrcweir 			    }
3717cdf0e10cSrcweir 			    catch( Exception& )
3718cdf0e10cSrcweir 			    {
3719cdf0e10cSrcweir 				    DBG_ERROR("SdXMLTableShapeContext::StartElement(), exception caught!");
3720cdf0e10cSrcweir 			    }
3721cdf0e10cSrcweir             }
3722cdf0e10cSrcweir 		}
3723cdf0e10cSrcweir 
3724cdf0e10cSrcweir 		GetImport().GetShapeImport()->finishShape( mxShape, mxAttrList, mxShapes );
3725cdf0e10cSrcweir 
3726cdf0e10cSrcweir 		const rtl::Reference< XMLTableImport >& xTableImport( GetImport().GetShapeImport()->GetShapeTableImport() );
3727cdf0e10cSrcweir 		if( xTableImport.is() && xProps.is() )
3728cdf0e10cSrcweir 		{
3729cdf0e10cSrcweir 			uno::Reference< table::XColumnRowRange > xColumnRowRange(
3730cdf0e10cSrcweir 				xProps->getPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("Model") ) ), uno::UNO_QUERY );
3731cdf0e10cSrcweir 
3732cdf0e10cSrcweir 			if( xColumnRowRange.is() )
3733cdf0e10cSrcweir 				mxTableImportContext = xTableImport->CreateTableContext( GetPrefix(), GetLocalName(), xColumnRowRange );
3734cdf0e10cSrcweir 
3735cdf0e10cSrcweir 			if( mxTableImportContext.Is() )
3736cdf0e10cSrcweir 				mxTableImportContext->StartElement( xAttrList );
3737cdf0e10cSrcweir 		}
3738cdf0e10cSrcweir 	}
3739cdf0e10cSrcweir }
3740cdf0e10cSrcweir 
3741cdf0e10cSrcweir void SdXMLTableShapeContext::EndElement()
3742cdf0e10cSrcweir {
3743cdf0e10cSrcweir 	if( mxTableImportContext.Is() )
3744cdf0e10cSrcweir 		mxTableImportContext->EndElement();
3745cdf0e10cSrcweir 
3746cdf0e10cSrcweir 	SdXMLShapeContext::EndElement();
3747cdf0e10cSrcweir 
3748cdf0e10cSrcweir 	if( mxShape.is() )
3749cdf0e10cSrcweir 	{
3750cdf0e10cSrcweir 		// set pos, size, shear and rotate
3751cdf0e10cSrcweir 		SetTransformation();
3752cdf0e10cSrcweir 	}
3753cdf0e10cSrcweir }
3754cdf0e10cSrcweir 
3755cdf0e10cSrcweir // this is called from the parent group for each unparsed attribute in the attribute list
3756cdf0e10cSrcweir void SdXMLTableShapeContext::processAttribute( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::rtl::OUString& rValue )
3757cdf0e10cSrcweir {
3758cdf0e10cSrcweir 	if( nPrefix == XML_NAMESPACE_TABLE )
3759cdf0e10cSrcweir 	{
3760cdf0e10cSrcweir 		if( IsXMLToken( rLocalName, XML_TEMPLATE_NAME ) )
3761cdf0e10cSrcweir 		{
3762cdf0e10cSrcweir 			msTemplateStyleName = rValue;
3763cdf0e10cSrcweir 		}
3764cdf0e10cSrcweir 		else
3765cdf0e10cSrcweir 		{
3766cdf0e10cSrcweir 			int i = 0;
3767cdf0e10cSrcweir 			const XMLPropertyMapEntry* pEntry = &aXMLTableShapeAttributes[0];
3768cdf0e10cSrcweir 			while( pEntry->msApiName && (i < 6) )
3769cdf0e10cSrcweir 			{
3770cdf0e10cSrcweir 				if( IsXMLToken( rLocalName, pEntry->meXMLName ) )
3771cdf0e10cSrcweir 				{
3772cdf0e10cSrcweir 					if( IsXMLToken( rValue, XML_TRUE ) )
3773cdf0e10cSrcweir 						maTemplateStylesUsed[i] = sal_True;
3774cdf0e10cSrcweir 					break;
3775cdf0e10cSrcweir 				}
3776cdf0e10cSrcweir 				pEntry++;
3777cdf0e10cSrcweir 				i++;
3778cdf0e10cSrcweir 			}
3779cdf0e10cSrcweir 		}
3780cdf0e10cSrcweir 	}
3781cdf0e10cSrcweir 	SdXMLShapeContext::processAttribute( nPrefix, rLocalName, rValue );
3782cdf0e10cSrcweir }
3783cdf0e10cSrcweir 
3784cdf0e10cSrcweir SvXMLImportContext* SdXMLTableShapeContext::CreateChildContext( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList>& xAttrList )
3785cdf0e10cSrcweir {
3786cdf0e10cSrcweir 	if( mxTableImportContext.Is() && (nPrefix == XML_NAMESPACE_TABLE) )
3787cdf0e10cSrcweir 		return mxTableImportContext->CreateChildContext(nPrefix, rLocalName, xAttrList);
3788cdf0e10cSrcweir 	else
3789cdf0e10cSrcweir 		return SdXMLShapeContext::CreateChildContext(nPrefix, rLocalName, xAttrList);
3790cdf0e10cSrcweir }
3791cdf0e10cSrcweir 
3792