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