2000-09-18 16:07:07 +00:00
/*************************************************************************
*
2008-04-10 20:56:36 +00:00
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
2000-09-18 16:07:07 +00:00
*
2008-04-10 20:56:36 +00:00
* Copyright 2008 by Sun Microsystems , Inc .
2000-09-18 16:07:07 +00:00
*
2008-04-10 20:56:36 +00:00
* OpenOffice . org - a multi - platform office productivity suite
2000-09-18 16:07:07 +00:00
*
2008-04-10 20:56:36 +00:00
* $ RCSfile : ximpshap . cxx , v $
2008-10-01 06:34:11 +00:00
* $ Revision : 1.128 .2 .2 $
2000-09-18 16:07:07 +00:00
*
2008-04-10 20:56:36 +00:00
* This file is part of OpenOffice . org .
2000-09-18 16:07:07 +00:00
*
2008-04-10 20:56:36 +00:00
* OpenOffice . org is free software : you can redistribute it and / or modify
* it under the terms of the GNU Lesser General Public License version 3
* only , as published by the Free Software Foundation .
2000-09-18 16:07:07 +00:00
*
2008-04-10 20:56:36 +00:00
* OpenOffice . org 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 version 3 for more details
* ( a copy is included in the LICENSE file that accompanied this code ) .
2000-09-18 16:07:07 +00:00
*
2008-04-10 20:56:36 +00:00
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice . org . If not , see
* < http : //www.openoffice.org/license.html>
* for a copy of the LGPLv3 License .
2000-09-18 16:07:07 +00:00
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-09-17 09:32:15 +00:00
// MARKER(update_precomp.py): autogen include statement, do not remove
# include "precompiled_xmloff.hxx"
2006-06-19 17:15:11 +00:00
2000-09-18 16:07:07 +00:00
2001-01-18 13:53:32 +00:00
# include <tools/debug.hxx>
2008-07-07 12:27:52 +00:00
# include <com/sun/star/document/XEventsSupplier.hpp>
# include <com/sun/star/container/XNameReplace.hpp>
# include <com/sun/star/presentation/ClickAction.hpp>
2006-04-26 19:43:42 +00:00
# include <com/sun/star/drawing/FillStyle.hpp>
# include <com/sun/star/drawing/LineStyle.hpp>
2004-11-26 18:34:06 +00:00
# include "unointerfacetouniqueidentifiermapper.hxx"
2001-05-31 10:18:38 +00:00
# include <com/sun/star/drawing/XGluePointsSupplier.hpp>
2001-06-11 12:46:30 +00:00
# include <com/sun/star/container/XIdentifierAccess.hpp>
2001-05-31 10:18:38 +00:00
# include <com/sun/star/drawing/GluePoint2.hpp>
# include <com/sun/star/drawing/Alignment.hpp>
# include <com/sun/star/drawing/EscapeDirection.hpp>
2004-08-12 07:50:35 +00:00
# include <com/sun/star/media/ZoomLevel.hpp>
2005-02-25 08:23:23 +00:00
# include <com/sun/star/awt/Rectangle.hpp>
2008-03-12 09:38:48 +00:00
# include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
# include <com/sun/star/container/XNameAccess.hpp>
2001-03-16 13:37:07 +00:00
# include <comphelper/extract.hxx>
2000-09-18 16:07:07 +00:00
# include "ximpshap.hxx"
2007-06-27 14:11:25 +00:00
# include <xmloff/XMLBase64ImportContext.hxx>
# include <xmloff/XMLShapeStyleContext.hxx>
# include <xmloff/xmluconv.hxx>
2001-02-21 17:04:45 +00:00
# include <com/sun/star/container/XNamed.hpp>
2000-12-20 15:17:17 +00:00
# include <com/sun/star/drawing/CircleKind.hpp>
2000-09-18 16:07:07 +00:00
# include <com/sun/star/beans/XPropertySet.hpp>
2001-01-18 13:53:32 +00:00
# include <com/sun/star/awt/XControlModel.hpp>
# include <com/sun/star/drawing/XControlShape.hpp>
2000-09-18 16:07:07 +00:00
# include <com/sun/star/drawing/PointSequenceSequence.hpp>
# include <com/sun/star/drawing/PointSequence.hpp>
2001-03-05 16:56:43 +00:00
# include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
2001-05-28 12:32:20 +00:00
# include <com/sun/star/lang/XServiceInfo.hpp>
2004-07-13 07:26:37 +00:00
# include <com/sun/star/util/XCloneable.hpp>
2004-11-26 13:59:16 +00:00
# include <com/sun/star/beans/XMultiPropertyStates.hpp>
2000-09-18 16:07:07 +00:00
# include "xexptran.hxx"
# include <com/sun/star/drawing/PolyPolygonBezierCoords.hpp>
2005-04-18 10:12:44 +00:00
# include <com/sun/star/beans/XPropertySetInfo.hpp>
2000-11-26 18:48:02 +00:00
# include <com/sun/star/drawing/ConnectorType.hpp>
2001-02-09 12:38:53 +00:00
# include <com/sun/star/drawing/HomogenMatrix3.hpp>
2001-02-08 13:45:43 +00:00
# include "PropertySetMerger.hxx"
2007-06-27 14:11:25 +00:00
# include <xmloff/families.hxx>
2000-09-18 16:07:07 +00:00
# include "ximpstyl.hxx"
2000-11-23 17:30:39 +00:00
# include"xmlnmspe.hxx"
2007-06-27 14:11:25 +00:00
# include <xmloff/xmltoken.hxx>
2004-04-02 12:53:51 +00:00
# include "EnhancedCustomShapeToken.hxx"
2004-11-26 12:00:41 +00:00
# include "XMLReplacementImageContext.hxx"
2001-03-29 15:48:43 +00:00
# include "XMLImageMapContext.hxx"
2000-11-26 18:48:02 +00:00
# include "sdpropls.hxx"
2001-02-07 15:26:36 +00:00
# include "eventimp.hxx"
2006-12-19 16:27:16 +00:00
# include "descriptionimp.hxx"
2004-04-02 12:53:51 +00:00
# include "ximpcustomshape.hxx"
2002-06-27 10:09:52 +00:00
# include "XMLEmbeddedObjectImportContext.hxx"
2005-01-27 10:26:44 +00:00
# include "xmlerror.hxx"
2006-11-14 13:16:34 +00:00
# include <basegfx/matrix/b2dhommatrix.hxx>
# include <tools/string.hxx>
2007-11-01 14:21:56 +00:00
# include <com/sun/star/drawing/XEnhancedCustomShapeDefaulter.hpp>
2006-03-06 12:41:58 +00:00
// --> OD 2006-02-22 #b6382898#
# include <com/sun/star/text/XTextDocument.hpp>
// <--
2008-03-12 09:38:48 +00:00
using : : rtl : : OUString ;
using : : rtl : : OUStringBuffer ;
2000-09-18 16:07:07 +00:00
using namespace : : com : : sun : : star ;
2006-04-26 19:43:42 +00:00
using namespace : : com : : sun : : star : : uno ;
using namespace : : com : : sun : : star : : drawing ;
2008-03-12 09:38:48 +00:00
using namespace : : com : : sun : : star : : style ;
using namespace : : com : : sun : : star : : container ;
2008-07-07 12:27:52 +00:00
using namespace : : com : : sun : : star : : document ;
2001-06-29 20:07:26 +00:00
using namespace : : xmloff : : token ;
2004-04-02 12:53:51 +00:00
using namespace : : xmloff : : EnhancedCustomShapeToken ;
2000-09-18 16:07:07 +00:00
2001-07-24 16:06:10 +00:00
SvXMLEnumMapEntry aXML_GlueAlignment_EnumMap [ ] =
{
{ XML_TOP_LEFT , drawing : : Alignment_TOP_LEFT } ,
{ XML_TOP , drawing : : Alignment_TOP } ,
{ XML_TOP_RIGHT , drawing : : Alignment_TOP_RIGHT } ,
{ XML_LEFT , drawing : : Alignment_LEFT } ,
{ XML_CENTER , drawing : : Alignment_CENTER } ,
{ XML_RIGHT , drawing : : Alignment_RIGHT } ,
{ XML_BOTTOM_LEFT , drawing : : Alignment_BOTTOM_LEFT } ,
{ XML_BOTTOM , drawing : : Alignment_BOTTOM } ,
{ XML_BOTTOM_RIGHT , drawing : : Alignment_BOTTOM_RIGHT } ,
{ XML_TOKEN_INVALID , 0 }
} ;
SvXMLEnumMapEntry aXML_GlueEscapeDirection_EnumMap [ ] =
{
{ XML_AUTO , drawing : : EscapeDirection_SMART } ,
{ XML_LEFT , drawing : : EscapeDirection_LEFT } ,
{ XML_RIGHT , drawing : : EscapeDirection_RIGHT } ,
{ XML_UP , drawing : : EscapeDirection_UP } ,
{ XML_DOWN , drawing : : EscapeDirection_DOWN } ,
{ XML_HORIZONTAL , drawing : : EscapeDirection_HORIZONTAL } ,
{ XML_VERTICAL , drawing : : EscapeDirection_VERTICAL } ,
{ XML_TOKEN_INVALID , 0 }
} ;
2001-05-31 10:18:38 +00:00
2000-09-18 16:07:07 +00:00
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2003-04-24 13:51:47 +00:00
static bool ImpIsEmptyURL ( const : : rtl : : OUString & rURL )
{
if ( rURL . getLength ( ) = = 0 )
return true ;
// #i13140# Also compare against 'toplevel' URLs. which also
// result in empty filename strings.
if ( 0 = = rURL . compareToAscii ( " #./ " ) )
return true ;
return false ;
}
2000-09-18 16:07:07 +00:00
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2004-06-28 12:53:12 +00:00
TYPEINIT1 ( SvXMLShapeContext , SvXMLImportContext ) ;
TYPEINIT1 ( SdXMLShapeContext , SvXMLShapeContext ) ;
2000-09-18 16:07:07 +00:00
SdXMLShapeContext : : SdXMLShapeContext (
SvXMLImport & rImport ,
sal_uInt16 nPrfx ,
const OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
uno : : Reference < drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
2006-02-27 15:35:02 +00:00
: SvXMLShapeContext ( rImport , nPrfx , rLocalName , bTemporaryShape )
, mxShapes ( rShapes )
2006-06-19 17:15:11 +00:00
, mxAttrList ( xAttrList )
2008-10-01 06:34:11 +00:00
, mbListContextPushed ( false )
2006-02-27 15:35:02 +00:00
, mnStyleFamily ( XML_STYLE_FAMILY_SD_GRAPHICS_ID )
, mbIsPlaceholder ( FALSE )
2006-06-19 17:15:11 +00:00
, mbClearDefaultAttributes ( true )
2006-02-27 15:35:02 +00:00
, mbIsUserTransformed ( FALSE )
, mnZOrder ( - 1 )
, maSize ( 1 , 1 )
2006-06-19 17:15:11 +00:00
, maPosition ( 0 , 0 )
2000-09-18 16:07:07 +00:00
{
}
//////////////////////////////////////////////////////////////////////////////
SdXMLShapeContext : : ~ SdXMLShapeContext ( )
{
}
//////////////////////////////////////////////////////////////////////////////
2006-06-19 17:15:11 +00:00
SvXMLImportContext * SdXMLShapeContext : : CreateChildContext ( USHORT p_nPrefix ,
2000-09-18 16:07:07 +00:00
const OUString & rLocalName ,
const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
2001-02-07 15:26:36 +00:00
SvXMLImportContext * pContext = NULL ;
2006-12-19 16:27:16 +00:00
// #i68101#
if ( p_nPrefix = = XML_NAMESPACE_SVG & &
( IsXMLToken ( rLocalName , XML_TITLE ) | | IsXMLToken ( rLocalName , XML_DESC ) ) )
{
pContext = new SdXMLDescriptionContext ( GetImport ( ) , p_nPrefix , rLocalName , xAttrList , mxShape ) ;
}
else if ( p_nPrefix = = XML_NAMESPACE_OFFICE & & IsXMLToken ( rLocalName , XML_EVENT_LISTENERS ) )
2001-02-07 15:26:36 +00:00
{
2006-06-19 17:15:11 +00:00
pContext = new SdXMLEventsContext ( GetImport ( ) , p_nPrefix , rLocalName , xAttrList , mxShape ) ;
2001-02-07 15:26:36 +00:00
}
2006-06-19 17:15:11 +00:00
else if ( p_nPrefix = = XML_NAMESPACE_DRAW & & IsXMLToken ( rLocalName , XML_GLUE_POINT ) )
2001-05-31 10:18:38 +00:00
{
addGluePoint ( xAttrList ) ;
}
2006-06-19 17:15:11 +00:00
else if ( p_nPrefix = = XML_NAMESPACE_DRAW & & IsXMLToken ( rLocalName , XML_THUMBNAIL ) )
2001-06-14 15:50:57 +00:00
{
// search attributes for xlink:href
sal_Int16 nAttrCount = xAttrList . is ( ) ? xAttrList - > getLength ( ) : 0 ;
for ( sal_Int16 i = 0 ; i < nAttrCount ; i + + )
{
OUString sAttrName = xAttrList - > getNameByIndex ( i ) ;
OUString aLocalName ;
sal_uInt16 nPrefix = GetImport ( ) . GetNamespaceMap ( ) . GetKeyByAttrName ( sAttrName , & aLocalName ) ;
if ( nPrefix = = XML_NAMESPACE_XLINK )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( aLocalName , XML_HREF ) )
2001-06-14 15:50:57 +00:00
{
2001-07-02 12:24:00 +00:00
maThumbnailURL = xAttrList - > getValueByIndex ( i ) ;
2001-06-14 15:50:57 +00:00
break ;
}
}
}
}
2001-02-07 15:26:36 +00:00
else
2000-09-18 16:07:07 +00:00
{
2001-02-07 15:26:36 +00:00
// create text cursor on demand
if ( ! mxCursor . is ( ) )
2000-09-18 16:07:07 +00:00
{
2001-02-07 15:26:36 +00:00
uno : : Reference < text : : XText > xText ( mxShape , uno : : UNO_QUERY ) ;
if ( xText . is ( ) )
2000-09-18 16:07:07 +00:00
{
2001-09-07 05:06:55 +00:00
UniReference < XMLTextImportHelper > xTxtImport =
GetImport ( ) . GetTextImport ( ) ;
mxOldCursor = xTxtImport - > GetCursor ( ) ;
2001-02-07 15:26:36 +00:00
mxCursor = xText - > createTextCursor ( ) ;
if ( mxCursor . is ( ) )
{
2001-09-07 05:06:55 +00:00
xTxtImport - > SetCursor ( mxCursor ) ;
2001-02-07 15:26:36 +00:00
}
2001-09-07 05:06:55 +00:00
// remember old list item and block (#91964#) and reset them
// for the text frame
2008-10-01 06:34:11 +00:00
xTxtImport - > PushListContext ( ) ;
mbListContextPushed = true ;
2000-09-18 16:07:07 +00:00
}
}
2001-02-07 15:26:36 +00:00
// if we have a text cursor, lets try to import some text
if ( mxCursor . is ( ) )
{
pContext = GetImport ( ) . GetTextImport ( ) - > CreateTextChildContext (
2006-06-19 17:15:11 +00:00
GetImport ( ) , p_nPrefix , rLocalName , xAttrList ) ;
2001-02-07 15:26:36 +00:00
}
2000-09-18 16:07:07 +00:00
}
// call parent for content
if ( ! pContext )
2006-06-19 17:15:11 +00:00
pContext = SvXMLImportContext : : CreateChildContext ( p_nPrefix , rLocalName , xAttrList ) ;
2000-09-18 16:07:07 +00:00
return pContext ;
}
2001-05-31 10:18:38 +00:00
void SdXMLShapeContext : : addGluePoint ( const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
// get the glue points container for this shape if its not already there
if ( ! mxGluePoints . is ( ) )
{
uno : : Reference < drawing : : XGluePointsSupplier > xSupplier ( mxShape , uno : : UNO_QUERY ) ;
if ( ! xSupplier . is ( ) )
return ;
2001-06-19 13:53:22 +00:00
mxGluePoints = uno : : Reference < container : : XIdentifierContainer > : : query ( xSupplier - > getGluePoints ( ) ) ;
2001-05-31 10:18:38 +00:00
if ( ! mxGluePoints . is ( ) )
return ;
}
drawing : : GluePoint2 aGluePoint ;
aGluePoint . IsUserDefined = sal_True ;
aGluePoint . Position . X = 0 ;
aGluePoint . Position . Y = 0 ;
aGluePoint . Escape = drawing : : EscapeDirection_SMART ;
aGluePoint . PositionAlignment = drawing : : Alignment_CENTER ;
aGluePoint . IsRelative = sal_True ;
sal_Int32 nId = - 1 ;
// read attributes for the 3DScene
sal_Int16 nAttrCount = xAttrList . is ( ) ? xAttrList - > getLength ( ) : 0 ;
for ( sal_Int16 i = 0 ; i < nAttrCount ; i + + )
{
OUString sAttrName = xAttrList - > getNameByIndex ( i ) ;
OUString aLocalName ;
sal_uInt16 nPrefix = GetImport ( ) . GetNamespaceMap ( ) . GetKeyByAttrName ( sAttrName , & aLocalName ) ;
const OUString sValue ( xAttrList - > getValueByIndex ( i ) ) ;
if ( nPrefix = = XML_NAMESPACE_SVG )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( aLocalName , XML_X ) )
2001-05-31 10:18:38 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( aGluePoint . Position . X , sValue ) ;
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( aLocalName , XML_Y ) )
2001-05-31 10:18:38 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( aGluePoint . Position . Y , sValue ) ;
}
}
else if ( nPrefix = = XML_NAMESPACE_DRAW )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( aLocalName , XML_ID ) )
2001-05-31 10:18:38 +00:00
{
nId = sValue . toInt32 ( ) ;
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( aLocalName , XML_ALIGN ) )
2001-05-31 10:18:38 +00:00
{
USHORT eKind ;
if ( SvXMLUnitConverter : : convertEnum ( eKind , sValue , aXML_GlueAlignment_EnumMap ) )
{
aGluePoint . PositionAlignment = ( drawing : : Alignment ) eKind ;
aGluePoint . IsRelative = sal_False ;
}
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( aLocalName , XML_ESCAPE_DIRECTION ) )
2001-05-31 10:18:38 +00:00
{
USHORT eKind ;
if ( SvXMLUnitConverter : : convertEnum ( eKind , sValue , aXML_GlueEscapeDirection_EnumMap ) )
{
aGluePoint . Escape = ( drawing : : EscapeDirection ) eKind ;
}
}
}
}
if ( nId ! = - 1 )
{
try
{
2001-06-19 13:53:22 +00:00
sal_Int32 nInternalId = mxGluePoints - > insert ( uno : : makeAny ( aGluePoint ) ) ;
GetImport ( ) . GetShapeImport ( ) - > addGluePointMapping ( mxShape , nId , nInternalId ) ;
2001-05-31 10:18:38 +00:00
}
catch ( uno : : Exception & )
{
DBG_ERROR ( " exception during setting of glue points! " ) ;
}
}
}
2000-09-18 16:07:07 +00:00
//////////////////////////////////////////////////////////////////////////////
2006-06-19 17:15:11 +00:00
void SdXMLShapeContext : : StartElement ( const uno : : Reference < xml : : sax : : XAttributeList > & )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
GetImport ( ) . GetShapeImport ( ) - > finishShape ( mxShape , mxAttrList , mxShapes ) ;
2000-09-18 16:07:07 +00:00
}
2004-06-28 12:53:12 +00:00
void SdXMLShapeContext : : EndElement ( )
{
if ( mxCursor . is ( ) )
{
// delete addition newline
const OUString aEmpty ;
mxCursor - > gotoEnd ( sal_False ) ;
mxCursor - > goLeft ( 1 , sal_True ) ;
mxCursor - > setString ( aEmpty ) ;
// reset cursor
GetImport ( ) . GetTextImport ( ) - > ResetCursor ( ) ;
}
if ( mxOldCursor . is ( ) )
GetImport ( ) . GetTextImport ( ) - > SetCursor ( mxOldCursor ) ;
// reinstall old list item (if necessary) #91964#
2008-10-01 06:34:11 +00:00
if ( mbListContextPushed ) {
GetImport ( ) . GetTextImport ( ) - > PopListContext ( ) ;
2004-06-28 12:53:12 +00:00
}
2008-07-07 12:27:52 +00:00
if ( msHyperlink . getLength ( ) ! = 0 ) try
{
Reference < XEventsSupplier > xEventsSupplier ( mxShape , UNO_QUERY_THROW ) ;
Reference < XNameReplace > xEvents ( xEventsSupplier - > getEvents ( ) , UNO_QUERY_THROW ) ;
uno : : Sequence < beans : : PropertyValue > aProperties ( 3 ) ;
aProperties [ 0 ] . Name = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " EventType " ) ) ;
aProperties [ 0 ] . Handle = - 1 ;
aProperties [ 0 ] . Value < < = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Presentation " ) ) ;
aProperties [ 0 ] . State = beans : : PropertyState_DIRECT_VALUE ;
aProperties [ 1 ] . Name = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " ClickAction " ) ) ;
aProperties [ 1 ] . Handle = - 1 ;
aProperties [ 1 ] . Value < < = : : com : : sun : : star : : presentation : : ClickAction_DOCUMENT ;
aProperties [ 1 ] . State = beans : : PropertyState_DIRECT_VALUE ;
aProperties [ 2 ] . Name = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Bookmark " ) ) ;
aProperties [ 2 ] . Handle = - 1 ;
aProperties [ 2 ] . Value < < = msHyperlink ;
aProperties [ 2 ] . State = beans : : PropertyState_DIRECT_VALUE ;
const OUString sAPIEventName ( RTL_CONSTASCII_USTRINGPARAM ( " OnClick " ) ) ;
xEvents - > replaceByName ( sAPIEventName , Any ( aProperties ) ) ;
}
catch ( Exception & )
{
DBG_ERROR ( " xmloff::SdXMLShapeContext::EndElement(), exception caught! " ) ;
}
2004-06-28 12:53:12 +00:00
if ( mxLockable . is ( ) )
mxLockable - > removeActionLock ( ) ;
}
2000-09-18 16:07:07 +00:00
//////////////////////////////////////////////////////////////////////////////
void SdXMLShapeContext : : AddShape ( uno : : Reference < drawing : : XShape > & xShape )
{
2000-11-06 11:08:07 +00:00
if ( xShape . is ( ) )
2000-09-18 16:07:07 +00:00
{
// set shape local
mxShape = xShape ;
2000-11-16 15:31:37 +00:00
if ( maShapeName . getLength ( ) )
{
uno : : Reference < container : : XNamed > xNamed ( mxShape , uno : : UNO_QUERY ) ;
if ( xNamed . is ( ) )
xNamed - > setName ( maShapeName ) ;
}
2000-12-13 18:16:42 +00:00
UniReference < XMLShapeImportHelper > xImp ( GetImport ( ) . GetShapeImport ( ) ) ;
xImp - > addShape ( xShape , mxAttrList , mxShapes ) ;
2003-04-08 14:29:37 +00:00
2006-02-27 15:35:02 +00:00
if ( mbClearDefaultAttributes )
2006-02-09 13:03:11 +00:00
{
uno : : Reference < beans : : XMultiPropertyStates > xMultiPropertyStates ( xShape , uno : : UNO_QUERY ) ;
if ( xMultiPropertyStates . is ( ) )
xMultiPropertyStates - > setAllPropertiesToDefault ( ) ;
}
2003-04-08 14:29:37 +00:00
// #107848#
2004-10-22 06:55:13 +00:00
if ( ! mbTemporaryShape & & ( ! GetImport ( ) . HasTextImport ( )
| | ! GetImport ( ) . GetTextImport ( ) - > IsInsideDeleteContext ( ) ) )
2003-04-08 14:29:37 +00:00
{
xImp - > shapeWithZIndexAdded ( xShape , mnZOrder ) ;
}
2000-12-13 18:16:42 +00:00
2004-11-26 18:34:06 +00:00
if ( maShapeId . getLength ( ) )
{
uno : : Reference < uno : : XInterface > xRef ( xShape , uno : : UNO_QUERY ) ;
GetImport ( ) . getInterfaceToIdentifierMapper ( ) . registerReference ( maShapeId , xRef ) ;
}
2001-07-31 15:31:45 +00:00
2001-08-16 09:39:38 +00:00
// #91065# count only if counting for shape import is enabled
if ( GetImport ( ) . GetShapeImport ( ) - > IsHandleProgressBarEnabled ( ) )
{
// #80365# increment progress bar at load once for each draw object
GetImport ( ) . GetProgressBarHelper ( ) - > Increment ( ) ;
}
2000-12-13 18:16:42 +00:00
}
2001-07-30 13:19:26 +00:00
mxLockable = uno : : Reference < document : : XActionLockable > : : query ( xShape ) ;
if ( mxLockable . is ( ) )
mxLockable - > addActionLock ( ) ;
2000-12-13 18:16:42 +00:00
}
//////////////////////////////////////////////////////////////////////////////
void SdXMLShapeContext : : AddShape ( const char * pServiceName )
{
uno : : Reference < lang : : XMultiServiceFactory > xServiceFact ( GetImport ( ) . GetModel ( ) , uno : : UNO_QUERY ) ;
if ( xServiceFact . is ( ) )
{
2005-01-27 10:26:44 +00:00
try
{
2006-03-06 12:41:58 +00:00
// --> OD 2006-02-22 #b6382898#
// Since fix for issue i33294 the Writer model doesn't support
// com.sun.star.drawing.OLE2Shape anymore.
// To handle Draw OLE objects it's decided to import these
// objects as com.sun.star.drawing.OLE2Shape and convert these
// objects after the import into com.sun.star.drawing.GraphicObjectShape.
uno : : Reference < drawing : : XShape > xShape ;
if ( OUString : : createFromAscii ( pServiceName ) . compareToAscii ( " com.sun.star.drawing.OLE2Shape " ) = = 0 & &
uno : : Reference < text : : XTextDocument > ( GetImport ( ) . GetModel ( ) , uno : : UNO_QUERY ) . is ( ) )
{
xShape = uno : : Reference < drawing : : XShape > ( xServiceFact - > createInstance ( OUString : : createFromAscii ( " com.sun.star.drawing.temporaryForXMLImportOLE2Shape " ) ) , uno : : UNO_QUERY ) ;
}
else
{
xShape = uno : : Reference < drawing : : XShape > ( xServiceFact - > createInstance ( OUString : : createFromAscii ( pServiceName ) ) , uno : : UNO_QUERY ) ;
}
// <--
2005-01-27 10:26:44 +00:00
if ( xShape . is ( ) )
AddShape ( xShape ) ;
}
catch ( const uno : : Exception & e )
{
uno : : Sequence < rtl : : OUString > aSeq ( 1 ) ;
aSeq [ 0 ] = OUString : : createFromAscii ( pServiceName ) ;
GetImport ( ) . SetError ( XMLERROR_FLAG_ERROR | XMLERROR_API ,
aSeq , e . Message , NULL ) ;
}
2000-12-13 18:16:42 +00:00
}
}
//////////////////////////////////////////////////////////////////////////////
2001-02-09 12:38:53 +00:00
void SdXMLShapeContext : : SetTransformation ( )
2000-12-13 18:16:42 +00:00
{
2001-02-22 11:27:36 +00:00
if ( mxShape . is ( ) )
2000-12-13 18:16:42 +00:00
{
uno : : Reference < beans : : XPropertySet > xPropSet ( mxShape , uno : : UNO_QUERY ) ;
if ( xPropSet . is ( ) )
{
2006-11-14 13:16:34 +00:00
: : basegfx : : B2DHomMatrix aTransformation ;
2001-02-09 12:38:53 +00:00
2001-02-22 11:27:36 +00:00
if ( maSize . Width ! = 1 | | maSize . Height ! = 1 )
{
2001-02-22 16:06:04 +00:00
// take care there are no zeros used by error
if ( 0 = = maSize . Width )
maSize . Width = 1 ;
if ( 0 = = maSize . Height )
maSize . Height = 1 ;
2001-02-22 11:27:36 +00:00
// set global size. This should always be used.
2006-11-14 13:16:34 +00:00
aTransformation . scale ( maSize . Width , maSize . Height ) ;
2001-02-22 11:27:36 +00:00
}
2001-02-09 12:38:53 +00:00
2001-02-22 11:27:36 +00:00
if ( maPosition . X ! = 0 | | maPosition . Y ! = 0 )
{
// if global position is used, add it to transformation
2006-11-14 13:16:34 +00:00
aTransformation . translate ( maPosition . X , maPosition . Y ) ;
2001-02-22 11:27:36 +00:00
}
2001-02-09 12:38:53 +00:00
2001-02-22 11:27:36 +00:00
if ( mnTransform . NeedsAction ( ) )
{
// transformation is used, apply to object.
// NOTICE: The transformation is applied AFTER evtl. used
// global positioning and scaling is used, so any shear or
// rotate used herein is applied around the (0,0) position
// of the PAGE object !!!
2006-11-14 13:16:34 +00:00
: : basegfx : : B2DHomMatrix aMat ;
2001-02-22 11:27:36 +00:00
mnTransform . GetFullTransform ( aMat ) ;
// now add to transformation
aTransformation * = aMat ;
}
2001-02-09 12:38:53 +00:00
2001-02-22 11:27:36 +00:00
// now set transformation for this object
2000-12-13 18:16:42 +00:00
uno : : Any aAny ;
2001-02-22 11:27:36 +00:00
drawing : : HomogenMatrix3 aMatrix ;
2006-11-14 13:16:34 +00:00
aMatrix . Line1 . Column1 = aTransformation . get ( 0 , 0 ) ;
aMatrix . Line1 . Column2 = aTransformation . get ( 0 , 1 ) ;
aMatrix . Line1 . Column3 = aTransformation . get ( 0 , 2 ) ;
2001-02-22 11:27:36 +00:00
2006-11-14 13:16:34 +00:00
aMatrix . Line2 . Column1 = aTransformation . get ( 1 , 0 ) ;
aMatrix . Line2 . Column2 = aTransformation . get ( 1 , 1 ) ;
aMatrix . Line2 . Column3 = aTransformation . get ( 1 , 2 ) ;
2001-02-22 11:27:36 +00:00
2006-11-14 13:16:34 +00:00
aMatrix . Line3 . Column1 = aTransformation . get ( 2 , 0 ) ;
aMatrix . Line3 . Column2 = aTransformation . get ( 2 , 1 ) ;
aMatrix . Line3 . Column3 = aTransformation . get ( 2 , 2 ) ;
2001-02-22 11:27:36 +00:00
2001-02-09 12:38:53 +00:00
aAny < < = aMatrix ;
2000-12-13 18:16:42 +00:00
xPropSet - > setPropertyValue (
2001-02-09 12:38:53 +00:00
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Transformation " ) ) , aAny ) ;
2000-12-13 18:16:42 +00:00
}
2000-09-18 16:07:07 +00:00
}
}
//////////////////////////////////////////////////////////////////////////////
2003-03-27 17:21:03 +00:00
void SdXMLShapeContext : : SetStyle ( bool bSupportsStyle /* = true */ )
2000-09-18 16:07:07 +00:00
{
2001-03-01 15:31:32 +00:00
try
2000-09-18 16:07:07 +00:00
{
2001-06-01 11:32:48 +00:00
uno : : Reference < beans : : XPropertySet > xPropSet ( mxShape , uno : : UNO_QUERY ) ;
if ( ! xPropSet . is ( ) )
return ;
2001-03-01 15:31:32 +00:00
do
{
XMLPropStyleContext * pDocStyle = NULL ;
2001-02-08 13:45:43 +00:00
2001-03-01 15:31:32 +00:00
// set style on shape
2001-06-01 11:32:48 +00:00
if ( maDrawStyleName . getLength ( ) = = 0 )
2001-03-01 15:31:32 +00:00
break ;
2000-09-18 16:07:07 +00:00
2001-03-01 15:31:32 +00:00
const SvXMLStyleContext * pStyle = 0L ;
sal_Bool bAutoStyle ( FALSE ) ;
2000-09-18 16:07:07 +00:00
2001-03-01 15:31:32 +00:00
if ( GetImport ( ) . GetShapeImport ( ) - > GetAutoStylesContext ( ) )
pStyle = GetImport ( ) . GetShapeImport ( ) - > GetAutoStylesContext ( ) - > FindStyleChildContext ( mnStyleFamily , maDrawStyleName ) ;
2001-02-08 13:45:43 +00:00
2001-03-01 15:31:32 +00:00
if ( pStyle )
bAutoStyle = TRUE ;
2001-02-08 13:45:43 +00:00
2001-03-01 15:31:32 +00:00
if ( ! pStyle & & GetImport ( ) . GetShapeImport ( ) - > GetStylesContext ( ) )
pStyle = GetImport ( ) . GetShapeImport ( ) - > GetStylesContext ( ) - > FindStyleChildContext ( mnStyleFamily , maDrawStyleName ) ;
2000-09-18 16:07:07 +00:00
2001-03-01 15:31:32 +00:00
OUString aStyleName = maDrawStyleName ;
uno : : Reference < style : : XStyle > xStyle ;
2001-02-08 13:45:43 +00:00
2001-03-01 15:31:32 +00:00
if ( pStyle & & pStyle - > ISA ( XMLShapeStyleContext ) )
{
pDocStyle = PTR_CAST ( XMLShapeStyleContext , pStyle ) ;
if ( pDocStyle - > GetStyle ( ) . is ( ) )
{
xStyle = pDocStyle - > GetStyle ( ) ;
}
else
{
2004-11-26 12:00:41 +00:00
aStyleName = pDocStyle - > GetParentName ( ) ;
2001-03-01 15:31:32 +00:00
}
}
2000-09-18 16:07:07 +00:00
2001-03-20 15:33:02 +00:00
if ( ! xStyle . is ( ) & & aStyleName . getLength ( ) )
2001-03-01 15:31:32 +00:00
{
2003-03-27 17:21:03 +00:00
try
2001-03-01 15:31:32 +00:00
{
2003-03-27 17:21:03 +00:00
uno : : Reference < style : : XStyleFamiliesSupplier > xFamiliesSupplier ( GetImport ( ) . GetModel ( ) , uno : : UNO_QUERY ) ;
2001-09-28 13:29:19 +00:00
2003-03-27 17:21:03 +00:00
if ( xFamiliesSupplier . is ( ) )
{
uno : : Reference < container : : XNameAccess > xFamilies ( xFamiliesSupplier - > getStyleFamilies ( ) ) ;
if ( xFamilies . is ( ) )
2001-09-28 13:29:19 +00:00
{
2003-03-27 17:21:03 +00:00
uno : : Reference < container : : XNameAccess > xFamily ;
if ( XML_STYLE_FAMILY_SD_PRESENTATION_ID = = mnStyleFamily )
{
2004-07-13 07:26:37 +00:00
aStyleName = GetImport ( ) . GetStyleDisplayName (
XML_STYLE_FAMILY_SD_PRESENTATION_ID ,
aStyleName ) ;
2003-03-27 17:21:03 +00:00
sal_Int32 nPos = aStyleName . lastIndexOf ( sal_Unicode ( ' - ' ) ) ;
if ( - 1 ! = nPos )
{
OUString aFamily ( aStyleName . copy ( 0 , nPos ) ) ;
xFamilies - > getByName ( aFamily ) > > = xFamily ;
aStyleName = aStyleName . copy ( nPos + 1 ) ;
}
}
else
{
2004-07-13 07:26:37 +00:00
// get graphics familie
xFamilies - > getByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " graphics " ) ) ) > > = xFamily ;
aStyleName = GetImport ( ) . GetStyleDisplayName (
XML_STYLE_FAMILY_SD_GRAPHICS_ID ,
aStyleName ) ;
2002-11-25 12:13:11 +00:00
}
2001-09-28 13:29:19 +00:00
2003-03-27 17:21:03 +00:00
if ( xFamily . is ( ) )
xFamily - > getByName ( aStyleName ) > > = xStyle ;
}
2001-09-28 13:29:19 +00:00
}
2001-03-01 15:31:32 +00:00
}
2003-03-27 17:21:03 +00:00
catch ( uno : : Exception & )
{
DBG_ERROR ( " could not find style for shape! " ) ;
}
2001-03-01 15:31:32 +00:00
}
2003-03-27 17:21:03 +00:00
if ( bSupportsStyle & & xStyle . is ( ) )
2001-03-01 15:31:32 +00:00
{
try
{
// set style on object
uno : : Any aAny ;
aAny < < = xStyle ;
xPropSet - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Style " ) ) , aAny ) ;
}
2001-05-14 10:35:10 +00:00
catch ( uno : : Exception & )
2001-03-01 15:31:32 +00:00
{
DBG_ERROR ( " could not find style for shape! " ) ;
}
}
2001-02-08 13:45:43 +00:00
2001-03-01 15:31:32 +00:00
// if this is an auto style, set its properties
if ( bAutoStyle & & pDocStyle )
{
// set PropertySet on object
pDocStyle - > FillPropertySet ( xPropSet ) ;
}
} while ( 0 ) ;
2001-06-01 11:32:48 +00:00
// try to set text auto style
do
{
// set style on shape
if ( 0 = = maTextStyleName . getLength ( ) )
break ;
if ( NULL = = GetImport ( ) . GetShapeImport ( ) - > GetAutoStylesContext ( ) )
break ;
2008-03-05 15:46:41 +00:00
const SvXMLStyleContext * pTempStyle = GetImport ( ) . GetShapeImport ( ) - > GetAutoStylesContext ( ) - > FindStyleChildContext ( XML_STYLE_FAMILY_TEXT_PARAGRAPH , maTextStyleName ) ;
XMLPropStyleContext * pStyle = PTR_CAST ( XMLPropStyleContext , pTempStyle ) ; // use temp var, PTR_CAST is a bad macro, FindStyleChildContext will be called twice
2001-06-01 11:32:48 +00:00
if ( pStyle = = NULL )
break ;
// set PropertySet on object
pStyle - > FillPropertySet ( xPropSet ) ;
} while ( 0 ) ;
2001-03-01 15:31:32 +00:00
}
2001-05-14 10:35:10 +00:00
catch ( uno : : Exception & )
2001-03-01 15:31:32 +00:00
{
}
2000-09-18 16:07:07 +00:00
}
2001-01-19 15:25:18 +00:00
void SdXMLShapeContext : : SetLayer ( )
{
if ( maLayerName . getLength ( ) )
{
try
{
uno : : Reference < beans : : XPropertySet > xPropSet ( mxShape , uno : : UNO_QUERY ) ;
if ( xPropSet . is ( ) )
{
uno : : Any aAny ;
aAny < < = maLayerName ;
xPropSet - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " LayerName " ) ) , aAny ) ;
return ;
}
}
catch ( uno : : Exception e )
{
}
}
}
2001-06-14 15:50:57 +00:00
void SdXMLShapeContext : : SetThumbnail ( )
{
if ( 0 = = maThumbnailURL . getLength ( ) )
return ;
try
{
uno : : Reference < beans : : XPropertySet > xPropSet ( mxShape , uno : : UNO_QUERY ) ;
if ( ! xPropSet . is ( ) )
return ;
const OUString sProperty ( RTL_CONSTASCII_USTRINGPARAM ( " ThumbnailGraphicURL " ) ) ;
uno : : Reference < beans : : XPropertySetInfo > xPropSetInfo ( xPropSet - > getPropertySetInfo ( ) ) ;
if ( xPropSetInfo . is ( ) & & xPropSetInfo - > hasPropertyByName ( sProperty ) )
{
// load the thumbnail graphic and export it to a wmf stream so we can set
// it at the api
const OUString aInternalURL ( GetImport ( ) . ResolveGraphicObjectURL ( maThumbnailURL , sal_False ) ) ;
xPropSet - > setPropertyValue ( sProperty , uno : : makeAny ( aInternalURL ) ) ;
}
}
catch ( uno : : Exception e )
{
}
}
2000-11-23 17:30:39 +00:00
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
{
if ( XML_NAMESPACE_DRAW = = nPrefix )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_ZINDEX ) )
2000-11-23 17:30:39 +00:00
{
mnZOrder = rValue . toInt32 ( ) ;
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( rLocalName , XML_ID ) )
2000-12-13 18:16:42 +00:00
{
2004-11-26 18:34:06 +00:00
maShapeId = rValue ;
2000-12-13 18:16:42 +00:00
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( rLocalName , XML_NAME ) )
2000-11-26 18:48:02 +00:00
{
2000-12-13 18:16:42 +00:00
maShapeName = rValue ;
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( rLocalName , XML_STYLE_NAME ) )
2000-12-13 18:16:42 +00:00
{
maDrawStyleName = rValue ;
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( rLocalName , XML_TEXT_STYLE_NAME ) )
2001-06-01 11:32:48 +00:00
{
maTextStyleName = rValue ;
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( rLocalName , XML_LAYER ) )
2001-01-19 15:25:18 +00:00
{
maLayerName = rValue ;
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( rLocalName , XML_TRANSFORM ) )
2001-02-26 09:26:58 +00:00
{
mnTransform . SetString ( rValue , GetImport ( ) . GetMM100UnitConverter ( ) ) ;
}
2000-12-13 18:16:42 +00:00
}
else if ( XML_NAMESPACE_PRESENTATION = = nPrefix )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_USER_TRANSFORMED ) )
2000-12-13 18:16:42 +00:00
{
2001-06-29 20:07:26 +00:00
mbIsUserTransformed = IsXMLToken ( rValue , XML_TRUE ) ;
2000-12-13 18:16:42 +00:00
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( rLocalName , XML_PLACEHOLDER ) )
2000-12-13 18:16:42 +00:00
{
2001-06-29 20:07:26 +00:00
mbIsPlaceholder = IsXMLToken ( rValue , XML_TRUE ) ;
2006-02-27 15:35:02 +00:00
if ( mbIsPlaceholder )
mbClearDefaultAttributes = false ;
2000-12-13 18:16:42 +00:00
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( rLocalName , XML_CLASS ) )
2000-12-13 18:16:42 +00:00
{
maPresentationClass = rValue ;
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( rLocalName , XML_STYLE_NAME ) )
2000-12-13 18:16:42 +00:00
{
maDrawStyleName = rValue ;
mnStyleFamily = XML_STYLE_FAMILY_SD_PRESENTATION_ID ;
}
}
else if ( XML_NAMESPACE_SVG = = nPrefix )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_X ) )
2001-02-22 11:27:36 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( maPosition . X , rValue ) ;
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( rLocalName , XML_Y ) )
2001-02-22 11:27:36 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( maPosition . Y , rValue ) ;
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( rLocalName , XML_WIDTH ) )
2001-02-22 11:27:36 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( maSize . Width , rValue ) ;
2004-11-17 09:35:17 +00:00
if ( maSize . Width > 0 )
maSize . Width + = 1 ;
else if ( maSize . Width < 0 )
maSize . Width - = 1 ;
2001-02-22 11:27:36 +00:00
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( rLocalName , XML_HEIGHT ) )
2001-02-22 11:27:36 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( maSize . Height , rValue ) ;
2004-11-17 09:35:17 +00:00
if ( maSize . Height > 0 )
maSize . Height + = 1 ;
else if ( maSize . Height < 0 )
maSize . Height - = 1 ;
2001-02-22 11:27:36 +00:00
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( rLocalName , XML_TRANSFORM ) )
2001-04-04 15:55:50 +00:00
{
// because of #85127# take svg:transform into account and hanle like
// draw:transform for compatibility
mnTransform . SetString ( rValue , GetImport ( ) . GetMM100UnitConverter ( ) ) ;
}
2006-12-19 16:27:16 +00:00
// #i68101#
else if ( IsXMLToken ( rLocalName , XML_TITLE ) )
{
maShapeTitle = rValue ;
}
else if ( IsXMLToken ( rLocalName , XML_DESC ) )
{
maShapeDescription = rValue ;
}
2000-11-23 17:30:39 +00:00
}
2008-07-07 12:27:52 +00:00
else if ( ( XML_NAMESPACE_NONE = = nPrefix ) | | ( XML_NAMESPACE_XML = = nPrefix ) )
2007-06-27 14:33:18 +00:00
{
if ( IsXMLToken ( rLocalName , XML_ID ) )
{
maShapeId = rValue ;
}
}
2000-11-23 17:30:39 +00:00
}
2001-12-14 13:06:48 +00:00
sal_Bool SdXMLShapeContext : : isPresentationShape ( ) const
{
2005-09-23 09:39:21 +00:00
if ( maPresentationClass . getLength ( ) & & ( const_cast < SdXMLShapeContext * > ( this ) ) - > GetImport ( ) . GetShapeImport ( ) - > IsPresentationShapesSupported ( ) )
{
if ( XML_STYLE_FAMILY_SD_PRESENTATION_ID = = mnStyleFamily )
{
return sal_True ;
}
2001-12-14 13:06:48 +00:00
2005-09-23 09:39:21 +00:00
if ( IsXMLToken ( maPresentationClass , XML_HEADER ) | | IsXMLToken ( maPresentationClass , XML_FOOTER ) | |
IsXMLToken ( maPresentationClass , XML_PAGE_NUMBER ) | | IsXMLToken ( maPresentationClass , XML_DATE_TIME ) )
{
return sal_True ;
}
}
return sal_False ;
}
2001-12-14 13:06:48 +00:00
2000-09-18 16:07:07 +00:00
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TYPEINIT1 ( SdXMLRectShapeContext , SdXMLShapeContext ) ;
SdXMLRectShapeContext : : SdXMLRectShapeContext (
SvXMLImport & rImport ,
sal_uInt16 nPrfx ,
const OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
uno : : Reference < drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape ) ,
2000-09-18 16:07:07 +00:00
mnRadius ( 0L )
{
}
//////////////////////////////////////////////////////////////////////////////
SdXMLRectShapeContext : : ~ SdXMLRectShapeContext ( )
{
}
//////////////////////////////////////////////////////////////////////////////
2000-12-13 18:16:42 +00:00
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLRectShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
{
if ( XML_NAMESPACE_DRAW = = nPrefix )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_CORNER_RADIUS ) )
2000-12-13 18:16:42 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( mnRadius , rValue ) ;
return ;
}
}
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
}
//////////////////////////////////////////////////////////////////////////////
2000-09-18 16:07:07 +00:00
void SdXMLRectShapeContext : : StartElement ( const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
// create rectangle shape
2000-12-13 18:16:42 +00:00
AddShape ( " com.sun.star.drawing.RectangleShape " ) ;
if ( mxShape . is ( ) )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
// Add, set Style and properties from base shape
SetStyle ( ) ;
2001-01-19 15:25:18 +00:00
SetLayer ( ) ;
2000-09-18 16:07:07 +00:00
2001-02-09 12:38:53 +00:00
// set pos, size, shear and rotate
SetTransformation ( ) ;
2000-09-18 16:07:07 +00:00
2000-12-13 18:16:42 +00:00
if ( mnRadius )
{
uno : : Reference < beans : : XPropertySet > xPropSet ( mxShape , uno : : UNO_QUERY ) ;
if ( xPropSet . is ( ) )
2000-09-18 16:07:07 +00:00
{
2001-12-06 16:42:19 +00:00
try
{
xPropSet - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " CornerRadius " ) ) , uno : : makeAny ( mnRadius ) ) ;
}
catch ( uno : : Exception & )
{
DBG_ERROR ( " exception during setting of corner radius! " ) ;
}
2000-09-18 16:07:07 +00:00
}
}
2000-12-13 18:16:42 +00:00
SdXMLShapeContext : : StartElement ( xAttrList ) ;
2000-09-18 16:07:07 +00:00
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2004-08-12 07:50:35 +00:00
////////////////////////////////////////3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2000-09-18 16:07:07 +00:00
TYPEINIT1 ( SdXMLLineShapeContext , SdXMLShapeContext ) ;
SdXMLLineShapeContext : : SdXMLLineShapeContext (
SvXMLImport & rImport ,
sal_uInt16 nPrfx ,
const OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
uno : : Reference < drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape ) ,
2000-09-18 16:07:07 +00:00
mnX1 ( 0L ) ,
mnY1 ( 0L ) ,
mnX2 ( 1L ) ,
mnY2 ( 1L )
{
}
//////////////////////////////////////////////////////////////////////////////
SdXMLLineShapeContext : : ~ SdXMLLineShapeContext ( )
{
}
//////////////////////////////////////////////////////////////////////////////
2000-12-13 18:16:42 +00:00
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLLineShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
{
if ( XML_NAMESPACE_SVG = = nPrefix )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_X1 ) )
2000-12-13 18:16:42 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( mnX1 , rValue ) ;
return ;
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_Y1 ) )
2000-12-13 18:16:42 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( mnY1 , rValue ) ;
return ;
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_X2 ) )
2000-12-13 18:16:42 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( mnX2 , rValue ) ;
return ;
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_Y2 ) )
2000-12-13 18:16:42 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( mnY2 , rValue ) ;
return ;
}
}
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
}
//////////////////////////////////////////////////////////////////////////////
2000-09-18 16:07:07 +00:00
void SdXMLLineShapeContext : : StartElement ( const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
2001-04-24 10:36:10 +00:00
// #85920# use SetTransformation() to handle import of simple lines.
// This is necessary to kake into account all anchor positions and
// other things. All shape imports use the same import schemata now.
// create necessary shape (Line Shape)
AddShape ( " com.sun.star.drawing.PolyLineShape " ) ;
2000-12-13 18:16:42 +00:00
if ( mxShape . is ( ) )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
// Add, set Style and properties from base shape
SetStyle ( ) ;
2001-01-19 15:25:18 +00:00
SetLayer ( ) ;
2000-09-18 16:07:07 +00:00
2001-04-24 10:36:10 +00:00
// get sizes and offsets
awt : : Point aTopLeft ( mnX1 , mnY1 ) ;
awt : : Point aBottomRight ( mnX2 , mnY2 ) ;
if ( mnX1 > mnX2 )
{
aTopLeft . X = mnX2 ;
aBottomRight . X = mnX1 ;
}
if ( mnY1 > mnY2 )
{
aTopLeft . Y = mnY2 ;
aBottomRight . Y = mnY1 ;
}
2000-12-13 18:16:42 +00:00
// set local parameters on shape
uno : : Reference < beans : : XPropertySet > xPropSet ( mxShape , uno : : UNO_QUERY ) ;
if ( xPropSet . is ( ) )
{
drawing : : PointSequenceSequence aPolyPoly ( 1L ) ;
drawing : : PointSequence * pOuterSequence = aPolyPoly . getArray ( ) ;
pOuterSequence - > realloc ( 2L ) ;
awt : : Point * pInnerSequence = pOuterSequence - > getArray ( ) ;
uno : : Any aAny ;
2000-09-18 16:07:07 +00:00
2001-04-24 10:36:10 +00:00
* pInnerSequence = awt : : Point ( mnX1 - aTopLeft . X , mnY1 - aTopLeft . Y ) ;
2000-12-13 18:16:42 +00:00
pInnerSequence + + ;
2001-04-24 10:36:10 +00:00
* pInnerSequence = awt : : Point ( mnX2 - aTopLeft . X , mnY2 - aTopLeft . Y ) ;
2000-09-18 16:07:07 +00:00
2000-12-13 18:16:42 +00:00
aAny < < = aPolyPoly ;
xPropSet - > setPropertyValue (
2001-04-24 10:36:10 +00:00
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Geometry " ) ) , aAny ) ;
2000-09-18 16:07:07 +00:00
}
2000-11-15 10:58:54 +00:00
2001-04-24 10:36:10 +00:00
// set sizes for transformation
maSize . Width = aBottomRight . X - aTopLeft . X ;
maSize . Height = aBottomRight . Y - aTopLeft . Y ;
maPosition . X = aTopLeft . X ;
maPosition . Y = aTopLeft . Y ;
// set pos, size, shear and rotate and get copy of matrix
SetTransformation ( ) ;
2000-12-13 18:16:42 +00:00
SdXMLShapeContext : : StartElement ( xAttrList ) ;
}
2000-09-18 16:07:07 +00:00
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TYPEINIT1 ( SdXMLEllipseShapeContext , SdXMLShapeContext ) ;
SdXMLEllipseShapeContext : : SdXMLEllipseShapeContext (
SvXMLImport & rImport ,
sal_uInt16 nPrfx ,
const OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
uno : : Reference < drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape ) ,
2000-09-18 16:07:07 +00:00
mnCX ( 0L ) ,
mnCY ( 0L ) ,
mnRX ( 1L ) ,
2000-12-20 15:17:17 +00:00
mnRY ( 1L ) ,
meKind ( drawing : : CircleKind_FULL ) ,
mnStartAngle ( 0 ) ,
mnEndAngle ( 0 )
2000-09-18 16:07:07 +00:00
{
}
//////////////////////////////////////////////////////////////////////////////
SdXMLEllipseShapeContext : : ~ SdXMLEllipseShapeContext ( )
{
}
//////////////////////////////////////////////////////////////////////////////
2000-12-13 18:16:42 +00:00
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLEllipseShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
if ( XML_NAMESPACE_SVG = = nPrefix )
2000-09-18 16:07:07 +00:00
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_RX ) )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( mnRX , rValue ) ;
return ;
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_RY ) )
2000-12-13 18:16:42 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( mnRY , rValue ) ;
return ;
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_CX ) )
2000-12-13 18:16:42 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( mnCX , rValue ) ;
return ;
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_CY ) )
2000-12-13 18:16:42 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( mnCY , rValue ) ;
return ;
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_R ) )
2000-12-13 18:16:42 +00:00
{
// single radius, it's a circle and both radii are the same
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( mnRX , rValue ) ;
mnRY = mnRX ;
return ;
2000-09-18 16:07:07 +00:00
}
}
2000-12-20 15:17:17 +00:00
else if ( XML_NAMESPACE_DRAW = = nPrefix )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_KIND ) )
2000-12-20 15:17:17 +00:00
{
USHORT eKind ;
if ( SvXMLUnitConverter : : convertEnum ( eKind , rValue , aXML_CircleKind_EnumMap ) )
{
meKind = eKind ;
}
return ;
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_START_ANGLE ) )
2000-12-20 15:17:17 +00:00
{
double dStartAngle ;
2001-02-26 09:26:58 +00:00
if ( SvXMLUnitConverter : : convertDouble ( dStartAngle , rValue ) )
2000-12-20 15:17:17 +00:00
mnStartAngle = ( sal_Int32 ) ( dStartAngle * 100.0 ) ;
return ;
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_END_ANGLE ) )
2000-12-20 15:17:17 +00:00
{
double dEndAngle ;
2001-02-26 09:26:58 +00:00
if ( SvXMLUnitConverter : : convertDouble ( dEndAngle , rValue ) )
2000-12-20 15:17:17 +00:00
mnEndAngle = ( sal_Int32 ) ( dEndAngle * 100.0 ) ;
return ;
}
}
2000-11-15 10:58:54 +00:00
2000-12-13 18:16:42 +00:00
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
}
//////////////////////////////////////////////////////////////////////////////
void SdXMLEllipseShapeContext : : StartElement ( const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
// create rectangle shape
AddShape ( " com.sun.star.drawing.EllipseShape " ) ;
if ( mxShape . is ( ) )
{
// Add, set Style and properties from base shape
SetStyle ( ) ;
2001-01-19 15:25:18 +00:00
SetLayer ( ) ;
2000-12-13 18:16:42 +00:00
2001-02-09 12:38:53 +00:00
// set pos, size, shear and rotate
SetTransformation ( ) ;
2000-12-13 18:16:42 +00:00
2000-12-20 15:17:17 +00:00
if ( meKind ! = drawing : : CircleKind_FULL )
{
uno : : Reference < beans : : XPropertySet > xPropSet ( mxShape , uno : : UNO_QUERY ) ;
if ( xPropSet . is ( ) )
{
uno : : Any aAny ;
aAny < < = ( drawing : : CircleKind ) meKind ;
xPropSet - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " CircleKind " ) ) , aAny ) ;
aAny < < = mnStartAngle ;
xPropSet - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " CircleStartAngle " ) ) , aAny ) ;
aAny < < = mnEndAngle ;
xPropSet - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " CircleEndAngle " ) ) , aAny ) ;
}
}
2000-12-13 18:16:42 +00:00
SdXMLShapeContext : : StartElement ( xAttrList ) ;
}
2000-09-18 16:07:07 +00:00
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TYPEINIT1 ( SdXMLPolygonShapeContext , SdXMLShapeContext ) ;
SdXMLPolygonShapeContext : : SdXMLPolygonShapeContext (
SvXMLImport & rImport ,
sal_uInt16 nPrfx ,
const OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
uno : : Reference < drawing : : XShapes > & rShapes , sal_Bool bClosed , sal_Bool bTemporaryShape )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape ) ,
2000-09-18 16:07:07 +00:00
mbClosed ( bClosed )
{
2000-12-13 18:16:42 +00:00
}
//////////////////////////////////////////////////////////////////////////////
2000-09-18 16:07:07 +00:00
2000-12-13 18:16:42 +00:00
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLPolygonShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
{
if ( XML_NAMESPACE_SVG = = nPrefix )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_VIEWBOX ) )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
maViewBox = rValue ;
return ;
2000-09-18 16:07:07 +00:00
}
}
2000-12-13 18:16:42 +00:00
else if ( XML_NAMESPACE_DRAW = = nPrefix )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_POINTS ) )
2000-12-13 18:16:42 +00:00
{
maPoints = rValue ;
return ;
}
}
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
2000-09-18 16:07:07 +00:00
}
//////////////////////////////////////////////////////////////////////////////
SdXMLPolygonShapeContext : : ~ SdXMLPolygonShapeContext ( )
{
}
//////////////////////////////////////////////////////////////////////////////
void SdXMLPolygonShapeContext : : StartElement ( const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
2000-12-13 18:16:42 +00:00
// Add, set Style and properties from base shape
2001-02-01 11:17:05 +00:00
if ( mbClosed )
AddShape ( " com.sun.star.drawing.PolyPolygonShape " ) ;
else
AddShape ( " com.sun.star.drawing.PolyLineShape " ) ;
2000-12-13 18:16:42 +00:00
if ( mxShape . is ( ) )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
SetStyle ( ) ;
2001-01-19 15:25:18 +00:00
SetLayer ( ) ;
2000-09-18 16:07:07 +00:00
2000-12-13 18:16:42 +00:00
// set local parameters on shape
uno : : Reference < beans : : XPropertySet > xPropSet ( mxShape , uno : : UNO_QUERY ) ;
if ( xPropSet . is ( ) )
{
// set polygon
if ( maPoints . getLength ( ) & & maViewBox . getLength ( ) )
{
SdXMLImExViewBox aViewBox ( maViewBox , GetImport ( ) . GetMM100UnitConverter ( ) ) ;
2001-02-09 12:38:53 +00:00
awt : : Size aSize ( aViewBox . GetWidth ( ) , aViewBox . GetHeight ( ) ) ;
2005-01-31 10:47:34 +00:00
if ( maSize . Width ! = 0 & & maSize . Height ! = 0 )
{
aSize = maSize ;
}
2001-02-09 12:38:53 +00:00
awt : : Point aPosition ( aViewBox . GetX ( ) , aViewBox . GetY ( ) ) ;
SdXMLImExPointsElement aPoints ( maPoints , aViewBox ,
aPosition , aSize , GetImport ( ) . GetMM100UnitConverter ( ) ) ;
2000-09-18 16:07:07 +00:00
2000-12-13 18:16:42 +00:00
uno : : Any aAny ;
aAny < < = aPoints . GetPointSequenceSequence ( ) ;
xPropSet - > setPropertyValue (
2001-02-09 12:38:53 +00:00
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Geometry " ) ) , aAny ) ;
2000-09-18 16:07:07 +00:00
}
}
2000-11-15 10:58:54 +00:00
2001-02-09 12:38:53 +00:00
// set pos, size, shear and rotate and get copy of matrix
SetTransformation ( ) ;
2000-12-13 18:16:42 +00:00
SdXMLShapeContext : : StartElement ( xAttrList ) ;
}
2000-09-18 16:07:07 +00:00
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TYPEINIT1 ( SdXMLPathShapeContext , SdXMLShapeContext ) ;
SdXMLPathShapeContext : : SdXMLPathShapeContext (
SvXMLImport & rImport ,
sal_uInt16 nPrfx ,
const OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
uno : : Reference < drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape ) ,
2000-09-18 16:07:07 +00:00
mbClosed ( TRUE )
{
}
//////////////////////////////////////////////////////////////////////////////
SdXMLPathShapeContext : : ~ SdXMLPathShapeContext ( )
{
}
//////////////////////////////////////////////////////////////////////////////
2000-12-13 18:16:42 +00:00
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLPathShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
{
if ( XML_NAMESPACE_SVG = = nPrefix )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_VIEWBOX ) )
2000-12-13 18:16:42 +00:00
{
maViewBox = rValue ;
return ;
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( rLocalName , XML_D ) )
2000-12-13 18:16:42 +00:00
{
maD = rValue ;
return ;
}
}
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
}
//////////////////////////////////////////////////////////////////////////////
2000-09-18 16:07:07 +00:00
void SdXMLPathShapeContext : : StartElement ( const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
// create polygon shape
2000-12-13 18:16:42 +00:00
if ( maD . getLength ( ) )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
// prepare some of the parameters
SdXMLImExViewBox aViewBox ( maViewBox , GetImport ( ) . GetMM100UnitConverter ( ) ) ;
2001-02-09 12:38:53 +00:00
awt : : Size aSize ( aViewBox . GetWidth ( ) , aViewBox . GetHeight ( ) ) ;
awt : : Point aPosition ( aViewBox . GetX ( ) , aViewBox . GetY ( ) ) ;
2005-01-31 10:47:34 +00:00
if ( maSize . Width ! = 0 & & maSize . Height ! = 0 )
{
aSize = maSize ;
}
2001-02-09 12:38:53 +00:00
SdXMLImExSvgDElement aPoints ( maD , aViewBox ,
aPosition , aSize , GetImport ( ) . GetMM100UnitConverter ( ) ) ;
2000-09-18 16:07:07 +00:00
2006-06-19 17:15:11 +00:00
const char * pService ;
2000-12-13 18:16:42 +00:00
// now create shape
if ( aPoints . IsCurve ( ) )
{
if ( aPoints . IsClosed ( ) )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
pService = " com.sun.star.drawing.ClosedBezierShape " ;
2000-09-18 16:07:07 +00:00
}
else
{
2000-12-13 18:16:42 +00:00
pService = " com.sun.star.drawing.OpenBezierShape " ;
2000-09-18 16:07:07 +00:00
}
2000-12-13 18:16:42 +00:00
}
else
{
if ( aPoints . IsClosed ( ) )
{
pService = " com.sun.star.drawing.PolyPolygonShape " ;
}
else
{
pService = " com.sun.star.drawing.PolyLineShape " ;
}
}
2000-09-18 16:07:07 +00:00
2000-12-13 18:16:42 +00:00
// Add, set Style and properties from base shape
AddShape ( pService ) ;
2001-07-12 15:58:15 +00:00
// #89344# test for mxShape.is() and not for mxShapes.is() to support
// shape import helper classes WITHOUT XShapes (member mxShapes). This
// is used by the writer.
if ( mxShape . is ( ) )
2000-12-13 18:16:42 +00:00
{
SetStyle ( ) ;
2001-01-19 15:25:18 +00:00
SetLayer ( ) ;
2000-12-13 18:16:42 +00:00
// set local parameters on shape
uno : : Reference < beans : : XPropertySet > xPropSet ( mxShape , uno : : UNO_QUERY ) ;
if ( xPropSet . is ( ) )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
uno : : Any aAny ;
2000-09-18 16:07:07 +00:00
2000-12-13 18:16:42 +00:00
// set svg:d
if ( maD . getLength ( ) )
{
if ( aPoints . IsCurve ( ) )
{
drawing : : PolyPolygonBezierCoords aSourcePolyPolygon (
aPoints . GetPointSequenceSequence ( ) ,
aPoints . GetFlagSequenceSequence ( ) ) ;
2000-09-18 16:07:07 +00:00
2000-12-13 18:16:42 +00:00
aAny < < = aSourcePolyPolygon ;
xPropSet - > setPropertyValue (
2001-02-09 12:38:53 +00:00
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Geometry " ) ) , aAny ) ;
2000-12-13 18:16:42 +00:00
}
else
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
aAny < < = aPoints . GetPointSequenceSequence ( ) ;
xPropSet - > setPropertyValue (
2001-02-09 12:38:53 +00:00
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Geometry " ) ) , aAny ) ;
2000-09-18 16:07:07 +00:00
}
}
}
2001-02-09 12:38:53 +00:00
// set pos, size, shear and rotate
SetTransformation ( ) ;
2000-12-13 18:16:42 +00:00
SdXMLShapeContext : : StartElement ( xAttrList ) ;
2000-09-18 16:07:07 +00:00
}
2000-12-13 18:16:42 +00:00
}
2000-09-18 16:07:07 +00:00
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TYPEINIT1 ( SdXMLTextBoxShapeContext , SdXMLShapeContext ) ;
SdXMLTextBoxShapeContext : : SdXMLTextBoxShapeContext (
SvXMLImport & rImport ,
sal_uInt16 nPrfx ,
const OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
uno : : Reference < drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape ) ,
2001-11-26 14:18:49 +00:00
mnRadius ( 0 )
2000-09-18 16:07:07 +00:00
{
}
//////////////////////////////////////////////////////////////////////////////
SdXMLTextBoxShapeContext : : ~ SdXMLTextBoxShapeContext ( )
{
}
//////////////////////////////////////////////////////////////////////////////
2001-11-15 16:14:01 +00:00
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLTextBoxShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
{
if ( XML_NAMESPACE_DRAW = = nPrefix )
{
if ( IsXMLToken ( rLocalName , XML_CORNER_RADIUS ) )
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( mnRadius , rValue ) ;
return ;
}
}
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
}
//////////////////////////////////////////////////////////////////////////////
2004-07-13 07:26:37 +00:00
void SdXMLTextBoxShapeContext : : StartElement ( const uno : : Reference < xml : : sax : : XAttributeList > & )
2000-09-18 16:07:07 +00:00
{
// create textbox shape
2004-03-30 15:16:54 +00:00
sal_Bool bIsPresShape = sal_False ;
bool bClearText = false ;
2000-12-13 18:16:42 +00:00
2006-06-19 17:15:11 +00:00
const char * pService = NULL ;
2000-09-18 16:07:07 +00:00
2001-12-14 13:06:48 +00:00
if ( isPresentationShape ( ) )
2000-12-13 18:16:42 +00:00
{
2001-11-08 14:44:42 +00:00
// check if the current document supports presentation shapes
if ( GetImport ( ) . GetShapeImport ( ) - > IsPresentationShapesSupported ( ) )
2000-12-13 18:16:42 +00:00
{
2001-11-08 14:44:42 +00:00
if ( IsXMLToken ( maPresentationClass , XML_PRESENTATION_SUBTITLE ) )
{
// XmlShapeTypePresSubtitleShape
pService = " com.sun.star.presentation.SubtitleShape " ;
}
else if ( IsXMLToken ( maPresentationClass , XML_PRESENTATION_OUTLINE ) )
{
// XmlShapeTypePresOutlinerShape
pService = " com.sun.star.presentation.OutlinerShape " ;
}
else if ( IsXMLToken ( maPresentationClass , XML_PRESENTATION_NOTES ) )
{
// XmlShapeTypePresNotesShape
pService = " com.sun.star.presentation.NotesShape " ;
}
2004-03-30 15:16:54 +00:00
else if ( IsXMLToken ( maPresentationClass , XML_HEADER ) )
{
// XmlShapeTypePresHeaderShape
pService = " com.sun.star.presentation.HeaderShape " ;
bClearText = true ;
}
else if ( IsXMLToken ( maPresentationClass , XML_FOOTER ) )
{
// XmlShapeTypePresFooterShape
pService = " com.sun.star.presentation.FooterShape " ;
bClearText = true ;
}
else if ( IsXMLToken ( maPresentationClass , XML_PAGE_NUMBER ) )
{
// XmlShapeTypePresSlideNumberShape
pService = " com.sun.star.presentation.SlideNumberShape " ;
bClearText = true ;
}
else if ( IsXMLToken ( maPresentationClass , XML_DATE_TIME ) )
{
// XmlShapeTypePresDateTimeShape
pService = " com.sun.star.presentation.DateTimeShape " ;
bClearText = true ;
}
2001-11-08 14:44:42 +00:00
else // IsXMLToken( maPresentationClass, XML_PRESENTATION_TITLE ) )
{
// XmlShapeTypePresTitleTextShape
pService = " com.sun.star.presentation.TitleTextShape " ;
}
bIsPresShape = TRUE ;
2000-12-13 18:16:42 +00:00
}
}
2001-11-08 14:44:42 +00:00
if ( NULL = = pService )
2000-12-13 18:16:42 +00:00
{
// normal text shape
pService = " com.sun.star.drawing.TextShape " ;
}
// Add, set Style and properties from base shape
AddShape ( pService ) ;
if ( mxShape . is ( ) )
{
SetStyle ( ) ;
2001-01-19 15:25:18 +00:00
SetLayer ( ) ;
2000-09-18 16:07:07 +00:00
2000-12-13 18:16:42 +00:00
if ( bIsPresShape )
{
uno : : Reference < beans : : XPropertySet > xProps ( mxShape , uno : : UNO_QUERY ) ;
if ( xProps . is ( ) )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
uno : : Reference < beans : : XPropertySetInfo > xPropsInfo ( xProps - > getPropertySetInfo ( ) ) ;
if ( xPropsInfo . is ( ) )
2000-11-06 11:08:07 +00:00
{
2000-12-13 18:16:42 +00:00
if ( ! mbIsPlaceholder & & xPropsInfo - > hasPropertyByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsEmptyPresentationObject " ) ) ) )
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsEmptyPresentationObject " ) ) , : : cppu : : bool2any ( sal_False ) ) ;
2000-12-06 15:53:44 +00:00
2000-12-13 18:16:42 +00:00
if ( mbIsUserTransformed & & xPropsInfo - > hasPropertyByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsPlaceholderDependent " ) ) ) )
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsPlaceholderDependent " ) ) , : : cppu : : bool2any ( sal_False ) ) ;
2000-11-06 11:08:07 +00:00
}
}
2000-12-13 18:16:42 +00:00
}
2000-09-18 16:07:07 +00:00
2004-03-30 15:16:54 +00:00
if ( bClearText )
{
uno : : Reference < text : : XText > xText ( mxShape , uno : : UNO_QUERY ) ;
OUString aEmpty ;
xText - > setString ( aEmpty ) ;
}
2000-12-13 18:16:42 +00:00
// set parameters on shape
2001-02-09 12:38:53 +00:00
//A AW->CL: Eventually You need to strip scale and translate from the transformation
//A to reach the same goal again.
//A if(!bIsPresShape || mbIsUserTransformed)
//A {
//A // set pos and size on shape, this should remove binding
//A // to pres object on masterpage
//A SetSizeAndPosition();
//A }
// set pos, size, shear and rotate
SetTransformation ( ) ;
2000-09-18 16:07:07 +00:00
2001-11-15 16:14:01 +00:00
if ( mnRadius )
{
uno : : Reference < beans : : XPropertySet > xPropSet ( mxShape , uno : : UNO_QUERY ) ;
if ( xPropSet . is ( ) )
{
2001-12-05 13:52:31 +00:00
try
{
xPropSet - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " CornerRadius " ) ) , uno : : makeAny ( mnRadius ) ) ;
}
catch ( uno : : Exception & )
{
DBG_ERROR ( " exception during setting of corner radius! " ) ;
}
2001-11-15 16:14:01 +00:00
}
}
2004-07-13 07:26:37 +00:00
SdXMLShapeContext : : StartElement ( mxAttrList ) ;
2000-09-18 16:07:07 +00:00
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TYPEINIT1 ( SdXMLControlShapeContext , SdXMLShapeContext ) ;
SdXMLControlShapeContext : : SdXMLControlShapeContext (
SvXMLImport & rImport ,
sal_uInt16 nPrfx ,
const OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
uno : : Reference < drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape )
2000-09-18 16:07:07 +00:00
{
}
//////////////////////////////////////////////////////////////////////////////
SdXMLControlShapeContext : : ~ SdXMLControlShapeContext ( )
{
}
//////////////////////////////////////////////////////////////////////////////
2001-01-18 13:53:32 +00:00
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLControlShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
{
2004-07-13 07:26:37 +00:00
if ( XML_NAMESPACE_DRAW = = nPrefix )
2001-01-18 13:53:32 +00:00
{
2004-07-13 07:26:37 +00:00
if ( IsXMLToken ( rLocalName , XML_CONTROL ) )
2001-01-18 13:53:32 +00:00
{
maFormId = rValue ;
return ;
}
}
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
}
2000-09-18 16:07:07 +00:00
void SdXMLControlShapeContext : : StartElement ( const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
// create Control shape
2000-12-13 18:16:42 +00:00
// add, set style and properties from base shape
AddShape ( " com.sun.star.drawing.ControlShape " ) ;
if ( mxShape . is ( ) )
2000-09-18 16:07:07 +00:00
{
2001-01-18 13:53:32 +00:00
DBG_ASSERT ( maFormId . getLength ( ) , " draw:control without a form:id attribute! " ) ;
if ( maFormId . getLength ( ) )
{
2001-07-24 16:06:10 +00:00
# ifndef SVX_LIGHT
2001-04-26 17:05:46 +00:00
if ( GetImport ( ) . IsFormsSupported ( ) )
2001-01-18 13:53:32 +00:00
{
2001-04-26 17:05:46 +00:00
uno : : Reference < awt : : XControlModel > xControlModel ( GetImport ( ) . GetFormImport ( ) - > lookupControl ( maFormId ) , uno : : UNO_QUERY ) ;
if ( xControlModel . is ( ) )
{
uno : : Reference < drawing : : XControlShape > xControl ( mxShape , uno : : UNO_QUERY ) ;
if ( xControl . is ( ) )
xControl - > setControl ( xControlModel ) ;
2001-01-18 13:53:32 +00:00
2001-04-26 17:05:46 +00:00
}
2001-01-18 13:53:32 +00:00
}
2001-07-24 16:06:10 +00:00
# endif // #ifndef SVX_LIGHT
2001-01-18 13:53:32 +00:00
}
2001-04-19 11:00:46 +00:00
SetStyle ( ) ;
SetLayer ( ) ;
// set pos, size, shear and rotate
SetTransformation ( ) ;
2000-12-13 18:16:42 +00:00
SdXMLShapeContext : : StartElement ( xAttrList ) ;
}
2000-09-18 16:07:07 +00:00
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TYPEINIT1 ( SdXMLConnectorShapeContext , SdXMLShapeContext ) ;
SdXMLConnectorShapeContext : : SdXMLConnectorShapeContext (
SvXMLImport & rImport ,
sal_uInt16 nPrfx ,
const OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
uno : : Reference < drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape ) ,
2000-11-26 18:48:02 +00:00
maStart ( 0 , 0 ) ,
maEnd ( 1 , 1 ) ,
mnType ( ( USHORT ) drawing : : ConnectorType_STANDARD ) ,
mnStartGlueId ( - 1 ) ,
mnEndGlueId ( - 1 ) ,
mnDelta1 ( 0 ) ,
mnDelta2 ( 0 ) ,
mnDelta3 ( 0 )
2000-09-18 16:07:07 +00:00
{
}
//////////////////////////////////////////////////////////////////////////////
SdXMLConnectorShapeContext : : ~ SdXMLConnectorShapeContext ( )
{
}
//////////////////////////////////////////////////////////////////////////////
2000-11-26 18:48:02 +00:00
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLConnectorShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
{
switch ( nPrefix )
{
case XML_NAMESPACE_DRAW :
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_START_SHAPE ) )
2000-11-26 18:48:02 +00:00
{
2004-11-26 18:34:06 +00:00
maStartShapeId = rValue ;
2000-12-13 18:16:42 +00:00
return ;
2000-11-26 18:48:02 +00:00
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_START_GLUE_POINT ) )
2000-11-26 18:48:02 +00:00
{
mnStartGlueId = rValue . toInt32 ( ) ;
2000-12-13 18:16:42 +00:00
return ;
2000-11-26 18:48:02 +00:00
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_END_SHAPE ) )
2000-11-26 18:48:02 +00:00
{
2004-11-26 18:34:06 +00:00
maEndShapeId = rValue ;
2000-12-13 18:16:42 +00:00
return ;
2000-11-26 18:48:02 +00:00
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_END_GLUE_POINT ) )
2000-11-26 18:48:02 +00:00
{
mnEndGlueId = rValue . toInt32 ( ) ;
2000-12-13 18:16:42 +00:00
return ;
2000-11-26 18:48:02 +00:00
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_LINE_SKEW ) )
2000-11-26 18:48:02 +00:00
{
SvXMLTokenEnumerator aTokenEnum ( rValue ) ;
OUString aToken ;
if ( aTokenEnum . getNextToken ( aToken ) )
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( mnDelta1 , aToken ) ;
if ( aTokenEnum . getNextToken ( aToken ) )
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( mnDelta2 , aToken ) ;
if ( aTokenEnum . getNextToken ( aToken ) )
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( mnDelta3 , aToken ) ;
}
}
}
2000-12-13 18:16:42 +00:00
return ;
2000-11-26 18:48:02 +00:00
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_TYPE ) )
2000-11-26 18:48:02 +00:00
{
SvXMLUnitConverter : : convertEnum ( mnType , rValue , aXML_ConnectionKind_EnumMap ) ;
2000-12-13 18:16:42 +00:00
return ;
2000-11-26 18:48:02 +00:00
}
}
case XML_NAMESPACE_SVG :
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_X1 ) )
2000-11-26 18:48:02 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( maStart . X , rValue ) ;
2000-12-13 18:16:42 +00:00
return ;
2000-11-26 18:48:02 +00:00
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_Y1 ) )
2000-11-26 18:48:02 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( maStart . Y , rValue ) ;
2000-12-13 18:16:42 +00:00
return ;
2000-11-26 18:48:02 +00:00
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_X2 ) )
2000-11-26 18:48:02 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( maEnd . X , rValue ) ;
2000-12-13 18:16:42 +00:00
return ;
2000-11-26 18:48:02 +00:00
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_Y2 ) )
2000-11-26 18:48:02 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( maEnd . Y , rValue ) ;
2000-12-13 18:16:42 +00:00
return ;
2000-11-26 18:48:02 +00:00
}
2008-07-01 21:56:59 +00:00
if ( IsXMLToken ( rLocalName , XML_D ) )
{
SdXMLImExViewBox aViewBox ( 0 , 0 , 1 , 1 ) ;
awt : : Point aPoint ( 0 , 0 ) ;
awt : : Size aSize ( 1 , 1 ) ;
SdXMLImExSvgDElement aPoints ( rValue , aViewBox ,
aPoint , aSize , GetImport ( ) . GetMM100UnitConverter ( ) ) ;
if ( aPoints . IsCurve ( ) )
{
drawing : : PolyPolygonBezierCoords aSourcePolyPolygon (
aPoints . GetPointSequenceSequence ( ) ,
aPoints . GetFlagSequenceSequence ( ) ) ;
maPath < < = aSourcePolyPolygon ;
}
else
{
const drawing : : PointSequenceSequence & rOuterSeq = aPoints . GetPointSequenceSequence ( ) ;
drawing : : FlagSequenceSequence aFlagSeqSeq ( rOuterSeq . getLength ( ) ) ;
for ( int a = 0 ; a < rOuterSeq . getLength ( ) ; a + + )
aFlagSeqSeq [ a ] = drawing : : FlagSequence ( rOuterSeq [ a ] . getLength ( ) ) ;
drawing : : PolyPolygonBezierCoords aSourcePolyPolygon (
aPoints . GetPointSequenceSequence ( ) ,
aFlagSeqSeq ) ;
maPath < < = aSourcePolyPolygon ;
}
}
2000-11-26 18:48:02 +00:00
}
}
2000-12-13 18:16:42 +00:00
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
2000-11-26 18:48:02 +00:00
}
//////////////////////////////////////////////////////////////////////////////
2000-09-18 16:07:07 +00:00
void SdXMLConnectorShapeContext : : StartElement ( const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
2003-03-27 17:21:03 +00:00
// #107928#
// For security reasons, do not add empty connectors. There may have been an error in EA2
// that created empty, far set off connectors (e.g. 63 meters below top of document). This
// is not guaranteed, but it's definitely safe to not add empty connectors.
sal_Bool bDoAdd ( sal_True ) ;
2004-11-26 18:34:06 +00:00
if ( 0 = = maStartShapeId . getLength ( )
& & 0 = = maEndShapeId . getLength ( )
2003-03-27 17:21:03 +00:00
& & maStart . X = = maEnd . X
& & maStart . Y = = maEnd . Y
& & 0 = = mnDelta1
& & 0 = = mnDelta2
& & 0 = = mnDelta3
)
2000-09-18 16:07:07 +00:00
{
2003-03-27 17:21:03 +00:00
bDoAdd = sal_False ;
}
2000-12-13 18:16:42 +00:00
2003-03-27 17:21:03 +00:00
if ( bDoAdd )
{
// create Connector shape
// add, set style and properties from base shape
AddShape ( " com.sun.star.drawing.ConnectorShape " ) ;
if ( mxShape . is ( ) )
{
// add connection ids
2004-11-26 18:34:06 +00:00
if ( maStartShapeId . getLength ( ) )
GetImport ( ) . GetShapeImport ( ) - > addShapeConnection ( mxShape , sal_True , maStartShapeId , mnStartGlueId ) ;
if ( maEndShapeId . getLength ( ) )
GetImport ( ) . GetShapeImport ( ) - > addShapeConnection ( mxShape , sal_False , maEndShapeId , mnEndGlueId ) ;
2003-03-27 17:21:03 +00:00
uno : : Reference < beans : : XPropertySet > xProps ( mxShape , uno : : UNO_QUERY ) ;
if ( xProps . is ( ) )
{
uno : : Any aAny ;
aAny < < = maStart ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " StartPosition " ) ) , aAny ) ;
2000-11-26 18:48:02 +00:00
2003-03-27 17:21:03 +00:00
aAny < < = maEnd ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " EndPosition " ) ) , aAny ) ;
2000-11-26 18:48:02 +00:00
2003-03-27 17:21:03 +00:00
aAny < < = ( drawing : : ConnectorType ) mnType ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " EdgeKind " ) ) , aAny ) ;
2000-11-26 18:48:02 +00:00
2003-03-27 17:21:03 +00:00
aAny < < = mnDelta1 ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " EdgeLine1Delta " ) ) , aAny ) ;
2000-11-26 18:48:02 +00:00
2003-03-27 17:21:03 +00:00
aAny < < = mnDelta2 ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " EdgeLine2Delta " ) ) , aAny ) ;
2000-11-26 18:48:02 +00:00
2003-03-27 17:21:03 +00:00
aAny < < = mnDelta3 ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " EdgeLine3Delta " ) ) , aAny ) ;
}
SetStyle ( ) ;
SetLayer ( ) ;
2000-11-15 10:58:54 +00:00
2008-07-01 21:56:59 +00:00
if ( maPath . hasValue ( ) )
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " PolyPolygonBezier " ) ) , maPath ) ;
2003-03-27 17:21:03 +00:00
SdXMLShapeContext : : StartElement ( xAttrList ) ;
}
2000-12-13 18:16:42 +00:00
}
2000-09-18 16:07:07 +00:00
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TYPEINIT1 ( SdXMLMeasureShapeContext , SdXMLShapeContext ) ;
SdXMLMeasureShapeContext : : SdXMLMeasureShapeContext (
SvXMLImport & rImport ,
sal_uInt16 nPrfx ,
const OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
uno : : Reference < drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape ) ,
2000-11-26 18:48:02 +00:00
maStart ( 0 , 0 ) ,
maEnd ( 1 , 1 )
2000-09-18 16:07:07 +00:00
{
}
//////////////////////////////////////////////////////////////////////////////
SdXMLMeasureShapeContext : : ~ SdXMLMeasureShapeContext ( )
{
}
2000-11-26 18:48:02 +00:00
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLMeasureShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
{
switch ( nPrefix )
{
case XML_NAMESPACE_SVG :
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_X1 ) )
2000-11-26 18:48:02 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( maStart . X , rValue ) ;
2000-12-13 18:16:42 +00:00
return ;
2000-11-26 18:48:02 +00:00
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_Y1 ) )
2000-11-26 18:48:02 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( maStart . Y , rValue ) ;
2000-12-13 18:16:42 +00:00
return ;
2000-11-26 18:48:02 +00:00
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_X2 ) )
2000-11-26 18:48:02 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( maEnd . X , rValue ) ;
2000-12-13 18:16:42 +00:00
return ;
2000-11-26 18:48:02 +00:00
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_Y2 ) )
2000-11-26 18:48:02 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( maEnd . Y , rValue ) ;
2000-12-13 18:16:42 +00:00
return ;
2000-11-26 18:48:02 +00:00
}
}
}
2000-12-13 18:16:42 +00:00
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
2000-11-26 18:48:02 +00:00
}
2000-09-18 16:07:07 +00:00
//////////////////////////////////////////////////////////////////////////////
void SdXMLMeasureShapeContext : : StartElement ( const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
// create Measure shape
2000-12-13 18:16:42 +00:00
// add, set style and properties from base shape
AddShape ( " com.sun.star.drawing.MeasureShape " ) ;
if ( mxShape . is ( ) )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
SetStyle ( ) ;
2001-01-19 15:25:18 +00:00
SetLayer ( ) ;
2006-12-19 16:27:16 +00:00
2000-12-13 18:16:42 +00:00
uno : : Reference < beans : : XPropertySet > xProps ( mxShape , uno : : UNO_QUERY ) ;
if ( xProps . is ( ) )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
uno : : Any aAny ;
aAny < < = maStart ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " StartPosition " ) ) , aAny ) ;
2000-11-26 18:48:02 +00:00
2000-12-13 18:16:42 +00:00
aAny < < = maEnd ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " EndPosition " ) ) , aAny ) ;
2000-09-18 16:07:07 +00:00
}
2001-02-01 18:12:31 +00:00
// delete pre created fields
uno : : Reference < text : : XText > xText ( mxShape , uno : : UNO_QUERY ) ;
if ( xText . is ( ) )
{
const OUString aEmpty ( RTL_CONSTASCII_USTRINGPARAM ( " " ) ) ;
xText - > setString ( aEmpty ) ;
}
2000-12-13 18:16:42 +00:00
SdXMLShapeContext : : StartElement ( xAttrList ) ;
2000-09-18 16:07:07 +00:00
}
}
2001-02-01 18:12:31 +00:00
void SdXMLMeasureShapeContext : : EndElement ( )
{
do
{
// delete pre created fields
uno : : Reference < text : : XText > xText ( mxShape , uno : : UNO_QUERY ) ;
if ( ! xText . is ( ) )
break ;
uno : : Reference < text : : XTextCursor > xCursor ( xText - > createTextCursor ( ) ) ;
if ( ! xCursor . is ( ) )
break ;
const OUString aEmpty ;
xCursor - > collapseToStart ( ) ;
xCursor - > goRight ( 1 , sal_True ) ;
xCursor - > setString ( aEmpty ) ;
}
while ( 0 ) ;
2004-06-28 12:53:12 +00:00
SdXMLShapeContext : : EndElement ( ) ;
2001-02-01 18:12:31 +00:00
}
2000-09-18 16:07:07 +00:00
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TYPEINIT1 ( SdXMLPageShapeContext , SdXMLShapeContext ) ;
SdXMLPageShapeContext : : SdXMLPageShapeContext (
SvXMLImport & rImport ,
sal_uInt16 nPrfx ,
const OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
uno : : Reference < drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape ) , mnPageNumber ( 0 )
2000-09-18 16:07:07 +00:00
{
2006-02-27 15:35:02 +00:00
mbClearDefaultAttributes = false ;
2000-09-18 16:07:07 +00:00
}
//////////////////////////////////////////////////////////////////////////////
SdXMLPageShapeContext : : ~ SdXMLPageShapeContext ( )
{
}
//////////////////////////////////////////////////////////////////////////////
2001-06-11 12:46:30 +00:00
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLPageShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
{
if ( XML_NAMESPACE_DRAW = = nPrefix )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_PAGE_NUMBER ) )
2001-06-11 12:46:30 +00:00
{
mnPageNumber = rValue . toInt32 ( ) ;
return ;
}
}
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
}
//////////////////////////////////////////////////////////////////////////////
2000-09-18 16:07:07 +00:00
void SdXMLPageShapeContext : : StartElement ( const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
// create Page shape
2000-12-13 18:16:42 +00:00
// add, set style and properties from base shape
2001-05-02 10:45:25 +00:00
// #86163# take into account which type of PageShape needs to
2001-06-29 20:07:26 +00:00
// be constructed. It's an pres shape if presentation:XML_CLASS == XML_PRESENTATION_PAGE.
2002-10-17 13:40:18 +00:00
sal_Bool bIsPresentation = maPresentationClass . getLength ( ) & &
GetImport ( ) . GetShapeImport ( ) - > IsPresentationShapesSupported ( ) ;
2001-05-02 10:45:25 +00:00
2001-05-28 12:32:20 +00:00
uno : : Reference < lang : : XServiceInfo > xInfo ( mxShapes , uno : : UNO_QUERY ) ;
const sal_Bool bIsOnHandoutPage = xInfo . is ( ) & & xInfo - > supportsService ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.presentation.HandoutMasterPage " ) ) ) ;
2001-05-02 10:45:25 +00:00
2001-05-28 12:32:20 +00:00
if ( bIsOnHandoutPage )
2001-05-02 10:45:25 +00:00
{
2001-05-28 12:32:20 +00:00
AddShape ( " com.sun.star.presentation.HandoutShape " ) ;
2001-05-02 10:45:25 +00:00
}
else
{
2001-11-08 14:44:42 +00:00
if ( bIsPresentation & & ! IsXMLToken ( maPresentationClass , XML_PRESENTATION_PAGE ) )
2001-05-28 12:32:20 +00:00
{
bIsPresentation = FALSE ;
}
if ( bIsPresentation )
{
AddShape ( " com.sun.star.presentation.PageShape " ) ;
}
else
{
AddShape ( " com.sun.star.drawing.PageShape " ) ;
}
2001-05-02 10:45:25 +00:00
}
2000-12-13 18:16:42 +00:00
if ( mxShape . is ( ) )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
SetStyle ( ) ;
2001-01-19 15:25:18 +00:00
SetLayer ( ) ;
2000-12-06 15:53:44 +00:00
2001-02-09 12:38:53 +00:00
// set pos, size, shear and rotate
SetTransformation ( ) ;
2000-09-18 16:07:07 +00:00
2001-06-11 12:46:30 +00:00
uno : : Reference < beans : : XPropertySet > xPropSet ( mxShape , uno : : UNO_QUERY ) ;
if ( xPropSet . is ( ) )
{
uno : : Reference < beans : : XPropertySetInfo > xPropSetInfo ( xPropSet - > getPropertySetInfo ( ) ) ;
const OUString aPageNumberStr ( RTL_CONSTASCII_USTRINGPARAM ( " PageNumber " ) ) ;
if ( xPropSetInfo . is ( ) & & xPropSetInfo - > hasPropertyByName ( aPageNumberStr ) )
xPropSet - > setPropertyValue ( aPageNumberStr , uno : : makeAny ( mnPageNumber ) ) ;
}
2000-12-13 18:16:42 +00:00
SdXMLShapeContext : : StartElement ( xAttrList ) ;
2000-09-18 16:07:07 +00:00
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TYPEINIT1 ( SdXMLCaptionShapeContext , SdXMLShapeContext ) ;
SdXMLCaptionShapeContext : : SdXMLCaptionShapeContext (
SvXMLImport & rImport ,
sal_uInt16 nPrfx ,
const OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
uno : : Reference < drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape ) ,
2001-05-16 09:31:58 +00:00
// #86616# for correct edge rounding import mnRadius needs to be initialized
mnRadius ( 0L )
2000-09-18 16:07:07 +00:00
{
}
//////////////////////////////////////////////////////////////////////////////
SdXMLCaptionShapeContext : : ~ SdXMLCaptionShapeContext ( )
{
}
//////////////////////////////////////////////////////////////////////////////
void SdXMLCaptionShapeContext : : StartElement ( const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
// create Caption shape
2000-12-13 18:16:42 +00:00
// add, set style and properties from base shape
AddShape ( " com.sun.star.drawing.CaptionShape " ) ;
if ( mxShape . is ( ) )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
SetStyle ( ) ;
2001-01-19 15:25:18 +00:00
SetLayer ( ) ;
2000-11-15 10:58:54 +00:00
2006-05-05 09:05:04 +00:00
uno : : Reference < beans : : XPropertySet > xProps ( mxShape , uno : : UNO_QUERY ) ;
// SJ: If AutoGrowWidthItem is set, SetTransformation will lead to the wrong SnapRect
// because NbcAdjustTextFrameWidthAndHeight() is called (text is set later and center alignment
// is the default setting, so the top left reference point that is used by the caption point is
// no longer correct) There are two ways to solve this problem, temporarily disabling the
// autogrowwith as we are doing here or to apply the CaptionPoint after setting text
sal_Bool bIsAutoGrowWidth = sal_False ;
if ( xProps . is ( ) )
{
uno : : Any aAny ( xProps - > getPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " TextAutoGrowWidth " ) ) ) ) ;
aAny > > = bIsAutoGrowWidth ;
if ( bIsAutoGrowWidth )
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " TextAutoGrowWidth " ) ) , uno : : makeAny ( sal_False ) ) ;
}
2001-02-09 12:38:53 +00:00
// set pos, size, shear and rotate
SetTransformation ( ) ;
2001-05-07 13:35:39 +00:00
if ( xProps . is ( ) )
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " CaptionPoint " ) ) , uno : : makeAny ( maCaptionPoint ) ) ;
2006-05-05 09:05:04 +00:00
if ( bIsAutoGrowWidth )
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " TextAutoGrowWidth " ) ) , uno : : makeAny ( sal_True ) ) ;
2001-05-07 13:35:39 +00:00
if ( mnRadius )
{
uno : : Reference < beans : : XPropertySet > xPropSet ( mxShape , uno : : UNO_QUERY ) ;
if ( xPropSet . is ( ) )
{
2001-12-06 16:42:19 +00:00
try
{
xPropSet - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " CornerRadius " ) ) , uno : : makeAny ( mnRadius ) ) ;
}
catch ( uno : : Exception & )
{
DBG_ERROR ( " exception during setting of corner radius! " ) ;
}
2001-05-07 13:35:39 +00:00
}
}
2000-12-13 18:16:42 +00:00
SdXMLShapeContext : : StartElement ( xAttrList ) ;
}
2000-09-18 16:07:07 +00:00
}
2001-05-07 13:35:39 +00:00
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLCaptionShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
{
if ( XML_NAMESPACE_DRAW = = nPrefix )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_CAPTION_POINT_X ) )
2001-05-07 13:35:39 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( maCaptionPoint . X , rValue ) ;
return ;
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_CAPTION_POINT_Y ) )
2001-05-07 13:35:39 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( maCaptionPoint . Y , rValue ) ;
return ;
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_CORNER_RADIUS ) )
2001-05-07 13:35:39 +00:00
{
GetImport ( ) . GetMM100UnitConverter ( ) . convertMeasure ( mnRadius , rValue ) ;
return ;
}
}
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
}
2000-09-18 16:07:07 +00:00
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TYPEINIT1 ( SdXMLGraphicObjectShapeContext , SdXMLShapeContext ) ;
SdXMLGraphicObjectShapeContext : : SdXMLGraphicObjectShapeContext (
SvXMLImport & rImport ,
sal_uInt16 nPrfx ,
const OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
uno : : Reference < drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape ) ,
2000-12-13 18:16:42 +00:00
maURL ( )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
}
2000-09-18 16:07:07 +00:00
2000-12-13 18:16:42 +00:00
//////////////////////////////////////////////////////////////////////////////
2000-09-18 16:07:07 +00:00
2000-12-13 18:16:42 +00:00
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLGraphicObjectShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
{
if ( XML_NAMESPACE_XLINK = = nPrefix )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_HREF ) )
2000-09-18 16:07:07 +00:00
{
2001-07-02 12:24:00 +00:00
maURL = rValue ;
2000-12-13 18:16:42 +00:00
return ;
2000-09-18 16:07:07 +00:00
}
}
2000-12-13 18:16:42 +00:00
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
}
//////////////////////////////////////////////////////////////////////////////
2004-07-13 07:26:37 +00:00
void SdXMLGraphicObjectShapeContext : : StartElement ( const : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : xml : : sax : : XAttributeList > & )
2000-12-13 18:16:42 +00:00
{
2000-09-18 16:07:07 +00:00
// create graphic object shape
2006-06-19 17:15:11 +00:00
const char * pService ;
2001-04-30 08:02:17 +00:00
2001-11-08 14:44:42 +00:00
if ( IsXMLToken ( maPresentationClass , XML_GRAPHIC ) & & GetImport ( ) . GetShapeImport ( ) - > IsPresentationShapesSupported ( ) )
2001-04-30 08:02:17 +00:00
{
pService = " com.sun.star.presentation.GraphicObjectShape " ;
}
else
{
pService = " com.sun.star.drawing.GraphicObjectShape " ;
}
AddShape ( pService ) ;
2000-12-13 18:16:42 +00:00
if ( mxShape . is ( ) )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
SetStyle ( ) ;
2001-01-19 15:25:18 +00:00
SetLayer ( ) ;
2006-12-19 16:27:16 +00:00
2006-06-19 17:15:11 +00:00
uno : : Reference < beans : : XPropertySet > xPropset ( mxShape , uno : : UNO_QUERY ) ;
if ( xPropset . is ( ) )
2000-09-18 16:07:07 +00:00
{
2006-04-26 19:43:42 +00:00
// since OOo 1.x had no line or fill style for graphics, but may create
// documents with them, we have to override them here
sal_Int32 nUPD , nBuildId ;
if ( GetImport ( ) . getBuildIds ( nUPD , nBuildId ) & & ( nUPD = = 645 ) ) try
{
2006-06-19 17:15:11 +00:00
xPropset - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " FillStyle " ) ) , Any ( FillStyle_NONE ) ) ;
xPropset - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " LineStyle " ) ) , Any ( LineStyle_NONE ) ) ;
2006-04-26 19:43:42 +00:00
}
catch ( Exception & )
{
}
2006-06-19 17:15:11 +00:00
uno : : Reference < beans : : XPropertySetInfo > xPropsInfo ( xPropset - > getPropertySetInfo ( ) ) ;
2001-04-30 08:02:17 +00:00
if ( xPropsInfo . is ( ) & & xPropsInfo - > hasPropertyByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsEmptyPresentationObject " ) ) ) )
2006-06-19 17:15:11 +00:00
xPropset - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsEmptyPresentationObject " ) ) , : : cppu : : bool2any ( mbIsPlaceholder ) ) ;
2000-09-18 16:07:07 +00:00
2001-04-30 08:02:17 +00:00
if ( ! mbIsPlaceholder )
{
2000-12-13 18:16:42 +00:00
if ( maURL . getLength ( ) )
{
uno : : Any aAny ;
2008-02-26 12:37:09 +00:00
aAny < < = GetImport ( ) . ResolveGraphicObjectURL ( maURL , GetImport ( ) . isGraphicLoadOnDemandSupported ( ) ) ;
2000-12-13 18:16:42 +00:00
try
{
2006-06-19 17:15:11 +00:00
xPropset - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " GraphicURL " ) ) , aAny ) ;
xPropset - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " GraphicStreamURL " ) ) , aAny ) ;
2000-12-13 18:16:42 +00:00
}
catch ( lang : : IllegalArgumentException const & )
2000-09-18 16:07:07 +00:00
{
}
}
}
}
2000-12-06 15:53:44 +00:00
if ( mbIsUserTransformed )
{
2000-12-13 18:16:42 +00:00
uno : : Reference < beans : : XPropertySet > xProps ( mxShape , uno : : UNO_QUERY ) ;
2000-12-06 15:53:44 +00:00
if ( xProps . is ( ) )
{
uno : : Reference < beans : : XPropertySetInfo > xPropsInfo ( xProps - > getPropertySetInfo ( ) ) ;
if ( xPropsInfo . is ( ) )
{
if ( xPropsInfo - > hasPropertyByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsPlaceholderDependent " ) ) ) )
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsPlaceholderDependent " ) ) , : : cppu : : bool2any ( sal_False ) ) ;
}
}
}
2001-02-09 12:38:53 +00:00
// set pos, size, shear and rotate
SetTransformation ( ) ;
2000-09-18 16:07:07 +00:00
2004-07-13 07:26:37 +00:00
SdXMLShapeContext : : StartElement ( mxAttrList ) ;
2000-09-18 16:07:07 +00:00
}
}
2001-08-09 13:09:49 +00:00
void SdXMLGraphicObjectShapeContext : : EndElement ( )
{
if ( mxBase64Stream . is ( ) )
{
OUString sURL ( GetImport ( ) . ResolveGraphicObjectURLFromBase64 ( mxBase64Stream ) ) ;
if ( sURL . getLength ( ) )
{
try
{
uno : : Reference < beans : : XPropertySet > xProps ( mxShape , uno : : UNO_QUERY ) ;
if ( xProps . is ( ) )
{
const uno : : Any aAny ( uno : : makeAny ( sURL ) ) ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " GraphicURL " ) ) , aAny ) ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " GraphicStreamURL " ) ) , aAny ) ;
}
}
catch ( lang : : IllegalArgumentException const & )
{
}
}
}
2004-06-28 12:53:12 +00:00
SdXMLShapeContext : : EndElement ( ) ;
2001-08-09 13:09:49 +00:00
}
2000-09-18 16:07:07 +00:00
//////////////////////////////////////////////////////////////////////////////
2001-03-29 15:48:43 +00:00
SvXMLImportContext * SdXMLGraphicObjectShapeContext : : CreateChildContext (
USHORT nPrefix , const : : rtl : : OUString & rLocalName ,
const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
SvXMLImportContext * pContext = NULL ;
2006-04-28 13:58:07 +00:00
if ( ( XML_NAMESPACE_OFFICE = = nPrefix ) & &
2001-08-09 13:09:49 +00:00
xmloff : : token : : IsXMLToken ( rLocalName , xmloff : : token : : XML_BINARY_DATA ) )
{
if ( ! maURL . getLength ( ) & & ! mxBase64Stream . is ( ) )
{
mxBase64Stream = GetImport ( ) . GetStreamForGraphicObjectURLFromBase64 ( ) ;
if ( mxBase64Stream . is ( ) )
pContext = new XMLBase64ImportContext ( GetImport ( ) , nPrefix ,
rLocalName , xAttrList ,
mxBase64Stream ) ;
}
}
2001-03-29 15:48:43 +00:00
// delegate to parent class if no context could be created
if ( NULL = = pContext )
pContext = SdXMLShapeContext : : CreateChildContext ( nPrefix , rLocalName ,
xAttrList ) ;
return pContext ;
}
//////////////////////////////////////////////////////////////////////////////
2000-09-18 16:07:07 +00:00
SdXMLGraphicObjectShapeContext : : ~ SdXMLGraphicObjectShapeContext ( )
{
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TYPEINIT1 ( SdXMLChartShapeContext , SdXMLShapeContext ) ;
SdXMLChartShapeContext : : SdXMLChartShapeContext (
SvXMLImport & rImport ,
sal_uInt16 nPrfx ,
const OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
uno : : Reference < drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape ) ,
2000-09-18 16:07:07 +00:00
mpChartContext ( NULL )
{
2000-12-13 18:16:42 +00:00
}
2000-09-18 16:07:07 +00:00
2000-12-13 18:16:42 +00:00
//////////////////////////////////////////////////////////////////////////////
2000-09-18 16:07:07 +00:00
2000-12-13 18:16:42 +00:00
SdXMLChartShapeContext : : ~ SdXMLChartShapeContext ( )
{
if ( mpChartContext )
delete mpChartContext ;
}
//////////////////////////////////////////////////////////////////////////////
void SdXMLChartShapeContext : : StartElement ( const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
2001-12-14 13:06:48 +00:00
const sal_Bool bIsPresentation = isPresentationShape ( ) ;
2001-11-08 14:44:42 +00:00
2000-12-13 18:16:42 +00:00
AddShape ( bIsPresentation ? " com.sun.star.presentation.ChartShape " : " com.sun.star.drawing.OLE2Shape " ) ;
if ( mxShape . is ( ) )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
SetStyle ( ) ;
2001-01-19 15:25:18 +00:00
SetLayer ( ) ;
2000-09-18 16:07:07 +00:00
2000-12-13 18:16:42 +00:00
if ( ! mbIsPlaceholder )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
uno : : Reference < beans : : XPropertySet > xProps ( mxShape , uno : : UNO_QUERY ) ;
if ( xProps . is ( ) )
2000-09-18 16:07:07 +00:00
{
2000-12-13 18:16:42 +00:00
uno : : Reference < beans : : XPropertySetInfo > xPropsInfo ( xProps - > getPropertySetInfo ( ) ) ;
if ( xPropsInfo . is ( ) & & xPropsInfo - > hasPropertyByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsEmptyPresentationObject " ) ) ) )
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsEmptyPresentationObject " ) ) , : : cppu : : bool2any ( sal_False ) ) ;
2000-09-18 16:07:07 +00:00
2000-12-13 18:16:42 +00:00
uno : : Any aAny ;
2000-09-18 16:07:07 +00:00
2001-02-27 11:53:38 +00:00
const OUString aCLSID ( RTL_CONSTASCII_USTRINGPARAM ( " 12DCAE26-281F-416F-a234-c3086127382e " ) ) ;
2000-12-13 18:16:42 +00:00
aAny < < = aCLSID ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " CLSID " ) ) , aAny ) ;
2000-09-18 16:07:07 +00:00
2001-07-24 16:06:10 +00:00
# ifndef SVX_LIGHT
2000-12-13 18:16:42 +00:00
aAny = xProps - > getPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Model " ) ) ) ;
uno : : Reference < frame : : XModel > xChartModel ;
if ( aAny > > = xChartModel )
{
2001-06-29 20:07:26 +00:00
mpChartContext = GetImport ( ) . GetChartImport ( ) - > CreateChartContext ( GetImport ( ) , XML_NAMESPACE_SVG , GetXMLToken ( XML_CHART ) , xChartModel , xAttrList ) ;
2000-09-18 16:07:07 +00:00
}
2001-07-24 16:06:10 +00:00
# endif
2000-09-18 16:07:07 +00:00
}
}
2000-12-06 15:53:44 +00:00
if ( mbIsUserTransformed )
{
2000-12-13 18:16:42 +00:00
uno : : Reference < beans : : XPropertySet > xProps ( mxShape , uno : : UNO_QUERY ) ;
2000-12-06 15:53:44 +00:00
if ( xProps . is ( ) )
{
uno : : Reference < beans : : XPropertySetInfo > xPropsInfo ( xProps - > getPropertySetInfo ( ) ) ;
if ( xPropsInfo . is ( ) )
{
if ( xPropsInfo - > hasPropertyByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsPlaceholderDependent " ) ) ) )
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsPlaceholderDependent " ) ) , : : cppu : : bool2any ( sal_False ) ) ;
}
}
}
2000-09-18 16:07:07 +00:00
2001-02-09 12:38:53 +00:00
// set pos, size, shear and rotate
SetTransformation ( ) ;
2000-09-18 16:07:07 +00:00
2000-12-13 18:16:42 +00:00
SdXMLShapeContext : : StartElement ( xAttrList ) ;
2000-11-15 10:58:54 +00:00
2000-12-13 18:16:42 +00:00
if ( mpChartContext )
mpChartContext - > StartElement ( xAttrList ) ;
}
2000-09-18 16:07:07 +00:00
}
void SdXMLChartShapeContext : : EndElement ( )
{
if ( mpChartContext )
mpChartContext - > EndElement ( ) ;
2004-06-28 12:53:12 +00:00
SdXMLShapeContext : : EndElement ( ) ;
2000-09-18 16:07:07 +00:00
}
void SdXMLChartShapeContext : : Characters ( const : : rtl : : OUString & rChars )
{
if ( mpChartContext )
2000-10-26 08:59:25 +00:00
mpChartContext - > Characters ( rChars ) ;
2000-09-18 16:07:07 +00:00
}
2000-10-26 08:59:25 +00:00
SvXMLImportContext * SdXMLChartShapeContext : : CreateChildContext ( USHORT nPrefix , const : : rtl : : OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList )
{
if ( mpChartContext )
return mpChartContext - > CreateChildContext ( nPrefix , rLocalName , xAttrList ) ;
return NULL ;
}
2000-09-18 16:07:07 +00:00
2001-02-21 17:04:45 +00:00
//////////////////////////////////////////////////////////////////////////////
TYPEINIT1 ( SdXMLObjectShapeContext , SdXMLShapeContext ) ;
SdXMLObjectShapeContext : : SdXMLObjectShapeContext ( SvXMLImport & rImport , sal_uInt16 nPrfx ,
const rtl : : OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
com : : sun : : star : : uno : : Reference < com : : sun : : star : : drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape )
2001-02-21 17:04:45 +00:00
{
}
SdXMLObjectShapeContext : : ~ SdXMLObjectShapeContext ( )
{
}
2004-07-13 07:26:37 +00:00
void SdXMLObjectShapeContext : : StartElement ( const : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : xml : : sax : : XAttributeList > & )
2001-02-21 17:04:45 +00:00
{
2002-01-18 15:36:12 +00:00
// #96717# in theorie, if we don't have a url we shouldn't even
// export this ole shape. But practical its to risky right now
// to change this so we better dispose this on load
2003-04-24 13:51:47 +00:00
//if( !mbIsPlaceholder && ImpIsEmptyURL(maHref) )
2002-06-27 10:09:52 +00:00
// return;
// #100592# this BugFix prevents that a shape is created. CL
// is thinking about an alternative.
2003-04-24 13:51:47 +00:00
// #i13140# Check for more than empty string in maHref, there are
// other possibilities that maHref results in empty container
// storage names
if ( ! ( GetImport ( ) . getImportFlags ( ) & IMPORT_EMBEDDED ) & & ! mbIsPlaceholder & & ImpIsEmptyURL ( maHref ) )
2002-01-18 15:36:12 +00:00
return ;
2006-06-19 17:15:11 +00:00
const char * pService = " com.sun.star.drawing.OLE2Shape " ;
2001-02-21 17:04:45 +00:00
2002-02-05 10:09:23 +00:00
sal_Bool bIsPresShape = maPresentationClass . getLength ( ) & & GetImport ( ) . GetShapeImport ( ) - > IsPresentationShapesSupported ( ) ;
2001-11-08 14:44:42 +00:00
2001-02-21 17:04:45 +00:00
if ( bIsPresShape )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( maPresentationClass , XML_PRESENTATION_CHART ) )
2001-02-21 17:04:45 +00:00
{
pService = " com.sun.star.presentation.ChartShape " ;
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( maPresentationClass , XML_PRESENTATION_TABLE ) )
2001-02-21 17:04:45 +00:00
{
pService = " com.sun.star.presentation.TableShape " ;
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( maPresentationClass , XML_PRESENTATION_OBJECT ) )
2001-02-21 17:04:45 +00:00
{
pService = " com.sun.star.presentation.OLE2Shape " ;
}
}
AddShape ( pService ) ;
if ( mxShape . is ( ) )
{
SetLayer ( ) ;
if ( bIsPresShape )
{
uno : : Reference < beans : : XPropertySet > xProps ( mxShape , uno : : UNO_QUERY ) ;
if ( xProps . is ( ) )
{
uno : : Reference < beans : : XPropertySetInfo > xPropsInfo ( xProps - > getPropertySetInfo ( ) ) ;
if ( xPropsInfo . is ( ) )
{
if ( ! mbIsPlaceholder & & xPropsInfo - > hasPropertyByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsEmptyPresentationObject " ) ) ) )
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsEmptyPresentationObject " ) ) , : : cppu : : bool2any ( sal_False ) ) ;
if ( mbIsUserTransformed & & xPropsInfo - > hasPropertyByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsPlaceholderDependent " ) ) ) )
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsPlaceholderDependent " ) ) , : : cppu : : bool2any ( sal_False ) ) ;
}
}
}
if ( ! mbIsPlaceholder & & maHref . getLength ( ) )
{
2001-09-13 10:41:52 +00:00
uno : : Reference < beans : : XPropertySet > xProps ( mxShape , uno : : UNO_QUERY ) ;
if ( xProps . is ( ) )
2001-02-21 17:04:45 +00:00
{
2004-10-04 17:11:28 +00:00
OUString aPersistName = GetImport ( ) . ResolveEmbeddedObjectURL ( maHref , maCLSID ) ;
2001-09-13 10:41:52 +00:00
2005-03-15 10:19:24 +00:00
if ( GetImport ( ) . IsPackageURL ( maHref ) )
2004-10-04 17:11:28 +00:00
{
const OUString sURL ( RTL_CONSTASCII_USTRINGPARAM ( " vnd.sun.star.EmbeddedObject: " ) ) ;
2005-03-15 10:19:24 +00:00
if ( aPersistName . compareTo ( sURL , sURL . getLength ( ) ) = = 0 )
aPersistName = aPersistName . copy ( sURL . getLength ( ) ) ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " PersistName " ) ) ,
uno : : makeAny ( aPersistName ) ) ;
2004-10-04 17:11:28 +00:00
}
else
{
// this is OOo link object
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " LinkURL " ) ) ,
2005-03-15 10:19:24 +00:00
uno : : makeAny ( aPersistName ) ) ;
2004-10-04 17:11:28 +00:00
}
2001-02-21 17:04:45 +00:00
}
}
// set pos, size, shear and rotate
SetTransformation ( ) ;
2001-05-03 08:32:14 +00:00
SetStyle ( ) ;
2001-03-06 10:23:45 +00:00
GetImport ( ) . GetShapeImport ( ) - > finishShape ( mxShape , mxAttrList , mxShapes ) ;
2001-02-21 17:04:45 +00:00
}
}
2001-06-14 15:50:57 +00:00
void SdXMLObjectShapeContext : : EndElement ( )
{
2002-06-27 10:09:52 +00:00
// #100592#
if ( mxBase64Stream . is ( ) )
{
2005-01-27 10:09:32 +00:00
OUString aPersistName ( GetImport ( ) . ResolveEmbeddedObjectURLFromBase64 ( ) ) ;
2002-06-27 10:09:52 +00:00
const OUString sURL ( RTL_CONSTASCII_USTRINGPARAM ( " vnd.sun.star.EmbeddedObject: " ) ) ;
aPersistName = aPersistName . copy ( sURL . getLength ( ) ) ;
uno : : Reference < beans : : XPropertySet > xProps ( mxShape , uno : : UNO_QUERY ) ;
if ( xProps . is ( ) )
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " PersistName " ) ) , uno : : makeAny ( aPersistName ) ) ;
}
2004-06-28 12:53:12 +00:00
SdXMLShapeContext : : EndElement ( ) ;
2001-06-14 15:50:57 +00:00
}
2001-02-21 17:04:45 +00:00
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLObjectShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
{
switch ( nPrefix )
{
case XML_NAMESPACE_DRAW :
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_CLASS_ID ) )
2001-02-21 17:04:45 +00:00
{
maCLSID = rValue ;
return ;
}
break ;
case XML_NAMESPACE_XLINK :
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_HREF ) )
2001-02-21 17:04:45 +00:00
{
2001-07-02 12:24:00 +00:00
maHref = rValue ;
2001-02-21 17:04:45 +00:00
return ;
}
break ;
}
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
}
2001-04-30 08:02:17 +00:00
2002-06-27 10:09:52 +00:00
SvXMLImportContext * SdXMLObjectShapeContext : : CreateChildContext (
USHORT nPrefix , const : : rtl : : OUString & rLocalName ,
const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
// #100592#
SvXMLImportContext * pContext = NULL ;
2003-12-01 09:14:16 +00:00
if ( ( XML_NAMESPACE_OFFICE = = nPrefix ) & & IsXMLToken ( rLocalName , XML_BINARY_DATA ) )
2002-06-27 10:09:52 +00:00
{
2005-01-27 10:09:32 +00:00
mxBase64Stream = GetImport ( ) . GetStreamForEmbeddedObjectURLFromBase64 ( ) ;
2003-12-01 09:14:16 +00:00
if ( mxBase64Stream . is ( ) )
pContext = new XMLBase64ImportContext ( GetImport ( ) , nPrefix ,
rLocalName , xAttrList ,
mxBase64Stream ) ;
}
else if ( ( ( XML_NAMESPACE_OFFICE = = nPrefix ) & & IsXMLToken ( rLocalName , XML_DOCUMENT ) ) | |
( ( XML_NAMESPACE_MATH = = nPrefix ) & & IsXMLToken ( rLocalName , XML_MATH ) ) )
{
XMLEmbeddedObjectImportContext * pEContext =
new XMLEmbeddedObjectImportContext ( GetImport ( ) , nPrefix ,
rLocalName , xAttrList ) ;
maCLSID = pEContext - > GetFilterCLSID ( ) ;
if ( maCLSID . getLength ( ) ! = 0 )
2002-06-27 10:09:52 +00:00
{
2003-12-01 09:14:16 +00:00
uno : : Reference < beans : : XPropertySet > xPropSet ( mxShape , uno : : UNO_QUERY ) ;
if ( xPropSet . is ( ) )
2002-06-27 10:09:52 +00:00
{
2003-12-01 09:14:16 +00:00
xPropSet - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " CLSID " ) ) , uno : : makeAny ( maCLSID ) ) ;
2002-06-27 10:09:52 +00:00
2003-12-01 09:14:16 +00:00
uno : : Reference < lang : : XComponent > xComp ;
xPropSet - > getPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Model " ) ) ) > > = xComp ;
DBG_ASSERT ( xComp . is ( ) , " no xModel for own OLE format " ) ;
pEContext - > SetComponent ( xComp ) ;
2002-06-27 10:09:52 +00:00
}
}
2003-12-01 09:14:16 +00:00
pContext = pEContext ;
2002-06-27 10:09:52 +00:00
}
// delegate to parent class if no context could be created
if ( ! pContext )
pContext = SdXMLShapeContext : : CreateChildContext ( nPrefix , rLocalName , xAttrList ) ;
return pContext ;
}
2001-04-30 08:02:17 +00:00
//////////////////////////////////////////////////////////////////////////////
TYPEINIT1 ( SdXMLAppletShapeContext , SdXMLShapeContext ) ;
SdXMLAppletShapeContext : : SdXMLAppletShapeContext ( SvXMLImport & rImport , sal_uInt16 nPrfx ,
const rtl : : OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
com : : sun : : star : : uno : : Reference < com : : sun : : star : : drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape ) ,
2001-04-30 08:02:17 +00:00
mbIsScript ( sal_False )
{
}
SdXMLAppletShapeContext : : ~ SdXMLAppletShapeContext ( )
{
}
2004-07-13 07:26:37 +00:00
void SdXMLAppletShapeContext : : StartElement ( const : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : xml : : sax : : XAttributeList > & )
2001-04-30 08:02:17 +00:00
{
2006-06-19 17:15:11 +00:00
const char * pService = " com.sun.star.drawing.AppletShape " ;
2001-04-30 08:02:17 +00:00
AddShape ( pService ) ;
if ( mxShape . is ( ) )
{
SetLayer ( ) ;
// set pos, size, shear and rotate
SetTransformation ( ) ;
GetImport ( ) . GetShapeImport ( ) - > finishShape ( mxShape , mxAttrList , mxShapes ) ;
}
}
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLAppletShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
{
switch ( nPrefix )
{
case XML_NAMESPACE_DRAW :
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_APPLET_NAME ) )
2001-04-30 08:02:17 +00:00
{
maAppletName = rValue ;
return ;
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_CODE ) )
2001-04-30 08:02:17 +00:00
{
maAppletCode = rValue ;
return ;
}
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_MAY_SCRIPT ) )
2001-04-30 08:02:17 +00:00
{
2001-06-29 20:07:26 +00:00
mbIsScript = IsXMLToken ( rValue , XML_TRUE ) ;
2001-04-30 08:02:17 +00:00
return ;
}
break ;
case XML_NAMESPACE_XLINK :
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_HREF ) )
2001-04-30 08:02:17 +00:00
{
2001-06-27 13:56:38 +00:00
maHref = GetImport ( ) . GetAbsoluteReference ( rValue ) ;
2001-04-30 08:02:17 +00:00
return ;
}
break ;
}
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
}
void SdXMLAppletShapeContext : : EndElement ( )
{
uno : : Reference < beans : : XPropertySet > xProps ( mxShape , uno : : UNO_QUERY ) ;
if ( xProps . is ( ) )
{
uno : : Any aAny ;
2005-02-25 08:23:23 +00:00
if ( maSize . Width & & maSize . Height )
{
// the visual area for applet must be set on loading
awt : : Rectangle aRect ( 0 , 0 , maSize . Width , maSize . Height ) ;
aAny < < = aRect ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " VisibleArea " ) ) , aAny ) ;
}
2001-04-30 08:02:17 +00:00
if ( maParams . getLength ( ) )
{
aAny < < = maParams ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " AppletCommands " ) ) , aAny ) ;
}
if ( maHref . getLength ( ) )
{
aAny < < = maHref ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " AppletCodeBase " ) ) , aAny ) ;
}
if ( maAppletName . getLength ( ) )
{
aAny < < = maAppletName ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " AppletName " ) ) , aAny ) ;
}
if ( mbIsScript )
{
aAny < < = mbIsScript ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " AppletIsScript " ) ) , aAny ) ;
}
if ( maAppletCode . getLength ( ) )
{
aAny < < = maAppletCode ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " AppletCode " ) ) , aAny ) ;
}
2001-06-14 15:50:57 +00:00
2005-02-21 15:36:04 +00:00
aAny < < = : : rtl : : OUString ( GetImport ( ) . GetDocumentBase ( ) ) ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " AppletDocBase " ) ) , aAny ) ;
2001-06-14 15:50:57 +00:00
SetThumbnail ( ) ;
2001-04-30 08:02:17 +00:00
}
2004-06-28 12:53:12 +00:00
SdXMLShapeContext : : EndElement ( ) ;
2001-04-30 08:02:17 +00:00
}
2006-06-19 17:15:11 +00:00
SvXMLImportContext * SdXMLAppletShapeContext : : CreateChildContext ( USHORT p_nPrefix , const : : rtl : : OUString & rLocalName , const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList )
2001-04-30 08:02:17 +00:00
{
2006-06-19 17:15:11 +00:00
if ( p_nPrefix = = XML_NAMESPACE_DRAW & & IsXMLToken ( rLocalName , XML_PARAM ) )
2001-04-30 08:02:17 +00:00
{
OUString aParamName , aParamValue ;
const sal_Int16 nAttrCount = xAttrList . is ( ) ? xAttrList - > getLength ( ) : 0 ;
// now parse the attribute list and look for draw:name and draw:value
for ( sal_Int16 a ( 0 ) ; a < nAttrCount ; a + + )
{
const OUString & rAttrName = xAttrList - > getNameByIndex ( a ) ;
OUString aLocalName ;
sal_uInt16 nPrefix = GetImport ( ) . GetNamespaceMap ( ) . GetKeyByAttrName ( rAttrName , & aLocalName ) ;
const OUString aValue ( xAttrList - > getValueByIndex ( a ) ) ;
if ( nPrefix = = XML_NAMESPACE_DRAW )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( aLocalName , XML_NAME ) )
2001-04-30 08:02:17 +00:00
{
aParamName = aValue ;
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( aLocalName , XML_VALUE ) )
2001-04-30 08:02:17 +00:00
{
aParamValue = aValue ;
}
}
2001-11-15 10:18:46 +00:00
}
2001-04-30 08:02:17 +00:00
2001-11-15 10:18:46 +00:00
if ( aParamName . getLength ( ) )
{
sal_Int32 nIndex = maParams . getLength ( ) ;
maParams . realloc ( nIndex + 1 ) ;
maParams [ nIndex ] . Name = aParamName ;
maParams [ nIndex ] . Handle = - 1 ;
maParams [ nIndex ] . Value < < = aParamValue ;
maParams [ nIndex ] . State = beans : : PropertyState_DIRECT_VALUE ;
2001-04-30 08:02:17 +00:00
}
2006-06-19 17:15:11 +00:00
return new SvXMLImportContext ( GetImport ( ) , p_nPrefix , rLocalName ) ;
2001-04-30 08:02:17 +00:00
}
2006-06-19 17:15:11 +00:00
return SdXMLShapeContext : : CreateChildContext ( p_nPrefix , rLocalName , xAttrList ) ;
2001-04-30 08:02:17 +00:00
}
//////////////////////////////////////////////////////////////////////////////
TYPEINIT1 ( SdXMLPluginShapeContext , SdXMLShapeContext ) ;
SdXMLPluginShapeContext : : SdXMLPluginShapeContext ( SvXMLImport & rImport , sal_uInt16 nPrfx ,
const rtl : : OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
com : : sun : : star : : uno : : Reference < com : : sun : : star : : drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape ) :
SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape ) ,
2004-08-12 07:50:35 +00:00
mbMedia ( false )
2001-04-30 08:02:17 +00:00
{
}
SdXMLPluginShapeContext : : ~ SdXMLPluginShapeContext ( )
{
}
2004-08-12 07:50:35 +00:00
void SdXMLPluginShapeContext : : StartElement ( const : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList )
2001-04-30 08:02:17 +00:00
{
2004-08-12 07:50:35 +00:00
// watch for MimeType attribute to see if we have a media object
for ( sal_Int16 n = 0 , nAttrCount = ( xAttrList . is ( ) ? xAttrList - > getLength ( ) : 0 ) ; n < nAttrCount ; + + n )
{
OUString aLocalName ;
sal_uInt16 nPrefix = GetImport ( ) . GetNamespaceMap ( ) . GetKeyByAttrName ( xAttrList - > getNameByIndex ( n ) , & aLocalName ) ;
if ( nPrefix = = XML_NAMESPACE_DRAW & & IsXMLToken ( aLocalName , XML_MIME_TYPE ) )
{
if ( 0 = = xAttrList - > getValueByIndex ( n ) . compareToAscii ( " application/vnd.sun.star.media " ) )
mbMedia = true ;
// leave this loop
n = nAttrCount - 1 ;
}
}
2006-06-19 17:15:11 +00:00
const char * pService ;
2004-08-12 07:50:35 +00:00
if ( mbMedia )
pService = " com.sun.star.drawing.MediaShape " ;
else
pService = " com.sun.star.drawing.PluginShape " ;
2001-04-30 08:02:17 +00:00
AddShape ( pService ) ;
if ( mxShape . is ( ) )
{
SetLayer ( ) ;
// set pos, size, shear and rotate
SetTransformation ( ) ;
GetImport ( ) . GetShapeImport ( ) - > finishShape ( mxShape , mxAttrList , mxShapes ) ;
}
}
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLPluginShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
{
switch ( nPrefix )
{
case XML_NAMESPACE_DRAW :
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_MIME_TYPE ) )
2001-04-30 08:02:17 +00:00
{
maMimeType = rValue ;
return ;
}
break ;
case XML_NAMESPACE_XLINK :
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_HREF ) )
2001-04-30 08:02:17 +00:00
{
2001-06-27 13:56:38 +00:00
maHref = GetImport ( ) . GetAbsoluteReference ( rValue ) ;
2001-04-30 08:02:17 +00:00
return ;
}
break ;
}
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
}
void SdXMLPluginShapeContext : : EndElement ( )
{
uno : : Reference < beans : : XPropertySet > xProps ( mxShape , uno : : UNO_QUERY ) ;
2004-08-12 07:50:35 +00:00
2001-04-30 08:02:17 +00:00
if ( xProps . is ( ) )
{
uno : : Any aAny ;
2005-02-25 08:23:23 +00:00
if ( maSize . Width & & maSize . Height )
{
2005-04-18 10:12:44 +00:00
const rtl : : OUString sVisibleArea ( RTL_CONSTASCII_USTRINGPARAM ( " VisibleArea " ) ) ;
uno : : Reference < beans : : XPropertySetInfo > aXPropSetInfo ( xProps - > getPropertySetInfo ( ) ) ;
if ( ! aXPropSetInfo . is ( ) | | aXPropSetInfo - > hasPropertyByName ( sVisibleArea ) )
{
// the visual area for a plugin must be set on loading
awt : : Rectangle aRect ( 0 , 0 , maSize . Width , maSize . Height ) ;
aAny < < = aRect ;
xProps - > setPropertyValue ( sVisibleArea , aAny ) ;
}
2005-02-25 08:23:23 +00:00
}
2004-08-12 07:50:35 +00:00
if ( ! mbMedia )
2001-04-30 08:02:17 +00:00
{
2004-08-12 07:50:35 +00:00
// in case we have a plugin object
if ( maParams . getLength ( ) )
{
aAny < < = maParams ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " PluginCommands " ) ) , aAny ) ;
}
2001-04-30 08:02:17 +00:00
2004-08-12 07:50:35 +00:00
if ( maMimeType . getLength ( ) )
{
aAny < < = maMimeType ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " PluginMimeType " ) ) , aAny ) ;
}
2001-04-30 08:02:17 +00:00
2004-08-12 07:50:35 +00:00
if ( maHref . getLength ( ) )
{
aAny < < = maHref ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " PluginURL " ) ) , aAny ) ;
}
}
else
2001-04-30 08:02:17 +00:00
{
2004-08-12 07:50:35 +00:00
// in case we have a media object
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " MediaURL " ) ) , uno : : makeAny ( maHref ) ) ;
for ( sal_Int32 nParam = 0 ; nParam < maParams . getLength ( ) ; + + nParam )
{
const OUString & rName = maParams [ nParam ] . Name ;
if ( 0 = = rName . compareToAscii ( " Loop " ) )
{
OUString aValueStr ;
maParams [ nParam ] . Value > > = aValueStr ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Loop " ) ) ,
uno : : makeAny ( static_cast < sal_Bool > ( 0 = = aValueStr . compareToAscii ( " true " ) ) ) ) ;
}
else if ( 0 = = rName . compareToAscii ( " Mute " ) )
{
OUString aValueStr ;
maParams [ nParam ] . Value > > = aValueStr ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Mute " ) ) ,
uno : : makeAny ( static_cast < sal_Bool > ( 0 = = aValueStr . compareToAscii ( " true " ) ) ) ) ;
}
else if ( 0 = = rName . compareToAscii ( " VolumeDB " ) )
{
OUString aValueStr ;
maParams [ nParam ] . Value > > = aValueStr ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " VolumeDB " ) ) ,
uno : : makeAny ( static_cast < sal_Int16 > ( aValueStr . toInt32 ( ) ) ) ) ;
}
else if ( 0 = = rName . compareToAscii ( " Zoom " ) )
{
OUString aZoomStr ;
media : : ZoomLevel eZoomLevel ;
maParams [ nParam ] . Value > > = aZoomStr ;
if ( 0 = = aZoomStr . compareToAscii ( " 25% " ) )
eZoomLevel = media : : ZoomLevel_ZOOM_1_TO_4 ;
else if ( 0 = = aZoomStr . compareToAscii ( " 50% " ) )
eZoomLevel = media : : ZoomLevel_ZOOM_1_TO_2 ;
else if ( 0 = = aZoomStr . compareToAscii ( " 100% " ) )
eZoomLevel = media : : ZoomLevel_ORIGINAL ;
else if ( 0 = = aZoomStr . compareToAscii ( " 200% " ) )
eZoomLevel = media : : ZoomLevel_ZOOM_2_TO_1 ;
else if ( 0 = = aZoomStr . compareToAscii ( " 400% " ) )
eZoomLevel = media : : ZoomLevel_ZOOM_4_TO_1 ;
else if ( 0 = = aZoomStr . compareToAscii ( " fit " ) )
eZoomLevel = media : : ZoomLevel_FIT_TO_WINDOW ;
else if ( 0 = = aZoomStr . compareToAscii ( " fixedfit " ) )
eZoomLevel = media : : ZoomLevel_FIT_TO_WINDOW_FIXED_ASPECT ;
else if ( 0 = = aZoomStr . compareToAscii ( " fullscreen " ) )
eZoomLevel = media : : ZoomLevel_FULLSCREEN ;
else
eZoomLevel = media : : ZoomLevel_NOT_AVAILABLE ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Zoom " ) ) , uno : : makeAny ( eZoomLevel ) ) ;
}
}
2001-04-30 08:02:17 +00:00
}
2001-06-14 15:50:57 +00:00
SetThumbnail ( ) ;
2001-04-30 08:02:17 +00:00
}
2004-06-28 12:53:12 +00:00
SdXMLShapeContext : : EndElement ( ) ;
2001-04-30 08:02:17 +00:00
}
2006-06-19 17:15:11 +00:00
SvXMLImportContext * SdXMLPluginShapeContext : : CreateChildContext ( USHORT p_nPrefix , const : : rtl : : OUString & rLocalName , const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList )
2001-04-30 08:02:17 +00:00
{
2006-06-19 17:15:11 +00:00
if ( p_nPrefix = = XML_NAMESPACE_DRAW & & IsXMLToken ( rLocalName , XML_PARAM ) )
2001-04-30 08:02:17 +00:00
{
OUString aParamName , aParamValue ;
const sal_Int16 nAttrCount = xAttrList . is ( ) ? xAttrList - > getLength ( ) : 0 ;
// now parse the attribute list and look for draw:name and draw:value
for ( sal_Int16 a ( 0 ) ; a < nAttrCount ; a + + )
{
const OUString & rAttrName = xAttrList - > getNameByIndex ( a ) ;
OUString aLocalName ;
sal_uInt16 nPrefix = GetImport ( ) . GetNamespaceMap ( ) . GetKeyByAttrName ( rAttrName , & aLocalName ) ;
const OUString aValue ( xAttrList - > getValueByIndex ( a ) ) ;
if ( nPrefix = = XML_NAMESPACE_DRAW )
{
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( aLocalName , XML_NAME ) )
2001-04-30 08:02:17 +00:00
{
aParamName = aValue ;
}
2001-06-29 20:07:26 +00:00
else if ( IsXMLToken ( aLocalName , XML_VALUE ) )
2001-04-30 08:02:17 +00:00
{
aParamValue = aValue ;
}
}
if ( aParamName . getLength ( ) )
{
sal_Int32 nIndex = maParams . getLength ( ) ;
maParams . realloc ( nIndex + 1 ) ;
maParams [ nIndex ] . Name = aParamName ;
maParams [ nIndex ] . Handle = - 1 ;
maParams [ nIndex ] . Value < < = aParamValue ;
maParams [ nIndex ] . State = beans : : PropertyState_DIRECT_VALUE ;
}
}
2006-06-19 17:15:11 +00:00
return new SvXMLImportContext ( GetImport ( ) , p_nPrefix , rLocalName ) ;
2001-04-30 08:02:17 +00:00
}
2006-06-19 17:15:11 +00:00
return SdXMLShapeContext : : CreateChildContext ( p_nPrefix , rLocalName , xAttrList ) ;
2001-04-30 08:02:17 +00:00
}
//////////////////////////////////////////////////////////////////////////////
2004-07-13 07:26:37 +00:00
TYPEINIT1 ( SdXMLFloatingFrameShapeContext , SdXMLShapeContext ) ;
2001-04-30 08:02:17 +00:00
2004-07-13 07:26:37 +00:00
SdXMLFloatingFrameShapeContext : : SdXMLFloatingFrameShapeContext ( SvXMLImport & rImport , sal_uInt16 nPrfx ,
2001-04-30 08:02:17 +00:00
const rtl : : OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
com : : sun : : star : : uno : : Reference < com : : sun : : star : : drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape )
2001-04-30 08:02:17 +00:00
{
}
2004-07-13 07:26:37 +00:00
SdXMLFloatingFrameShapeContext : : ~ SdXMLFloatingFrameShapeContext ( )
2001-04-30 08:02:17 +00:00
{
}
2004-07-13 07:26:37 +00:00
void SdXMLFloatingFrameShapeContext : : StartElement ( const : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : xml : : sax : : XAttributeList > & )
2001-04-30 08:02:17 +00:00
{
2006-06-19 17:15:11 +00:00
const char * pService = " com.sun.star.drawing.FrameShape " ;
2001-04-30 08:02:17 +00:00
AddShape ( pService ) ;
if ( mxShape . is ( ) )
{
SetLayer ( ) ;
// set pos, size, shear and rotate
SetTransformation ( ) ;
uno : : Reference < beans : : XPropertySet > xProps ( mxShape , uno : : UNO_QUERY ) ;
if ( xProps . is ( ) )
{
uno : : Any aAny ;
if ( maFrameName . getLength ( ) )
{
aAny < < = maFrameName ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " FrameName " ) ) , aAny ) ;
}
if ( maHref . getLength ( ) )
{
aAny < < = maHref ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " FrameURL " ) ) , aAny ) ;
}
}
SetStyle ( ) ;
2001-06-14 15:50:57 +00:00
2001-04-30 08:02:17 +00:00
GetImport ( ) . GetShapeImport ( ) - > finishShape ( mxShape , mxAttrList , mxShapes ) ;
}
}
// this is called from the parent group for each unparsed attribute in the attribute list
2004-07-13 07:26:37 +00:00
void SdXMLFloatingFrameShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
2001-04-30 08:02:17 +00:00
{
switch ( nPrefix )
{
case XML_NAMESPACE_DRAW :
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_FRAME_NAME ) )
2001-04-30 08:02:17 +00:00
{
maFrameName = rValue ;
return ;
}
break ;
case XML_NAMESPACE_XLINK :
2001-06-29 20:07:26 +00:00
if ( IsXMLToken ( rLocalName , XML_HREF ) )
2001-04-30 08:02:17 +00:00
{
2001-06-27 13:56:38 +00:00
maHref = GetImport ( ) . GetAbsoluteReference ( rValue ) ;
2001-04-30 08:02:17 +00:00
return ;
}
break ;
}
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
}
2004-07-13 07:26:37 +00:00
void SdXMLFloatingFrameShapeContext : : EndElement ( )
2001-06-14 15:50:57 +00:00
{
2005-02-25 08:23:23 +00:00
uno : : Reference < beans : : XPropertySet > xProps ( mxShape , uno : : UNO_QUERY ) ;
if ( xProps . is ( ) )
{
if ( maSize . Width & & maSize . Height )
{
// the visual area for a floating frame must be set on loading
awt : : Rectangle aRect ( 0 , 0 , maSize . Width , maSize . Height ) ;
uno : : Any aAny ;
aAny < < = aRect ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " VisibleArea " ) ) , aAny ) ;
}
}
2001-06-14 15:50:57 +00:00
SetThumbnail ( ) ;
2004-06-28 12:53:12 +00:00
SdXMLShapeContext : : EndElement ( ) ;
2001-06-14 15:50:57 +00:00
}
2004-04-02 12:53:51 +00:00
2004-07-13 07:26:37 +00:00
//////////////////////////////////////////////////////////////////////////////
TYPEINIT1 ( SdXMLFrameShapeContext , SdXMLShapeContext ) ;
SdXMLFrameShapeContext : : SdXMLFrameShapeContext ( SvXMLImport & rImport , sal_uInt16 nPrfx ,
const rtl : : OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
com : : sun : : star : : uno : : Reference < com : : sun : : star : : drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
2004-11-26 12:00:41 +00:00
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape ) ,
mbSupportsReplacement ( sal_False )
2004-07-13 07:26:37 +00:00
{
uno : : Reference < util : : XCloneable > xClone ( xAttrList , uno : : UNO_QUERY ) ;
if ( xClone . is ( ) )
mxAttrList . set ( xClone - > createClone ( ) , uno : : UNO_QUERY ) ;
else
mxAttrList = new SvXMLAttributeList ( xAttrList ) ;
}
SdXMLFrameShapeContext : : ~ SdXMLFrameShapeContext ( )
{
}
SvXMLImportContext * SdXMLFrameShapeContext : : CreateChildContext ( USHORT nPrefix ,
const OUString & rLocalName ,
const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
SvXMLImportContext * pContext = 0 ;
if ( ! mxImplContext . Is ( ) )
{
pContext = GetImport ( ) . GetShapeImport ( ) - > CreateFrameChildContext (
GetImport ( ) , nPrefix , rLocalName , xAttrList , mxShapes , mxAttrList ) ;
2004-08-20 07:14:27 +00:00
mxImplContext = pContext ;
2004-11-26 12:00:41 +00:00
mbSupportsReplacement = IsXMLToken ( rLocalName , XML_OBJECT ) | |
IsXMLToken ( rLocalName , XML_OBJECT_OLE ) ;
}
else if ( mbSupportsReplacement & & ! mxReplImplContext & &
XML_NAMESPACE_DRAW = = nPrefix & &
IsXMLToken ( rLocalName , XML_IMAGE ) )
{
// read replacement image
SvXMLImportContext * pImplContext = & mxImplContext ;
SdXMLShapeContext * pSContext =
PTR_CAST ( SdXMLShapeContext , pImplContext ) ;
if ( pSContext )
{
uno : : Reference < beans : : XPropertySet > xPropSet (
pSContext - > getShape ( ) , uno : : UNO_QUERY ) ;
if ( xPropSet . is ( ) )
{
pContext = new XMLReplacementImageContext ( GetImport ( ) ,
nPrefix , rLocalName , xAttrList , xPropSet ) ;
mxReplImplContext = pContext ;
}
}
2004-07-13 07:26:37 +00:00
}
2006-12-19 16:27:16 +00:00
else if (
( nPrefix = = XML_NAMESPACE_SVG & & // #i68101#
( IsXMLToken ( rLocalName , XML_TITLE ) | | IsXMLToken ( rLocalName , XML_DESC ) ) ) | |
( nPrefix = = XML_NAMESPACE_OFFICE & & IsXMLToken ( rLocalName , XML_EVENT_LISTENERS ) ) | |
2004-07-13 07:26:37 +00:00
( nPrefix = = XML_NAMESPACE_DRAW & & ( IsXMLToken ( rLocalName , XML_GLUE_POINT ) | |
IsXMLToken ( rLocalName , XML_THUMBNAIL ) ) ) )
{
SvXMLImportContext * pImplContext = & mxImplContext ;
pContext = PTR_CAST ( SdXMLShapeContext , pImplContext ) - > CreateChildContext ( nPrefix ,
rLocalName , xAttrList ) ;
}
2006-04-28 13:58:07 +00:00
else if ( ( XML_NAMESPACE_DRAW = = nPrefix ) & & IsXMLToken ( rLocalName , XML_IMAGE_MAP ) )
{
SdXMLShapeContext * pSContext = dynamic_cast < SdXMLShapeContext * > ( & mxImplContext ) ;
if ( pSContext )
{
uno : : Reference < beans : : XPropertySet > xPropSet ( pSContext - > getShape ( ) , uno : : UNO_QUERY ) ;
if ( xPropSet . is ( ) )
{
pContext = new XMLImageMapContext ( GetImport ( ) , nPrefix , rLocalName , xPropSet ) ;
}
}
}
2004-07-13 07:26:37 +00:00
// call parent for content
if ( ! pContext )
pContext = SvXMLImportContext : : CreateChildContext ( nPrefix , rLocalName , xAttrList ) ;
return pContext ;
}
void SdXMLFrameShapeContext : : StartElement ( const uno : : Reference < xml : : sax : : XAttributeList > & )
{
// ignore
}
void SdXMLFrameShapeContext : : EndElement ( )
{
2007-04-16 12:12:28 +00:00
if ( ! mxImplContext . Is ( ) )
{
// now check if this is an empty presentation object
sal_Int16 nAttrCount = mxAttrList . is ( ) ? mxAttrList - > getLength ( ) : 0 ;
for ( sal_Int16 a ( 0 ) ; a < nAttrCount ; a + + )
{
OUString aLocalName ;
sal_uInt16 nPrefix = GetImport ( ) . GetNamespaceMap ( ) . GetKeyByAttrName ( mxAttrList - > getNameByIndex ( a ) , & aLocalName ) ;
if ( nPrefix = = XML_NAMESPACE_PRESENTATION )
{
if ( IsXMLToken ( aLocalName , XML_PLACEHOLDER ) )
{
mbIsPlaceholder = IsXMLToken ( mxAttrList - > getValueByIndex ( a ) , XML_TRUE ) ;
}
else if ( IsXMLToken ( aLocalName , XML_CLASS ) )
{
maPresentationClass = mxAttrList - > getValueByIndex ( a ) ;
}
}
}
if ( ( maPresentationClass . getLength ( ) ! = 0 ) & & mbIsPlaceholder )
{
uno : : Reference < xml : : sax : : XAttributeList > xEmpty ;
enum XMLTokenEnum eToken = XML_TEXT_BOX ;
if ( IsXMLToken ( maPresentationClass , XML_GRAPHIC ) )
{
eToken = XML_IMAGE ;
}
else if ( IsXMLToken ( maPresentationClass , XML_PRESENTATION_PAGE ) )
{
eToken = XML_PAGE_THUMBNAIL ;
}
else if ( IsXMLToken ( maPresentationClass , XML_PRESENTATION_CHART ) | |
IsXMLToken ( maPresentationClass , XML_PRESENTATION_TABLE ) | |
IsXMLToken ( maPresentationClass , XML_PRESENTATION_OBJECT ) )
{
eToken = XML_OBJECT ;
}
mxImplContext = GetImport ( ) . GetShapeImport ( ) - > CreateFrameChildContext (
GetImport ( ) , XML_NAMESPACE_DRAW , GetXMLToken ( eToken ) , mxAttrList , mxShapes , xEmpty ) ;
if ( mxImplContext . Is ( ) )
{
mxImplContext - > StartElement ( mxAttrList ) ;
mxImplContext - > EndElement ( ) ;
}
}
}
2004-07-13 07:26:37 +00:00
mxImplContext = 0 ;
SdXMLShapeContext : : EndElement ( ) ;
}
2006-06-19 17:15:11 +00:00
void SdXMLFrameShapeContext : : processAttribute ( sal_uInt16 ,
const : : rtl : : OUString & , const : : rtl : : OUString & )
2004-07-13 07:26:37 +00:00
{
// ignore
}
2004-04-02 12:53:51 +00:00
TYPEINIT1 ( SdXMLCustomShapeContext , SdXMLShapeContext ) ;
SdXMLCustomShapeContext : : SdXMLCustomShapeContext (
SvXMLImport & rImport ,
sal_uInt16 nPrfx ,
const OUString & rLocalName ,
const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList ,
2004-10-22 06:55:13 +00:00
uno : : Reference < drawing : : XShapes > & rShapes ,
sal_Bool bTemporaryShape )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , bTemporaryShape )
2004-04-02 12:53:51 +00:00
{
}
//////////////////////////////////////////////////////////////////////////////
SdXMLCustomShapeContext : : ~ SdXMLCustomShapeContext ( )
{
}
//////////////////////////////////////////////////////////////////////////////
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLCustomShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
{
if ( XML_NAMESPACE_DRAW = = nPrefix )
{
if ( IsXMLToken ( rLocalName , XML_ENGINE ) )
{
maCustomShapeEngine = rValue ;
return ;
}
if ( IsXMLToken ( rLocalName , XML_DATA ) )
{
maCustomShapeData = rValue ;
return ;
}
}
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
}
//////////////////////////////////////////////////////////////////////////////
void SdXMLCustomShapeContext : : StartElement ( const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
// create rectangle shape
AddShape ( " com.sun.star.drawing.CustomShape " ) ;
if ( mxShape . is ( ) )
{
// Add, set Style and properties from base shape
SetStyle ( ) ;
SetLayer ( ) ;
// set pos, size, shear and rotate
SetTransformation ( ) ;
try
{
uno : : Reference < beans : : XPropertySet > xPropSet ( mxShape , uno : : UNO_QUERY ) ;
if ( xPropSet . is ( ) )
{
if ( maCustomShapeEngine . getLength ( ) )
{
uno : : Any aAny ;
aAny < < = maCustomShapeEngine ;
xPropSet - > setPropertyValue ( EASGet ( EAS_CustomShapeEngine ) , aAny ) ;
}
if ( maCustomShapeData . getLength ( ) )
{
uno : : Any aAny ;
aAny < < = maCustomShapeData ;
xPropSet - > setPropertyValue ( EASGet ( EAS_CustomShapeData ) , aAny ) ;
}
}
}
catch ( uno : : Exception & )
{
DBG_ERROR ( " could not set enhanced customshape geometry " ) ;
}
SdXMLShapeContext : : StartElement ( xAttrList ) ;
}
}
void SdXMLCustomShapeContext : : EndElement ( )
{
if ( maCustomShapeGeometry . size ( ) )
{
const rtl : : OUString sCustomShapeGeometry ( RTL_CONSTASCII_USTRINGPARAM ( " CustomShapeGeometry " ) ) ;
// converting the vector to a sequence
uno : : Sequence < beans : : PropertyValue > aSeq ( maCustomShapeGeometry . size ( ) ) ;
beans : : PropertyValue * pValues = aSeq . getArray ( ) ;
std : : vector < beans : : PropertyValue > : : const_iterator aIter ( maCustomShapeGeometry . begin ( ) ) ;
std : : vector < beans : : PropertyValue > : : const_iterator aEnd ( maCustomShapeGeometry . end ( ) ) ;
while ( aIter ! = aEnd )
* pValues + + = * aIter + + ;
try
{
uno : : Reference < beans : : XPropertySet > xPropSet ( mxShape , uno : : UNO_QUERY ) ;
if ( xPropSet . is ( ) )
{
uno : : Any aAny ;
aAny < < = aSeq ;
xPropSet - > setPropertyValue ( sCustomShapeGeometry , aAny ) ;
}
}
catch ( uno : : Exception & )
{
DBG_ERROR ( " could not set enhanced customshape geometry " ) ;
}
2007-11-01 14:21:56 +00:00
sal_Int32 nUPD ( 0 ) ;
sal_Int32 nBuild ( 0 ) ;
GetImport ( ) . getBuildIds ( nUPD , nBuild ) ;
2008-07-01 12:24:31 +00:00
if ( ( ( nUPD > = 640 & & nUPD < = 645 ) | | ( nUPD = = 680 ) ) & & ( nBuild < = 9221 ) )
2007-11-01 14:21:56 +00:00
{
Reference < drawing : : XEnhancedCustomShapeDefaulter > xDefaulter ( mxShape , UNO_QUERY ) ;
if ( xDefaulter . is ( ) )
{
rtl : : OUString aEmptyType ;
xDefaulter - > createCustomShapeDefaults ( aEmptyType ) ;
}
}
2004-04-02 12:53:51 +00:00
}
2004-06-28 12:53:12 +00:00
SdXMLShapeContext : : EndElement ( ) ;
2004-04-02 12:53:51 +00:00
}
//////////////////////////////////////////////////////////////////////////////
SvXMLImportContext * SdXMLCustomShapeContext : : CreateChildContext (
USHORT nPrefix , const : : rtl : : OUString & rLocalName ,
const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
SvXMLImportContext * pContext = NULL ;
if ( XML_NAMESPACE_DRAW = = nPrefix )
{
if ( IsXMLToken ( rLocalName , XML_ENHANCED_GEOMETRY ) )
{
uno : : Reference < beans : : XPropertySet > xPropSet ( mxShape , uno : : UNO_QUERY ) ;
if ( xPropSet . is ( ) )
2005-04-12 15:53:18 +00:00
pContext = new XMLEnhancedCustomShapeContext ( GetImport ( ) , mxShape , nPrefix , rLocalName , maCustomShapeGeometry ) ;
2004-04-02 12:53:51 +00:00
}
}
// delegate to parent class if no context could be created
if ( NULL = = pContext )
pContext = SdXMLShapeContext : : CreateChildContext ( nPrefix , rLocalName ,
xAttrList ) ;
return pContext ;
}
2008-03-12 09:38:48 +00:00
///////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
TYPEINIT1 ( SdXMLTableShapeContext , SdXMLShapeContext ) ;
SdXMLTableShapeContext : : SdXMLTableShapeContext ( SvXMLImport & rImport , sal_uInt16 nPrfx , const rtl : : OUString & rLocalName , const com : : sun : : star : : uno : : Reference < com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList , com : : sun : : star : : uno : : Reference < com : : sun : : star : : drawing : : XShapes > & rShapes )
: SdXMLShapeContext ( rImport , nPrfx , rLocalName , xAttrList , rShapes , sal_False )
{
memset ( & maTemplateStylesUsed , 0 , sizeof ( maTemplateStylesUsed ) ) ;
}
SdXMLTableShapeContext : : ~ SdXMLTableShapeContext ( )
{
}
void SdXMLTableShapeContext : : StartElement ( const : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : xml : : sax : : XAttributeList > & xAttrList )
{
const char * pService = " com.sun.star.drawing.TableShape " ;
sal_Bool bIsPresShape = sal_False ; //maPresentationClass.getLength() && GetImport().GetShapeImport()->IsPresentationShapesSupported();
/*
if ( bIsPresShape )
{
if ( IsXMLToken ( maPresentationClass , XML_PRESENTATION_TABLE ) )
{
pService = " com.sun.star.presentation.TableShape " ;
}
}
*/
AddShape ( pService ) ;
if ( mxShape . is ( ) )
{
SetLayer ( ) ;
uno : : Reference < beans : : XPropertySet > xProps ( mxShape , uno : : UNO_QUERY ) ;
if ( bIsPresShape )
{
if ( xProps . is ( ) )
{
uno : : Reference < beans : : XPropertySetInfo > xPropsInfo ( xProps - > getPropertySetInfo ( ) ) ;
if ( xPropsInfo . is ( ) )
{
if ( ! mbIsPlaceholder & & xPropsInfo - > hasPropertyByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsEmptyPresentationObject " ) ) ) )
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsEmptyPresentationObject " ) ) , : : cppu : : bool2any ( sal_False ) ) ;
if ( mbIsUserTransformed & & xPropsInfo - > hasPropertyByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsPlaceholderDependent " ) ) ) )
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " IsPlaceholderDependent " ) ) , : : cppu : : bool2any ( sal_False ) ) ;
}
}
}
SetStyle ( ) ;
if ( xProps . is ( ) )
{
if ( msTemplateStyleName . getLength ( ) ) try
{
Reference < XStyleFamiliesSupplier > xFamiliesSupp ( GetImport ( ) . GetModel ( ) , UNO_QUERY_THROW ) ;
Reference < XNameAccess > xFamilies ( xFamiliesSupp - > getStyleFamilies ( ) ) ;
const OUString sFamilyName ( RTL_CONSTASCII_USTRINGPARAM ( " table " ) ) ;
Reference < XNameAccess > xTableFamily ( xFamilies - > getByName ( sFamilyName ) , UNO_QUERY_THROW ) ;
Reference < XStyle > xTableStyle ( xTableFamily - > getByName ( msTemplateStyleName ) , UNO_QUERY_THROW ) ;
xProps - > setPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " TableTemplate " ) ) , Any ( xTableStyle ) ) ;
}
catch ( Exception & )
{
DBG_ERROR ( " SdXMLTableShapeContext::StartElement(), exception caught! " ) ;
}
const XMLPropertyMapEntry * pEntry = & aXMLTableShapeAttributes [ 0 ] ;
int i = 0 ;
while ( pEntry - > msApiName & & ( i < 6 ) ) try
{
const OUString sAPIPropertyName ( OUString ( pEntry - > msApiName , pEntry - > nApiNameLength , RTL_TEXTENCODING_ASCII_US ) ) ;
xProps - > setPropertyValue ( sAPIPropertyName , Any ( maTemplateStylesUsed [ i + + ] ) ) ;
pEntry + + ;
}
catch ( Exception & )
{
DBG_ERROR ( " SdXMLTableShapeContext::StartElement(), exception caught! " ) ;
}
}
GetImport ( ) . GetShapeImport ( ) - > finishShape ( mxShape , mxAttrList , mxShapes ) ;
const rtl : : Reference < XMLTableImport > & xTableImport ( GetImport ( ) . GetShapeImport ( ) - > GetShapeTableImport ( ) ) ;
if ( xTableImport . is ( ) & & xProps . is ( ) )
{
uno : : Reference < table : : XColumnRowRange > xColumnRowRange (
xProps - > getPropertyValue ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Model " ) ) ) , uno : : UNO_QUERY ) ;
if ( xColumnRowRange . is ( ) )
mxTableImportContext = xTableImport - > CreateTableContext ( GetPrefix ( ) , GetLocalName ( ) , xColumnRowRange ) ;
if ( mxTableImportContext . Is ( ) )
mxTableImportContext - > StartElement ( xAttrList ) ;
}
}
}
void SdXMLTableShapeContext : : EndElement ( )
{
if ( mxTableImportContext . Is ( ) )
mxTableImportContext - > EndElement ( ) ;
2008-09-29 11:29:16 +00:00
SdXMLShapeContext : : EndElement ( ) ;
2008-03-12 09:38:48 +00:00
if ( mxShape . is ( ) )
{
// set pos, size, shear and rotate
SetTransformation ( ) ;
}
}
// this is called from the parent group for each unparsed attribute in the attribute list
void SdXMLTableShapeContext : : processAttribute ( sal_uInt16 nPrefix , const : : rtl : : OUString & rLocalName , const : : rtl : : OUString & rValue )
{
if ( nPrefix = = XML_NAMESPACE_TABLE )
{
if ( IsXMLToken ( rLocalName , XML_TEMPLATE_NAME ) )
{
msTemplateStyleName = rValue ;
}
else
{
int i = 0 ;
const XMLPropertyMapEntry * pEntry = & aXMLTableShapeAttributes [ 0 ] ;
while ( pEntry - > msApiName & & ( i < 6 ) )
{
if ( IsXMLToken ( rLocalName , pEntry - > meXMLName ) )
{
if ( IsXMLToken ( rValue , XML_TRUE ) )
maTemplateStylesUsed [ i ] = sal_True ;
break ;
}
pEntry + + ;
i + + ;
}
}
}
SdXMLShapeContext : : processAttribute ( nPrefix , rLocalName , rValue ) ;
}
SvXMLImportContext * SdXMLTableShapeContext : : CreateChildContext ( USHORT nPrefix , const : : rtl : : OUString & rLocalName , const uno : : Reference < xml : : sax : : XAttributeList > & xAttrList )
{
if ( mxTableImportContext . Is ( ) )
return mxTableImportContext - > CreateChildContext ( nPrefix , rLocalName , xAttrList ) ;
else
return SdXMLShapeContext : : CreateChildContext ( nPrefix , rLocalName , xAttrList ) ;
}