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