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
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_xmloff.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski #include <memory>
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielski #include "unointerfacetouniqueidentifiermapper.hxx"
30*b1cdbd2cSJim Jagielski #include <com/sun/star/presentation/ClickAction.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/ServiceNotRegisteredException.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XChild.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XText.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/chart/XChartDocument.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XControlShape.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/style/XStyle.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XGluePointsSupplier.hpp>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XIdentifierAccess.hpp>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/GluePoint2.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/Alignment.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/EscapeDirection.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/table/XColumnRowRange.hpp>
43*b1cdbd2cSJim Jagielski #include <xmloff/xmluconv.hxx>
44*b1cdbd2cSJim Jagielski #include "PropertySetMerger.hxx"
45*b1cdbd2cSJim Jagielski
46*b1cdbd2cSJim Jagielski #include <xmloff/shapeexport.hxx>
47*b1cdbd2cSJim Jagielski #include "sdpropls.hxx"
48*b1cdbd2cSJim Jagielski #include "sdxmlexp_impl.hxx"
49*b1cdbd2cSJim Jagielski #include <xmloff/families.hxx>
50*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
51*b1cdbd2cSJim Jagielski #include <xmloff/contextid.hxx>
52*b1cdbd2cSJim Jagielski #include <xmloff/xmltoken.hxx>
53*b1cdbd2cSJim Jagielski #include <tools/string.hxx>
54*b1cdbd2cSJim Jagielski #include <sot/clsids.hxx>
55*b1cdbd2cSJim Jagielski #include <tools/globname.hxx>
56*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertyState.hpp>
57*b1cdbd2cSJim Jagielski
58*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
59*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
60*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XCustomShapeEngine.hpp>
61*b1cdbd2cSJim Jagielski
62*b1cdbd2cSJim Jagielski #include "xmloff/xmlnmspe.hxx"
63*b1cdbd2cSJim Jagielski
64*b1cdbd2cSJim Jagielski using ::rtl::OUString;
65*b1cdbd2cSJim Jagielski using ::rtl::OUStringBuffer;
66*b1cdbd2cSJim Jagielski
67*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
68*b1cdbd2cSJim Jagielski using namespace ::xmloff::token;
69*b1cdbd2cSJim Jagielski
70*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////////////
71*b1cdbd2cSJim Jagielski
XMLShapeExport(SvXMLExport & rExp,SvXMLExportPropertyMapper * pExtMapper)72*b1cdbd2cSJim Jagielski XMLShapeExport::XMLShapeExport(SvXMLExport& rExp,
73*b1cdbd2cSJim Jagielski SvXMLExportPropertyMapper *pExtMapper )
74*b1cdbd2cSJim Jagielski : mrExport( rExp ),
75*b1cdbd2cSJim Jagielski mnNextUniqueShapeId(1),
76*b1cdbd2cSJim Jagielski maShapesInfos(),
77*b1cdbd2cSJim Jagielski maCurrentShapesIter(maShapesInfos.end()),
78*b1cdbd2cSJim Jagielski mbExportLayer( sal_False ),
79*b1cdbd2cSJim Jagielski // #88546# init to sal_False
80*b1cdbd2cSJim Jagielski mbHandleProgressBar( sal_False ),
81*b1cdbd2cSJim Jagielski msZIndex( RTL_CONSTASCII_USTRINGPARAM("ZOrder") ),
82*b1cdbd2cSJim Jagielski msPrintable( RTL_CONSTASCII_USTRINGPARAM("Printable") ),
83*b1cdbd2cSJim Jagielski msVisible( RTL_CONSTASCII_USTRINGPARAM("Visible") ),
84*b1cdbd2cSJim Jagielski msEmptyPres( RTL_CONSTASCII_USTRINGPARAM("IsEmptyPresentationObject") ),
85*b1cdbd2cSJim Jagielski msModel( RTL_CONSTASCII_USTRINGPARAM("Model") ),
86*b1cdbd2cSJim Jagielski msStartShape( RTL_CONSTASCII_USTRINGPARAM("StartShape") ),
87*b1cdbd2cSJim Jagielski msEndShape( RTL_CONSTASCII_USTRINGPARAM("EndShape") ),
88*b1cdbd2cSJim Jagielski msOnClick( RTL_CONSTASCII_USTRINGPARAM("OnClick") ),
89*b1cdbd2cSJim Jagielski #ifdef ISSUE66550_HLINK_FOR_SHAPES
90*b1cdbd2cSJim Jagielski msOnAction( RTL_CONSTASCII_USTRINGPARAM("OnAction") ),
91*b1cdbd2cSJim Jagielski msAction( RTL_CONSTASCII_USTRINGPARAM("Action") ),
92*b1cdbd2cSJim Jagielski msURL( RTL_CONSTASCII_USTRINGPARAM("URL") ),
93*b1cdbd2cSJim Jagielski #endif
94*b1cdbd2cSJim Jagielski msEventType( RTL_CONSTASCII_USTRINGPARAM("EventType") ),
95*b1cdbd2cSJim Jagielski msPresentation( RTL_CONSTASCII_USTRINGPARAM("Presentation") ),
96*b1cdbd2cSJim Jagielski msMacroName( RTL_CONSTASCII_USTRINGPARAM("MacroName") ),
97*b1cdbd2cSJim Jagielski msScript( RTL_CONSTASCII_USTRINGPARAM("Script") ),
98*b1cdbd2cSJim Jagielski msLibrary( RTL_CONSTASCII_USTRINGPARAM("Library") ),
99*b1cdbd2cSJim Jagielski msClickAction( RTL_CONSTASCII_USTRINGPARAM("ClickAction") ),
100*b1cdbd2cSJim Jagielski msBookmark( RTL_CONSTASCII_USTRINGPARAM("Bookmark") ),
101*b1cdbd2cSJim Jagielski msEffect( RTL_CONSTASCII_USTRINGPARAM("Effect") ),
102*b1cdbd2cSJim Jagielski msPlayFull( RTL_CONSTASCII_USTRINGPARAM("PlayFull") ),
103*b1cdbd2cSJim Jagielski msVerb( RTL_CONSTASCII_USTRINGPARAM("Verb") ),
104*b1cdbd2cSJim Jagielski msSoundURL( RTL_CONSTASCII_USTRINGPARAM("SoundURL") ),
105*b1cdbd2cSJim Jagielski msSpeed( RTL_CONSTASCII_USTRINGPARAM("Speed") ),
106*b1cdbd2cSJim Jagielski msStarBasic( RTL_CONSTASCII_USTRINGPARAM("StarBasic") )
107*b1cdbd2cSJim Jagielski {
108*b1cdbd2cSJim Jagielski // construct PropertyHandlerFactory
109*b1cdbd2cSJim Jagielski mxSdPropHdlFactory = new XMLSdPropHdlFactory( mrExport.GetModel(), rExp );
110*b1cdbd2cSJim Jagielski // construct PropertySetMapper
111*b1cdbd2cSJim Jagielski mxPropertySetMapper = CreateShapePropMapper( mrExport );
112*b1cdbd2cSJim Jagielski if( pExtMapper )
113*b1cdbd2cSJim Jagielski {
114*b1cdbd2cSJim Jagielski UniReference < SvXMLExportPropertyMapper > xExtMapper( pExtMapper );
115*b1cdbd2cSJim Jagielski mxPropertySetMapper->ChainExportMapper( xExtMapper );
116*b1cdbd2cSJim Jagielski }
117*b1cdbd2cSJim Jagielski
118*b1cdbd2cSJim Jagielski /*
119*b1cdbd2cSJim Jagielski // chain text attributes
120*b1cdbd2cSJim Jagielski xPropertySetMapper->ChainExportMapper(XMLTextParagraphExport::CreateParaExtPropMapper(rExp));
121*b1cdbd2cSJim Jagielski */
122*b1cdbd2cSJim Jagielski
123*b1cdbd2cSJim Jagielski mrExport.GetAutoStylePool()->AddFamily(
124*b1cdbd2cSJim Jagielski XML_STYLE_FAMILY_SD_GRAPHICS_ID,
125*b1cdbd2cSJim Jagielski OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_GRAPHICS_NAME)),
126*b1cdbd2cSJim Jagielski GetPropertySetMapper(),
127*b1cdbd2cSJim Jagielski OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_GRAPHICS_PREFIX)));
128*b1cdbd2cSJim Jagielski mrExport.GetAutoStylePool()->AddFamily(
129*b1cdbd2cSJim Jagielski XML_STYLE_FAMILY_SD_PRESENTATION_ID,
130*b1cdbd2cSJim Jagielski OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_PRESENTATION_NAME)),
131*b1cdbd2cSJim Jagielski GetPropertySetMapper(),
132*b1cdbd2cSJim Jagielski OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_PRESENTATION_PREFIX)));
133*b1cdbd2cSJim Jagielski
134*b1cdbd2cSJim Jagielski maCurrentInfo = maShapeInfos.end();
135*b1cdbd2cSJim Jagielski
136*b1cdbd2cSJim Jagielski // create table export helper and let him add his families in time
137*b1cdbd2cSJim Jagielski GetShapeTableExport();
138*b1cdbd2cSJim Jagielski }
139*b1cdbd2cSJim Jagielski
140*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////
141*b1cdbd2cSJim Jagielski
~XMLShapeExport()142*b1cdbd2cSJim Jagielski XMLShapeExport::~XMLShapeExport()
143*b1cdbd2cSJim Jagielski {
144*b1cdbd2cSJim Jagielski }
145*b1cdbd2cSJim Jagielski
146*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////
147*b1cdbd2cSJim Jagielski
148*b1cdbd2cSJim Jagielski // sj: replacing CustomShapes with standard objects that are also supported in OpenOffice.org format
checkForCustomShapeReplacement(const uno::Reference<drawing::XShape> & xShape)149*b1cdbd2cSJim Jagielski uno::Reference< drawing::XShape > XMLShapeExport::checkForCustomShapeReplacement( const uno::Reference< drawing::XShape >& xShape )
150*b1cdbd2cSJim Jagielski {
151*b1cdbd2cSJim Jagielski uno::Reference< drawing::XShape > xCustomShapeReplacement;
152*b1cdbd2cSJim Jagielski
153*b1cdbd2cSJim Jagielski if( ( GetExport().getExportFlags() & EXPORT_OASIS ) == 0 )
154*b1cdbd2cSJim Jagielski {
155*b1cdbd2cSJim Jagielski String aType( (OUString)xShape->getShapeType() );
156*b1cdbd2cSJim Jagielski if( aType.EqualsAscii( (const sal_Char*)"com.sun.star.drawing.CustomShape" ) )
157*b1cdbd2cSJim Jagielski {
158*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > xSet( xShape, uno::UNO_QUERY );
159*b1cdbd2cSJim Jagielski if( xSet.is() )
160*b1cdbd2cSJim Jagielski {
161*b1cdbd2cSJim Jagielski rtl::OUString aEngine;
162*b1cdbd2cSJim Jagielski xSet->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "CustomShapeEngine" ) ) ) >>= aEngine;
163*b1cdbd2cSJim Jagielski if ( !aEngine.getLength() )
164*b1cdbd2cSJim Jagielski aEngine = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.EnhancedCustomShapeEngine" ) );
165*b1cdbd2cSJim Jagielski
166*b1cdbd2cSJim Jagielski uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
167*b1cdbd2cSJim Jagielski /*
168*b1cdbd2cSJim Jagielski uno::Reference< drawing::XShape > aXShape = GetXShapeForSdrObject( (SdrObjCustomShape*)pCustomShape );
169*b1cdbd2cSJim Jagielski if ( !aXShape.is() )
170*b1cdbd2cSJim Jagielski aXShape = new SvxCustomShape( (SdrObjCustomShape*)pCustomShape );
171*b1cdbd2cSJim Jagielski */
172*b1cdbd2cSJim Jagielski if ( aEngine.getLength() && xFactory.is() )
173*b1cdbd2cSJim Jagielski {
174*b1cdbd2cSJim Jagielski uno::Sequence< uno::Any > aArgument( 1 );
175*b1cdbd2cSJim Jagielski uno::Sequence< beans::PropertyValue > aPropValues( 2 );
176*b1cdbd2cSJim Jagielski aPropValues[ 0 ].Name = rtl::OUString::createFromAscii( "CustomShape" );
177*b1cdbd2cSJim Jagielski aPropValues[ 0 ].Value <<= xShape;
178*b1cdbd2cSJim Jagielski sal_Bool bForceGroupWithText = sal_True;
179*b1cdbd2cSJim Jagielski aPropValues[ 1 ].Name = rtl::OUString::createFromAscii( "ForceGroupWithText" );
180*b1cdbd2cSJim Jagielski aPropValues[ 1 ].Value <<= bForceGroupWithText;
181*b1cdbd2cSJim Jagielski aArgument[ 0 ] <<= aPropValues;
182*b1cdbd2cSJim Jagielski uno::Reference< uno::XInterface > xInterface( xFactory->createInstanceWithArguments( aEngine, aArgument ) );
183*b1cdbd2cSJim Jagielski if ( xInterface.is() )
184*b1cdbd2cSJim Jagielski {
185*b1cdbd2cSJim Jagielski uno::Reference< drawing::XCustomShapeEngine > xCustomShapeEngine(
186*b1cdbd2cSJim Jagielski uno::Reference< drawing::XCustomShapeEngine >( xInterface, uno::UNO_QUERY ) );
187*b1cdbd2cSJim Jagielski if ( xCustomShapeEngine.is() )
188*b1cdbd2cSJim Jagielski xCustomShapeReplacement = xCustomShapeEngine->render();
189*b1cdbd2cSJim Jagielski }
190*b1cdbd2cSJim Jagielski }
191*b1cdbd2cSJim Jagielski }
192*b1cdbd2cSJim Jagielski }
193*b1cdbd2cSJim Jagielski }
194*b1cdbd2cSJim Jagielski return xCustomShapeReplacement;
195*b1cdbd2cSJim Jagielski }
196*b1cdbd2cSJim Jagielski
197*b1cdbd2cSJim Jagielski // This method collects all automatic styles for the given XShape
collectShapeAutoStyles(const uno::Reference<drawing::XShape> & xShape)198*b1cdbd2cSJim Jagielski void XMLShapeExport::collectShapeAutoStyles(const uno::Reference< drawing::XShape >& xShape )
199*b1cdbd2cSJim Jagielski {
200*b1cdbd2cSJim Jagielski if( maCurrentShapesIter == maShapesInfos.end() )
201*b1cdbd2cSJim Jagielski {
202*b1cdbd2cSJim Jagielski DBG_ERROR( "XMLShapeExport::collectShapeAutoStyles(): no call to seekShapes()!" );
203*b1cdbd2cSJim Jagielski return;
204*b1cdbd2cSJim Jagielski }
205*b1cdbd2cSJim Jagielski sal_Int32 nZIndex = 0;
206*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > xSet( xShape, uno::UNO_QUERY );
207*b1cdbd2cSJim Jagielski if( xSet.is() )
208*b1cdbd2cSJim Jagielski xSet->getPropertyValue(msZIndex) >>= nZIndex;
209*b1cdbd2cSJim Jagielski
210*b1cdbd2cSJim Jagielski ImplXMLShapeExportInfoVector& aShapeInfoVector = (*maCurrentShapesIter).second;
211*b1cdbd2cSJim Jagielski
212*b1cdbd2cSJim Jagielski if( (sal_Int32)aShapeInfoVector.size() <= nZIndex )
213*b1cdbd2cSJim Jagielski {
214*b1cdbd2cSJim Jagielski DBG_ERROR( "XMLShapeExport::collectShapeAutoStyles(): no shape info allocated for a given shape" );
215*b1cdbd2cSJim Jagielski return;
216*b1cdbd2cSJim Jagielski }
217*b1cdbd2cSJim Jagielski
218*b1cdbd2cSJim Jagielski ImplXMLShapeExportInfo& aShapeInfo = aShapeInfoVector[nZIndex];
219*b1cdbd2cSJim Jagielski
220*b1cdbd2cSJim Jagielski uno::Reference< drawing::XShape > xCustomShapeReplacement = checkForCustomShapeReplacement( xShape );
221*b1cdbd2cSJim Jagielski if ( xCustomShapeReplacement.is() )
222*b1cdbd2cSJim Jagielski aShapeInfo.xCustomShapeReplacement = xCustomShapeReplacement;
223*b1cdbd2cSJim Jagielski
224*b1cdbd2cSJim Jagielski // -----------------------------
225*b1cdbd2cSJim Jagielski // first compute the shapes type
226*b1cdbd2cSJim Jagielski // -----------------------------
227*b1cdbd2cSJim Jagielski ImpCalcShapeType(xShape, aShapeInfo.meShapeType);
228*b1cdbd2cSJim Jagielski
229*b1cdbd2cSJim Jagielski // #i118485# enabled XmlShapeTypeDrawChartShape and XmlShapeTypeDrawOLE2Shape
230*b1cdbd2cSJim Jagielski // to have text
231*b1cdbd2cSJim Jagielski const bool bObjSupportsText =
232*b1cdbd2cSJim Jagielski // aShapeInfo.meShapeType != XmlShapeTypeDrawControlShape &&
233*b1cdbd2cSJim Jagielski aShapeInfo.meShapeType != XmlShapeTypePresChartShape &&
234*b1cdbd2cSJim Jagielski aShapeInfo.meShapeType != XmlShapeTypePresOLE2Shape &&
235*b1cdbd2cSJim Jagielski aShapeInfo.meShapeType != XmlShapeTypeDrawSheetShape &&
236*b1cdbd2cSJim Jagielski aShapeInfo.meShapeType != XmlShapeTypePresSheetShape &&
237*b1cdbd2cSJim Jagielski aShapeInfo.meShapeType != XmlShapeTypeDraw3DSceneObject &&
238*b1cdbd2cSJim Jagielski aShapeInfo.meShapeType != XmlShapeTypeDraw3DCubeObject &&
239*b1cdbd2cSJim Jagielski aShapeInfo.meShapeType != XmlShapeTypeDraw3DSphereObject &&
240*b1cdbd2cSJim Jagielski aShapeInfo.meShapeType != XmlShapeTypeDraw3DLatheObject &&
241*b1cdbd2cSJim Jagielski aShapeInfo.meShapeType != XmlShapeTypeDraw3DExtrudeObject &&
242*b1cdbd2cSJim Jagielski aShapeInfo.meShapeType != XmlShapeTypeDrawPageShape &&
243*b1cdbd2cSJim Jagielski aShapeInfo.meShapeType != XmlShapeTypePresPageShape &&
244*b1cdbd2cSJim Jagielski aShapeInfo.meShapeType != XmlShapeTypeDrawGroupShape;
245*b1cdbd2cSJim Jagielski
246*b1cdbd2cSJim Jagielski const bool bObjSupportsStyle =
247*b1cdbd2cSJim Jagielski aShapeInfo.meShapeType != XmlShapeTypeDrawGroupShape;
248*b1cdbd2cSJim Jagielski
249*b1cdbd2cSJim Jagielski sal_Bool bIsEmptyPresObj = sal_False;
250*b1cdbd2cSJim Jagielski
251*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > xPropSet(xShape, uno::UNO_QUERY);
252*b1cdbd2cSJim Jagielski if ( aShapeInfo.xCustomShapeReplacement.is() )
253*b1cdbd2cSJim Jagielski xPropSet.clear();
254*b1cdbd2cSJim Jagielski
255*b1cdbd2cSJim Jagielski // ----------------
256*b1cdbd2cSJim Jagielski // prep text styles
257*b1cdbd2cSJim Jagielski // ----------------
258*b1cdbd2cSJim Jagielski if( xPropSet.is() && bObjSupportsText )
259*b1cdbd2cSJim Jagielski {
260*b1cdbd2cSJim Jagielski uno::Reference< text::XText > xText(xShape, uno::UNO_QUERY);
261*b1cdbd2cSJim Jagielski if(xText.is() && xText->getString().getLength())
262*b1cdbd2cSJim Jagielski {
263*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySetInfo > xPropSetInfo( xPropSet->getPropertySetInfo() );
264*b1cdbd2cSJim Jagielski
265*b1cdbd2cSJim Jagielski if( xPropSetInfo.is() && xPropSetInfo->hasPropertyByName(msEmptyPres) )
266*b1cdbd2cSJim Jagielski {
267*b1cdbd2cSJim Jagielski uno::Any aAny = xPropSet->getPropertyValue(msEmptyPres);
268*b1cdbd2cSJim Jagielski aAny >>= bIsEmptyPresObj;
269*b1cdbd2cSJim Jagielski }
270*b1cdbd2cSJim Jagielski
271*b1cdbd2cSJim Jagielski if(!bIsEmptyPresObj)
272*b1cdbd2cSJim Jagielski {
273*b1cdbd2cSJim Jagielski GetExport().GetTextParagraphExport()->collectTextAutoStyles( xText );
274*b1cdbd2cSJim Jagielski }
275*b1cdbd2cSJim Jagielski }
276*b1cdbd2cSJim Jagielski }
277*b1cdbd2cSJim Jagielski
278*b1cdbd2cSJim Jagielski // ------------------------------
279*b1cdbd2cSJim Jagielski // compute the shape parent style
280*b1cdbd2cSJim Jagielski // ------------------------------
281*b1cdbd2cSJim Jagielski if( xPropSet.is() )
282*b1cdbd2cSJim Jagielski {
283*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySetInfo > xPropertySetInfo( xPropSet->getPropertySetInfo() );
284*b1cdbd2cSJim Jagielski
285*b1cdbd2cSJim Jagielski OUString aParentName;
286*b1cdbd2cSJim Jagielski uno::Reference< style::XStyle > xStyle;
287*b1cdbd2cSJim Jagielski
288*b1cdbd2cSJim Jagielski if( bObjSupportsStyle )
289*b1cdbd2cSJim Jagielski {
290*b1cdbd2cSJim Jagielski if( xPropertySetInfo.is() && xPropertySetInfo->hasPropertyByName( OUString(RTL_CONSTASCII_USTRINGPARAM("Style"))) )
291*b1cdbd2cSJim Jagielski xPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("Style"))) >>= xStyle;
292*b1cdbd2cSJim Jagielski
293*b1cdbd2cSJim Jagielski if(xStyle.is())
294*b1cdbd2cSJim Jagielski {
295*b1cdbd2cSJim Jagielski // get family ID
296*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > xStylePropSet(xStyle, uno::UNO_QUERY);
297*b1cdbd2cSJim Jagielski DBG_ASSERT( xStylePropSet.is(), "style without a XPropertySet?" );
298*b1cdbd2cSJim Jagielski try
299*b1cdbd2cSJim Jagielski {
300*b1cdbd2cSJim Jagielski if(xStylePropSet.is())
301*b1cdbd2cSJim Jagielski {
302*b1cdbd2cSJim Jagielski OUString aFamilyName;
303*b1cdbd2cSJim Jagielski xStylePropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("Family"))) >>= aFamilyName;
304*b1cdbd2cSJim Jagielski if(aFamilyName.getLength() && !aFamilyName.equals(OUString(RTL_CONSTASCII_USTRINGPARAM("graphics"))))
305*b1cdbd2cSJim Jagielski aShapeInfo.mnFamily = XML_STYLE_FAMILY_SD_PRESENTATION_ID;
306*b1cdbd2cSJim Jagielski }
307*b1cdbd2cSJim Jagielski }
308*b1cdbd2cSJim Jagielski catch(beans::UnknownPropertyException aException)
309*b1cdbd2cSJim Jagielski {
310*b1cdbd2cSJim Jagielski // Ignored.
311*b1cdbd2cSJim Jagielski DBG_ASSERT(false,
312*b1cdbd2cSJim Jagielski "XMLShapeExport::collectShapeAutoStyles: style has no 'Family' property");
313*b1cdbd2cSJim Jagielski }
314*b1cdbd2cSJim Jagielski
315*b1cdbd2cSJim Jagielski // get parent-style name
316*b1cdbd2cSJim Jagielski if(XML_STYLE_FAMILY_SD_PRESENTATION_ID == aShapeInfo.mnFamily)
317*b1cdbd2cSJim Jagielski {
318*b1cdbd2cSJim Jagielski aParentName = msPresentationStylePrefix;
319*b1cdbd2cSJim Jagielski }
320*b1cdbd2cSJim Jagielski
321*b1cdbd2cSJim Jagielski aParentName += xStyle->getName();
322*b1cdbd2cSJim Jagielski }
323*b1cdbd2cSJim Jagielski }
324*b1cdbd2cSJim Jagielski
325*b1cdbd2cSJim Jagielski // filter propset
326*b1cdbd2cSJim Jagielski std::vector< XMLPropertyState > xPropStates;
327*b1cdbd2cSJim Jagielski
328*b1cdbd2cSJim Jagielski sal_Int32 nCount = 0;
329*b1cdbd2cSJim Jagielski if( (!bIsEmptyPresObj || (aShapeInfo.meShapeType != XmlShapeTypePresPageShape)) )
330*b1cdbd2cSJim Jagielski {
331*b1cdbd2cSJim Jagielski xPropStates = GetPropertySetMapper()->Filter( xPropSet );
332*b1cdbd2cSJim Jagielski
333*b1cdbd2cSJim Jagielski if (XmlShapeTypeDrawControlShape == aShapeInfo.meShapeType)
334*b1cdbd2cSJim Jagielski {
335*b1cdbd2cSJim Jagielski // for control shapes, we additionally need the number format style (if any)
336*b1cdbd2cSJim Jagielski uno::Reference< drawing::XControlShape > xControl(xShape, uno::UNO_QUERY);
337*b1cdbd2cSJim Jagielski DBG_ASSERT(xControl.is(), "XMLShapeExport::collectShapeAutoStyles: ShapeType control, but no XControlShape!");
338*b1cdbd2cSJim Jagielski if (xControl.is())
339*b1cdbd2cSJim Jagielski {
340*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > xControlModel(xControl->getControl(), uno::UNO_QUERY);
341*b1cdbd2cSJim Jagielski DBG_ASSERT(xControlModel.is(), "XMLShapeExport::collectShapeAutoStyles: no control model on the control shape!");
342*b1cdbd2cSJim Jagielski
343*b1cdbd2cSJim Jagielski ::rtl::OUString sNumberStyle = mrExport.GetFormExport()->getControlNumberStyle(xControlModel);
344*b1cdbd2cSJim Jagielski if (0 != sNumberStyle.getLength())
345*b1cdbd2cSJim Jagielski {
346*b1cdbd2cSJim Jagielski sal_Int32 nIndex = GetPropertySetMapper()->getPropertySetMapper()->FindEntryIndex(CTF_SD_CONTROL_SHAPE_DATA_STYLE);
347*b1cdbd2cSJim Jagielski // TODO : this retrieval of the index could be moved into the ctor, holding the index
348*b1cdbd2cSJim Jagielski // as member, thus saving time.
349*b1cdbd2cSJim Jagielski DBG_ASSERT(-1 != nIndex, "XMLShapeExport::collectShapeAutoStyles: could not obtain the index for our context id!");
350*b1cdbd2cSJim Jagielski
351*b1cdbd2cSJim Jagielski XMLPropertyState aNewState(nIndex, uno::makeAny(sNumberStyle));
352*b1cdbd2cSJim Jagielski xPropStates.push_back(aNewState);
353*b1cdbd2cSJim Jagielski }
354*b1cdbd2cSJim Jagielski }
355*b1cdbd2cSJim Jagielski }
356*b1cdbd2cSJim Jagielski
357*b1cdbd2cSJim Jagielski std::vector< XMLPropertyState >::iterator aIter = xPropStates.begin();
358*b1cdbd2cSJim Jagielski std::vector< XMLPropertyState >::iterator aEnd = xPropStates.end();
359*b1cdbd2cSJim Jagielski while( aIter != aEnd )
360*b1cdbd2cSJim Jagielski {
361*b1cdbd2cSJim Jagielski if( aIter->mnIndex != -1 )
362*b1cdbd2cSJim Jagielski nCount++;
363*b1cdbd2cSJim Jagielski aIter++;
364*b1cdbd2cSJim Jagielski }
365*b1cdbd2cSJim Jagielski }
366*b1cdbd2cSJim Jagielski
367*b1cdbd2cSJim Jagielski if(nCount == 0)
368*b1cdbd2cSJim Jagielski {
369*b1cdbd2cSJim Jagielski // no hard attributes, use parent style name for export
370*b1cdbd2cSJim Jagielski aShapeInfo.msStyleName = aParentName;
371*b1cdbd2cSJim Jagielski }
372*b1cdbd2cSJim Jagielski else
373*b1cdbd2cSJim Jagielski {
374*b1cdbd2cSJim Jagielski // there are filtered properties -> hard attributes
375*b1cdbd2cSJim Jagielski // try to find this style in AutoStylePool
376*b1cdbd2cSJim Jagielski aShapeInfo.msStyleName = mrExport.GetAutoStylePool()->Find(aShapeInfo.mnFamily, aParentName, xPropStates);
377*b1cdbd2cSJim Jagielski
378*b1cdbd2cSJim Jagielski if(!aShapeInfo.msStyleName.getLength())
379*b1cdbd2cSJim Jagielski {
380*b1cdbd2cSJim Jagielski // Style did not exist, add it to AutoStalePool
381*b1cdbd2cSJim Jagielski aShapeInfo.msStyleName = mrExport.GetAutoStylePool()->Add(aShapeInfo.mnFamily, aParentName, xPropStates);
382*b1cdbd2cSJim Jagielski }
383*b1cdbd2cSJim Jagielski }
384*b1cdbd2cSJim Jagielski
385*b1cdbd2cSJim Jagielski // optionaly generate auto style for text attributes
386*b1cdbd2cSJim Jagielski if( (!bIsEmptyPresObj || (aShapeInfo.meShapeType != XmlShapeTypePresPageShape)) && bObjSupportsText )
387*b1cdbd2cSJim Jagielski {
388*b1cdbd2cSJim Jagielski xPropStates = GetExport().GetTextParagraphExport()->GetParagraphPropertyMapper()->Filter( xPropSet );
389*b1cdbd2cSJim Jagielski
390*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------
391*b1cdbd2cSJim Jagielski // yet more additionally, we need to care for the ParaAdjust property
392*b1cdbd2cSJim Jagielski if ( XmlShapeTypeDrawControlShape == aShapeInfo.meShapeType )
393*b1cdbd2cSJim Jagielski {
394*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySetInfo > xPropSetInfo( xPropSet->getPropertySetInfo() );
395*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertyState > xPropState( xPropSet, uno::UNO_QUERY );
396*b1cdbd2cSJim Jagielski if ( xPropSetInfo.is() && xPropState.is() )
397*b1cdbd2cSJim Jagielski {
398*b1cdbd2cSJim Jagielski // this is because:
399*b1cdbd2cSJim Jagielski // * if controls shapes have a ParaAdjust property, then this is the Align property of the control model
400*b1cdbd2cSJim Jagielski // * control models are allowed to have an Align of "void"
401*b1cdbd2cSJim Jagielski // * the Default for control model's Align is TextAlign_LEFT
402*b1cdbd2cSJim Jagielski // * defaults for style properties are not written, but we need to write the "left",
403*b1cdbd2cSJim Jagielski // because we need to distiguish this "left" from the case where not align attribute
404*b1cdbd2cSJim Jagielski // is present which means "void"
405*b1cdbd2cSJim Jagielski // 102407 - 2002-11-01 - fs@openoffice.org
406*b1cdbd2cSJim Jagielski static const ::rtl::OUString s_sParaAdjustPropertyName( RTL_CONSTASCII_USTRINGPARAM( "ParaAdjust" ) );
407*b1cdbd2cSJim Jagielski if ( xPropSetInfo->hasPropertyByName( s_sParaAdjustPropertyName )
408*b1cdbd2cSJim Jagielski && ( beans::PropertyState_DEFAULT_VALUE == xPropState->getPropertyState( s_sParaAdjustPropertyName ) )
409*b1cdbd2cSJim Jagielski )
410*b1cdbd2cSJim Jagielski {
411*b1cdbd2cSJim Jagielski sal_Int32 nIndex = GetExport().GetTextParagraphExport()->GetParagraphPropertyMapper()->getPropertySetMapper()->FindEntryIndex( CTF_SD_SHAPE_PARA_ADJUST );
412*b1cdbd2cSJim Jagielski // TODO : this retrieval of the index should be moved into the ctor, holding the index
413*b1cdbd2cSJim Jagielski // as member, thus saving time.
414*b1cdbd2cSJim Jagielski DBG_ASSERT(-1 != nIndex, "XMLShapeExport::collectShapeAutoStyles: could not obtain the index for the ParaAdjust context id!");
415*b1cdbd2cSJim Jagielski
416*b1cdbd2cSJim Jagielski uno::Any aParaAdjustValue = xPropSet->getPropertyValue( s_sParaAdjustPropertyName );
417*b1cdbd2cSJim Jagielski XMLPropertyState aAlignDefaultState( nIndex, aParaAdjustValue );
418*b1cdbd2cSJim Jagielski
419*b1cdbd2cSJim Jagielski xPropStates.push_back( aAlignDefaultState );
420*b1cdbd2cSJim Jagielski }
421*b1cdbd2cSJim Jagielski }
422*b1cdbd2cSJim Jagielski }
423*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------
424*b1cdbd2cSJim Jagielski
425*b1cdbd2cSJim Jagielski nCount = 0;
426*b1cdbd2cSJim Jagielski std::vector< XMLPropertyState >::iterator aIter = xPropStates.begin();
427*b1cdbd2cSJim Jagielski std::vector< XMLPropertyState >::iterator aEnd = xPropStates.end();
428*b1cdbd2cSJim Jagielski while( aIter != aEnd )
429*b1cdbd2cSJim Jagielski {
430*b1cdbd2cSJim Jagielski if( aIter->mnIndex != -1 )
431*b1cdbd2cSJim Jagielski nCount++;
432*b1cdbd2cSJim Jagielski aIter++;
433*b1cdbd2cSJim Jagielski }
434*b1cdbd2cSJim Jagielski
435*b1cdbd2cSJim Jagielski if( nCount )
436*b1cdbd2cSJim Jagielski {
437*b1cdbd2cSJim Jagielski const OUString aEmpty;
438*b1cdbd2cSJim Jagielski aShapeInfo.msTextStyleName = mrExport.GetAutoStylePool()->Find( XML_STYLE_FAMILY_TEXT_PARAGRAPH, aEmpty, xPropStates );
439*b1cdbd2cSJim Jagielski if(!aShapeInfo.msTextStyleName.getLength())
440*b1cdbd2cSJim Jagielski {
441*b1cdbd2cSJim Jagielski // Style did not exist, add it to AutoStalePool
442*b1cdbd2cSJim Jagielski aShapeInfo.msTextStyleName = mrExport.GetAutoStylePool()->Add(XML_STYLE_FAMILY_TEXT_PARAGRAPH, aEmpty, xPropStates);
443*b1cdbd2cSJim Jagielski }
444*b1cdbd2cSJim Jagielski }
445*b1cdbd2cSJim Jagielski }
446*b1cdbd2cSJim Jagielski }
447*b1cdbd2cSJim Jagielski
448*b1cdbd2cSJim Jagielski // ----------------------------------------
449*b1cdbd2cSJim Jagielski // prepare animation informations if needed
450*b1cdbd2cSJim Jagielski // ----------------------------------------
451*b1cdbd2cSJim Jagielski if( mxAnimationsExporter.is() )
452*b1cdbd2cSJim Jagielski mxAnimationsExporter->prepare( xShape, mrExport );
453*b1cdbd2cSJim Jagielski
454*b1cdbd2cSJim Jagielski // check for special shapes
455*b1cdbd2cSJim Jagielski
456*b1cdbd2cSJim Jagielski switch( aShapeInfo.meShapeType )
457*b1cdbd2cSJim Jagielski {
458*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawConnectorShape:
459*b1cdbd2cSJim Jagielski {
460*b1cdbd2cSJim Jagielski uno::Reference< uno::XInterface > xConnection;
461*b1cdbd2cSJim Jagielski
462*b1cdbd2cSJim Jagielski // create shape ids for export later
463*b1cdbd2cSJim Jagielski xPropSet->getPropertyValue( msStartShape ) >>= xConnection;
464*b1cdbd2cSJim Jagielski if( xConnection.is() )
465*b1cdbd2cSJim Jagielski mrExport.getInterfaceToIdentifierMapper().registerReference( xConnection );
466*b1cdbd2cSJim Jagielski
467*b1cdbd2cSJim Jagielski xPropSet->getPropertyValue( msEndShape ) >>= xConnection;
468*b1cdbd2cSJim Jagielski if( xConnection.is() )
469*b1cdbd2cSJim Jagielski mrExport.getInterfaceToIdentifierMapper().registerReference( xConnection );
470*b1cdbd2cSJim Jagielski break;
471*b1cdbd2cSJim Jagielski }
472*b1cdbd2cSJim Jagielski case XmlShapeTypePresTableShape:
473*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawTableShape:
474*b1cdbd2cSJim Jagielski {
475*b1cdbd2cSJim Jagielski try
476*b1cdbd2cSJim Jagielski {
477*b1cdbd2cSJim Jagielski uno::Reference< table::XColumnRowRange > xRange( xSet->getPropertyValue( msModel ), uno::UNO_QUERY_THROW );
478*b1cdbd2cSJim Jagielski GetShapeTableExport()->collectTableAutoStyles( xRange );
479*b1cdbd2cSJim Jagielski }
480*b1cdbd2cSJim Jagielski catch( uno::Exception& )
481*b1cdbd2cSJim Jagielski {
482*b1cdbd2cSJim Jagielski DBG_ERROR( "XMLShapeExport::collectShapeAutoStyles(): exception caught while collection auto styles for a table!" );
483*b1cdbd2cSJim Jagielski }
484*b1cdbd2cSJim Jagielski break;
485*b1cdbd2cSJim Jagielski }
486*b1cdbd2cSJim Jagielski default:
487*b1cdbd2cSJim Jagielski break;
488*b1cdbd2cSJim Jagielski }
489*b1cdbd2cSJim Jagielski
490*b1cdbd2cSJim Jagielski maShapeInfos.push_back( aShapeInfo );
491*b1cdbd2cSJim Jagielski maCurrentInfo = maShapeInfos.begin();
492*b1cdbd2cSJim Jagielski
493*b1cdbd2cSJim Jagielski // -----------------------------------------------------
494*b1cdbd2cSJim Jagielski // check for shape collections (group shape or 3d scene)
495*b1cdbd2cSJim Jagielski // and collect contained shapes style infos
496*b1cdbd2cSJim Jagielski // -----------------------------------------------------
497*b1cdbd2cSJim Jagielski const uno::Reference< drawing::XShape >& xCollection = aShapeInfo.xCustomShapeReplacement.is()
498*b1cdbd2cSJim Jagielski ? aShapeInfo.xCustomShapeReplacement : xShape;
499*b1cdbd2cSJim Jagielski {
500*b1cdbd2cSJim Jagielski uno::Reference< drawing::XShapes > xShapes( xCollection, uno::UNO_QUERY );
501*b1cdbd2cSJim Jagielski if( xShapes.is() )
502*b1cdbd2cSJim Jagielski {
503*b1cdbd2cSJim Jagielski collectShapesAutoStyles( xShapes );
504*b1cdbd2cSJim Jagielski }
505*b1cdbd2cSJim Jagielski }
506*b1cdbd2cSJim Jagielski }
507*b1cdbd2cSJim Jagielski
508*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////
509*b1cdbd2cSJim Jagielski
510*b1cdbd2cSJim Jagielski // --> OD 2008-05-08 #refactorlists#
511*b1cdbd2cSJim Jagielski namespace
512*b1cdbd2cSJim Jagielski {
513*b1cdbd2cSJim Jagielski class NewTextListsHelper
514*b1cdbd2cSJim Jagielski {
515*b1cdbd2cSJim Jagielski public:
NewTextListsHelper(SvXMLExport & rExp)516*b1cdbd2cSJim Jagielski NewTextListsHelper( SvXMLExport& rExp )
517*b1cdbd2cSJim Jagielski : mrExport( rExp )
518*b1cdbd2cSJim Jagielski {
519*b1cdbd2cSJim Jagielski mrExport.GetTextParagraphExport()->PushNewTextListsHelper();
520*b1cdbd2cSJim Jagielski }
521*b1cdbd2cSJim Jagielski
~NewTextListsHelper()522*b1cdbd2cSJim Jagielski ~NewTextListsHelper()
523*b1cdbd2cSJim Jagielski {
524*b1cdbd2cSJim Jagielski mrExport.GetTextParagraphExport()->PopTextListsHelper();
525*b1cdbd2cSJim Jagielski }
526*b1cdbd2cSJim Jagielski
527*b1cdbd2cSJim Jagielski private:
528*b1cdbd2cSJim Jagielski SvXMLExport& mrExport;
529*b1cdbd2cSJim Jagielski };
530*b1cdbd2cSJim Jagielski }
531*b1cdbd2cSJim Jagielski // This method exports the given XShape
exportShape(const uno::Reference<drawing::XShape> & xShape,sal_Int32 nFeatures,com::sun::star::awt::Point * pRefPoint,SvXMLAttributeList * pAttrList)532*b1cdbd2cSJim Jagielski void XMLShapeExport::exportShape(const uno::Reference< drawing::XShape >& xShape,
533*b1cdbd2cSJim Jagielski sal_Int32 nFeatures /* = SEF_DEFAULT */,
534*b1cdbd2cSJim Jagielski com::sun::star::awt::Point* pRefPoint /* = NULL */,
535*b1cdbd2cSJim Jagielski SvXMLAttributeList* pAttrList /* = NULL */ )
536*b1cdbd2cSJim Jagielski {
537*b1cdbd2cSJim Jagielski if( maCurrentShapesIter == maShapesInfos.end() )
538*b1cdbd2cSJim Jagielski {
539*b1cdbd2cSJim Jagielski DBG_ERROR( "XMLShapeExport::exportShape(): no auto styles where collected before export" );
540*b1cdbd2cSJim Jagielski return;
541*b1cdbd2cSJim Jagielski }
542*b1cdbd2cSJim Jagielski sal_Int32 nZIndex = 0;
543*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > xSet( xShape, uno::UNO_QUERY );
544*b1cdbd2cSJim Jagielski
545*b1cdbd2cSJim Jagielski
546*b1cdbd2cSJim Jagielski ::std::auto_ptr< SvXMLElementExport > mpHyperlinkElement;
547*b1cdbd2cSJim Jagielski
548*b1cdbd2cSJim Jagielski // export hyperlinks with <a><shape/></a>. Currently only in draw since draw
549*b1cdbd2cSJim Jagielski // does not support document events
550*b1cdbd2cSJim Jagielski if( xSet.is() && (GetExport().GetModelType() == SvtModuleOptions::E_DRAW) ) try
551*b1cdbd2cSJim Jagielski {
552*b1cdbd2cSJim Jagielski presentation::ClickAction eAction = presentation::ClickAction_NONE;
553*b1cdbd2cSJim Jagielski xSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("OnClick"))) >>= eAction;
554*b1cdbd2cSJim Jagielski
555*b1cdbd2cSJim Jagielski if( (eAction == presentation::ClickAction_DOCUMENT) ||
556*b1cdbd2cSJim Jagielski (eAction == presentation::ClickAction_BOOKMARK) )
557*b1cdbd2cSJim Jagielski {
558*b1cdbd2cSJim Jagielski OUString sURL;
559*b1cdbd2cSJim Jagielski xSet->getPropertyValue(msBookmark) >>= sURL;
560*b1cdbd2cSJim Jagielski
561*b1cdbd2cSJim Jagielski if( sURL.getLength() )
562*b1cdbd2cSJim Jagielski {
563*b1cdbd2cSJim Jagielski mrExport.AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, sURL );
564*b1cdbd2cSJim Jagielski mrExport.AddAttribute( XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE );
565*b1cdbd2cSJim Jagielski mrExport.AddAttribute( XML_NAMESPACE_XLINK, XML_SHOW, XML_EMBED );
566*b1cdbd2cSJim Jagielski mpHyperlinkElement.reset( new SvXMLElementExport(mrExport, XML_NAMESPACE_DRAW, XML_A, sal_True, sal_True) );
567*b1cdbd2cSJim Jagielski }
568*b1cdbd2cSJim Jagielski }
569*b1cdbd2cSJim Jagielski }
570*b1cdbd2cSJim Jagielski catch( uno::Exception& )
571*b1cdbd2cSJim Jagielski {
572*b1cdbd2cSJim Jagielski DBG_ERROR("XMLShapeExport::exportShape(): exception during hyperlink export");
573*b1cdbd2cSJim Jagielski }
574*b1cdbd2cSJim Jagielski
575*b1cdbd2cSJim Jagielski
576*b1cdbd2cSJim Jagielski if( xSet.is() )
577*b1cdbd2cSJim Jagielski xSet->getPropertyValue(msZIndex) >>= nZIndex;
578*b1cdbd2cSJim Jagielski
579*b1cdbd2cSJim Jagielski ImplXMLShapeExportInfoVector& aShapeInfoVector = (*maCurrentShapesIter).second;
580*b1cdbd2cSJim Jagielski
581*b1cdbd2cSJim Jagielski if( (sal_Int32)aShapeInfoVector.size() <= nZIndex )
582*b1cdbd2cSJim Jagielski {
583*b1cdbd2cSJim Jagielski DBG_ERROR( "XMLShapeExport::exportShape(): no shape info collected for a given shape" );
584*b1cdbd2cSJim Jagielski return;
585*b1cdbd2cSJim Jagielski }
586*b1cdbd2cSJim Jagielski
587*b1cdbd2cSJim Jagielski // --> OD 2008-05-08 #refactorlists#
588*b1cdbd2cSJim Jagielski NewTextListsHelper aNewTextListsHelper( mrExport );
589*b1cdbd2cSJim Jagielski // <--
590*b1cdbd2cSJim Jagielski
591*b1cdbd2cSJim Jagielski const ImplXMLShapeExportInfo& aShapeInfo = aShapeInfoVector[nZIndex];
592*b1cdbd2cSJim Jagielski
593*b1cdbd2cSJim Jagielski
594*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
595*b1cdbd2cSJim Jagielski // ---------------------------------------
596*b1cdbd2cSJim Jagielski // check if this is the correct ShapesInfo
597*b1cdbd2cSJim Jagielski // ---------------------------------------
598*b1cdbd2cSJim Jagielski uno::Reference< container::XChild > xChild( xShape, uno::UNO_QUERY );
599*b1cdbd2cSJim Jagielski if( xChild.is() )
600*b1cdbd2cSJim Jagielski {
601*b1cdbd2cSJim Jagielski uno::Reference< drawing::XShapes > xParent( xChild->getParent(), uno::UNO_QUERY );
602*b1cdbd2cSJim Jagielski DBG_ASSERT( xParent.is() && xParent.get() == (*maCurrentShapesIter).first.get(), "XMLShapeExport::exportShape(): Wrong call to XMLShapeExport::seekShapes()" );
603*b1cdbd2cSJim Jagielski }
604*b1cdbd2cSJim Jagielski
605*b1cdbd2cSJim Jagielski // -----------------------------
606*b1cdbd2cSJim Jagielski // first compute the shapes type
607*b1cdbd2cSJim Jagielski // -----------------------------
608*b1cdbd2cSJim Jagielski {
609*b1cdbd2cSJim Jagielski XmlShapeType eShapeType(XmlShapeTypeNotYetSet);
610*b1cdbd2cSJim Jagielski ImpCalcShapeType(xShape, eShapeType);
611*b1cdbd2cSJim Jagielski
612*b1cdbd2cSJim Jagielski DBG_ASSERT( eShapeType == aShapeInfo.meShapeType, "exportShape callings do not correspond to collectShapeAutoStyles calls!" );
613*b1cdbd2cSJim Jagielski }
614*b1cdbd2cSJim Jagielski #endif
615*b1cdbd2cSJim Jagielski
616*b1cdbd2cSJim Jagielski // ----------------------------------------
617*b1cdbd2cSJim Jagielski // collect animation informations if needed
618*b1cdbd2cSJim Jagielski // ----------------------------------------
619*b1cdbd2cSJim Jagielski if( mxAnimationsExporter.is() )
620*b1cdbd2cSJim Jagielski mxAnimationsExporter->collect( xShape, mrExport );
621*b1cdbd2cSJim Jagielski
622*b1cdbd2cSJim Jagielski // -------------------------------
623*b1cdbd2cSJim Jagielski // export shapes name if he has one
624*b1cdbd2cSJim Jagielski // --> OD 2006-03-13 #i51726#
625*b1cdbd2cSJim Jagielski // Export of the shape name for text documents only if the OpenDocument
626*b1cdbd2cSJim Jagielski // file format is written - exceptions are group shapes.
627*b1cdbd2cSJim Jagielski // Note: Writer documents in OpenOffice.org file format doesn't contain
628*b1cdbd2cSJim Jagielski // any names for shapes, except for group shapes.
629*b1cdbd2cSJim Jagielski // -------------------------------
630*b1cdbd2cSJim Jagielski {
631*b1cdbd2cSJim Jagielski // --> OD 2006-03-10 #i51726#
632*b1cdbd2cSJim Jagielski if ( ( GetExport().GetModelType() != SvtModuleOptions::E_WRITER &&
633*b1cdbd2cSJim Jagielski GetExport().GetModelType() != SvtModuleOptions::E_WRITERWEB &&
634*b1cdbd2cSJim Jagielski GetExport().GetModelType() != SvtModuleOptions::E_WRITERGLOBAL ) ||
635*b1cdbd2cSJim Jagielski ( GetExport().getExportFlags() & EXPORT_OASIS ) != 0 ||
636*b1cdbd2cSJim Jagielski aShapeInfo.meShapeType == XmlShapeTypeDrawGroupShape ||
637*b1cdbd2cSJim Jagielski ( aShapeInfo.meShapeType == XmlShapeTypeDrawCustomShape &&
638*b1cdbd2cSJim Jagielski aShapeInfo.xCustomShapeReplacement.is() ) )
639*b1cdbd2cSJim Jagielski {
640*b1cdbd2cSJim Jagielski uno::Reference< container::XNamed > xNamed( xShape, uno::UNO_QUERY );
641*b1cdbd2cSJim Jagielski if( xNamed.is() )
642*b1cdbd2cSJim Jagielski {
643*b1cdbd2cSJim Jagielski const OUString aName( xNamed->getName() );
644*b1cdbd2cSJim Jagielski if( aName.getLength() )
645*b1cdbd2cSJim Jagielski mrExport.AddAttribute(XML_NAMESPACE_DRAW, XML_NAME, aName );
646*b1cdbd2cSJim Jagielski }
647*b1cdbd2cSJim Jagielski }
648*b1cdbd2cSJim Jagielski // <--
649*b1cdbd2cSJim Jagielski }
650*b1cdbd2cSJim Jagielski
651*b1cdbd2cSJim Jagielski // ------------------
652*b1cdbd2cSJim Jagielski // export style name
653*b1cdbd2cSJim Jagielski // ------------------
654*b1cdbd2cSJim Jagielski if( aShapeInfo.msStyleName.getLength() != 0 )
655*b1cdbd2cSJim Jagielski {
656*b1cdbd2cSJim Jagielski if(XML_STYLE_FAMILY_SD_GRAPHICS_ID == aShapeInfo.mnFamily)
657*b1cdbd2cSJim Jagielski mrExport.AddAttribute(XML_NAMESPACE_DRAW, XML_STYLE_NAME, mrExport.EncodeStyleName( aShapeInfo.msStyleName) );
658*b1cdbd2cSJim Jagielski else
659*b1cdbd2cSJim Jagielski mrExport.AddAttribute(XML_NAMESPACE_PRESENTATION, XML_STYLE_NAME, mrExport.EncodeStyleName( aShapeInfo.msStyleName) );
660*b1cdbd2cSJim Jagielski }
661*b1cdbd2cSJim Jagielski
662*b1cdbd2cSJim Jagielski // ------------------
663*b1cdbd2cSJim Jagielski // export text style name
664*b1cdbd2cSJim Jagielski // ------------------
665*b1cdbd2cSJim Jagielski if( aShapeInfo.msTextStyleName.getLength() != 0 )
666*b1cdbd2cSJim Jagielski {
667*b1cdbd2cSJim Jagielski mrExport.AddAttribute(XML_NAMESPACE_DRAW, XML_TEXT_STYLE_NAME, aShapeInfo.msTextStyleName );
668*b1cdbd2cSJim Jagielski }
669*b1cdbd2cSJim Jagielski
670*b1cdbd2cSJim Jagielski // --------------------------
671*b1cdbd2cSJim Jagielski // export shapes id if needed
672*b1cdbd2cSJim Jagielski // --------------------------
673*b1cdbd2cSJim Jagielski {
674*b1cdbd2cSJim Jagielski uno::Reference< uno::XInterface > xRef( xShape, uno::UNO_QUERY );
675*b1cdbd2cSJim Jagielski const OUString& rShapeId = mrExport.getInterfaceToIdentifierMapper().getIdentifier( xRef );
676*b1cdbd2cSJim Jagielski if( rShapeId.getLength() )
677*b1cdbd2cSJim Jagielski {
678*b1cdbd2cSJim Jagielski mrExport.AddAttributeIdLegacy(XML_NAMESPACE_DRAW, rShapeId);
679*b1cdbd2cSJim Jagielski }
680*b1cdbd2cSJim Jagielski }
681*b1cdbd2cSJim Jagielski
682*b1cdbd2cSJim Jagielski // --------------------------
683*b1cdbd2cSJim Jagielski // export layer information
684*b1cdbd2cSJim Jagielski // --------------------------
685*b1cdbd2cSJim Jagielski if( IsLayerExportEnabled() )
686*b1cdbd2cSJim Jagielski {
687*b1cdbd2cSJim Jagielski // check for group or scene shape and not export layer if this is one
688*b1cdbd2cSJim Jagielski uno::Reference< drawing::XShapes > xShapes( xShape, uno::UNO_QUERY );
689*b1cdbd2cSJim Jagielski if( !xShapes.is() )
690*b1cdbd2cSJim Jagielski {
691*b1cdbd2cSJim Jagielski try
692*b1cdbd2cSJim Jagielski {
693*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > xProps( xShape, uno::UNO_QUERY );
694*b1cdbd2cSJim Jagielski OUString aLayerName;
695*b1cdbd2cSJim Jagielski xProps->getPropertyValue( OUString::createFromAscii( "LayerName" ) ) >>= aLayerName;
696*b1cdbd2cSJim Jagielski mrExport.AddAttribute(XML_NAMESPACE_DRAW, XML_LAYER, aLayerName );
697*b1cdbd2cSJim Jagielski
698*b1cdbd2cSJim Jagielski }
699*b1cdbd2cSJim Jagielski catch( uno::Exception e )
700*b1cdbd2cSJim Jagielski {
701*b1cdbd2cSJim Jagielski DBG_ERROR( "could not export layer name for shape!" );
702*b1cdbd2cSJim Jagielski }
703*b1cdbd2cSJim Jagielski }
704*b1cdbd2cSJim Jagielski }
705*b1cdbd2cSJim Jagielski
706*b1cdbd2cSJim Jagielski // export draw:display (do not export in ODF 1.2 or older)
707*b1cdbd2cSJim Jagielski if( xSet.is() && ( mrExport.getDefaultVersion() > SvtSaveOptions::ODFVER_012 ) )
708*b1cdbd2cSJim Jagielski {
709*b1cdbd2cSJim Jagielski if( aShapeInfo.meShapeType != XmlShapeTypeDrawPageShape && aShapeInfo.meShapeType != XmlShapeTypePresPageShape &&
710*b1cdbd2cSJim Jagielski aShapeInfo.meShapeType != XmlShapeTypeHandoutShape && aShapeInfo.meShapeType != XmlShapeTypeDrawChartShape )
711*b1cdbd2cSJim Jagielski
712*b1cdbd2cSJim Jagielski try
713*b1cdbd2cSJim Jagielski {
714*b1cdbd2cSJim Jagielski sal_Bool bVisible = sal_True;
715*b1cdbd2cSJim Jagielski sal_Bool bPrintable = sal_True;
716*b1cdbd2cSJim Jagielski
717*b1cdbd2cSJim Jagielski xSet->getPropertyValue(msVisible) >>= bVisible;
718*b1cdbd2cSJim Jagielski xSet->getPropertyValue(msPrintable) >>= bPrintable;
719*b1cdbd2cSJim Jagielski
720*b1cdbd2cSJim Jagielski XMLTokenEnum eDisplayToken = XML_TOKEN_INVALID;
721*b1cdbd2cSJim Jagielski const unsigned short nDisplay = (bVisible ? 2 : 0) | (bPrintable ? 1 : 0);
722*b1cdbd2cSJim Jagielski switch( nDisplay )
723*b1cdbd2cSJim Jagielski {
724*b1cdbd2cSJim Jagielski case 0: eDisplayToken = XML_NONE; break;
725*b1cdbd2cSJim Jagielski case 1: eDisplayToken = XML_PRINTER; break;
726*b1cdbd2cSJim Jagielski case 2: eDisplayToken = XML_SCREEN; break;
727*b1cdbd2cSJim Jagielski // case 3: eDisplayToken = XML_ALWAYS break; this is the default
728*b1cdbd2cSJim Jagielski }
729*b1cdbd2cSJim Jagielski
730*b1cdbd2cSJim Jagielski if( eDisplayToken != XML_TOKEN_INVALID )
731*b1cdbd2cSJim Jagielski mrExport.AddAttribute(XML_NAMESPACE_DRAW_EXT, XML_DISPLAY, eDisplayToken );
732*b1cdbd2cSJim Jagielski }
733*b1cdbd2cSJim Jagielski catch( uno::Exception& )
734*b1cdbd2cSJim Jagielski {
735*b1cdbd2cSJim Jagielski DBG_ERROR( "XMLShapeExport::exportShape(), exception caught!" );
736*b1cdbd2cSJim Jagielski }
737*b1cdbd2cSJim Jagielski }
738*b1cdbd2cSJim Jagielski
739*b1cdbd2cSJim Jagielski // #82003# test export count
740*b1cdbd2cSJim Jagielski // #91587# ALWAYS increment since now ALL to be exported shapes are counted.
741*b1cdbd2cSJim Jagielski if(mrExport.GetShapeExport()->IsHandleProgressBarEnabled())
742*b1cdbd2cSJim Jagielski {
743*b1cdbd2cSJim Jagielski mrExport.GetProgressBarHelper()->Increment();
744*b1cdbd2cSJim Jagielski }
745*b1cdbd2cSJim Jagielski
746*b1cdbd2cSJim Jagielski onExport( xShape );
747*b1cdbd2cSJim Jagielski
748*b1cdbd2cSJim Jagielski // --------------------
749*b1cdbd2cSJim Jagielski // export shape element
750*b1cdbd2cSJim Jagielski // --------------------
751*b1cdbd2cSJim Jagielski switch(aShapeInfo.meShapeType)
752*b1cdbd2cSJim Jagielski {
753*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawRectangleShape:
754*b1cdbd2cSJim Jagielski {
755*b1cdbd2cSJim Jagielski ImpExportRectangleShape(xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
756*b1cdbd2cSJim Jagielski break;
757*b1cdbd2cSJim Jagielski }
758*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawEllipseShape:
759*b1cdbd2cSJim Jagielski {
760*b1cdbd2cSJim Jagielski ImpExportEllipseShape(xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
761*b1cdbd2cSJim Jagielski break;
762*b1cdbd2cSJim Jagielski }
763*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawLineShape:
764*b1cdbd2cSJim Jagielski {
765*b1cdbd2cSJim Jagielski ImpExportLineShape(xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
766*b1cdbd2cSJim Jagielski break;
767*b1cdbd2cSJim Jagielski }
768*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawPolyPolygonShape: // closed PolyPolygon
769*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawPolyLineShape: // open PolyPolygon
770*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawClosedBezierShape: // closed PolyPolygon containing curves
771*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawOpenBezierShape: // open PolyPolygon containing curves
772*b1cdbd2cSJim Jagielski {
773*b1cdbd2cSJim Jagielski ImpExportPolygonShape(xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
774*b1cdbd2cSJim Jagielski break;
775*b1cdbd2cSJim Jagielski }
776*b1cdbd2cSJim Jagielski
777*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawTextShape:
778*b1cdbd2cSJim Jagielski case XmlShapeTypePresTitleTextShape:
779*b1cdbd2cSJim Jagielski case XmlShapeTypePresOutlinerShape:
780*b1cdbd2cSJim Jagielski case XmlShapeTypePresSubtitleShape:
781*b1cdbd2cSJim Jagielski case XmlShapeTypePresNotesShape:
782*b1cdbd2cSJim Jagielski case XmlShapeTypePresHeaderShape:
783*b1cdbd2cSJim Jagielski case XmlShapeTypePresFooterShape:
784*b1cdbd2cSJim Jagielski case XmlShapeTypePresSlideNumberShape:
785*b1cdbd2cSJim Jagielski case XmlShapeTypePresDateTimeShape:
786*b1cdbd2cSJim Jagielski {
787*b1cdbd2cSJim Jagielski ImpExportTextBoxShape(xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
788*b1cdbd2cSJim Jagielski break;
789*b1cdbd2cSJim Jagielski }
790*b1cdbd2cSJim Jagielski
791*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawGraphicObjectShape:
792*b1cdbd2cSJim Jagielski case XmlShapeTypePresGraphicObjectShape:
793*b1cdbd2cSJim Jagielski {
794*b1cdbd2cSJim Jagielski ImpExportGraphicObjectShape(xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
795*b1cdbd2cSJim Jagielski break;
796*b1cdbd2cSJim Jagielski }
797*b1cdbd2cSJim Jagielski
798*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawChartShape:
799*b1cdbd2cSJim Jagielski case XmlShapeTypePresChartShape:
800*b1cdbd2cSJim Jagielski {
801*b1cdbd2cSJim Jagielski ImpExportChartShape(xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint, pAttrList );
802*b1cdbd2cSJim Jagielski break;
803*b1cdbd2cSJim Jagielski }
804*b1cdbd2cSJim Jagielski
805*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawControlShape:
806*b1cdbd2cSJim Jagielski {
807*b1cdbd2cSJim Jagielski ImpExportControlShape(xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
808*b1cdbd2cSJim Jagielski break;
809*b1cdbd2cSJim Jagielski }
810*b1cdbd2cSJim Jagielski
811*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawConnectorShape:
812*b1cdbd2cSJim Jagielski {
813*b1cdbd2cSJim Jagielski ImpExportConnectorShape(xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
814*b1cdbd2cSJim Jagielski break;
815*b1cdbd2cSJim Jagielski }
816*b1cdbd2cSJim Jagielski
817*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawMeasureShape:
818*b1cdbd2cSJim Jagielski {
819*b1cdbd2cSJim Jagielski ImpExportMeasureShape(xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
820*b1cdbd2cSJim Jagielski break;
821*b1cdbd2cSJim Jagielski }
822*b1cdbd2cSJim Jagielski
823*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawOLE2Shape:
824*b1cdbd2cSJim Jagielski case XmlShapeTypePresOLE2Shape:
825*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawSheetShape:
826*b1cdbd2cSJim Jagielski case XmlShapeTypePresSheetShape:
827*b1cdbd2cSJim Jagielski {
828*b1cdbd2cSJim Jagielski ImpExportOLE2Shape(xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
829*b1cdbd2cSJim Jagielski break;
830*b1cdbd2cSJim Jagielski }
831*b1cdbd2cSJim Jagielski
832*b1cdbd2cSJim Jagielski case XmlShapeTypePresTableShape:
833*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawTableShape:
834*b1cdbd2cSJim Jagielski {
835*b1cdbd2cSJim Jagielski ImpExportTableShape( xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
836*b1cdbd2cSJim Jagielski break;
837*b1cdbd2cSJim Jagielski }
838*b1cdbd2cSJim Jagielski
839*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawPageShape:
840*b1cdbd2cSJim Jagielski case XmlShapeTypePresPageShape:
841*b1cdbd2cSJim Jagielski case XmlShapeTypeHandoutShape:
842*b1cdbd2cSJim Jagielski {
843*b1cdbd2cSJim Jagielski ImpExportPageShape(xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
844*b1cdbd2cSJim Jagielski break;
845*b1cdbd2cSJim Jagielski }
846*b1cdbd2cSJim Jagielski
847*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawCaptionShape:
848*b1cdbd2cSJim Jagielski {
849*b1cdbd2cSJim Jagielski ImpExportCaptionShape(xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
850*b1cdbd2cSJim Jagielski break;
851*b1cdbd2cSJim Jagielski }
852*b1cdbd2cSJim Jagielski
853*b1cdbd2cSJim Jagielski case XmlShapeTypeDraw3DCubeObject:
854*b1cdbd2cSJim Jagielski case XmlShapeTypeDraw3DSphereObject:
855*b1cdbd2cSJim Jagielski case XmlShapeTypeDraw3DLatheObject:
856*b1cdbd2cSJim Jagielski case XmlShapeTypeDraw3DExtrudeObject:
857*b1cdbd2cSJim Jagielski {
858*b1cdbd2cSJim Jagielski ImpExport3DShape(xShape, aShapeInfo.meShapeType);
859*b1cdbd2cSJim Jagielski break;
860*b1cdbd2cSJim Jagielski }
861*b1cdbd2cSJim Jagielski
862*b1cdbd2cSJim Jagielski case XmlShapeTypeDraw3DSceneObject:
863*b1cdbd2cSJim Jagielski {
864*b1cdbd2cSJim Jagielski ImpExport3DSceneShape( xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
865*b1cdbd2cSJim Jagielski break;
866*b1cdbd2cSJim Jagielski }
867*b1cdbd2cSJim Jagielski
868*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawGroupShape:
869*b1cdbd2cSJim Jagielski {
870*b1cdbd2cSJim Jagielski // empty group
871*b1cdbd2cSJim Jagielski ImpExportGroupShape( xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
872*b1cdbd2cSJim Jagielski break;
873*b1cdbd2cSJim Jagielski }
874*b1cdbd2cSJim Jagielski
875*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawFrameShape:
876*b1cdbd2cSJim Jagielski {
877*b1cdbd2cSJim Jagielski ImpExportFrameShape(xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
878*b1cdbd2cSJim Jagielski break;
879*b1cdbd2cSJim Jagielski }
880*b1cdbd2cSJim Jagielski
881*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawAppletShape:
882*b1cdbd2cSJim Jagielski {
883*b1cdbd2cSJim Jagielski ImpExportAppletShape(xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
884*b1cdbd2cSJim Jagielski break;
885*b1cdbd2cSJim Jagielski }
886*b1cdbd2cSJim Jagielski
887*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawPluginShape:
888*b1cdbd2cSJim Jagielski {
889*b1cdbd2cSJim Jagielski ImpExportPluginShape(xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
890*b1cdbd2cSJim Jagielski break;
891*b1cdbd2cSJim Jagielski }
892*b1cdbd2cSJim Jagielski
893*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawCustomShape:
894*b1cdbd2cSJim Jagielski {
895*b1cdbd2cSJim Jagielski if ( aShapeInfo.xCustomShapeReplacement.is() )
896*b1cdbd2cSJim Jagielski ImpExportGroupShape( aShapeInfo.xCustomShapeReplacement, XmlShapeTypeDrawGroupShape, nFeatures, pRefPoint );
897*b1cdbd2cSJim Jagielski else
898*b1cdbd2cSJim Jagielski ImpExportCustomShape( xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
899*b1cdbd2cSJim Jagielski break;
900*b1cdbd2cSJim Jagielski }
901*b1cdbd2cSJim Jagielski
902*b1cdbd2cSJim Jagielski case XmlShapeTypePresMediaShape:
903*b1cdbd2cSJim Jagielski case XmlShapeTypeDrawMediaShape:
904*b1cdbd2cSJim Jagielski {
905*b1cdbd2cSJim Jagielski ImpExportMediaShape( xShape, aShapeInfo.meShapeType, nFeatures, pRefPoint );
906*b1cdbd2cSJim Jagielski break;
907*b1cdbd2cSJim Jagielski }
908*b1cdbd2cSJim Jagielski
909*b1cdbd2cSJim Jagielski case XmlShapeTypePresOrgChartShape:
910*b1cdbd2cSJim Jagielski case XmlShapeTypeUnknown:
911*b1cdbd2cSJim Jagielski case XmlShapeTypeNotYetSet:
912*b1cdbd2cSJim Jagielski default:
913*b1cdbd2cSJim Jagielski {
914*b1cdbd2cSJim Jagielski // this should never happen and is an error
915*b1cdbd2cSJim Jagielski DBG_ERROR("XMLEXP: WriteShape: unknown or unexpected type of shape in export!");
916*b1cdbd2cSJim Jagielski break;
917*b1cdbd2cSJim Jagielski }
918*b1cdbd2cSJim Jagielski }
919*b1cdbd2cSJim Jagielski
920*b1cdbd2cSJim Jagielski mpHyperlinkElement.reset();
921*b1cdbd2cSJim Jagielski
922*b1cdbd2cSJim Jagielski // #97489# #97111#
923*b1cdbd2cSJim Jagielski // if there was an error and no element for the shape was exported
924*b1cdbd2cSJim Jagielski // we need to clear the attribute list or the attributes will be
925*b1cdbd2cSJim Jagielski // set on the next exported element, which can result in corrupt
926*b1cdbd2cSJim Jagielski // xml files due to duplicate attributes
927*b1cdbd2cSJim Jagielski
928*b1cdbd2cSJim Jagielski mrExport.CheckAttrList(); // asserts in non pro if we have attributes left
929*b1cdbd2cSJim Jagielski mrExport.ClearAttrList(); // clears the attributes
930*b1cdbd2cSJim Jagielski }
931*b1cdbd2cSJim Jagielski
932*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////
933*b1cdbd2cSJim Jagielski
934*b1cdbd2cSJim Jagielski // This method collects all automatic styles for the shapes inside the given XShapes collection
collectShapesAutoStyles(const uno::Reference<drawing::XShapes> & xShapes)935*b1cdbd2cSJim Jagielski void XMLShapeExport::collectShapesAutoStyles( const uno::Reference < drawing::XShapes >& xShapes )
936*b1cdbd2cSJim Jagielski {
937*b1cdbd2cSJim Jagielski ShapesInfos::iterator aOldCurrentShapesIter = maCurrentShapesIter;
938*b1cdbd2cSJim Jagielski seekShapes( xShapes );
939*b1cdbd2cSJim Jagielski
940*b1cdbd2cSJim Jagielski uno::Reference< drawing::XShape > xShape;
941*b1cdbd2cSJim Jagielski const sal_Int32 nShapeCount(xShapes->getCount());
942*b1cdbd2cSJim Jagielski for(sal_Int32 nShapeId = 0; nShapeId < nShapeCount; nShapeId++)
943*b1cdbd2cSJim Jagielski {
944*b1cdbd2cSJim Jagielski xShapes->getByIndex(nShapeId) >>= xShape;
945*b1cdbd2cSJim Jagielski DBG_ASSERT( xShape.is(), "Shape without a XShape?" );
946*b1cdbd2cSJim Jagielski if(!xShape.is())
947*b1cdbd2cSJim Jagielski continue;
948*b1cdbd2cSJim Jagielski
949*b1cdbd2cSJim Jagielski collectShapeAutoStyles( xShape );
950*b1cdbd2cSJim Jagielski }
951*b1cdbd2cSJim Jagielski
952*b1cdbd2cSJim Jagielski maCurrentShapesIter = aOldCurrentShapesIter;
953*b1cdbd2cSJim Jagielski }
954*b1cdbd2cSJim Jagielski
955*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////
956*b1cdbd2cSJim Jagielski
957*b1cdbd2cSJim Jagielski // This method exports all XShape inside the given XShapes collection
exportShapes(const uno::Reference<drawing::XShapes> & xShapes,sal_Int32 nFeatures,awt::Point * pRefPoint)958*b1cdbd2cSJim Jagielski void XMLShapeExport::exportShapes( const uno::Reference < drawing::XShapes >& xShapes, sal_Int32 nFeatures /* = SEF_DEFAULT */, awt::Point* pRefPoint /* = NULL */ )
959*b1cdbd2cSJim Jagielski {
960*b1cdbd2cSJim Jagielski ShapesInfos::iterator aOldCurrentShapesIter = maCurrentShapesIter;
961*b1cdbd2cSJim Jagielski seekShapes( xShapes );
962*b1cdbd2cSJim Jagielski
963*b1cdbd2cSJim Jagielski uno::Reference< drawing::XShape > xShape;
964*b1cdbd2cSJim Jagielski const sal_Int32 nShapeCount(xShapes->getCount());
965*b1cdbd2cSJim Jagielski for(sal_Int32 nShapeId = 0; nShapeId < nShapeCount; nShapeId++)
966*b1cdbd2cSJim Jagielski {
967*b1cdbd2cSJim Jagielski xShapes->getByIndex(nShapeId) >>= xShape;
968*b1cdbd2cSJim Jagielski DBG_ASSERT( xShape.is(), "Shape without a XShape?" );
969*b1cdbd2cSJim Jagielski if(!xShape.is())
970*b1cdbd2cSJim Jagielski continue;
971*b1cdbd2cSJim Jagielski
972*b1cdbd2cSJim Jagielski exportShape( xShape, nFeatures, pRefPoint );
973*b1cdbd2cSJim Jagielski }
974*b1cdbd2cSJim Jagielski
975*b1cdbd2cSJim Jagielski maCurrentShapesIter = aOldCurrentShapesIter;
976*b1cdbd2cSJim Jagielski }
977*b1cdbd2cSJim Jagielski
978*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////
979*b1cdbd2cSJim Jagielski
seekShapes(const uno::Reference<drawing::XShapes> & xShapes)980*b1cdbd2cSJim Jagielski void XMLShapeExport::seekShapes( const uno::Reference< drawing::XShapes >& xShapes ) throw()
981*b1cdbd2cSJim Jagielski {
982*b1cdbd2cSJim Jagielski if( xShapes.is() )
983*b1cdbd2cSJim Jagielski {
984*b1cdbd2cSJim Jagielski maCurrentShapesIter = maShapesInfos.find( xShapes );
985*b1cdbd2cSJim Jagielski if( maCurrentShapesIter == maShapesInfos.end() )
986*b1cdbd2cSJim Jagielski {
987*b1cdbd2cSJim Jagielski ImplXMLShapeExportInfoVector aNewInfoVector;
988*b1cdbd2cSJim Jagielski aNewInfoVector.resize( (ShapesInfos::size_type) xShapes->getCount() );
989*b1cdbd2cSJim Jagielski maShapesInfos[ xShapes ] = aNewInfoVector;
990*b1cdbd2cSJim Jagielski
991*b1cdbd2cSJim Jagielski maCurrentShapesIter = maShapesInfos.find( xShapes );
992*b1cdbd2cSJim Jagielski
993*b1cdbd2cSJim Jagielski DBG_ASSERT( maCurrentShapesIter != maShapesInfos.end(), "XMLShapeExport::seekShapes(): insert into stl::map failed" );
994*b1cdbd2cSJim Jagielski }
995*b1cdbd2cSJim Jagielski
996*b1cdbd2cSJim Jagielski DBG_ASSERT( (*maCurrentShapesIter).second.size() == (ShapesInfos::size_type)xShapes->getCount(), "XMLShapeExport::seekShapes(): XShapes size varied between calls" );
997*b1cdbd2cSJim Jagielski
998*b1cdbd2cSJim Jagielski }
999*b1cdbd2cSJim Jagielski else
1000*b1cdbd2cSJim Jagielski {
1001*b1cdbd2cSJim Jagielski maCurrentShapesIter = maShapesInfos.end();
1002*b1cdbd2cSJim Jagielski }
1003*b1cdbd2cSJim Jagielski }
1004*b1cdbd2cSJim Jagielski
1005*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////
1006*b1cdbd2cSJim Jagielski
exportAutoStyles()1007*b1cdbd2cSJim Jagielski void XMLShapeExport::exportAutoStyles()
1008*b1cdbd2cSJim Jagielski {
1009*b1cdbd2cSJim Jagielski // export all autostyle infos
1010*b1cdbd2cSJim Jagielski
1011*b1cdbd2cSJim Jagielski // ...for graphic
1012*b1cdbd2cSJim Jagielski // if(IsFamilyGraphicUsed())
1013*b1cdbd2cSJim Jagielski {
1014*b1cdbd2cSJim Jagielski GetExport().GetAutoStylePool()->exportXML(
1015*b1cdbd2cSJim Jagielski XML_STYLE_FAMILY_SD_GRAPHICS_ID
1016*b1cdbd2cSJim Jagielski , GetExport().GetDocHandler(),
1017*b1cdbd2cSJim Jagielski GetExport().GetMM100UnitConverter(),
1018*b1cdbd2cSJim Jagielski GetExport().GetNamespaceMap()
1019*b1cdbd2cSJim Jagielski );
1020*b1cdbd2cSJim Jagielski }
1021*b1cdbd2cSJim Jagielski
1022*b1cdbd2cSJim Jagielski // ...for presentation
1023*b1cdbd2cSJim Jagielski // if(IsFamilyPresentationUsed())
1024*b1cdbd2cSJim Jagielski {
1025*b1cdbd2cSJim Jagielski GetExport().GetAutoStylePool()->exportXML(
1026*b1cdbd2cSJim Jagielski XML_STYLE_FAMILY_SD_PRESENTATION_ID
1027*b1cdbd2cSJim Jagielski , GetExport().GetDocHandler(),
1028*b1cdbd2cSJim Jagielski GetExport().GetMM100UnitConverter(),
1029*b1cdbd2cSJim Jagielski GetExport().GetNamespaceMap()
1030*b1cdbd2cSJim Jagielski );
1031*b1cdbd2cSJim Jagielski }
1032*b1cdbd2cSJim Jagielski
1033*b1cdbd2cSJim Jagielski if( mxShapeTableExport.is() )
1034*b1cdbd2cSJim Jagielski mxShapeTableExport->exportAutoStyles();
1035*b1cdbd2cSJim Jagielski }
1036*b1cdbd2cSJim Jagielski
1037*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////
1038*b1cdbd2cSJim Jagielski
1039*b1cdbd2cSJim Jagielski /// returns the export property mapper for external chaining
CreateShapePropMapper(SvXMLExport & rExport)1040*b1cdbd2cSJim Jagielski SvXMLExportPropertyMapper* XMLShapeExport::CreateShapePropMapper(
1041*b1cdbd2cSJim Jagielski SvXMLExport& rExport )
1042*b1cdbd2cSJim Jagielski {
1043*b1cdbd2cSJim Jagielski UniReference< XMLPropertyHandlerFactory > xFactory = new XMLSdPropHdlFactory( rExport.GetModel(), rExport );
1044*b1cdbd2cSJim Jagielski UniReference < XMLPropertySetMapper > xMapper = new XMLShapePropertySetMapper( xFactory );
1045*b1cdbd2cSJim Jagielski SvXMLExportPropertyMapper* pResult =
1046*b1cdbd2cSJim Jagielski new XMLShapeExportPropertyMapper( xMapper,
1047*b1cdbd2cSJim Jagielski (XMLTextListAutoStylePool*)&rExport.GetTextParagraphExport()->GetListAutoStylePool(),
1048*b1cdbd2cSJim Jagielski rExport );
1049*b1cdbd2cSJim Jagielski // chain text attributes
1050*b1cdbd2cSJim Jagielski return pResult;
1051*b1cdbd2cSJim Jagielski }
1052*b1cdbd2cSJim Jagielski
1053*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////
1054*b1cdbd2cSJim Jagielski
ImpCalcShapeType(const uno::Reference<drawing::XShape> & xShape,XmlShapeType & eShapeType)1055*b1cdbd2cSJim Jagielski void XMLShapeExport::ImpCalcShapeType(const uno::Reference< drawing::XShape >& xShape,
1056*b1cdbd2cSJim Jagielski XmlShapeType& eShapeType)
1057*b1cdbd2cSJim Jagielski {
1058*b1cdbd2cSJim Jagielski // set in every case, so init here
1059*b1cdbd2cSJim Jagielski eShapeType = XmlShapeTypeUnknown;
1060*b1cdbd2cSJim Jagielski
1061*b1cdbd2cSJim Jagielski uno::Reference< drawing::XShapeDescriptor > xShapeDescriptor(xShape, uno::UNO_QUERY);
1062*b1cdbd2cSJim Jagielski if(xShapeDescriptor.is())
1063*b1cdbd2cSJim Jagielski {
1064*b1cdbd2cSJim Jagielski String aType((OUString)xShapeDescriptor->getShapeType());
1065*b1cdbd2cSJim Jagielski
1066*b1cdbd2cSJim Jagielski if(aType.EqualsAscii((const sal_Char*)"com.sun.star.", 0, 13))
1067*b1cdbd2cSJim Jagielski {
1068*b1cdbd2cSJim Jagielski if(aType.EqualsAscii("drawing.", 13, 8))
1069*b1cdbd2cSJim Jagielski {
1070*b1cdbd2cSJim Jagielski // drawing shapes
1071*b1cdbd2cSJim Jagielski if (aType.EqualsAscii("Rectangle", 21, 9)) { eShapeType = XmlShapeTypeDrawRectangleShape; }
1072*b1cdbd2cSJim Jagielski
1073*b1cdbd2cSJim Jagielski // #i72177# Note: Correcting CustomShape, CustomShape->Custom, len from 9 (was wrong anyways) to 6.
1074*b1cdbd2cSJim Jagielski // As can be seen at the other compares, the appendix "Shape" is left out of the comparison.
1075*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Custom", 21, 6)) { eShapeType = XmlShapeTypeDrawCustomShape; }
1076*b1cdbd2cSJim Jagielski
1077*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Ellipse", 21, 7)) { eShapeType = XmlShapeTypeDrawEllipseShape; }
1078*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Control", 21, 7)) { eShapeType = XmlShapeTypeDrawControlShape; }
1079*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Connector", 21, 9)) { eShapeType = XmlShapeTypeDrawConnectorShape; }
1080*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Measure", 21, 7)) { eShapeType = XmlShapeTypeDrawMeasureShape; }
1081*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Line", 21, 4)) { eShapeType = XmlShapeTypeDrawLineShape; }
1082*b1cdbd2cSJim Jagielski
1083*b1cdbd2cSJim Jagielski // #i72177# Note: This covers two types by purpose, PolyPolygonShape and PolyPolygonPathShape
1084*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("PolyPolygon", 21, 11)) { eShapeType = XmlShapeTypeDrawPolyPolygonShape; }
1085*b1cdbd2cSJim Jagielski
1086*b1cdbd2cSJim Jagielski // #i72177# Note: This covers two types by purpose, PolyLineShape and PolyLinePathShape
1087*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("PolyLine", 21, 8)) { eShapeType = XmlShapeTypeDrawPolyLineShape; }
1088*b1cdbd2cSJim Jagielski
1089*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("OpenBezier", 21, 10)) { eShapeType = XmlShapeTypeDrawOpenBezierShape; }
1090*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("ClosedBezier", 21, 12)) { eShapeType = XmlShapeTypeDrawClosedBezierShape; }
1091*b1cdbd2cSJim Jagielski
1092*b1cdbd2cSJim Jagielski // #i72177# FreeHand (opened and closed) now supports the types OpenFreeHandShape and
1093*b1cdbd2cSJim Jagielski // ClosedFreeHandShape respectively. Represent them as bezier shapes
1094*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("OpenFreeHand", 21, 12)) { eShapeType = XmlShapeTypeDrawOpenBezierShape; }
1095*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("ClosedFreeHand", 21, 14)) { eShapeType = XmlShapeTypeDrawClosedBezierShape; }
1096*b1cdbd2cSJim Jagielski
1097*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("GraphicObject", 21, 13)) { eShapeType = XmlShapeTypeDrawGraphicObjectShape; }
1098*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Group", 21, 5)) { eShapeType = XmlShapeTypeDrawGroupShape; }
1099*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Text", 21, 4)) { eShapeType = XmlShapeTypeDrawTextShape; }
1100*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("OLE2", 21, 4))
1101*b1cdbd2cSJim Jagielski {
1102*b1cdbd2cSJim Jagielski eShapeType = XmlShapeTypeDrawOLE2Shape;
1103*b1cdbd2cSJim Jagielski
1104*b1cdbd2cSJim Jagielski // get info about presentation shape
1105*b1cdbd2cSJim Jagielski uno::Reference <beans::XPropertySet> xPropSet(xShape, uno::UNO_QUERY);
1106*b1cdbd2cSJim Jagielski
1107*b1cdbd2cSJim Jagielski if(xPropSet.is())
1108*b1cdbd2cSJim Jagielski {
1109*b1cdbd2cSJim Jagielski rtl::OUString sCLSID;
1110*b1cdbd2cSJim Jagielski if(xPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("CLSID"))) >>= sCLSID)
1111*b1cdbd2cSJim Jagielski {
1112*b1cdbd2cSJim Jagielski if (sCLSID.equals(mrExport.GetChartExport()->getChartCLSID()))
1113*b1cdbd2cSJim Jagielski {
1114*b1cdbd2cSJim Jagielski eShapeType = XmlShapeTypeDrawChartShape;
1115*b1cdbd2cSJim Jagielski }
1116*b1cdbd2cSJim Jagielski else if (
1117*b1cdbd2cSJim Jagielski sCLSID.equals(rtl::OUString( SvGlobalName( SO3_SC_CLASSID ).GetHexName()))
1118*b1cdbd2cSJim Jagielski // #110680#
1119*b1cdbd2cSJim Jagielski // same reaction for binfilter
1120*b1cdbd2cSJim Jagielski || sCLSID.equals(rtl::OUString( SvGlobalName( BF_SO3_SC_CLASSID ).GetHexName()))
1121*b1cdbd2cSJim Jagielski )
1122*b1cdbd2cSJim Jagielski {
1123*b1cdbd2cSJim Jagielski eShapeType = XmlShapeTypeDrawSheetShape;
1124*b1cdbd2cSJim Jagielski }
1125*b1cdbd2cSJim Jagielski else
1126*b1cdbd2cSJim Jagielski {
1127*b1cdbd2cSJim Jagielski // general OLE2 Object
1128*b1cdbd2cSJim Jagielski }
1129*b1cdbd2cSJim Jagielski }
1130*b1cdbd2cSJim Jagielski }
1131*b1cdbd2cSJim Jagielski }
1132*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Page", 21, 4)) { eShapeType = XmlShapeTypeDrawPageShape; }
1133*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Frame", 21, 5)) { eShapeType = XmlShapeTypeDrawFrameShape; }
1134*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Caption", 21, 7)) { eShapeType = XmlShapeTypeDrawCaptionShape; }
1135*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Plugin", 21, 6)) { eShapeType = XmlShapeTypeDrawPluginShape; }
1136*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Applet", 21, 6)) { eShapeType = XmlShapeTypeDrawAppletShape; }
1137*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("MediaShape", 21, 10)) { eShapeType = XmlShapeTypeDrawMediaShape; }
1138*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("TableShape", 21, 10)) { eShapeType = XmlShapeTypeDrawTableShape; }
1139*b1cdbd2cSJim Jagielski
1140*b1cdbd2cSJim Jagielski // 3D shapes
1141*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Scene", 21 + 7, 5)) { eShapeType = XmlShapeTypeDraw3DSceneObject; }
1142*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Cube", 21 + 7, 4)) { eShapeType = XmlShapeTypeDraw3DCubeObject; }
1143*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Sphere", 21 + 7, 6)) { eShapeType = XmlShapeTypeDraw3DSphereObject; }
1144*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Lathe", 21 + 7, 5)) { eShapeType = XmlShapeTypeDraw3DLatheObject; }
1145*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Extrude", 21 + 7, 7)) { eShapeType = XmlShapeTypeDraw3DExtrudeObject; }
1146*b1cdbd2cSJim Jagielski }
1147*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("presentation.", 13, 13))
1148*b1cdbd2cSJim Jagielski {
1149*b1cdbd2cSJim Jagielski // presentation shapes
1150*b1cdbd2cSJim Jagielski if (aType.EqualsAscii("TitleText", 26, 9)) { eShapeType = XmlShapeTypePresTitleTextShape; }
1151*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Outliner", 26, 8)) { eShapeType = XmlShapeTypePresOutlinerShape; }
1152*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Subtitle", 26, 8)) { eShapeType = XmlShapeTypePresSubtitleShape; }
1153*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("GraphicObject", 26, 13)) { eShapeType = XmlShapeTypePresGraphicObjectShape; }
1154*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Page", 26, 4)) { eShapeType = XmlShapeTypePresPageShape; }
1155*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("OLE2", 26, 4))
1156*b1cdbd2cSJim Jagielski {
1157*b1cdbd2cSJim Jagielski eShapeType = XmlShapeTypePresOLE2Shape;
1158*b1cdbd2cSJim Jagielski
1159*b1cdbd2cSJim Jagielski // get info about presentation shape
1160*b1cdbd2cSJim Jagielski uno::Reference <beans::XPropertySet> xPropSet(xShape, uno::UNO_QUERY);
1161*b1cdbd2cSJim Jagielski
1162*b1cdbd2cSJim Jagielski if(xPropSet.is()) try
1163*b1cdbd2cSJim Jagielski {
1164*b1cdbd2cSJim Jagielski rtl::OUString sCLSID;
1165*b1cdbd2cSJim Jagielski if(xPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("CLSID"))) >>= sCLSID)
1166*b1cdbd2cSJim Jagielski {
1167*b1cdbd2cSJim Jagielski if( sCLSID.equals(rtl::OUString( SvGlobalName( SO3_SC_CLASSID ).GetHexName())) ||
1168*b1cdbd2cSJim Jagielski sCLSID.equals(rtl::OUString( SvGlobalName( BF_SO3_SC_CLASSID ).GetHexName())) )
1169*b1cdbd2cSJim Jagielski {
1170*b1cdbd2cSJim Jagielski eShapeType = XmlShapeTypePresSheetShape;
1171*b1cdbd2cSJim Jagielski }
1172*b1cdbd2cSJim Jagielski }
1173*b1cdbd2cSJim Jagielski }
1174*b1cdbd2cSJim Jagielski catch( uno::Exception& )
1175*b1cdbd2cSJim Jagielski {
1176*b1cdbd2cSJim Jagielski DBG_ERROR( "XMLShapeExport::ImpCalcShapeType(), expected ole shape to have the CLSID property?" );
1177*b1cdbd2cSJim Jagielski }
1178*b1cdbd2cSJim Jagielski }
1179*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Chart", 26, 5)) { eShapeType = XmlShapeTypePresChartShape; }
1180*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("OrgChart", 26, 8)) { eShapeType = XmlShapeTypePresOrgChartShape; }
1181*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("CalcShape", 26, 9)) { eShapeType = XmlShapeTypePresSheetShape; }
1182*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("TableShape", 26, 10)) { eShapeType = XmlShapeTypePresTableShape; }
1183*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("Notes", 26, 5)) { eShapeType = XmlShapeTypePresNotesShape; }
1184*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("HandoutShape", 26, 12)) { eShapeType = XmlShapeTypeHandoutShape; }
1185*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("HeaderShape", 26, 11)) { eShapeType = XmlShapeTypePresHeaderShape; }
1186*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("FooterShape", 26, 11)) { eShapeType = XmlShapeTypePresFooterShape; }
1187*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("SlideNumberShape", 26, 16)) { eShapeType = XmlShapeTypePresSlideNumberShape; }
1188*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("DateTimeShape", 26, 13)) { eShapeType = XmlShapeTypePresDateTimeShape; }
1189*b1cdbd2cSJim Jagielski else if(aType.EqualsAscii("MediaShape", 26, 10)) { eShapeType = XmlShapeTypePresMediaShape; }
1190*b1cdbd2cSJim Jagielski }
1191*b1cdbd2cSJim Jagielski }
1192*b1cdbd2cSJim Jagielski }
1193*b1cdbd2cSJim Jagielski }
1194*b1cdbd2cSJim Jagielski
1195*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////
1196*b1cdbd2cSJim Jagielski
1197*b1cdbd2cSJim Jagielski extern SvXMLEnumMapEntry aXML_GlueAlignment_EnumMap[];
1198*b1cdbd2cSJim Jagielski extern SvXMLEnumMapEntry aXML_GlueEscapeDirection_EnumMap[];
1199*b1cdbd2cSJim Jagielski
1200*b1cdbd2cSJim Jagielski /** exports all user defined glue points */
ImpExportGluePoints(const uno::Reference<drawing::XShape> & xShape)1201*b1cdbd2cSJim Jagielski void XMLShapeExport::ImpExportGluePoints( const uno::Reference< drawing::XShape >& xShape )
1202*b1cdbd2cSJim Jagielski {
1203*b1cdbd2cSJim Jagielski uno::Reference< drawing::XGluePointsSupplier > xSupplier( xShape, uno::UNO_QUERY );
1204*b1cdbd2cSJim Jagielski if( !xSupplier.is() )
1205*b1cdbd2cSJim Jagielski return;
1206*b1cdbd2cSJim Jagielski
1207*b1cdbd2cSJim Jagielski uno::Reference< container::XIdentifierAccess > xGluePoints( xSupplier->getGluePoints(), uno::UNO_QUERY );
1208*b1cdbd2cSJim Jagielski if( !xGluePoints.is() )
1209*b1cdbd2cSJim Jagielski return;
1210*b1cdbd2cSJim Jagielski
1211*b1cdbd2cSJim Jagielski drawing::GluePoint2 aGluePoint;
1212*b1cdbd2cSJim Jagielski
1213*b1cdbd2cSJim Jagielski uno::Sequence< sal_Int32 > aIdSequence( xGluePoints->getIdentifiers() );
1214*b1cdbd2cSJim Jagielski
1215*b1cdbd2cSJim Jagielski const sal_Int32 nCount = aIdSequence.getLength();
1216*b1cdbd2cSJim Jagielski for( sal_Int32 nIndex = 0; nIndex < nCount; nIndex++ )
1217*b1cdbd2cSJim Jagielski {
1218*b1cdbd2cSJim Jagielski const sal_Int32 nIdentifier = aIdSequence[nIndex];
1219*b1cdbd2cSJim Jagielski if( (xGluePoints->getByIdentifier( nIdentifier ) >>= aGluePoint) && aGluePoint.IsUserDefined )
1220*b1cdbd2cSJim Jagielski {
1221*b1cdbd2cSJim Jagielski // export only user defined glue points
1222*b1cdbd2cSJim Jagielski
1223*b1cdbd2cSJim Jagielski const OUString sId( OUString::valueOf( nIdentifier ) );
1224*b1cdbd2cSJim Jagielski mrExport.AddAttribute(XML_NAMESPACE_DRAW, XML_ID, sId );
1225*b1cdbd2cSJim Jagielski
1226*b1cdbd2cSJim Jagielski mrExport.GetMM100UnitConverter().convertMeasure(msBuffer, aGluePoint.Position.X);
1227*b1cdbd2cSJim Jagielski mrExport.AddAttribute(XML_NAMESPACE_SVG, XML_X, msBuffer.makeStringAndClear());
1228*b1cdbd2cSJim Jagielski
1229*b1cdbd2cSJim Jagielski mrExport.GetMM100UnitConverter().convertMeasure(msBuffer, aGluePoint.Position.Y);
1230*b1cdbd2cSJim Jagielski mrExport.AddAttribute(XML_NAMESPACE_SVG, XML_Y, msBuffer.makeStringAndClear());
1231*b1cdbd2cSJim Jagielski
1232*b1cdbd2cSJim Jagielski if( !aGluePoint.IsRelative )
1233*b1cdbd2cSJim Jagielski {
1234*b1cdbd2cSJim Jagielski SvXMLUnitConverter::convertEnum( msBuffer, aGluePoint.PositionAlignment, aXML_GlueAlignment_EnumMap );
1235*b1cdbd2cSJim Jagielski mrExport.AddAttribute( XML_NAMESPACE_DRAW, XML_ALIGN, msBuffer.makeStringAndClear() );
1236*b1cdbd2cSJim Jagielski }
1237*b1cdbd2cSJim Jagielski
1238*b1cdbd2cSJim Jagielski if( aGluePoint.Escape != drawing::EscapeDirection_SMART )
1239*b1cdbd2cSJim Jagielski {
1240*b1cdbd2cSJim Jagielski SvXMLUnitConverter::convertEnum( msBuffer, aGluePoint.Escape, aXML_GlueEscapeDirection_EnumMap );
1241*b1cdbd2cSJim Jagielski mrExport.AddAttribute( XML_NAMESPACE_DRAW, XML_ESCAPE_DIRECTION, msBuffer.makeStringAndClear() );
1242*b1cdbd2cSJim Jagielski }
1243*b1cdbd2cSJim Jagielski
1244*b1cdbd2cSJim Jagielski SvXMLElementExport aEventsElemt(mrExport, XML_NAMESPACE_DRAW, XML_GLUE_POINT, sal_True, sal_True);
1245*b1cdbd2cSJim Jagielski }
1246*b1cdbd2cSJim Jagielski }
1247*b1cdbd2cSJim Jagielski }
1248*b1cdbd2cSJim Jagielski
ExportGraphicDefaults()1249*b1cdbd2cSJim Jagielski void XMLShapeExport::ExportGraphicDefaults()
1250*b1cdbd2cSJim Jagielski {
1251*b1cdbd2cSJim Jagielski XMLStyleExport aStEx(mrExport, OUString(), mrExport.GetAutoStylePool().get());
1252*b1cdbd2cSJim Jagielski
1253*b1cdbd2cSJim Jagielski // construct PropertySetMapper
1254*b1cdbd2cSJim Jagielski UniReference< SvXMLExportPropertyMapper > xPropertySetMapper( CreateShapePropMapper( mrExport ) );
1255*b1cdbd2cSJim Jagielski ((XMLShapeExportPropertyMapper*)xPropertySetMapper.get())->SetAutoStyles( sal_False );
1256*b1cdbd2cSJim Jagielski
1257*b1cdbd2cSJim Jagielski // chain text attributes
1258*b1cdbd2cSJim Jagielski xPropertySetMapper->ChainExportMapper(XMLTextParagraphExport::CreateParaExtPropMapper(mrExport));
1259*b1cdbd2cSJim Jagielski
1260*b1cdbd2cSJim Jagielski // chain special Writer/text frame default attributes
1261*b1cdbd2cSJim Jagielski xPropertySetMapper->ChainExportMapper(XMLTextParagraphExport::CreateParaDefaultExtPropMapper(mrExport));
1262*b1cdbd2cSJim Jagielski
1263*b1cdbd2cSJim Jagielski // write graphic family default style
1264*b1cdbd2cSJim Jagielski uno::Reference< lang::XMultiServiceFactory > xFact( mrExport.GetModel(), uno::UNO_QUERY );
1265*b1cdbd2cSJim Jagielski if( xFact.is() )
1266*b1cdbd2cSJim Jagielski {
1267*b1cdbd2cSJim Jagielski try
1268*b1cdbd2cSJim Jagielski {
1269*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > xDefaults( xFact->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.Defaults") ) ), uno::UNO_QUERY );
1270*b1cdbd2cSJim Jagielski if( xDefaults.is() )
1271*b1cdbd2cSJim Jagielski {
1272*b1cdbd2cSJim Jagielski aStEx.exportDefaultStyle( xDefaults, OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_GRAPHICS_NAME)), xPropertySetMapper );
1273*b1cdbd2cSJim Jagielski
1274*b1cdbd2cSJim Jagielski // write graphic family styles
1275*b1cdbd2cSJim Jagielski aStEx.exportStyleFamily("graphics", OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_GRAPHICS_NAME)), xPropertySetMapper, sal_False, XML_STYLE_FAMILY_SD_GRAPHICS_ID);
1276*b1cdbd2cSJim Jagielski }
1277*b1cdbd2cSJim Jagielski }
1278*b1cdbd2cSJim Jagielski catch( lang::ServiceNotRegisteredException& )
1279*b1cdbd2cSJim Jagielski {
1280*b1cdbd2cSJim Jagielski }
1281*b1cdbd2cSJim Jagielski }
1282*b1cdbd2cSJim Jagielski }
1283*b1cdbd2cSJim Jagielski
onExport(const com::sun::star::uno::Reference<com::sun::star::drawing::XShape> &)1284*b1cdbd2cSJim Jagielski void XMLShapeExport::onExport( const com::sun::star::uno::Reference < com::sun::star::drawing::XShape >& )
1285*b1cdbd2cSJim Jagielski {
1286*b1cdbd2cSJim Jagielski }
1287*b1cdbd2cSJim Jagielski
GetShapeTableExport()1288*b1cdbd2cSJim Jagielski const rtl::Reference< XMLTableExport >& XMLShapeExport::GetShapeTableExport()
1289*b1cdbd2cSJim Jagielski {
1290*b1cdbd2cSJim Jagielski if( !mxShapeTableExport.is() )
1291*b1cdbd2cSJim Jagielski {
1292*b1cdbd2cSJim Jagielski rtl::Reference< XMLPropertyHandlerFactory > xFactory( new XMLSdPropHdlFactory( mrExport.GetModel(), mrExport ) );
1293*b1cdbd2cSJim Jagielski UniReference < XMLPropertySetMapper > xMapper( new XMLShapePropertySetMapper( xFactory.get() ) );
1294*b1cdbd2cSJim Jagielski rtl::Reference< SvXMLExportPropertyMapper > xPropertySetMapper( new XMLShapeExportPropertyMapper( xMapper, (XMLTextListAutoStylePool*)&mrExport.GetTextParagraphExport()->GetListAutoStylePool(), mrExport ) );
1295*b1cdbd2cSJim Jagielski mxShapeTableExport = new XMLTableExport( mrExport, xPropertySetMapper, xFactory );
1296*b1cdbd2cSJim Jagielski }
1297*b1cdbd2cSJim Jagielski
1298*b1cdbd2cSJim Jagielski return mxShapeTableExport;
1299*b1cdbd2cSJim Jagielski }
1300