2000-09-18 16:07:07 +00:00
/*************************************************************************
*
* $ RCSfile : shapeexport . cxx , v $
*
2001-07-27 09:16:23 +00:00
* $ Revision : 1.37 $
2000-09-18 16:07:07 +00:00
*
2001-07-27 09:16:23 +00:00
* last change : $ Author : sab $ $ Date : 2001 - 07 - 27 10 : 16 : 23 $
2000-09-18 16:07:07 +00:00
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc . , October , 2000
*
* GNU Lesser General Public License Version 2.1
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* Copyright 2000 by Sun Microsystems , Inc .
* 901 San Antonio Road , Palo Alto , CA 94303 , USA
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1 , as published by the Free Software Foundation .
*
* This library is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston ,
* MA 02111 - 1307 USA
*
*
* Sun Industry Standards Source License Version 1.1
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 ( the " License " ) ; You may not use this file
* except in compliance with the License . You may obtain a copy of the
* License at http : //www.openoffice.org/license.html.
*
* Software provided under this License is provided on an " AS IS " basis ,
* WITHOUT WARRANTY OF ANY KIND , EITHER EXPRESSED OR IMPLIED , INCLUDING ,
* WITHOUT LIMITATION , WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS ,
* MERCHANTABLE , FIT FOR A PARTICULAR PURPOSE , OR NON - INFRINGING .
* See the License for the specific provisions governing your rights and
* obligations concerning the Software .
*
* The Initial Developer of the Original Code is : Sun Microsystems , Inc .
*
* Copyright : 2000 by Sun Microsystems , Inc .
*
* All Rights Reserved .
*
* Contributor ( s ) : _______________________________________
*
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-03-08 13:33:34 +00:00
# ifndef _COM_SUN_STAR_CONTAINER_XCHILD_HPP_
# include <com/sun/star/container/XChild.hpp>
# endif
2000-09-18 16:07:07 +00:00
# ifndef _COM_SUN_STAR_TEXT_XTEXT_HPP_
# include <com/sun/star/text/XText.hpp>
# endif
# ifndef _COM_SUN_STAR_CHART_XCHARTDOCUMENT_HPP_
# include <com/sun/star/chart/XChartDocument.hpp>
# endif
2001-02-08 13:45:43 +00:00
# ifndef _COM_SUN_STAR_DRAWING_XCONTROLSHAPE_HPP_
# include <com/sun/star/drawing/XControlShape.hpp>
# endif
2001-02-02 10:14:37 +00:00
# ifndef _COM_SUN_STAR_STYLE_XSTYLE_HPP_
# include <com/sun/star/style/XStyle.hpp>
# endif
2001-02-08 13:45:43 +00:00
# ifndef _XMLOFF_PROPERTYSETMERGER_HXX_
# include "PropertySetMerger.hxx"
# endif
2000-09-18 16:07:07 +00:00
# ifndef _XMLOFF_SHAPEEXPORT_HXX
# include "shapeexport.hxx"
# endif
# ifndef _SDPROPLS_HXX
# include "sdpropls.hxx"
# endif
2000-12-05 22:31:17 +00:00
# ifndef _SDXMLEXP_IMPL_HXX
# include "sdxmlexp_impl.hxx"
2000-09-18 16:07:07 +00:00
# endif
# ifndef _XMLOFF_FAMILIES_HXX_
# include "families.hxx"
# endif
# ifndef _TOOLS_DEBUG_HXX
# include <tools/debug.hxx>
# endif
2001-05-28 14:13:43 +00:00
# ifndef _XMLOFF_CONTEXTID_HXX_
# include "contextid.hxx"
# endif
2001-06-29 20:07:26 +00:00
# ifndef _XMLOFF_XMLTOKEN_HXX
# include "xmltoken.hxx"
# endif
# ifndef _STRING_HXX //autogen
# include <tools/string.hxx>
# endif
2000-11-26 18:48:02 +00:00
# include "xmlnmspe.hxx"
2000-09-18 16:07:07 +00:00
using namespace : : rtl ;
using namespace : : com : : sun : : star ;
2001-06-15 09:37:08 +00:00
using namespace : : xmloff : : token ;
2000-09-18 16:07:07 +00:00
//////////////////////////////////////////////////////////////////////////////
2000-11-07 12:33:09 +00:00
XMLShapeExport : : XMLShapeExport ( SvXMLExport & rExp ,
SvXMLExportPropertyMapper * pExtMapper )
2000-11-26 18:48:02 +00:00
: rExport ( rExp ) ,
mnNextUniqueShapeId ( 1 ) ,
2001-01-19 15:25:18 +00:00
mbExportLayer ( sal_False ) ,
2000-11-26 18:48:02 +00:00
msZIndex ( RTL_CONSTASCII_USTRINGPARAM ( " ZOrder " ) ) ,
msEmptyPres ( RTL_CONSTASCII_USTRINGPARAM ( " IsEmptyPresentationObject " ) ) ,
msModel ( RTL_CONSTASCII_USTRINGPARAM ( " Model " ) ) ,
msStartShape ( RTL_CONSTASCII_USTRINGPARAM ( " StartShape " ) ) ,
2001-02-07 15:26:36 +00:00
msEndShape ( RTL_CONSTASCII_USTRINGPARAM ( " EndShape " ) ) ,
msOnClick ( RTL_CONSTASCII_USTRINGPARAM ( " OnClick " ) ) ,
msEventType ( RTL_CONSTASCII_USTRINGPARAM ( " EventType " ) ) ,
msPresentation ( RTL_CONSTASCII_USTRINGPARAM ( " Presentation " ) ) ,
msMacroName ( RTL_CONSTASCII_USTRINGPARAM ( " MacroName " ) ) ,
msLibrary ( RTL_CONSTASCII_USTRINGPARAM ( " Library " ) ) ,
msClickAction ( RTL_CONSTASCII_USTRINGPARAM ( " ClickAction " ) ) ,
msBookmark ( RTL_CONSTASCII_USTRINGPARAM ( " Bookmark " ) ) ,
msEffect ( RTL_CONSTASCII_USTRINGPARAM ( " Effect " ) ) ,
msPlayFull ( RTL_CONSTASCII_USTRINGPARAM ( " PlayFull " ) ) ,
msVerb ( RTL_CONSTASCII_USTRINGPARAM ( " Verb " ) ) ,
msSoundURL ( RTL_CONSTASCII_USTRINGPARAM ( " SoundURL " ) ) ,
msSpeed ( RTL_CONSTASCII_USTRINGPARAM ( " Speed " ) ) ,
msStarBasic ( RTL_CONSTASCII_USTRINGPARAM ( " StarBasic " ) )
2000-09-18 16:07:07 +00:00
{
// construct PropertyHandlerFactory
2001-02-02 10:14:37 +00:00
xSdPropHdlFactory = new XMLSdPropHdlFactory ( rExport . GetModel ( ) ) ;
2000-09-18 16:07:07 +00:00
// construct PropertySetMapper
2001-06-01 12:07:42 +00:00
xPropertySetMapper = CreateShapePropMapper ( rExport ) ;
2000-11-07 12:33:09 +00:00
if ( pExtMapper )
{
UniReference < SvXMLExportPropertyMapper > xExtMapper ( pExtMapper ) ;
xPropertySetMapper - > ChainExportMapper ( xExtMapper ) ;
}
2000-09-18 16:07:07 +00:00
2001-06-01 11:32:48 +00:00
/*
2000-12-05 22:31:17 +00:00
// chain text attributes
2001-02-27 15:09:08 +00:00
xPropertySetMapper - > ChainExportMapper ( XMLTextParagraphExport : : CreateParaExtPropMapper ( rExp ) ) ;
2001-06-01 11:32:48 +00:00
*/
2000-12-05 22:31:17 +00:00
2001-02-02 10:14:37 +00:00
rExport . GetAutoStylePool ( ) - > AddFamily (
2000-09-18 16:07:07 +00:00
XML_STYLE_FAMILY_SD_GRAPHICS_ID ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( XML_STYLE_FAMILY_SD_GRAPHICS_NAME ) ) ,
GetPropertySetMapper ( ) ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( XML_STYLE_FAMILY_SD_GRAPHICS_PREFIX ) ) ) ;
2001-02-02 10:14:37 +00:00
rExport . GetAutoStylePool ( ) - > AddFamily (
2000-09-18 16:07:07 +00:00
XML_STYLE_FAMILY_SD_PRESENTATION_ID ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( XML_STYLE_FAMILY_SD_PRESENTATION_NAME ) ) ,
GetPropertySetMapper ( ) ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( XML_STYLE_FAMILY_SD_PRESENTATION_PREFIX ) ) ) ;
2001-02-02 10:14:37 +00:00
maCurrentInfo = maShapeInfos . end ( ) ;
2000-09-18 16:07:07 +00:00
}
2001-02-02 10:14:37 +00:00
///////////////////////////////////////////////////////////////////////
2000-09-18 16:07:07 +00:00
XMLShapeExport : : ~ XMLShapeExport ( )
{
}
2001-02-02 10:14:37 +00:00
///////////////////////////////////////////////////////////////////////
2000-09-18 16:07:07 +00:00
// This method collects all automatic styles for the given XShape
void XMLShapeExport : : collectShapeAutoStyles ( const uno : : Reference < drawing : : XShape > & xShape )
{
2001-03-08 13:33:34 +00:00
if ( maCurrentShapesIter = = maShapesInfos . end ( ) )
{
DBG_ERROR ( " XMLShapeExport::collectShapeAutoStyles(): no call to seekShapes()! " ) ;
return ;
}
sal_Int32 nZIndex = 0 ;
uno : : Reference < beans : : XPropertySet > xSet ( xShape , uno : : UNO_QUERY ) ;
if ( xSet . is ( ) )
xSet - > getPropertyValue ( msZIndex ) > > = nZIndex ;
ImplXMLShapeExportInfo & aShapeInfo = ( * maCurrentShapesIter ) . second [ nZIndex ] ;
2001-02-02 10:14:37 +00:00
2001-07-27 09:16:23 +00:00
// -----------------------------
// first compute the shapes type
// -----------------------------
ImpCalcShapeType ( xShape , aShapeInfo . meShapeType ) ;
2001-06-01 11:32:48 +00:00
const sal_Bool bObjSupportsText =
aShapeInfo . meShapeType ! = XmlShapeTypeDrawControlShape & &
aShapeInfo . meShapeType ! = XmlShapeTypeDrawChartShape & &
aShapeInfo . meShapeType ! = XmlShapeTypePresChartShape & &
aShapeInfo . meShapeType ! = XmlShapeTypeDrawOLE2Shape & &
aShapeInfo . meShapeType ! = XmlShapeTypePresOLE2Shape & &
aShapeInfo . meShapeType ! = XmlShapeTypeDraw3DSceneObject & &
aShapeInfo . meShapeType ! = XmlShapeTypeDraw3DCubeObject & &
aShapeInfo . meShapeType ! = XmlShapeTypeDraw3DSphereObject & &
aShapeInfo . meShapeType ! = XmlShapeTypeDraw3DLatheObject & &
aShapeInfo . meShapeType ! = XmlShapeTypeDraw3DExtrudeObject ;
2001-06-27 14:23:12 +00:00
sal_Bool bIsEmptyPresObj = sal_False ;
uno : : Reference < beans : : XPropertySet > xPropSet ( xShape , uno : : UNO_QUERY ) ;
// ----------------
// prep text styles
// ----------------
if ( xPropSet . is ( ) & & bObjSupportsText )
{
uno : : Reference < text : : XText > xText ( xShape , uno : : UNO_QUERY ) ;
if ( xText . is ( ) )
{
uno : : Reference < beans : : XPropertySetInfo > xPropSetInfo ( xPropSet - > getPropertySetInfo ( ) ) ;
if ( xPropSetInfo . is ( ) & & xPropSetInfo - > hasPropertyByName ( msEmptyPres ) )
{
uno : : Any aAny = xPropSet - > getPropertyValue ( msEmptyPres ) ;
aAny > > = bIsEmptyPresObj ;
}
if ( ! bIsEmptyPresObj )
{
GetExport ( ) . GetTextParagraphExport ( ) - > collectTextAutoStyles ( xText ) ;
}
}
}
2001-02-02 10:14:37 +00:00
// ------------------------------
// compute the shape parent style
// ------------------------------
2000-09-18 16:07:07 +00:00
if ( xPropSet . is ( ) )
{
2001-02-02 10:14:37 +00:00
uno : : Reference < beans : : XPropertySetInfo > xPropSetInfo ( xPropSet - > getPropertySetInfo ( ) ) ;
OUString aParentName ;
uno : : Reference < style : : XStyle > xStyle ;
if ( xPropSetInfo . is ( ) & & xPropSetInfo - > hasPropertyByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Style " ) ) ) )
xPropSet - > getPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Style " ) ) ) > > = xStyle ;
if ( xStyle . is ( ) )
{
// get family ID
uno : : Reference < beans : : XPropertySet > xStylePropSet ( xStyle , uno : : UNO_QUERY ) ;
DBG_ASSERT ( xStylePropSet . is ( ) , " style without a XPropertySet? " ) ;
if ( xStylePropSet . is ( ) )
{
OUString aFamilyName ;
xStylePropSet - > getPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Family " ) ) ) > > = aFamilyName ;
if ( aFamilyName . getLength ( ) & & aFamilyName . equals ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " presentation " ) ) ) )
aShapeInfo . mnFamily = XML_STYLE_FAMILY_SD_PRESENTATION_ID ;
}
// get parent-style name
if ( XML_STYLE_FAMILY_SD_PRESENTATION_ID = = aShapeInfo . mnFamily )
{
aParentName = msPresentationStylePrefix ;
}
aParentName + = xStyle - > getName ( ) ;
}
2000-09-18 16:07:07 +00:00
// filter propset
2001-06-27 14:23:12 +00:00
std : : vector < XMLPropertyState > xPropStates ;
2000-09-18 16:07:07 +00:00
2001-06-27 14:23:12 +00:00
sal_Int32 nCount = 0 ;
if ( ! bIsEmptyPresObj )
2001-05-28 14:13:43 +00:00
{
2001-06-27 14:23:12 +00:00
xPropStates = GetPropertySetMapper ( ) - > Filter ( xPropSet ) ;
2001-05-28 14:13:43 +00:00
2001-06-27 14:23:12 +00:00
if ( XmlShapeTypeDrawControlShape = = aShapeInfo . meShapeType )
{
// for control shapes, we additionally need the number format style (if any)
uno : : Reference < drawing : : XControlShape > xControl ( xShape , uno : : UNO_QUERY ) ;
DBG_ASSERT ( xControl . is ( ) , " XMLShapeExport::collectShapeAutoStyles: ShapeType control, but no XControlShape! " ) ;
if ( xControl . is ( ) )
2001-05-28 14:13:43 +00:00
{
2001-06-27 14:23:12 +00:00
uno : : Reference < beans : : XPropertySet > xControlModel ( xControl - > getControl ( ) , uno : : UNO_QUERY ) ;
DBG_ASSERT ( xControlModel . is ( ) , " XMLShapeExport::collectShapeAutoStyles: no control model on the control shape! " ) ;
: : rtl : : OUString sNumberStyle = rExport . GetFormExport ( ) - > getControlNumberStyle ( xControlModel ) ;
if ( 0 ! = sNumberStyle . getLength ( ) )
{
sal_Int32 nIndex = GetPropertySetMapper ( ) - > getPropertySetMapper ( ) - > FindEntryIndex ( CTF_SD_CONTROL_SHAPE_DATA_STYLE ) ;
// TODO : this retrieval of the index should be moved into the ctor, holding the index
// as member, thus saving time.
DBG_ASSERT ( - 1 ! = nIndex , " XMLShapeExport::collectShapeAutoStyles: could not obtain the index for our context id! " ) ;
XMLPropertyState aNewState ( nIndex , uno : : makeAny ( sNumberStyle ) ) ;
xPropStates . push_back ( aNewState ) ;
}
2001-05-28 14:13:43 +00:00
}
}
2001-06-27 14:23:12 +00:00
std : : vector < XMLPropertyState > : : iterator aIter = xPropStates . begin ( ) ;
std : : vector < XMLPropertyState > : : iterator aEnd = xPropStates . end ( ) ;
while ( aIter ! = aEnd )
{
if ( aIter - > mnIndex ! = - 1 )
nCount + + ;
aIter + + ;
}
2001-02-02 10:14:37 +00:00
}
if ( nCount = = 0 )
{
// no hard attributes, use parent style name for export
aShapeInfo . msStyleName = aParentName ;
}
else
2000-09-18 16:07:07 +00:00
{
// there are filtered properties -> hard attributes
// try to find this style in AutoStylePool
2001-02-02 10:14:37 +00:00
aShapeInfo . msStyleName = rExport . GetAutoStylePool ( ) - > Find ( aShapeInfo . mnFamily , aParentName , xPropStates ) ;
2000-09-18 16:07:07 +00:00
2001-02-02 10:14:37 +00:00
if ( ! aShapeInfo . msStyleName . getLength ( ) )
2000-09-18 16:07:07 +00:00
{
// Style did not exist, add it to AutoStalePool
2001-02-02 10:14:37 +00:00
aShapeInfo . msStyleName = rExport . GetAutoStylePool ( ) - > Add ( aShapeInfo . mnFamily , aParentName , xPropStates ) ;
2000-09-18 16:07:07 +00:00
}
}
2001-06-01 11:32:48 +00:00
// optionaly generate auto style for text attributes
2001-06-27 14:23:12 +00:00
if ( ! bIsEmptyPresObj & & bObjSupportsText )
2001-06-01 11:32:48 +00:00
{
xPropStates = GetExport ( ) . GetTextParagraphExport ( ) - > GetParagraphPropertyMapper ( ) - > Filter ( xPropSet ) ;
nCount = 0 ;
2001-06-27 14:23:12 +00:00
std : : vector < XMLPropertyState > : : iterator aIter = xPropStates . begin ( ) ;
std : : vector < XMLPropertyState > : : iterator aEnd = xPropStates . end ( ) ;
2001-06-01 11:32:48 +00:00
while ( aIter ! = aEnd )
{
if ( aIter - > mnIndex ! = - 1 )
nCount + + ;
aIter + + ;
}
if ( nCount )
{
const OUString aEmpty ;
aShapeInfo . msTextStyleName = rExport . GetAutoStylePool ( ) - > Find ( XML_STYLE_FAMILY_TEXT_PARAGRAPH , aEmpty , xPropStates ) ;
if ( ! aShapeInfo . msTextStyleName . getLength ( ) )
{
// Style did not exist, add it to AutoStalePool
aShapeInfo . msTextStyleName = rExport . GetAutoStylePool ( ) - > Add ( XML_STYLE_FAMILY_TEXT_PARAGRAPH , aEmpty , xPropStates ) ;
}
}
}
2000-09-18 16:07:07 +00:00
}
2001-02-02 10:14:37 +00:00
// -------------------
2000-11-26 18:48:02 +00:00
// check for connector
2001-02-02 10:14:37 +00:00
// -------------------
if ( aShapeInfo . meShapeType = = XmlShapeTypeDrawConnectorShape )
2000-11-26 18:48:02 +00:00
{
uno : : Reference < drawing : : XShape > xConnection ;
// create shape ids for export later
if ( xPropSet - > getPropertyValue ( msStartShape ) > > = xConnection )
{
createShapeId ( xConnection ) ;
}
if ( xPropSet - > getPropertyValue ( msEndShape ) > > = xConnection )
{
createShapeId ( xConnection ) ;
}
}
2001-02-02 10:14:37 +00:00
maShapeInfos . push_back ( aShapeInfo ) ;
maCurrentInfo = maShapeInfos . begin ( ) ;
// -----------------------------------------------------
// check for shape collections (group shape or 3d scene)
// and collect contained shapes style infos
// -----------------------------------------------------
{
uno : : Reference < drawing : : XShapes > xShapes ( xShape , uno : : UNO_QUERY ) ;
if ( xShapes . is ( ) )
{
collectShapesAutoStyles ( xShapes ) ;
}
}
2000-09-18 16:07:07 +00:00
}
2001-02-02 10:14:37 +00:00
///////////////////////////////////////////////////////////////////////
2000-09-18 16:07:07 +00:00
// This method exports the given XShape
2000-11-06 11:58:31 +00:00
void XMLShapeExport : : exportShape ( const uno : : Reference < drawing : : XShape > & xShape ,
sal_Int32 nFeatures /* = SEF_DEFAULT */ ,
com : : sun : : star : : awt : : Point * pRefPoint /* = NULL */ )
2000-09-18 16:07:07 +00:00
{
2001-03-08 13:33:34 +00:00
if ( maCurrentShapesIter = = maShapesInfos . end ( ) )
2000-09-18 16:07:07 +00:00
{
2001-03-08 13:33:34 +00:00
DBG_ERROR ( " XMLShapeExport::exportShape(): no auto styles where collected before export " ) ;
2001-02-02 10:14:37 +00:00
return ;
}
2000-09-18 16:07:07 +00:00
2001-03-08 13:33:34 +00:00
sal_Int32 nZIndex = 0 ;
uno : : Reference < beans : : XPropertySet > xSet ( xShape , uno : : UNO_QUERY ) ;
if ( xSet . is ( ) )
xSet - > getPropertyValue ( msZIndex ) > > = nZIndex ;
const ImplXMLShapeExportInfo & aShapeInfo = ( * maCurrentShapesIter ) . second [ nZIndex ] ;
# ifndef PRODUCT
// ---------------------------------------
// check if this is the correct ShapesInfo
// ---------------------------------------
uno : : Reference < container : : XChild > xChild ( xShape , uno : : UNO_QUERY ) ;
if ( xChild . is ( ) )
{
uno : : Reference < drawing : : XShapes > xParent ( xChild - > getParent ( ) , uno : : UNO_QUERY ) ;
DBG_ASSERT ( xParent . is ( ) & & xParent . get ( ) = = ( * maCurrentShapesIter ) . first . get ( ) , " XMLShapeExport::exportShape(): Wrong call to XMLShapeExport::seekShapes() " ) ;
}
2000-09-18 16:07:07 +00:00
2001-02-02 10:14:37 +00:00
// -----------------------------
// first compute the shapes type
// -----------------------------
{
2000-09-18 16:07:07 +00:00
XmlShapeType eShapeType ( XmlShapeTypeNotYetSet ) ;
2001-02-02 10:14:37 +00:00
ImpCalcShapeType ( xShape , eShapeType ) ;
2000-11-26 18:48:02 +00:00
2001-02-02 10:14:37 +00:00
DBG_ASSERT ( eShapeType = = aShapeInfo . meShapeType , " exportShape callings do not correspond to collectShapeAutoStyles calls! " ) ;
}
# endif
2001-02-02 11:21:59 +00:00
// ----------------------------------------
// collect animation informations if needed
// ----------------------------------------
if ( mxAnimationsExporter . is ( ) )
mxAnimationsExporter - > collect ( xShape ) ;
2001-02-02 10:14:37 +00:00
// -------------------------------
// export shapes name if he has one
// -------------------------------
{
uno : : Reference < container : : XNamed > xNamed ( xShape , uno : : UNO_QUERY ) ;
if ( xNamed . is ( ) )
2000-12-07 17:45:57 +00:00
{
2001-02-02 10:14:37 +00:00
const OUString aName ( xNamed - > getName ( ) ) ;
if ( aName . getLength ( ) )
2001-06-29 20:07:26 +00:00
rExport . AddAttribute ( XML_NAMESPACE_DRAW , XML_NAME , aName ) ;
2000-12-07 17:45:57 +00:00
}
2001-02-02 10:14:37 +00:00
}
// ------------------
// export style name
// ------------------
if ( aShapeInfo . msStyleName . getLength ( ) ! = 0 )
{
if ( XML_STYLE_FAMILY_SD_GRAPHICS_ID = = aShapeInfo . mnFamily )
2001-06-29 20:07:26 +00:00
rExport . AddAttribute ( XML_NAMESPACE_DRAW , XML_STYLE_NAME , aShapeInfo . msStyleName ) ;
2000-12-07 17:45:57 +00:00
else
2001-06-29 20:07:26 +00:00
rExport . AddAttribute ( XML_NAMESPACE_PRESENTATION , XML_STYLE_NAME , aShapeInfo . msStyleName ) ;
2001-02-02 10:14:37 +00:00
}
2001-06-01 11:32:48 +00:00
// ------------------
// export text style name
// ------------------
if ( aShapeInfo . msTextStyleName . getLength ( ) ! = 0 )
{
2001-06-29 20:07:26 +00:00
rExport . AddAttribute ( XML_NAMESPACE_DRAW , XML_TEXT_STYLE_NAME , aShapeInfo . msTextStyleName ) ;
2001-06-01 11:32:48 +00:00
}
2001-02-02 10:14:37 +00:00
// --------------------------
// export shapes id if needed
// --------------------------
{
const sal_Int32 nShapeId = getShapeId ( xShape ) ;
if ( nShapeId ! = - 1 )
{
const OUString sId ( OUString : : valueOf ( nShapeId ) ) ;
2001-06-29 20:07:26 +00:00
rExport . AddAttribute ( XML_NAMESPACE_DRAW , XML_ID , sId ) ;
2001-02-02 10:14:37 +00:00
}
}
// --------------------------
// export layer information
// --------------------------
if ( IsLayerExportEnabled ( ) )
{
2001-05-28 12:32:20 +00:00
// check for group or scene shape and not export layer if this is one
uno : : Reference < drawing : : XShapes > xShapes ( xShape , uno : : UNO_QUERY ) ;
if ( ! xShapes . is ( ) )
2001-02-02 10:14:37 +00:00
{
2001-05-28 12:32:20 +00:00
try
{
uno : : Reference < beans : : XPropertySet > xProps ( xShape , uno : : UNO_QUERY ) ;
OUString aLayerName ;
xProps - > getPropertyValue ( OUString : : createFromAscii ( " LayerName " ) ) > > = aLayerName ;
2001-06-29 20:07:26 +00:00
rExport . AddAttribute ( XML_NAMESPACE_DRAW , XML_LAYER , aLayerName ) ;
2001-02-02 10:14:37 +00:00
2001-05-28 12:32:20 +00:00
}
catch ( uno : : Exception e )
{
DBG_ERROR ( " could not export layer name for shape! " ) ;
}
2001-02-02 10:14:37 +00:00
}
}
2001-05-14 13:43:26 +00:00
// #82003# test export count
if ( rExport . getExportFlags ( ) & EXPORT_CONTENT )
{
rExport . GetProgressBarHelper ( ) - > Increment ( ) ;
}
2001-02-02 10:14:37 +00:00
// --------------------
// export shape element
// --------------------
switch ( aShapeInfo . meShapeType )
{
case XmlShapeTypeDrawRectangleShape :
{
ImpExportRectangleShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypeDrawEllipseShape :
{
ImpExportEllipseShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypeDrawLineShape :
{
ImpExportLineShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypeDrawPolyPolygonShape : // closed PolyPolygon
case XmlShapeTypeDrawPolyLineShape : // open PolyPolygon
case XmlShapeTypeDrawClosedBezierShape : // closed PolyPolygon containing curves
case XmlShapeTypeDrawOpenBezierShape : // open PolyPolygon containing curves
{
ImpExportPolygonShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypeDrawTextShape :
case XmlShapeTypePresTitleTextShape :
case XmlShapeTypePresOutlinerShape :
case XmlShapeTypePresSubtitleShape :
case XmlShapeTypePresNotesShape :
{
ImpExportTextBoxShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypeDrawGraphicObjectShape :
case XmlShapeTypePresGraphicObjectShape :
{
ImpExportGraphicObjectShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypeDrawChartShape :
case XmlShapeTypePresChartShape :
{
ImpExportChartShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypeDrawTableShape :
case XmlShapeTypePresTableShape :
{
ImpExportSpreadsheetShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypeDrawControlShape :
{
ImpExportControlShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypeDrawConnectorShape :
{
ImpExportConnectorShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypeDrawMeasureShape :
{
ImpExportMeasureShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypeDrawOLE2Shape :
case XmlShapeTypePresOLE2Shape :
{
ImpExportOLE2Shape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypeDrawPageShape :
case XmlShapeTypePresPageShape :
2001-05-28 12:32:20 +00:00
case XmlShapeTypeHandoutShape :
2001-02-02 10:14:37 +00:00
{
ImpExportPageShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypeDrawCaptionShape :
{
ImpExportCaptionShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypeDraw3DCubeObject :
case XmlShapeTypeDraw3DSphereObject :
case XmlShapeTypeDraw3DLatheObject :
case XmlShapeTypeDraw3DExtrudeObject :
{
ImpExport3DShape ( xShape , aShapeInfo . meShapeType ) ;
break ;
}
case XmlShapeTypeDraw3DSceneObject :
2000-12-07 17:45:57 +00:00
{
2001-02-02 10:14:37 +00:00
ImpExport3DSceneShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
2000-12-07 17:45:57 +00:00
}
2001-02-02 10:14:37 +00:00
case XmlShapeTypeDrawGroupShape :
{
// empty group
ImpExportGroupShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypeDrawFrameShape :
2001-04-30 08:02:17 +00:00
{
ImpExportFrameShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypeDrawAppletShape :
{
ImpExportAppletShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypeDrawPluginShape :
{
ImpExportPluginShape ( xShape , aShapeInfo . meShapeType , nFeatures , pRefPoint ) ;
break ;
}
case XmlShapeTypePresOrgChartShape :
2001-02-02 10:14:37 +00:00
case XmlShapeTypeUnknown :
case XmlShapeTypeNotYetSet :
default :
{
// this should never happen and is an error
DBG_ERROR ( " XMLEXP: WriteShape: unknown or unexpected type of shape in export! " ) ;
break ;
}
}
}
///////////////////////////////////////////////////////////////////////
// This method collects all automatic styles for the shapes inside the given XShapes collection
void XMLShapeExport : : collectShapesAutoStyles ( const uno : : Reference < drawing : : XShapes > & xShapes )
{
2001-03-08 13:33:34 +00:00
ShapesInfos : : iterator aOldCurrentShapesIter = maCurrentShapesIter ;
seekShapes ( xShapes ) ;
2001-02-02 10:14:37 +00:00
uno : : Reference < drawing : : XShape > xShape ;
const sal_Int32 nShapeCount ( xShapes - > getCount ( ) ) ;
for ( sal_Int32 nShapeId = 0 ; nShapeId < nShapeCount ; nShapeId + + )
{
xShapes - > getByIndex ( nShapeId ) > > = xShape ;
DBG_ASSERT ( xShape . is ( ) , " Shape without a XShape? " ) ;
if ( ! xShape . is ( ) )
continue ;
collectShapeAutoStyles ( xShape ) ;
2000-09-18 16:07:07 +00:00
}
2001-03-08 13:33:34 +00:00
maCurrentShapesIter = aOldCurrentShapesIter ;
2000-09-18 16:07:07 +00:00
}
2001-02-02 10:14:37 +00:00
///////////////////////////////////////////////////////////////////////
// This method exports all XShape inside the given XShapes collection
void XMLShapeExport : : exportShapes ( const uno : : Reference < drawing : : XShapes > & xShapes , sal_Int32 nFeatures /* = SEF_DEFAULT */ , awt : : Point * pRefPoint /* = NULL */ )
{
2001-03-08 13:33:34 +00:00
ShapesInfos : : iterator aOldCurrentShapesIter = maCurrentShapesIter ;
seekShapes ( xShapes ) ;
2001-02-02 10:14:37 +00:00
uno : : Reference < drawing : : XShape > xShape ;
const sal_Int32 nShapeCount ( xShapes - > getCount ( ) ) ;
for ( sal_Int32 nShapeId = 0 ; nShapeId < nShapeCount ; nShapeId + + )
{
xShapes - > getByIndex ( nShapeId ) > > = xShape ;
DBG_ASSERT ( xShape . is ( ) , " Shape without a XShape? " ) ;
if ( ! xShape . is ( ) )
continue ;
exportShape ( xShape , nFeatures , pRefPoint ) ;
}
2001-03-08 13:33:34 +00:00
maCurrentShapesIter = aOldCurrentShapesIter ;
}
///////////////////////////////////////////////////////////////////////
void XMLShapeExport : : seekShapes ( const uno : : Reference < drawing : : XShapes > & xShapes ) throw ( )
{
if ( xShapes . is ( ) )
{
maCurrentShapesIter = maShapesInfos . find ( xShapes ) ;
if ( maCurrentShapesIter = = maShapesInfos . end ( ) )
{
ImplXMLShapeExportInfoVector aNewInfoVector ;
aNewInfoVector . resize ( ( ShapesInfos : : size_type ) xShapes - > getCount ( ) ) ;
maShapesInfos [ xShapes ] = aNewInfoVector ;
maCurrentShapesIter = maShapesInfos . find ( xShapes ) ;
DBG_ASSERT ( maCurrentShapesIter ! = maShapesInfos . end ( ) , " XMLShapeExport::seekShapes(): insert into stl::map failed " ) ;
}
DBG_ASSERT ( ( * maCurrentShapesIter ) . second . size ( ) = = ( ShapesInfos : : size_type ) xShapes - > getCount ( ) , " XMLShapeExport::seekShapes(): XShapes size varied between calls " ) ;
}
else
{
maCurrentShapesIter = maShapesInfos . end ( ) ;
}
2001-02-02 10:14:37 +00:00
}
///////////////////////////////////////////////////////////////////////
2000-09-18 16:07:07 +00:00
void XMLShapeExport : : exportAutoStyles ( )
{
// export all autostyle infos
// ...for graphic
// if(IsFamilyGraphicUsed())
{
GetExport ( ) . GetAutoStylePool ( ) - > exportXML (
XML_STYLE_FAMILY_SD_GRAPHICS_ID ,
GetExport ( ) . GetDocHandler ( ) ,
GetExport ( ) . GetMM100UnitConverter ( ) ,
GetExport ( ) . GetNamespaceMap ( ) ) ;
}
// ...for presentation
// if(IsFamilyPresentationUsed())
{
GetExport ( ) . GetAutoStylePool ( ) - > exportXML (
XML_STYLE_FAMILY_SD_PRESENTATION_ID ,
GetExport ( ) . GetDocHandler ( ) ,
GetExport ( ) . GetMM100UnitConverter ( ) ,
GetExport ( ) . GetNamespaceMap ( ) ) ;
}
}
2001-02-02 10:14:37 +00:00
///////////////////////////////////////////////////////////////////////
2000-11-26 18:48:02 +00:00
/** creates a unique id for this shape, this id is saved and exported with this shape later
with the exportShape method . Its ok to call this twice with the same shape */
2000-12-13 18:16:42 +00:00
void XMLShapeExport : : createShapeId ( const uno : : Reference < drawing : : XShape > & xShape )
2000-11-26 18:48:02 +00:00
{
2000-12-13 18:16:42 +00:00
ShapeIdsMap : : iterator aId ( maShapeIds . find ( xShape ) ) ;
2000-11-26 18:48:02 +00:00
2000-12-13 18:16:42 +00:00
if ( aId = = maShapeIds . end ( ) )
maShapeIds [ xShape ] = mnNextUniqueShapeId + + ;
2000-11-26 18:48:02 +00:00
}
2001-02-02 10:14:37 +00:00
///////////////////////////////////////////////////////////////////////
2000-11-26 18:48:02 +00:00
/** returns the unique id for this shape. It returns -1 if the was no createShapeId call
for this shape yet . */
2000-12-13 18:16:42 +00:00
sal_Int32 XMLShapeExport : : getShapeId ( const uno : : Reference < drawing : : XShape > & xShape )
2000-11-26 18:48:02 +00:00
{
2000-12-13 18:16:42 +00:00
ShapeIdsMap : : iterator aId ( maShapeIds . find ( xShape ) ) ;
if ( aId ! = maShapeIds . end ( ) )
return ( * aId ) . second ;
2000-11-26 18:48:02 +00:00
return - 1 ;
}
2001-01-11 15:29:06 +00:00
2001-02-02 10:14:37 +00:00
///////////////////////////////////////////////////////////////////////
2001-01-11 15:29:06 +00:00
/// returns the export property mapper for external chaining
SvXMLExportPropertyMapper * XMLShapeExport : : CreateShapePropMapper (
SvXMLExport & rExport )
{
UniReference < XMLPropertyHandlerFactory > xFactory = new XMLSdPropHdlFactory ( rExport . GetModel ( ) ) ;
UniReference < XMLPropertySetMapper > xMapper = new XMLShapePropertySetMapper ( xFactory ) ;
2001-01-17 13:46:32 +00:00
SvXMLExportPropertyMapper * pResult =
new XMLShapeExportPropertyMapper ( xMapper ,
( XMLTextListAutoStylePool * ) & rExport . GetTextParagraphExport ( ) - > GetListAutoStylePool ( ) ,
rExport ) ;
2001-06-27 15:31:05 +00:00
( ( XMLShapeExportPropertyMapper * ) pResult ) - > SetAutoStyles ( sal_True ) ;
2001-01-17 13:46:32 +00:00
// chain text attributes
return pResult ;
2001-01-11 15:29:06 +00:00
}
2001-02-02 10:14:37 +00:00
///////////////////////////////////////////////////////////////////////
void XMLShapeExport : : ImpCalcShapeType ( const uno : : Reference < drawing : : XShape > & xShape ,
XmlShapeType & eShapeType )
{
// set in every case, so init here
eShapeType = XmlShapeTypeUnknown ;
uno : : Reference < drawing : : XShapeDescriptor > xShapeDescriptor ( xShape , uno : : UNO_QUERY ) ;
if ( xShapeDescriptor . is ( ) )
{
String aType ( ( OUString ) xShapeDescriptor - > getShapeType ( ) ) ;
if ( aType . EqualsAscii ( ( const sal_Char * ) " com.sun.star. " , 0 , 13 ) )
{
if ( aType . EqualsAscii ( " drawing. " , 13 , 8 ) )
{
// drawing shapes
if ( aType . EqualsAscii ( " Rectangle " , 21 , 9 ) ) { eShapeType = XmlShapeTypeDrawRectangleShape ; }
else if ( aType . EqualsAscii ( " Ellipse " , 21 , 7 ) ) { eShapeType = XmlShapeTypeDrawEllipseShape ; }
else if ( aType . EqualsAscii ( " Control " , 21 , 7 ) ) { eShapeType = XmlShapeTypeDrawControlShape ; }
else if ( aType . EqualsAscii ( " Connector " , 21 , 9 ) ) { eShapeType = XmlShapeTypeDrawConnectorShape ; }
else if ( aType . EqualsAscii ( " Measure " , 21 , 7 ) ) { eShapeType = XmlShapeTypeDrawMeasureShape ; }
else if ( aType . EqualsAscii ( " Line " , 21 , 4 ) ) { eShapeType = XmlShapeTypeDrawLineShape ; }
else if ( aType . EqualsAscii ( " PolyPolygon " , 21 , 11 ) ) { eShapeType = XmlShapeTypeDrawPolyPolygonShape ; }
else if ( aType . EqualsAscii ( " PolyLine " , 21 , 8 ) ) { eShapeType = XmlShapeTypeDrawPolyLineShape ; }
else if ( aType . EqualsAscii ( " OpenBezier " , 21 , 10 ) ) { eShapeType = XmlShapeTypeDrawOpenBezierShape ; }
else if ( aType . EqualsAscii ( " ClosedBezier " , 21 , 12 ) ) { eShapeType = XmlShapeTypeDrawClosedBezierShape ; }
else if ( aType . EqualsAscii ( " GraphicObject " , 21 , 13 ) ) { eShapeType = XmlShapeTypeDrawGraphicObjectShape ; }
else if ( aType . EqualsAscii ( " Group " , 21 , 5 ) ) { eShapeType = XmlShapeTypeDrawGroupShape ; }
else if ( aType . EqualsAscii ( " Text " , 21 , 4 ) ) { eShapeType = XmlShapeTypeDrawTextShape ; }
else if ( aType . EqualsAscii ( " OLE2 " , 21 , 4 ) )
{
eShapeType = XmlShapeTypeDrawOLE2Shape ;
// get info about presentation shape
uno : : Reference < beans : : XPropertySet > xPropSet ( xShape , uno : : UNO_QUERY ) ;
if ( xPropSet . is ( ) )
{
uno : : Any aAny ;
aAny = xPropSet - > getPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Model " ) ) ) ;
uno : : Reference < lang : : XServiceInfo > xObjectInfo ;
if ( aAny > > = xObjectInfo )
{
if ( xObjectInfo - > supportsService ( OUString ( RTL_CONSTASCII_USTRINGPARAM
( " com.sun.star.chart.ChartDocument " ) ) ) )
{
eShapeType = XmlShapeTypeDrawChartShape ;
}
else if ( xObjectInfo - > supportsService ( OUString ( RTL_CONSTASCII_USTRINGPARAM
( " com.sun.star.sheet.SpreadsheetDocument " ) ) ) )
{
eShapeType = XmlShapeTypeDrawTableShape ;
}
else
{
// general OLE2 Object
}
}
}
}
else if ( aType . EqualsAscii ( " Page " , 21 , 4 ) ) { eShapeType = XmlShapeTypeDrawPageShape ; }
else if ( aType . EqualsAscii ( " Frame " , 21 , 5 ) ) { eShapeType = XmlShapeTypeDrawFrameShape ; }
2001-04-30 08:02:17 +00:00
else if ( aType . EqualsAscii ( " Caption " , 21 , 7 ) ) { eShapeType = XmlShapeTypeDrawCaptionShape ; }
else if ( aType . EqualsAscii ( " Plugin " , 21 , 6 ) ) { eShapeType = XmlShapeTypeDrawPluginShape ; }
else if ( aType . EqualsAscii ( " Applet " , 21 , 6 ) ) { eShapeType = XmlShapeTypeDrawAppletShape ; }
2001-02-02 10:14:37 +00:00
// 3D shapes
else if ( aType . EqualsAscii ( " Scene " , 21 + 7 , 5 ) ) { eShapeType = XmlShapeTypeDraw3DSceneObject ; }
else if ( aType . EqualsAscii ( " Cube " , 21 + 7 , 4 ) ) { eShapeType = XmlShapeTypeDraw3DCubeObject ; }
else if ( aType . EqualsAscii ( " Sphere " , 21 + 7 , 6 ) ) { eShapeType = XmlShapeTypeDraw3DSphereObject ; }
else if ( aType . EqualsAscii ( " Lathe " , 21 + 7 , 5 ) ) { eShapeType = XmlShapeTypeDraw3DLatheObject ; }
else if ( aType . EqualsAscii ( " Extrude " , 21 + 7 , 7 ) ) { eShapeType = XmlShapeTypeDraw3DExtrudeObject ; }
}
else if ( aType . EqualsAscii ( " presentation. " , 13 , 13 ) )
{
// presentation shapes
if ( aType . EqualsAscii ( " TitleText " , 26 , 9 ) ) { eShapeType = XmlShapeTypePresTitleTextShape ; }
else if ( aType . EqualsAscii ( " Outliner " , 26 , 8 ) ) { eShapeType = XmlShapeTypePresOutlinerShape ; }
else if ( aType . EqualsAscii ( " Subtitle " , 26 , 8 ) ) { eShapeType = XmlShapeTypePresSubtitleShape ; }
else if ( aType . EqualsAscii ( " GraphicObject " , 26 , 13 ) ) { eShapeType = XmlShapeTypePresGraphicObjectShape ; }
else if ( aType . EqualsAscii ( " Page " , 26 , 4 ) ) { eShapeType = XmlShapeTypePresPageShape ; }
else if ( aType . EqualsAscii ( " OLE2 " , 26 , 4 ) ) { eShapeType = XmlShapeTypePresOLE2Shape ; }
else if ( aType . EqualsAscii ( " Chart " , 26 , 5 ) ) { eShapeType = XmlShapeTypePresChartShape ; }
else if ( aType . EqualsAscii ( " Table " , 26 , 5 ) ) { eShapeType = XmlShapeTypePresTableShape ; }
else if ( aType . EqualsAscii ( " OrgChart " , 26 , 8 ) ) { eShapeType = XmlShapeTypePresOrgChartShape ; }
else if ( aType . EqualsAscii ( " Notes " , 26 , 5 ) ) { eShapeType = XmlShapeTypePresNotesShape ; }
2001-05-28 12:32:20 +00:00
else if ( aType . EqualsAscii ( " HandoutShape " , 26 , 12 ) ) { eShapeType = XmlShapeTypeHandoutShape ; }
2001-02-02 10:14:37 +00:00
}
}
}
}
///////////////////////////////////////////////////////////////////////
2001-05-31 10:18:38 +00:00
# ifndef _COM_SUN_STAR_DRAWING_XGLUEPOINTSSUPPLIER_HPP_
# include <com/sun/star/drawing/XGluePointsSupplier.hpp>
# endif
2001-06-11 13:01:00 +00:00
# ifndef _COM_SUN_STAR_CONTAINER_XIDENTIFIERACCESS_HPP_
# include <com/sun/star/container/XIdentifierAccess.hpp>
# endif
2001-05-31 10:18:38 +00:00
# ifndef _COM_SUN_STAR_DRAWING_GLUEPOINT2_HPP_
# include <com/sun/star/drawing/GluePoint2.hpp>
# endif
# ifndef _COM_SUN_STAR_DRAWING_ALIGNMENT_HPP_
# include <com/sun/star/drawing/Alignment.hpp>
# endif
# ifndef _COM_SUN_STAR_DRAWING_ESCAPEDIRECTION_HPP_
# include <com/sun/star/drawing/EscapeDirection.hpp>
# endif
# ifndef _XMLOFF_XMLUCONV_HXX
# include "xmluconv.hxx"
# endif
# include "xmlnmspe.hxx"
2001-07-24 16:06:10 +00:00
extern SvXMLEnumMapEntry aXML_GlueAlignment_EnumMap [ ] ;
extern SvXMLEnumMapEntry aXML_GlueEscapeDirection_EnumMap [ ] ;
2001-05-31 10:18:38 +00:00
/** exports all user defined glue points */
void XMLShapeExport : : ImpExportGluePoints ( const uno : : Reference < drawing : : XShape > & xShape )
{
uno : : Reference < drawing : : XGluePointsSupplier > xSupplier ( xShape , uno : : UNO_QUERY ) ;
if ( ! xSupplier . is ( ) )
return ;
2001-06-11 13:01:00 +00:00
uno : : Reference < container : : XIdentifierAccess > xGluePoints ( xSupplier - > getGluePoints ( ) , uno : : UNO_QUERY ) ;
2001-05-31 10:18:38 +00:00
if ( ! xGluePoints . is ( ) )
return ;
drawing : : GluePoint2 aGluePoint ;
2001-06-11 13:01:00 +00:00
uno : : Sequence < sal_Int32 > aIdSequence ( xGluePoints - > getIdentifiers ( ) ) ;
const sal_Int32 nCount = aIdSequence . getLength ( ) ;
2001-05-31 10:18:38 +00:00
for ( sal_Int32 nIndex = 0 ; nIndex < nCount ; nIndex + + )
{
2001-06-11 13:01:00 +00:00
const sal_Int32 nIdentifier = aIdSequence [ nIndex ] ;
if ( ( xGluePoints - > getByIdentifier ( nIdentifier ) > > = aGluePoint ) & & aGluePoint . IsUserDefined )
2001-05-31 10:18:38 +00:00
{
// export only user defined glue points
2001-06-11 13:01:00 +00:00
const OUString sId ( OUString : : valueOf ( nIdentifier ) ) ;
2001-06-29 20:07:26 +00:00
rExport . AddAttribute ( XML_NAMESPACE_DRAW , XML_ID , sId ) ;
2001-05-31 10:18:38 +00:00
rExport . GetMM100UnitConverter ( ) . convertMeasure ( msBuffer , aGluePoint . Position . X ) ;
2001-06-29 20:07:26 +00:00
rExport . AddAttribute ( XML_NAMESPACE_SVG , XML_X , msBuffer . makeStringAndClear ( ) ) ;
2001-05-31 10:18:38 +00:00
rExport . GetMM100UnitConverter ( ) . convertMeasure ( msBuffer , aGluePoint . Position . Y ) ;
2001-06-29 20:07:26 +00:00
rExport . AddAttribute ( XML_NAMESPACE_SVG , XML_Y , msBuffer . makeStringAndClear ( ) ) ;
2001-05-31 10:18:38 +00:00
if ( ! aGluePoint . IsRelative )
{
SvXMLUnitConverter : : convertEnum ( msBuffer , aGluePoint . PositionAlignment , aXML_GlueAlignment_EnumMap ) ;
2001-06-29 20:07:26 +00:00
rExport . AddAttribute ( XML_NAMESPACE_DRAW , XML_ALIGN , msBuffer . makeStringAndClear ( ) ) ;
2001-05-31 10:18:38 +00:00
}
if ( aGluePoint . Escape ! = drawing : : EscapeDirection_SMART )
{
SvXMLUnitConverter : : convertEnum ( msBuffer , aGluePoint . Escape , aXML_GlueEscapeDirection_EnumMap ) ;
2001-06-29 20:07:26 +00:00
rExport . AddAttribute ( XML_NAMESPACE_DRAW , XML_ESCAPE_DIRECTION , msBuffer . makeStringAndClear ( ) ) ;
2001-05-31 10:18:38 +00:00
}
2001-06-29 20:07:26 +00:00
SvXMLElementExport aEventsElemt ( rExport , XML_NAMESPACE_DRAW , XML_GLUE_POINT , sal_True , sal_True ) ;
2001-05-31 10:18:38 +00:00
}
}
}