LCOV - code coverage report
Current view: top level - libreoffice/xmloff/source/draw - shapeexport4.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 646 0.0 %
Date: 2012-12-27 Functions: 0 7 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : 
      21             : #include <com/sun/star/graphic/XGraphic.hpp>
      22             : #include <com/sun/star/graphic/GraphicProvider.hpp>
      23             : #include <com/sun/star/graphic/XGraphicProvider.hpp>
      24             : #include <com/sun/star/embed/ElementModes.hpp>
      25             : #include <com/sun/star/embed/XTransactedObject.hpp>
      26             : #include <com/sun/star/io/XSeekableInputStream.hpp>
      27             : #include <com/sun/star/drawing/HomogenMatrix.hpp>
      28             : #include <com/sun/star/drawing/PolyPolygonShape3D.hpp>
      29             : #include <com/sun/star/drawing/ProjectionMode.hpp>
      30             : #include <com/sun/star/drawing/ShadeMode.hpp>
      31             : #include <com/sun/star/drawing/Direction3D.hpp>
      32             : #include <com/sun/star/drawing/Position3D.hpp>
      33             : #include <com/sun/star/drawing/CameraGeometry.hpp>
      34             : #include <com/sun/star/drawing/DoubleSequence.hpp>
      35             : 
      36             : #include <com/sun/star/table/XColumnRowRange.hpp>
      37             : 
      38             : #include <sax/tools/converter.hxx>
      39             : 
      40             : #include <xmloff/shapeexport.hxx>
      41             : #include "sdpropls.hxx"
      42             : #include <tools/debug.hxx>
      43             : #include <rtl/ustrbuf.hxx>
      44             : #include <xmloff/xmlexp.hxx>
      45             : #include <xmloff/xmluconv.hxx>
      46             : #include "xexptran.hxx"
      47             : #include <xmloff/xmltoken.hxx>
      48             : #include "EnhancedCustomShapeToken.hxx"
      49             : #include <com/sun/star/container/XIdentifierContainer.hpp>
      50             : #include <com/sun/star/drawing/EnhancedCustomShapeParameterType.hpp>
      51             : #include <com/sun/star/drawing/EnhancedCustomShapeParameterPair.hpp>
      52             : #include <com/sun/star/drawing/EnhancedCustomShapeGluePointType.hpp>
      53             : #include <com/sun/star/drawing/EnhancedCustomShapeTextFrame.hpp>
      54             : #include <com/sun/star/drawing/EnhancedCustomShapeSegment.hpp>
      55             : #include <com/sun/star/drawing/EnhancedCustomShapeSegmentCommand.hpp>
      56             : #include <com/sun/star/drawing/EnhancedCustomShapeAdjustmentValue.hpp>
      57             : #include <com/sun/star/drawing/EnhancedCustomShapeTextPathMode.hpp>
      58             : #include <com/sun/star/beans/PropertyValues.hpp>
      59             : #include <rtl/math.hxx>
      60             : #include <basegfx/vector/b3dvector.hxx>
      61             : 
      62             : #include "xmloff/xmlnmspe.hxx"
      63             : #include "XMLBase64Export.hxx"
      64             : #include <comphelper/processfactory.hxx>
      65             : 
      66             : using namespace ::com::sun::star;
      67             : using namespace ::com::sun::star::io;
      68             : using namespace ::xmloff::token;
      69             : using namespace ::xmloff::EnhancedCustomShapeToken;
      70             : 
      71             : using ::com::sun::star::embed::XStorage;
      72             : using ::com::sun::star::uno::UNO_QUERY;
      73             : using ::com::sun::star::uno::UNO_QUERY_THROW;
      74             : using ::com::sun::star::uno::Reference;
      75             : using ::com::sun::star::uno::Sequence;
      76             : 
      77             : //////////////////////////////////////////////////////////////////////////////
      78             : 
      79           0 : void ExportParameter( OUStringBuffer& rStrBuffer, const com::sun::star::drawing::EnhancedCustomShapeParameter& rParameter )
      80             : {
      81           0 :     if ( rStrBuffer.getLength() )
      82           0 :         rStrBuffer.append( (sal_Unicode)' ' );
      83           0 :     if ( rParameter.Value.getValueTypeClass() == uno::TypeClass_DOUBLE )
      84             :     {
      85           0 :         double fNumber = 0.0;
      86           0 :         rParameter.Value >>= fNumber;
      87           0 :         ::rtl::math::doubleToUStringBuffer( rStrBuffer, fNumber, rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max, '.', sal_True );
      88             :     }
      89             :     else
      90             :     {
      91           0 :         sal_Int32 nValue = 0;
      92           0 :         rParameter.Value >>= nValue;
      93             : 
      94           0 :         switch( rParameter.Type )
      95             :         {
      96             :             case com::sun::star::drawing::EnhancedCustomShapeParameterType::EQUATION :
      97             :             {
      98           0 :                 rStrBuffer.append( (sal_Unicode)'?' );
      99           0 :                 rStrBuffer.append( (sal_Unicode)'f' );
     100           0 :                 rStrBuffer.append( OUString::valueOf( nValue ) );
     101             :             }
     102           0 :             break;
     103             : 
     104             :             case com::sun::star::drawing::EnhancedCustomShapeParameterType::ADJUSTMENT :
     105             :             {
     106           0 :                 rStrBuffer.append( (sal_Unicode)'$' );
     107           0 :                 rStrBuffer.append( OUString::valueOf( nValue ) );
     108             :             }
     109           0 :             break;
     110             : 
     111             :             case com::sun::star::drawing::EnhancedCustomShapeParameterType::BOTTOM :
     112           0 :                 rStrBuffer.append( GetXMLToken( XML_BOTTOM ) ); break;
     113             :             case com::sun::star::drawing::EnhancedCustomShapeParameterType::RIGHT :
     114           0 :                 rStrBuffer.append( GetXMLToken( XML_RIGHT ) ); break;
     115             :             case com::sun::star::drawing::EnhancedCustomShapeParameterType::TOP :
     116           0 :                 rStrBuffer.append( GetXMLToken( XML_TOP ) ); break;
     117             :             case com::sun::star::drawing::EnhancedCustomShapeParameterType::LEFT :
     118           0 :                 rStrBuffer.append( GetXMLToken( XML_LEFT ) ); break;
     119             :             case com::sun::star::drawing::EnhancedCustomShapeParameterType::XSTRETCH :
     120           0 :                 rStrBuffer.append( GetXMLToken( XML_XSTRETCH ) ); break;
     121             :             case com::sun::star::drawing::EnhancedCustomShapeParameterType::YSTRETCH :
     122           0 :                 rStrBuffer.append( GetXMLToken( XML_YSTRETCH ) ); break;
     123             :             case com::sun::star::drawing::EnhancedCustomShapeParameterType::HASSTROKE :
     124           0 :                 rStrBuffer.append( GetXMLToken( XML_HASSTROKE ) ); break;
     125             :             case com::sun::star::drawing::EnhancedCustomShapeParameterType::HASFILL :
     126           0 :                 rStrBuffer.append( GetXMLToken( XML_HASFILL ) ); break;
     127             :             case com::sun::star::drawing::EnhancedCustomShapeParameterType::WIDTH :
     128           0 :                 rStrBuffer.append( GetXMLToken( XML_WIDTH ) ); break;
     129             :             case com::sun::star::drawing::EnhancedCustomShapeParameterType::HEIGHT :
     130           0 :                 rStrBuffer.append( GetXMLToken( XML_HEIGHT ) ); break;
     131             :             case com::sun::star::drawing::EnhancedCustomShapeParameterType::LOGWIDTH :
     132           0 :                 rStrBuffer.append( GetXMLToken( XML_LOGWIDTH ) ); break;
     133             :             case com::sun::star::drawing::EnhancedCustomShapeParameterType::LOGHEIGHT :
     134           0 :                 rStrBuffer.append( GetXMLToken( XML_LOGHEIGHT ) ); break;
     135             :             default :
     136           0 :                 rStrBuffer.append( OUString::valueOf( nValue ) );
     137             :         }
     138             :     }
     139           0 : }
     140             : 
     141           0 : void ImpExportEquations( SvXMLExport& rExport, const uno::Sequence< OUString >& rEquations )
     142             : {
     143             :     sal_Int32 i;
     144           0 :     for ( i = 0; i < rEquations.getLength(); i++ )
     145             :     {
     146           0 :         OUString aStr(static_cast<sal_Unicode>('f'));
     147           0 :         aStr += OUString::valueOf( i );
     148           0 :         rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_NAME, aStr );
     149             : 
     150           0 :         aStr = rEquations[ i ];
     151           0 :         sal_Int32 nIndex = 0;
     152           0 :         do
     153             :         {
     154           0 :             nIndex = aStr.indexOf( (sal_Unicode)'?', nIndex );
     155           0 :             if ( nIndex != -1 )
     156             :             {
     157           0 :                 OUString aNew( aStr.copy( 0, nIndex + 1 ) );
     158           0 :                 aNew += OUString(static_cast<sal_Unicode>('f'));
     159           0 :                 aNew += aStr.copy( nIndex + 1, ( aStr.getLength() - nIndex ) - 1 );
     160           0 :                 aStr = aNew;
     161           0 :                 nIndex++;
     162             :             }
     163             :         } while( nIndex != -1 );
     164           0 :         rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_FORMULA, aStr );
     165           0 :         SvXMLElementExport aOBJ( rExport, XML_NAMESPACE_DRAW, XML_EQUATION, sal_True, sal_True );
     166           0 :     }
     167           0 : }
     168             : 
     169           0 : void ImpExportHandles( SvXMLExport& rExport, const uno::Sequence< beans::PropertyValues >& rHandles )
     170             : {
     171           0 :     sal_uInt32 i, j, nElements = rHandles.getLength();
     172           0 :     if ( nElements )
     173             :     {
     174           0 :         OUString       aStr;
     175           0 :         OUStringBuffer aStrBuffer;
     176             : 
     177           0 :         for ( i = 0; i < nElements; i++ )
     178             :         {
     179           0 :             sal_Bool bPosition = sal_False;
     180           0 :             const uno::Sequence< beans::PropertyValue >& rPropSeq = rHandles[ i ];
     181           0 :             for ( j = 0; j < (sal_uInt32)rPropSeq.getLength(); j++ )
     182             :             {
     183           0 :                 const beans::PropertyValue& rPropVal = rPropSeq[ j ];
     184           0 :                 switch( EASGet( rPropVal.Name ) )
     185             :                 {
     186             :                     case EAS_Position :
     187             :                     {
     188           0 :                         com::sun::star::drawing::EnhancedCustomShapeParameterPair aPosition;
     189           0 :                         if ( rPropVal.Value >>= aPosition )
     190             :                         {
     191           0 :                             ExportParameter( aStrBuffer, aPosition.First );
     192           0 :                             ExportParameter( aStrBuffer, aPosition.Second );
     193           0 :                             aStr = aStrBuffer.makeStringAndClear();
     194           0 :                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_HANDLE_POSITION, aStr );
     195           0 :                             bPosition = sal_True;
     196           0 :                         }
     197             :                     }
     198           0 :                     break;
     199             :                     case EAS_MirroredX :
     200             :                     {
     201           0 :                         sal_Bool bMirroredX = sal_Bool();
     202           0 :                         if ( rPropVal.Value >>= bMirroredX )
     203             :                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_HANDLE_MIRROR_HORIZONTAL,
     204           0 :                                 bMirroredX ? GetXMLToken( XML_TRUE ) : GetXMLToken( XML_FALSE ) );
     205             :                     }
     206           0 :                     break;
     207             :                     case EAS_MirroredY :
     208             :                     {
     209           0 :                         sal_Bool bMirroredY = sal_Bool();
     210           0 :                         if ( rPropVal.Value >>= bMirroredY )
     211             :                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_HANDLE_MIRROR_VERTICAL,
     212           0 :                                 bMirroredY ? GetXMLToken( XML_TRUE ) : GetXMLToken( XML_FALSE ) );
     213             :                     }
     214           0 :                     break;
     215             :                     case EAS_Switched :
     216             :                     {
     217           0 :                         sal_Bool bSwitched = sal_Bool();
     218           0 :                         if ( rPropVal.Value >>= bSwitched )
     219             :                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_HANDLE_SWITCHED,
     220           0 :                                 bSwitched ? GetXMLToken( XML_TRUE ) : GetXMLToken( XML_FALSE ) );
     221             :                     }
     222           0 :                     break;
     223             :                     case EAS_Polar :
     224             :                     {
     225           0 :                         com::sun::star::drawing::EnhancedCustomShapeParameterPair aPolar;
     226           0 :                         if ( rPropVal.Value >>= aPolar )
     227             :                         {
     228           0 :                             ExportParameter( aStrBuffer, aPolar.First );
     229           0 :                             ExportParameter( aStrBuffer, aPolar.Second );
     230           0 :                             aStr = aStrBuffer.makeStringAndClear();
     231           0 :                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_HANDLE_POLAR, aStr );
     232           0 :                         }
     233             :                     }
     234           0 :                     break;
     235             :                     case EAS_RadiusRangeMinimum :
     236             :                     {
     237           0 :                         com::sun::star::drawing::EnhancedCustomShapeParameter aRadiusRangeMinimum;
     238           0 :                         if ( rPropVal.Value >>= aRadiusRangeMinimum )
     239             :                         {
     240           0 :                             ExportParameter( aStrBuffer, aRadiusRangeMinimum );
     241           0 :                             aStr = aStrBuffer.makeStringAndClear();
     242           0 :                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_HANDLE_RADIUS_RANGE_MINIMUM, aStr );
     243           0 :                         }
     244             :                     }
     245           0 :                     break;
     246             :                     case EAS_RadiusRangeMaximum :
     247             :                     {
     248           0 :                         com::sun::star::drawing::EnhancedCustomShapeParameter aRadiusRangeMaximum;
     249           0 :                         if ( rPropVal.Value >>= aRadiusRangeMaximum )
     250             :                         {
     251           0 :                             ExportParameter( aStrBuffer, aRadiusRangeMaximum );
     252           0 :                             aStr = aStrBuffer.makeStringAndClear();
     253           0 :                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_HANDLE_RADIUS_RANGE_MAXIMUM, aStr );
     254           0 :                         }
     255             :                     }
     256           0 :                     break;
     257             :                     case EAS_RangeXMinimum :
     258             :                     {
     259           0 :                         com::sun::star::drawing::EnhancedCustomShapeParameter aXRangeMinimum;
     260           0 :                         if ( rPropVal.Value >>= aXRangeMinimum )
     261             :                         {
     262           0 :                             ExportParameter( aStrBuffer, aXRangeMinimum );
     263           0 :                             aStr = aStrBuffer.makeStringAndClear();
     264           0 :                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_HANDLE_RANGE_X_MINIMUM, aStr );
     265           0 :                         }
     266             :                     }
     267           0 :                     break;
     268             :                     case EAS_RangeXMaximum :
     269             :                     {
     270           0 :                         com::sun::star::drawing::EnhancedCustomShapeParameter aXRangeMaximum;
     271           0 :                         if ( rPropVal.Value >>= aXRangeMaximum )
     272             :                         {
     273           0 :                             ExportParameter( aStrBuffer, aXRangeMaximum );
     274           0 :                             aStr = aStrBuffer.makeStringAndClear();
     275           0 :                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_HANDLE_RANGE_X_MAXIMUM, aStr );
     276           0 :                         }
     277             :                     }
     278           0 :                     break;
     279             :                     case EAS_RangeYMinimum :
     280             :                     {
     281           0 :                         com::sun::star::drawing::EnhancedCustomShapeParameter aYRangeMinimum;
     282           0 :                         if ( rPropVal.Value >>= aYRangeMinimum )
     283             :                         {
     284           0 :                             ExportParameter( aStrBuffer, aYRangeMinimum );
     285           0 :                             aStr = aStrBuffer.makeStringAndClear();
     286           0 :                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_HANDLE_RANGE_Y_MINIMUM, aStr );
     287           0 :                         }
     288             :                     }
     289           0 :                     break;
     290             :                     case EAS_RangeYMaximum :
     291             :                     {
     292           0 :                         com::sun::star::drawing::EnhancedCustomShapeParameter aYRangeMaximum;
     293           0 :                         if ( rPropVal.Value >>= aYRangeMaximum )
     294             :                         {
     295           0 :                             ExportParameter( aStrBuffer, aYRangeMaximum );
     296           0 :                             aStr = aStrBuffer.makeStringAndClear();
     297           0 :                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_HANDLE_RANGE_Y_MAXIMUM, aStr );
     298           0 :                         }
     299             :                     }
     300           0 :                     break;
     301             :                     default:
     302           0 :                         break;
     303             :                 }
     304             :             }
     305           0 :             if ( bPosition )
     306           0 :                 SvXMLElementExport aOBJ( rExport, XML_NAMESPACE_DRAW, XML_HANDLE, sal_True, sal_True );
     307             :             else
     308           0 :                 rExport.ClearAttrList();
     309           0 :         }
     310             :     }
     311           0 : }
     312             : 
     313           0 : void ImpExportEnhancedPath( SvXMLExport& rExport,
     314             :                             const uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeParameterPair >& rCoordinates,
     315             :                             const uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeSegment >& rSegments,
     316             :                             bool bExtended = false )
     317             : {
     318             : 
     319           0 :     OUString       aStr;
     320           0 :     OUStringBuffer aStrBuffer;
     321           0 :     bool bNeedExtended = false;
     322             : 
     323             :     sal_Int32 i, j, k, l;
     324             : 
     325           0 :     sal_Int32 nCoords = rCoordinates.getLength();
     326           0 :     sal_Int32 nSegments = rSegments.getLength();
     327           0 :     sal_Bool bSimpleSegments = nSegments == 0;
     328           0 :     if ( bSimpleSegments )
     329           0 :         nSegments = 4;
     330           0 :     for ( j = i = 0; j < nSegments; j++ )
     331             :     {
     332           0 :         com::sun::star::drawing::EnhancedCustomShapeSegment aSegment;
     333           0 :         if ( bSimpleSegments )
     334             :         {
     335             :             // if there are not enough segments we will default them
     336           0 :             switch( j )
     337             :             {
     338             :                 case 0 :
     339             :                 {
     340           0 :                     aSegment.Count = 1;
     341           0 :                     aSegment.Command = com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::MOVETO;
     342             :                 }
     343           0 :                 break;
     344             :                 case 1 :
     345             :                 {
     346           0 :                     aSegment.Count = (sal_Int16)Min( nCoords - 1, (sal_Int32)32767 );
     347           0 :                     aSegment.Command = com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::LINETO;
     348             :                 }
     349           0 :                 break;
     350             :                 case 2 :
     351             :                 {
     352           0 :                     aSegment.Count = 1;
     353           0 :                     aSegment.Command = com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::CLOSESUBPATH;
     354             :                 }
     355           0 :                 break;
     356             :                 case 3 :
     357             :                 {
     358           0 :                     aSegment.Count = 1;
     359           0 :                     aSegment.Command = com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::ENDSUBPATH;
     360             :                 }
     361           0 :                 break;
     362             :             }
     363             :         }
     364             :         else
     365           0 :             aSegment = rSegments[ j ];
     366             : 
     367           0 :         if ( aStrBuffer.getLength() )
     368           0 :             aStrBuffer.append( (sal_Unicode)' ' );
     369             : 
     370           0 :         sal_Int32 nParameter = 0;
     371           0 :         switch( aSegment.Command )
     372             :         {
     373             :             case com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::CLOSESUBPATH :
     374           0 :                 aStrBuffer.append( (sal_Unicode)'Z' ); break;
     375             :             case com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::ENDSUBPATH :
     376           0 :                 aStrBuffer.append( (sal_Unicode)'N' ); break;
     377             :             case com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::NOFILL :
     378           0 :                 aStrBuffer.append( (sal_Unicode)'F' ); break;
     379             :             case com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::NOSTROKE :
     380           0 :                 aStrBuffer.append( (sal_Unicode)'S' ); break;
     381             : 
     382             :             case com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::MOVETO :
     383           0 :                 aStrBuffer.append( (sal_Unicode)'M' ); nParameter = 1; break;
     384             :             case com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::LINETO :
     385           0 :                 aStrBuffer.append( (sal_Unicode)'L' ); nParameter = 1; break;
     386             :             case com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::CURVETO :
     387           0 :                 aStrBuffer.append( (sal_Unicode)'C' ); nParameter = 3; break;
     388             :             case com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::ANGLEELLIPSETO :
     389           0 :                 aStrBuffer.append( (sal_Unicode)'T' ); nParameter = 3; break;
     390             :             case com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::ANGLEELLIPSE :
     391           0 :                 aStrBuffer.append( (sal_Unicode)'U' ); nParameter = 3; break;
     392             :             case com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::ARCTO :
     393           0 :                 aStrBuffer.append( (sal_Unicode)'A' ); nParameter = 4; break;
     394             :             case com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::ARC :
     395           0 :                 aStrBuffer.append( (sal_Unicode)'B' ); nParameter = 4; break;
     396             :             case com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::CLOCKWISEARCTO :
     397           0 :                 aStrBuffer.append( (sal_Unicode)'W' ); nParameter = 4; break;
     398             :             case com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::CLOCKWISEARC :
     399           0 :                 aStrBuffer.append( (sal_Unicode)'V' ); nParameter = 4; break;
     400             :             case com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::ELLIPTICALQUADRANTX :
     401           0 :                 aStrBuffer.append( (sal_Unicode)'X' ); nParameter = 1; break;
     402             :             case com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::ELLIPTICALQUADRANTY :
     403           0 :                 aStrBuffer.append( (sal_Unicode)'Y' ); nParameter = 1; break;
     404             :             case com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::QUADRATICCURVETO :
     405           0 :                 aStrBuffer.append( (sal_Unicode)'Q' ); nParameter = 2; break;
     406             :             case com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::ARCANGLETO :
     407           0 :                 if ( bExtended ) {
     408           0 :                     aStrBuffer.append( (sal_Unicode)'G' );
     409           0 :                     nParameter = 2;
     410             :                 } else {
     411           0 :                     aStrBuffer.setLength( aStrBuffer.getLength() - 1);
     412           0 :                     bNeedExtended = true;
     413           0 :                     i += 2;
     414             :                 }
     415           0 :                 break;
     416             :             default : // ups, seems to be something wrong
     417             :             {
     418           0 :                 aSegment.Count = 1;
     419           0 :                 aSegment.Command = com::sun::star::drawing::EnhancedCustomShapeSegmentCommand::LINETO;
     420             :             }
     421           0 :             break;
     422             :         }
     423           0 :         if ( nParameter )
     424             :         {
     425           0 :             for ( k = 0; k < aSegment.Count; k++ )
     426             :             {
     427           0 :                 if ( ( i + nParameter ) <= nCoords )
     428             :                 {
     429           0 :                     for ( l = 0; l < nParameter; l++ )
     430             :                     {
     431           0 :                         ExportParameter( aStrBuffer, rCoordinates[ i ].First );
     432           0 :                         ExportParameter( aStrBuffer, rCoordinates[ i++ ].Second );
     433             :                     }
     434             :                 }
     435             :                 else
     436             :                 {
     437           0 :                     j = nSegments;  // error -> exiting
     438           0 :                     break;
     439             :                 }
     440             :             }
     441             :         }
     442             :     }
     443           0 :     aStr = aStrBuffer.makeStringAndClear();
     444           0 :     rExport.AddAttribute( bExtended ? XML_NAMESPACE_DRAW_EXT : XML_NAMESPACE_DRAW, XML_ENHANCED_PATH, aStr );
     445           0 :     if ( !bExtended && bNeedExtended )
     446           0 :         ImpExportEnhancedPath( rExport, rCoordinates, rSegments, true );
     447           0 : }
     448             : 
     449           0 : void ImpExportEnhancedGeometry( SvXMLExport& rExport, const uno::Reference< beans::XPropertySet >& xPropSet )
     450             : {
     451           0 :     sal_Bool bEquations = sal_False;
     452           0 :     uno::Sequence< OUString > aEquations;
     453             : 
     454           0 :     sal_Bool bHandles = sal_False;
     455           0 :     uno::Sequence< beans::PropertyValues > aHandles;
     456             : 
     457           0 :     sal_Bool bCoordinates = sal_False;
     458           0 :     uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeSegment > aSegments;
     459           0 :     uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeParameterPair > aCoordinates;
     460             : 
     461           0 :     uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeAdjustmentValue > aAdjustmentValues;
     462             : 
     463           0 :     OUString       aStr;
     464           0 :     OUStringBuffer aStrBuffer;
     465           0 :     SvXMLUnitConverter& rUnitConverter = rExport.GetMM100UnitConverter();
     466             : 
     467           0 :     uno::Reference< beans::XPropertySetInfo > xPropSetInfo( xPropSet->getPropertySetInfo() );
     468             : 
     469             :     // geometry
     470           0 :     const OUString sCustomShapeGeometry( "CustomShapeGeometry" );
     471           0 :     if ( xPropSetInfo.is() && xPropSetInfo->hasPropertyByName( sCustomShapeGeometry ) )
     472             :     {
     473           0 :         uno::Any aGeoPropSet( xPropSet->getPropertyValue( sCustomShapeGeometry ) );
     474           0 :         uno::Sequence< beans::PropertyValue > aGeoPropSeq;
     475             : 
     476           0 :         if ( aGeoPropSet >>= aGeoPropSeq )
     477             :         {
     478           0 :             const OUString sCustomShapeType( "NonPrimitive" );
     479           0 :             OUString aCustomShapeType( sCustomShapeType );
     480             : 
     481           0 :             sal_Int32 j, nGeoPropCount = aGeoPropSeq.getLength();
     482           0 :             for ( j = 0; j < nGeoPropCount; j++ )
     483             :             {
     484           0 :                 const beans::PropertyValue& rGeoProp = aGeoPropSeq[ j ];
     485           0 :                 switch( EASGet( rGeoProp.Name ) )
     486             :                 {
     487             :                     case EAS_Type :
     488             :                     {
     489           0 :                         rGeoProp.Value >>= aCustomShapeType;
     490             :                     }
     491           0 :                     break;
     492             :                     case EAS_MirroredX :
     493             :                     {
     494           0 :                         sal_Bool bMirroredX = sal_Bool();
     495           0 :                         if ( rGeoProp.Value >>= bMirroredX )
     496             :                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_MIRROR_HORIZONTAL,
     497           0 :                                 bMirroredX ? GetXMLToken( XML_TRUE ) : GetXMLToken( XML_FALSE ) );
     498             :                     }
     499           0 :                     break;
     500             :                     case EAS_MirroredY :
     501             :                     {
     502           0 :                         sal_Bool bMirroredY = sal_Bool();
     503           0 :                         if ( rGeoProp.Value >>= bMirroredY )
     504             :                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_MIRROR_VERTICAL,
     505           0 :                                 bMirroredY ? GetXMLToken( XML_TRUE ) : GetXMLToken( XML_FALSE ) );
     506             :                     }
     507           0 :                     break;
     508             :                     case EAS_ViewBox :
     509             :                     {
     510           0 :                         awt::Rectangle aRect;
     511           0 :                         if ( rGeoProp.Value >>= aRect )
     512             :                         {
     513           0 :                             SdXMLImExViewBox aViewBox( aRect.X, aRect.Y, aRect.Width, aRect.Height );
     514           0 :                             rExport.AddAttribute( XML_NAMESPACE_SVG, XML_VIEWBOX, aViewBox.GetExportString() );
     515             :                         }
     516             :                     }
     517           0 :                     break;
     518             :                     case EAS_TextRotateAngle :
     519             :                     {
     520           0 :                         double fTextRotateAngle = 0;
     521           0 :                         if ( rGeoProp.Value >>= fTextRotateAngle )
     522             :                         {
     523             :                             ::sax::Converter::convertDouble(
     524           0 :                                     aStrBuffer, fTextRotateAngle );
     525           0 :                             aStr = aStrBuffer.makeStringAndClear();
     526           0 :                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_TEXT_ROTATE_ANGLE, aStr );
     527             :                         }
     528             :                     }
     529           0 :                     break;
     530             :                     case EAS_Extrusion :
     531             :                     {
     532           0 :                         uno::Sequence< beans::PropertyValue > aExtrusionPropSeq;
     533           0 :                         if ( rGeoProp.Value >>= aExtrusionPropSeq )
     534             :                         {
     535           0 :                             sal_Int32 i, nCount = aExtrusionPropSeq.getLength();
     536           0 :                             for ( i = 0; i < nCount; i++ )
     537             :                             {
     538           0 :                                 const beans::PropertyValue& rProp = aExtrusionPropSeq[ i ];
     539           0 :                                 switch( EASGet( rProp.Name ) )
     540             :                                 {
     541             :                                     case EAS_Extrusion :
     542             :                                     {
     543           0 :                                         sal_Bool bExtrusionOn = sal_Bool();
     544           0 :                                         if ( rProp.Value >>= bExtrusionOn )
     545             :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION,
     546           0 :                                                 bExtrusionOn ? GetXMLToken( XML_TRUE ) : GetXMLToken( XML_FALSE ) );
     547             :                                     }
     548           0 :                                     break;
     549             :                                     case EAS_Brightness :
     550             :                                     {
     551           0 :                                         double fExtrusionBrightness = 0;
     552           0 :                                         if ( rProp.Value >>= fExtrusionBrightness )
     553             :                                         {
     554             :                                             ::sax::Converter::convertDouble(
     555             :                                                 aStrBuffer,
     556             :                                                 fExtrusionBrightness,
     557             :                                                 false,
     558             :                                                 util::MeasureUnit::PERCENT,
     559           0 :                                                 util::MeasureUnit::PERCENT);
     560           0 :                                             aStrBuffer.append( (sal_Unicode)'%' );
     561           0 :                                             aStr = aStrBuffer.makeStringAndClear();
     562           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_BRIGHTNESS, aStr );
     563             :                                         }
     564             :                                     }
     565           0 :                                     break;
     566             :                                     case EAS_Depth :
     567             :                                     {
     568           0 :                                         com::sun::star::drawing::EnhancedCustomShapeParameterPair aDepthParaPair;
     569           0 :                                         if ( rProp.Value >>= aDepthParaPair )
     570             :                                         {
     571           0 :                                             double fDepth = 0;
     572           0 :                                             if ( aDepthParaPair.First.Value >>= fDepth )
     573             :                                             {
     574           0 :                                                 rExport.GetMM100UnitConverter().convertDouble( aStrBuffer, fDepth, sal_True );
     575           0 :                                                 ExportParameter( aStrBuffer, aDepthParaPair.Second );
     576           0 :                                                 aStr = aStrBuffer.makeStringAndClear();
     577           0 :                                                 rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_DEPTH, aStr );
     578             :                                             }
     579           0 :                                         }
     580             :                                     }
     581           0 :                                     break;
     582             :                                     case EAS_Diffusion :
     583             :                                     {
     584           0 :                                         double fExtrusionDiffusion = 0;
     585           0 :                                         if ( rProp.Value >>= fExtrusionDiffusion )
     586             :                                         {
     587             :                                             ::sax::Converter::convertDouble(
     588             :                                                 aStrBuffer,
     589             :                                                 fExtrusionDiffusion,
     590             :                                                 false,
     591             :                                                 util::MeasureUnit::PERCENT,
     592           0 :                                                 util::MeasureUnit::PERCENT);
     593           0 :                                             aStrBuffer.append( (sal_Unicode)'%' );
     594           0 :                                             aStr = aStrBuffer.makeStringAndClear();
     595           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_DIFFUSION, aStr );
     596             :                                         }
     597             :                                     }
     598           0 :                                     break;
     599             :                                     case EAS_NumberOfLineSegments :
     600             :                                     {
     601           0 :                                         sal_Int32 nExtrusionNumberOfLineSegments = 0;
     602           0 :                                         if ( rProp.Value >>= nExtrusionNumberOfLineSegments )
     603           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_NUMBER_OF_LINE_SEGMENTS, OUString::valueOf( nExtrusionNumberOfLineSegments ) );
     604             :                                     }
     605           0 :                                     break;
     606             :                                     case EAS_LightFace :
     607             :                                     {
     608           0 :                                         sal_Bool bExtrusionLightFace = sal_Bool();
     609           0 :                                         if ( rProp.Value >>= bExtrusionLightFace )
     610             :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_LIGHT_FACE,
     611           0 :                                                 bExtrusionLightFace ? GetXMLToken( XML_TRUE ) : GetXMLToken( XML_FALSE ) );
     612             :                                     }
     613           0 :                                     break;
     614             :                                     case EAS_FirstLightHarsh :
     615             :                                     {
     616           0 :                                         sal_Bool bExtrusionFirstLightHarsh = sal_Bool();
     617           0 :                                         if ( rProp.Value >>= bExtrusionFirstLightHarsh )
     618             :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_FIRST_LIGHT_HARSH,
     619           0 :                                                 bExtrusionFirstLightHarsh ? GetXMLToken( XML_TRUE ) : GetXMLToken( XML_FALSE ) );
     620             :                                     }
     621           0 :                                     break;
     622             :                                     case EAS_SecondLightHarsh :
     623             :                                     {
     624           0 :                                         sal_Bool bExtrusionSecondLightHarsh = sal_Bool();
     625           0 :                                         if ( rProp.Value >>= bExtrusionSecondLightHarsh )
     626             :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_SECOND_LIGHT_HARSH,
     627           0 :                                                 bExtrusionSecondLightHarsh ? GetXMLToken( XML_TRUE ) : GetXMLToken( XML_FALSE ) );
     628             :                                     }
     629           0 :                                     break;
     630             :                                     case EAS_FirstLightLevel :
     631             :                                     {
     632           0 :                                         double fExtrusionFirstLightLevel = 0;
     633           0 :                                         if ( rProp.Value >>= fExtrusionFirstLightLevel )
     634             :                                         {
     635             :                                             ::sax::Converter::convertDouble(
     636             :                                                 aStrBuffer,
     637             :                                                 fExtrusionFirstLightLevel,
     638             :                                                 false,
     639             :                                                 util::MeasureUnit::PERCENT,
     640           0 :                                                 util::MeasureUnit::PERCENT);
     641           0 :                                             aStrBuffer.append( (sal_Unicode)'%' );
     642           0 :                                             aStr = aStrBuffer.makeStringAndClear();
     643           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_FIRST_LIGHT_LEVEL, aStr );
     644             :                                         }
     645             :                                     }
     646           0 :                                     break;
     647             :                                     case EAS_SecondLightLevel :
     648             :                                     {
     649           0 :                                         double fExtrusionSecondLightLevel = 0;
     650           0 :                                         if ( rProp.Value >>= fExtrusionSecondLightLevel )
     651             :                                         {
     652             :                                             ::sax::Converter::convertDouble(
     653             :                                                 aStrBuffer,
     654             :                                                 fExtrusionSecondLightLevel,
     655             :                                                 false,
     656             :                                                 util::MeasureUnit::PERCENT,
     657           0 :                                                 util::MeasureUnit::PERCENT);
     658           0 :                                             aStrBuffer.append( (sal_Unicode)'%' );
     659           0 :                                             aStr = aStrBuffer.makeStringAndClear();
     660           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_SECOND_LIGHT_LEVEL, aStr );
     661             :                                         }
     662             :                                     }
     663           0 :                                     break;
     664             :                                     case EAS_FirstLightDirection :
     665             :                                     {
     666           0 :                                         drawing::Direction3D aExtrusionFirstLightDirection;
     667           0 :                                         if ( rProp.Value >>= aExtrusionFirstLightDirection )
     668             :                                         {
     669             :                                             ::basegfx::B3DVector aVec3D( aExtrusionFirstLightDirection.DirectionX, aExtrusionFirstLightDirection.DirectionY,
     670           0 :                                                 aExtrusionFirstLightDirection.DirectionZ );
     671           0 :                                             rUnitConverter.convertB3DVector( aStrBuffer, aVec3D );
     672           0 :                                             aStr = aStrBuffer.makeStringAndClear();
     673           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_FIRST_LIGHT_DIRECTION, aStr );
     674             :                                         }
     675             :                                     }
     676           0 :                                     break;
     677             :                                     case EAS_SecondLightDirection :
     678             :                                     {
     679           0 :                                         drawing::Direction3D aExtrusionSecondLightDirection;
     680           0 :                                         if ( rProp.Value >>= aExtrusionSecondLightDirection )
     681             :                                         {
     682             :                                             ::basegfx::B3DVector aVec3D( aExtrusionSecondLightDirection.DirectionX, aExtrusionSecondLightDirection.DirectionY,
     683           0 :                                                 aExtrusionSecondLightDirection.DirectionZ );
     684           0 :                                             rUnitConverter.convertB3DVector( aStrBuffer, aVec3D );
     685           0 :                                             aStr = aStrBuffer.makeStringAndClear();
     686           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_SECOND_LIGHT_DIRECTION, aStr );
     687             :                                         }
     688             :                                     }
     689           0 :                                     break;
     690             :                                     case EAS_Metal :
     691             :                                     {
     692           0 :                                         sal_Bool bExtrusionMetal = sal_Bool();
     693           0 :                                         if ( rProp.Value >>= bExtrusionMetal )
     694             :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_METAL,
     695           0 :                                                 bExtrusionMetal ? GetXMLToken( XML_TRUE ) : GetXMLToken( XML_FALSE ) );
     696             :                                     }
     697           0 :                                     break;
     698             :                                     case EAS_ShadeMode :
     699             :                                     {
     700             :                                         // shadeMode
     701             :                                         drawing::ShadeMode eShadeMode;
     702           0 :                                         if( rProp.Value >>= eShadeMode )
     703             :                                         {
     704           0 :                                             if( eShadeMode == drawing::ShadeMode_FLAT )
     705           0 :                                                 aStr = GetXMLToken( XML_FLAT );
     706           0 :                                             else if( eShadeMode == drawing::ShadeMode_PHONG )
     707           0 :                                                 aStr = GetXMLToken( XML_PHONG );
     708           0 :                                             else if( eShadeMode == drawing::ShadeMode_SMOOTH )
     709           0 :                                                 aStr = GetXMLToken( XML_GOURAUD );
     710             :                                             else
     711           0 :                                                 aStr = GetXMLToken( XML_DRAFT );
     712             :                                         }
     713             :                                         else
     714             :                                         {
     715             :                                             // ShadeMode enum not there, write default
     716           0 :                                             aStr = GetXMLToken( XML_FLAT);
     717             :                                         }
     718           0 :                                         rExport.AddAttribute( XML_NAMESPACE_DR3D, XML_SHADE_MODE, aStr );
     719             :                                     }
     720           0 :                                     break;
     721             :                                     case EAS_RotateAngle :
     722             :                                     {
     723           0 :                                         com::sun::star::drawing::EnhancedCustomShapeParameterPair aRotateAngleParaPair;
     724           0 :                                         if ( rProp.Value >>= aRotateAngleParaPair )
     725             :                                         {
     726           0 :                                             ExportParameter( aStrBuffer, aRotateAngleParaPair.First );
     727           0 :                                             ExportParameter( aStrBuffer, aRotateAngleParaPair.Second );
     728           0 :                                             aStr = aStrBuffer.makeStringAndClear();
     729           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_ROTATION_ANGLE, aStr );
     730           0 :                                         }
     731             :                                     }
     732           0 :                                     break;
     733             :                                     case EAS_RotationCenter :
     734             :                                     {
     735           0 :                                         drawing::Direction3D aExtrusionRotationCenter;
     736           0 :                                         if ( rProp.Value >>= aExtrusionRotationCenter )
     737             :                                         {
     738             :                                             ::basegfx::B3DVector aVec3D( aExtrusionRotationCenter.DirectionX, aExtrusionRotationCenter.DirectionY,
     739           0 :                                                 aExtrusionRotationCenter.DirectionZ );
     740           0 :                                             rUnitConverter.convertB3DVector( aStrBuffer, aVec3D );
     741           0 :                                             aStr = aStrBuffer.makeStringAndClear();
     742           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_ROTATION_CENTER, aStr );
     743             :                                         }
     744             :                                     }
     745           0 :                                     break;
     746             :                                     case EAS_Shininess :
     747             :                                     {
     748           0 :                                         double fExtrusionShininess = 0;
     749           0 :                                         if ( rProp.Value >>= fExtrusionShininess )
     750             :                                         {
     751             :                                             ::sax::Converter::convertDouble(
     752             :                                                 aStrBuffer,
     753             :                                                 fExtrusionShininess,
     754             :                                                 false,
     755             :                                                 util::MeasureUnit::PERCENT,
     756           0 :                                                 util::MeasureUnit::PERCENT);
     757           0 :                                             aStrBuffer.append( (sal_Unicode)'%' );
     758           0 :                                             aStr = aStrBuffer.makeStringAndClear();
     759           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_SHININESS, aStr );
     760             :                                         }
     761             :                                     }
     762           0 :                                     break;
     763             :                                     case EAS_Skew :
     764             :                                     {
     765           0 :                                         com::sun::star::drawing::EnhancedCustomShapeParameterPair aSkewParaPair;
     766           0 :                                         if ( rProp.Value >>= aSkewParaPair )
     767             :                                         {
     768           0 :                                             ExportParameter( aStrBuffer, aSkewParaPair.First );
     769           0 :                                             ExportParameter( aStrBuffer, aSkewParaPair.Second );
     770           0 :                                             aStr = aStrBuffer.makeStringAndClear();
     771           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_SKEW, aStr );
     772           0 :                                         }
     773             :                                     }
     774           0 :                                     break;
     775             :                                     case EAS_Specularity :
     776             :                                     {
     777           0 :                                         double fExtrusionSpecularity = 0;
     778           0 :                                         if ( rProp.Value >>= fExtrusionSpecularity )
     779             :                                         {
     780             :                                             ::sax::Converter::convertDouble(
     781             :                                                 aStrBuffer,
     782             :                                                 fExtrusionSpecularity,
     783             :                                                 false,
     784             :                                                 util::MeasureUnit::PERCENT,
     785           0 :                                                 util::MeasureUnit::PERCENT);
     786           0 :                                             aStrBuffer.append( (sal_Unicode)'%' );
     787           0 :                                             aStr = aStrBuffer.makeStringAndClear();
     788           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_SPECULARITY, aStr );
     789             :                                         }
     790             :                                     }
     791           0 :                                     break;
     792             :                                     case EAS_ProjectionMode :
     793             :                                     {
     794             :                                         drawing::ProjectionMode eProjectionMode;
     795           0 :                                         if ( rProp.Value >>= eProjectionMode )
     796             :                                             rExport.AddAttribute( XML_NAMESPACE_DR3D, XML_PROJECTION,
     797           0 :                                                 eProjectionMode == drawing::ProjectionMode_PARALLEL ? GetXMLToken( XML_PARALLEL ) : GetXMLToken( XML_PERSPECTIVE ) );
     798             :                                     }
     799           0 :                                     break;
     800             :                                     case EAS_ViewPoint :
     801             :                                     {
     802           0 :                                         drawing::Position3D aExtrusionViewPoint;
     803           0 :                                         if ( rProp.Value >>= aExtrusionViewPoint )
     804             :                                         {
     805           0 :                                             rUnitConverter.convertPosition3D( aStrBuffer, aExtrusionViewPoint );
     806           0 :                                             aStr = aStrBuffer.makeStringAndClear();
     807           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_VIEWPOINT, aStr );
     808             :                                         }
     809             :                                     }
     810           0 :                                     break;
     811             :                                     case EAS_Origin :
     812             :                                     {
     813           0 :                                         com::sun::star::drawing::EnhancedCustomShapeParameterPair aOriginParaPair;
     814           0 :                                         if ( rProp.Value >>= aOriginParaPair )
     815             :                                         {
     816           0 :                                             ExportParameter( aStrBuffer, aOriginParaPair.First );
     817           0 :                                             ExportParameter( aStrBuffer, aOriginParaPair.Second );
     818           0 :                                             aStr = aStrBuffer.makeStringAndClear();
     819           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_ORIGIN, aStr );
     820           0 :                                         }
     821             :                                     }
     822           0 :                                     break;
     823             :                                     case EAS_Color :
     824             :                                     {
     825           0 :                                         sal_Bool bExtrusionColor = sal_Bool();
     826           0 :                                         if ( rProp.Value >>= bExtrusionColor )
     827             :                                         {
     828             :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_COLOR,
     829           0 :                                                 bExtrusionColor ? GetXMLToken( XML_TRUE ) : GetXMLToken( XML_FALSE ) );
     830             :                                         }
     831             :                                     }
     832           0 :                                     break;
     833             :                                     default:
     834           0 :                                         break;
     835             :                                 }
     836             :                             }
     837           0 :                         }
     838             :                     }
     839           0 :                     break;
     840             :                     case EAS_TextPath :
     841             :                     {
     842           0 :                         uno::Sequence< beans::PropertyValue > aTextPathPropSeq;
     843           0 :                         if ( rGeoProp.Value >>= aTextPathPropSeq )
     844             :                         {
     845           0 :                             sal_Int32 i, nCount = aTextPathPropSeq.getLength();
     846           0 :                             for ( i = 0; i < nCount; i++ )
     847             :                             {
     848           0 :                                 const beans::PropertyValue& rProp = aTextPathPropSeq[ i ];
     849           0 :                                 switch( EASGet( rProp.Name ) )
     850             :                                 {
     851             :                                     case EAS_TextPath :
     852             :                                     {
     853           0 :                                         sal_Bool bTextPathOn = sal_Bool();
     854           0 :                                         if ( rProp.Value >>= bTextPathOn )
     855             :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_TEXT_PATH,
     856           0 :                                                 bTextPathOn ? GetXMLToken( XML_TRUE ) : GetXMLToken( XML_FALSE ) );
     857             :                                     }
     858           0 :                                     break;
     859             :                                     case EAS_TextPathMode :
     860             :                                     {
     861             :                                         com::sun::star::drawing::EnhancedCustomShapeTextPathMode eTextPathMode;
     862           0 :                                         if ( rProp.Value >>= eTextPathMode )
     863             :                                         {
     864           0 :                                             switch ( eTextPathMode )
     865             :                                             {
     866           0 :                                                 case com::sun::star::drawing::EnhancedCustomShapeTextPathMode_NORMAL: aStr = GetXMLToken( XML_NORMAL ); break;
     867           0 :                                                 case com::sun::star::drawing::EnhancedCustomShapeTextPathMode_PATH  : aStr = GetXMLToken( XML_PATH );   break;
     868           0 :                                                 case com::sun::star::drawing::EnhancedCustomShapeTextPathMode_SHAPE : aStr = GetXMLToken( XML_SHAPE );  break;
     869             :                                                 default:
     870           0 :                                                     break;
     871             :                                             }
     872           0 :                                             if ( !aStr.isEmpty() )
     873           0 :                                                 rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_TEXT_PATH_MODE, aStr );
     874             :                                         }
     875             :                                     }
     876           0 :                                     break;
     877             :                                     case EAS_ScaleX :
     878             :                                     {
     879           0 :                                         sal_Bool bScaleX = sal_Bool();
     880           0 :                                         if ( rProp.Value >>= bScaleX )
     881             :                                         {
     882           0 :                                             aStr = bScaleX ? GetXMLToken( XML_SHAPE ) : GetXMLToken( XML_PATH );
     883           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_TEXT_PATH_SCALE, aStr );
     884             :                                         }
     885             :                                     }
     886           0 :                                     break;
     887             :                                     case EAS_SameLetterHeights :
     888             :                                     {
     889           0 :                                         sal_Bool bSameLetterHeights = sal_Bool();
     890           0 :                                         if ( rProp.Value >>= bSameLetterHeights )
     891             :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_TEXT_PATH_SAME_LETTER_HEIGHTS,
     892           0 :                                                 bSameLetterHeights ? GetXMLToken( XML_TRUE ) : GetXMLToken( XML_FALSE ) );
     893             :                                     }
     894           0 :                                     break;
     895             :                                     default:
     896           0 :                                         break;
     897             :                                 }
     898             :                             }
     899           0 :                         }
     900             :                     }
     901           0 :                     break;
     902             :                     case EAS_Path :
     903             :                     {
     904           0 :                         uno::Sequence< beans::PropertyValue > aPathPropSeq;
     905           0 :                         if ( rGeoProp.Value >>= aPathPropSeq )
     906             :                         {
     907           0 :                             sal_Int32 i, nCount = aPathPropSeq.getLength();
     908           0 :                             for ( i = 0; i < nCount; i++ )
     909             :                             {
     910           0 :                                 const beans::PropertyValue& rProp = aPathPropSeq[ i ];
     911           0 :                                 switch( EASGet( rProp.Name ) )
     912             :                                 {
     913             :                                     case EAS_ExtrusionAllowed :
     914             :                                     {
     915           0 :                                         sal_Bool bExtrusionAllowed = sal_Bool();
     916           0 :                                         if ( rProp.Value >>= bExtrusionAllowed )
     917             :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_ALLOWED,
     918           0 :                                                 bExtrusionAllowed ? GetXMLToken( XML_TRUE ) : GetXMLToken( XML_FALSE ) );
     919             :                                     }
     920           0 :                                     break;
     921             :                                     case EAS_ConcentricGradientFillAllowed :
     922             :                                     {
     923           0 :                                         sal_Bool bConcentricGradientFillAllowed = sal_Bool();
     924           0 :                                         if ( rProp.Value >>= bConcentricGradientFillAllowed )
     925             :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_CONCENTRIC_GRADIENT_FILL_ALLOWED,
     926           0 :                                                 bConcentricGradientFillAllowed ? GetXMLToken( XML_TRUE ) : GetXMLToken( XML_FALSE ) );
     927             :                                     }
     928           0 :                                     break;
     929             :                                     case EAS_TextPathAllowed  :
     930             :                                     {
     931           0 :                                         sal_Bool bTextPathAllowed = sal_Bool();
     932           0 :                                         if ( rProp.Value >>= bTextPathAllowed )
     933             :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_TEXT_PATH_ALLOWED,
     934           0 :                                                 bTextPathAllowed ? GetXMLToken( XML_TRUE ) : GetXMLToken( XML_FALSE ) );
     935             :                                     }
     936           0 :                                     break;
     937             :                                     case EAS_GluePoints :
     938             :                                     {
     939           0 :                                         com::sun::star::uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeParameterPair> aGluePoints;
     940           0 :                                         if ( rProp.Value >>= aGluePoints )
     941             :                                         {
     942           0 :                                             sal_Int32 k, nElements = aGluePoints.getLength();
     943           0 :                                             if ( nElements )
     944             :                                             {
     945           0 :                                                 for( k = 0; k < nElements; k++ )
     946             :                                                 {
     947           0 :                                                     ExportParameter( aStrBuffer, aGluePoints[ k ].First );
     948           0 :                                                     ExportParameter( aStrBuffer, aGluePoints[ k ].Second );
     949             :                                                 }
     950           0 :                                                 aStr = aStrBuffer.makeStringAndClear();
     951             :                                             }
     952           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_GLUE_POINTS, aStr );
     953           0 :                                         }
     954             :                                     }
     955           0 :                                     break;
     956             :                                     case EAS_GluePointType :
     957             :                                     {
     958           0 :                                         sal_Int16 nGluePointType = sal_Int16();
     959           0 :                                         if ( rProp.Value >>= nGluePointType )
     960             :                                         {
     961           0 :                                             switch ( nGluePointType )
     962             :                                             {
     963           0 :                                                 case com::sun::star::drawing::EnhancedCustomShapeGluePointType::NONE     : aStr = GetXMLToken( XML_NONE );    break;
     964           0 :                                                 case com::sun::star::drawing::EnhancedCustomShapeGluePointType::SEGMENTS : aStr = GetXMLToken( XML_SEGMENTS ); break;
     965           0 :                                                 case com::sun::star::drawing::EnhancedCustomShapeGluePointType::RECT     : aStr = GetXMLToken( XML_RECTANGLE ); break;
     966             :                                             }
     967           0 :                                             if ( !aStr.isEmpty() )
     968           0 :                                                 rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_GLUE_POINT_TYPE, aStr );
     969             :                                         }
     970             :                                     }
     971           0 :                                     break;
     972             :                                     case EAS_Coordinates :
     973             :                                     {
     974           0 :                                         bCoordinates = ( rProp.Value >>= aCoordinates );
     975             :                                     }
     976           0 :                                     break;
     977             :                                     case EAS_Segments :
     978             :                                     {
     979           0 :                                         rProp.Value >>= aSegments;
     980             :                                     }
     981           0 :                                     break;
     982             :                                     case EAS_StretchX :
     983             :                                     {
     984           0 :                                         sal_Int32 nStretchPoint = 0;
     985           0 :                                         if ( rProp.Value >>= nStretchPoint )
     986           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_PATH_STRETCHPOINT_X, OUString::valueOf( nStretchPoint ) );
     987             :                                     }
     988           0 :                                     break;
     989             :                                     case EAS_StretchY :
     990             :                                     {
     991           0 :                                         sal_Int32 nStretchPoint = 0;
     992           0 :                                         if ( rProp.Value >>= nStretchPoint )
     993           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_PATH_STRETCHPOINT_Y, OUString::valueOf( nStretchPoint ) );
     994             :                                     }
     995           0 :                                     break;
     996             :                                     case EAS_TextFrames :
     997             :                                     {
     998           0 :                                         com::sun::star::uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeTextFrame > aPathTextFrames;
     999           0 :                                         if ( rProp.Value >>= aPathTextFrames )
    1000             :                                         {
    1001           0 :                                             if ( (sal_uInt16)aPathTextFrames.getLength() )
    1002             :                                             {
    1003           0 :                                                 sal_uInt16 k, nElements = (sal_uInt16)aPathTextFrames.getLength();
    1004           0 :                                                 for ( k = 0; k < nElements; k++ )
    1005             :                                                 {
    1006           0 :                                                     ExportParameter( aStrBuffer, aPathTextFrames[ k ].TopLeft.First );
    1007           0 :                                                     ExportParameter( aStrBuffer, aPathTextFrames[ k ].TopLeft.Second );
    1008           0 :                                                     ExportParameter( aStrBuffer, aPathTextFrames[ k ].BottomRight.First );
    1009           0 :                                                     ExportParameter( aStrBuffer, aPathTextFrames[ k ].BottomRight.Second );
    1010             :                                                 }
    1011           0 :                                                 aStr = aStrBuffer.makeStringAndClear();
    1012             :                                             }
    1013           0 :                                             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_TEXT_AREAS, aStr );
    1014           0 :                                         }
    1015             :                                     }
    1016           0 :                                     break;
    1017             :                                     default:
    1018           0 :                                         break;
    1019             :                                 }
    1020             :                             }
    1021           0 :                         }
    1022             :                     }
    1023           0 :                     break;
    1024             :                     case EAS_Equations :
    1025             :                     {
    1026           0 :                         bEquations = ( rGeoProp.Value >>= aEquations );
    1027             :                     }
    1028           0 :                     break;
    1029             :                     case EAS_Handles :
    1030             :                     {
    1031           0 :                         bHandles = ( rGeoProp.Value >>= aHandles );
    1032             :                     }
    1033           0 :                     break;
    1034             :                     case EAS_AdjustmentValues :
    1035             :                     {
    1036           0 :                         rGeoProp.Value >>= aAdjustmentValues;
    1037             :                     }
    1038           0 :                     break;
    1039             :                     default:
    1040           0 :                         break;
    1041             :                 }
    1042             :             }   // for
    1043           0 :             rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_TYPE, aCustomShapeType );
    1044             : 
    1045             :             // adjustments
    1046           0 :             sal_Int32 nAdjustmentValues = aAdjustmentValues.getLength();
    1047           0 :             if ( nAdjustmentValues )
    1048             :             {
    1049           0 :                 sal_Int32 i, nValue = 0;
    1050           0 :                 for ( i = 0; i < nAdjustmentValues; i++ )
    1051             :                 {
    1052           0 :                     if ( i )
    1053           0 :                         aStrBuffer.append( (sal_Unicode)' ' );
    1054             : 
    1055           0 :                     const com::sun::star::drawing::EnhancedCustomShapeAdjustmentValue& rAdj = aAdjustmentValues[ i ];
    1056           0 :                     if ( rAdj.State == beans::PropertyState_DIRECT_VALUE )
    1057             :                     {
    1058           0 :                         if ( rAdj.Value.getValueTypeClass() == uno::TypeClass_DOUBLE )
    1059             :                         {
    1060           0 :                             double fValue = 0.0;
    1061           0 :                             rAdj.Value >>= fValue;
    1062           0 :                             ::sax::Converter::convertDouble(aStrBuffer, fValue);
    1063             :                         }
    1064             :                         else
    1065             :                         {
    1066           0 :                             rAdj.Value >>= nValue;
    1067           0 :                             ::sax::Converter::convertNumber(aStrBuffer, nValue);
    1068             :                         }
    1069             :                     }
    1070             :                     else
    1071             :                     {
    1072             :                         // this should not be, but better than setting nothing
    1073           0 :                         ::sax::Converter::convertNumber( aStrBuffer, 0 );
    1074             :                     }
    1075             :                 }
    1076           0 :                 aStr = aStrBuffer.makeStringAndClear();
    1077           0 :                 rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_MODIFIERS, aStr );
    1078             :             }
    1079           0 :             if ( bCoordinates )
    1080           0 :                 ImpExportEnhancedPath( rExport, aCoordinates, aSegments );
    1081           0 :         }
    1082             :     }
    1083           0 :     SvXMLElementExport aOBJ( rExport, XML_NAMESPACE_DRAW, XML_ENHANCED_GEOMETRY, sal_True, sal_True );
    1084           0 :     if ( bEquations )
    1085           0 :         ImpExportEquations( rExport, aEquations );
    1086           0 :     if ( bHandles )
    1087           0 :         ImpExportHandles( rExport, aHandles );
    1088           0 : }
    1089             : 
    1090           0 : void XMLShapeExport::ImpExportCustomShape(
    1091             :     const uno::Reference< drawing::XShape >& xShape,
    1092             :     XmlShapeType, sal_Int32 nFeatures, com::sun::star::awt::Point* pRefPoint )
    1093             : {
    1094           0 :     const uno::Reference< beans::XPropertySet > xPropSet(xShape, uno::UNO_QUERY);
    1095           0 :     if ( xPropSet.is() )
    1096             :     {
    1097           0 :         OUString aStr;
    1098           0 :         uno::Reference< beans::XPropertySetInfo > xPropSetInfo( xPropSet->getPropertySetInfo() );
    1099             : 
    1100             :         // Transformation
    1101           0 :         ImpExportNewTrans( xPropSet, nFeatures, pRefPoint );
    1102             : 
    1103           0 :         if ( xPropSetInfo.is() )
    1104             :         {
    1105           0 :             const OUString sCustomShapeEngine( "CustomShapeEngine" );
    1106           0 :             if ( xPropSetInfo->hasPropertyByName( sCustomShapeEngine ) )
    1107             :             {
    1108           0 :                 uno::Any aEngine( xPropSet->getPropertyValue( sCustomShapeEngine ) );
    1109           0 :                 if ( ( aEngine >>= aStr ) && !aStr.isEmpty() )
    1110           0 :                     mrExport.AddAttribute( XML_NAMESPACE_DRAW, XML_ENGINE, aStr );
    1111             :             }
    1112           0 :             const OUString sCustomShapeData( "CustomShapeData" );
    1113           0 :             if ( xPropSetInfo->hasPropertyByName( sCustomShapeData ) )
    1114             :             {
    1115           0 :                 uno::Any aData( xPropSet->getPropertyValue( sCustomShapeData ) );
    1116           0 :                 if ( ( aData >>= aStr ) && !aStr.isEmpty() )
    1117           0 :                     mrExport.AddAttribute( XML_NAMESPACE_DRAW, XML_DATA, aStr );
    1118           0 :             }
    1119             :         }
    1120           0 :         sal_Bool bCreateNewline( (nFeatures & SEF_EXPORT_NO_WS) == 0 ); // #86116#/#92210#
    1121           0 :         SvXMLElementExport aOBJ( mrExport, XML_NAMESPACE_DRAW, XML_CUSTOM_SHAPE, bCreateNewline, sal_True );
    1122           0 :         ImpExportDescription( xShape ); // #i68101#
    1123           0 :         ImpExportEvents( xShape );
    1124           0 :         ImpExportGluePoints( xShape );
    1125           0 :         ImpExportText( xShape );
    1126           0 :         ImpExportEnhancedGeometry( mrExport, xPropSet );
    1127           0 :     }
    1128           0 : }
    1129             : 
    1130           0 : void XMLShapeExport::ImpExportTableShape( const uno::Reference< drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures, com::sun::star::awt::Point* pRefPoint )
    1131             : {
    1132           0 :     uno::Reference< beans::XPropertySet > xPropSet(xShape, uno::UNO_QUERY);
    1133           0 :     uno::Reference< container::XNamed > xNamed(xShape, uno::UNO_QUERY);
    1134             : 
    1135             :     DBG_ASSERT( xPropSet.is() && xNamed.is(), "xmloff::XMLShapeExport::ImpExportTableShape(), tabe shape is not implementing needed interfaces");
    1136           0 :     if(xPropSet.is() && xNamed.is()) try
    1137             :     {
    1138             :         // Transformation
    1139           0 :         ImpExportNewTrans(xPropSet, nFeatures, pRefPoint);
    1140             : 
    1141           0 :         sal_Bool bIsEmptyPresObj = sal_False;
    1142             : 
    1143             :         // presentation settings
    1144           0 :         if(eShapeType == XmlShapeTypePresTableShape)
    1145           0 :             bIsEmptyPresObj = ImpExportPresentationAttributes( xPropSet, GetXMLToken(XML_PRESENTATION_TABLE) );
    1146             : 
    1147           0 :         const bool bCreateNewline( (nFeatures & SEF_EXPORT_NO_WS) == 0 );
    1148           0 :         const bool bExportEmbedded(0 != (mrExport.getExportFlags() & EXPORT_EMBEDDED));
    1149             : 
    1150           0 :         SvXMLElementExport aElement( mrExport, XML_NAMESPACE_DRAW, XML_FRAME, bCreateNewline, sal_True );
    1151             : 
    1152             :         // do not export in ODF 1.1 or older
    1153           0 :         if( mrExport.getDefaultVersion() >= SvtSaveOptions::ODFVER_012 )
    1154             :         {
    1155           0 :             if( !bIsEmptyPresObj )
    1156             :             {
    1157           0 :                 uno::Reference< container::XNamed > xTemplate( xPropSet->getPropertyValue( OUString( "TableTemplate" ) ), uno::UNO_QUERY );
    1158           0 :                 if( xTemplate.is() )
    1159             :                 {
    1160           0 :                     const OUString sTemplate( xTemplate->getName() );
    1161           0 :                     if( !sTemplate.isEmpty() )
    1162             :                     {
    1163           0 :                         mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_TEMPLATE_NAME, sTemplate );
    1164             : 
    1165           0 :                         for( const XMLPropertyMapEntry* pEntry = &aXMLTableShapeAttributes[0]; pEntry->msApiName; pEntry++ )
    1166             :                         {
    1167             :                             try
    1168             :                             {
    1169           0 :                                 sal_Bool bBool = sal_False;
    1170           0 :                                 const OUString sAPIPropertyName( OUString(pEntry->msApiName, pEntry->nApiNameLength, RTL_TEXTENCODING_ASCII_US ) );
    1171             : 
    1172           0 :                                 xPropSet->getPropertyValue( sAPIPropertyName ) >>= bBool;
    1173           0 :                                 if( bBool )
    1174           0 :                                     mrExport.AddAttribute(pEntry->mnNameSpace, pEntry->meXMLName, XML_TRUE );
    1175             :                             }
    1176           0 :                             catch( uno::Exception& )
    1177             :                             {
    1178             :                             OSL_FAIL("XMLShapeExport::ImpExportTableShape(), exception caught!");
    1179             :                             }
    1180             :                         }
    1181           0 :                     }
    1182             :                 }
    1183             : 
    1184             : 
    1185           0 :                 uno::Reference< table::XColumnRowRange > xRange( xPropSet->getPropertyValue( msModel ), uno::UNO_QUERY_THROW );
    1186           0 :                 GetShapeTableExport()->exportTable( xRange );
    1187             :             }
    1188             :         }
    1189             : 
    1190           0 :         if( !bIsEmptyPresObj )
    1191             :         {
    1192           0 :             uno::Reference< graphic::XGraphic > xGraphic( xPropSet->getPropertyValue( OUString( "ReplacementGraphic" ) ), uno::UNO_QUERY );
    1193           0 :             if( xGraphic.is() ) try
    1194             :             {
    1195           0 :                 Reference< lang::XMultiServiceFactory > xSM( GetExport().getServiceFactory(), UNO_QUERY_THROW );
    1196             : 
    1197           0 :                 uno::Reference< embed::XStorage > xPictureStorage;
    1198           0 :                 uno::Reference< embed::XStorage > xStorage;
    1199           0 :                 uno::Reference< io::XStream > xPictureStream;
    1200             : 
    1201           0 :                 OUString sPictureName;
    1202           0 :                 if( bExportEmbedded )
    1203             :                 {
    1204           0 :                     xPictureStream.set( xSM->createInstance( OUString( "com.sun.star.comp.MemoryStream" ) ), UNO_QUERY_THROW );
    1205             :                 }
    1206             :                 else
    1207             :                 {
    1208           0 :                     xStorage.set( GetExport().GetTargetStorage(), UNO_QUERY_THROW );
    1209             : 
    1210           0 :                     xPictureStorage.set( xStorage->openStorageElement( OUString( "Pictures" ), ::embed::ElementModes::READWRITE ), uno::UNO_QUERY_THROW );
    1211           0 :                     const OUString sPrefix( "TablePreview" );
    1212           0 :                     const OUString sSuffix( ".svm" );
    1213             : 
    1214           0 :                     sal_Int32 nIndex = 0;
    1215           0 :                     do
    1216             :                     {
    1217           0 :                         sPictureName = sPrefix;
    1218           0 :                         sPictureName += OUString::valueOf( ++nIndex );
    1219           0 :                         sPictureName += sSuffix;
    1220             :                     }
    1221           0 :                     while( xPictureStorage->hasByName( sPictureName ) );
    1222             : 
    1223           0 :                     xPictureStream.set( xPictureStorage->openStreamElement( sPictureName, ::embed::ElementModes::READWRITE ), UNO_QUERY_THROW );
    1224             :                 }
    1225             : 
    1226           0 :                 Reference< graphic::XGraphicProvider > xProvider( graphic::GraphicProvider::create(comphelper::getComponentContext(xSM)) );
    1227           0 :                 Sequence< beans::PropertyValue > aArgs( 2 );
    1228           0 :                 aArgs[ 0 ].Name = OUString( "MimeType" );
    1229           0 :                 aArgs[ 0 ].Value <<= OUString( "image/x-vclgraphic" );
    1230           0 :                 aArgs[ 1 ].Name = OUString( "OutputStream" );
    1231           0 :                 aArgs[ 1 ].Value <<= xPictureStream->getOutputStream();
    1232           0 :                 xProvider->storeGraphic( xGraphic, aArgs );
    1233             : 
    1234           0 :                 if( xPictureStorage.is() )
    1235             :                 {
    1236           0 :                     Reference< embed::XTransactedObject > xTrans( xPictureStorage, UNO_QUERY );
    1237           0 :                     if( xTrans.is() )
    1238           0 :                         xTrans->commit();
    1239             :                 }
    1240             : 
    1241           0 :                 if( !bExportEmbedded )
    1242             :                 {
    1243           0 :                     OUString sURL( "Pictures/" );
    1244           0 :                     sURL += sPictureName;
    1245           0 :                     mrExport.AddAttribute(XML_NAMESPACE_XLINK, XML_HREF, sURL );
    1246           0 :                     mrExport.AddAttribute( XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE );
    1247           0 :                     mrExport.AddAttribute( XML_NAMESPACE_XLINK, XML_SHOW, XML_EMBED );
    1248           0 :                     mrExport.AddAttribute( XML_NAMESPACE_XLINK, XML_ACTUATE, XML_ONLOAD );
    1249             :                 }
    1250             : 
    1251           0 :                 SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_DRAW, XML_IMAGE, sal_False, sal_True );
    1252             : 
    1253           0 :                 if( bExportEmbedded )
    1254             :                 {
    1255           0 :                     Reference< XSeekableInputStream > xSeekable( xPictureStream, UNO_QUERY_THROW );
    1256           0 :                     xSeekable->seek(0);
    1257             : 
    1258           0 :                     XMLBase64Export aBase64Exp( GetExport() );
    1259           0 :                     aBase64Exp.exportOfficeBinaryDataElement( Reference < XInputStream >( xPictureStream, UNO_QUERY_THROW ) );
    1260           0 :                 }
    1261             :             }
    1262           0 :             catch( uno::Exception& )
    1263             :             {
    1264             :                 OSL_FAIL("xmloff::XMLShapeExport::ImpExportTableShape(), exception caught!");
    1265           0 :             }
    1266             :         }
    1267             : 
    1268           0 :         ImpExportEvents( xShape );
    1269           0 :         ImpExportGluePoints( xShape );
    1270           0 :         ImpExportDescription( xShape ); // #i68101#
    1271             :     }
    1272           0 :     catch( uno::Exception& )
    1273             :     {
    1274             :         OSL_FAIL( "xmloff::XMLShapeExport::ImpExportTableShape(), exception caught!" );
    1275           0 :     }
    1276           0 : }
    1277             : 
    1278             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10