1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #include "comphelper/anytostring.hxx" 29 #include "cppuhelper/exc_hlp.hxx" 30 #include <osl/diagnose.h> 31 #include <rtl/ustrbuf.hxx> 32 33 #include <com/sun/star/animations/XTimeContainer.hpp> 34 #include <com/sun/star/animations/XAnimationNode.hpp> 35 #include <com/sun/star/animations/XAnimate.hpp> 36 37 #include "oox/core/fragmenthandler.hxx" 38 39 #include "commonbehaviorcontext.hxx" 40 #include "commontimenodecontext.hxx" 41 #include "timetargetelementcontext.hxx" 42 #include "pptfilterhelpers.hxx" 43 44 #include <string.h> 45 46 using ::rtl::OUString; 47 using ::rtl::OUStringBuffer; 48 using namespace ::oox::core; 49 using namespace ::com::sun::star::uno; 50 using namespace ::com::sun::star::xml::sax; 51 using namespace ::com::sun::star::animations; 52 53 namespace oox { namespace ppt { 54 55 CommonBehaviorContext::CommonBehaviorContext( ContextHandler& rParent, 56 const Reference< XFastAttributeList >& xAttribs, 57 const TimeNodePtr & pNode ) 58 : TimeNodeContext( rParent, PPT_TOKEN( cBhvr ), xAttribs, pNode ) 59 , mbInAttrList( false ) 60 , mbIsInAttrName( false ) 61 { 62 } 63 64 65 CommonBehaviorContext::~CommonBehaviorContext( ) throw( ) 66 { 67 } 68 69 70 71 void SAL_CALL CommonBehaviorContext::endFastElement( sal_Int32 aElement ) 72 throw ( SAXException, RuntimeException) 73 { 74 switch( aElement ) 75 { 76 case PPT_TOKEN( cBhvr ): 77 { 78 if( !maAttributes.empty() ) 79 { 80 OUStringBuffer sAttributes; 81 std::list< Attribute >::const_iterator iter; 82 for(iter = maAttributes.begin(); iter != maAttributes.end(); iter++) 83 { 84 if( sAttributes.getLength() ) 85 { 86 sAttributes.appendAscii( ";" ); 87 } 88 sAttributes.append( iter->name ); 89 } 90 OUString sTmp( sAttributes.makeStringAndClear() ); 91 mpNode->getNodeProperties()[ NP_ATTRIBUTENAME ] = makeAny( sTmp ); 92 } 93 break; 94 } 95 case PPT_TOKEN( attrNameLst ): 96 mbInAttrList = false; 97 break; 98 case PPT_TOKEN( attrName ): 99 if( mbIsInAttrName ) 100 { 101 const ImplAttributeNameConversion *attrConv = gImplConversionList; 102 while( attrConv->mpMSName != NULL ) 103 { 104 if(msCurrentAttribute.compareToAscii( attrConv->mpMSName ) == 0 ) 105 { 106 Attribute attr; 107 attr.name = ::rtl::OUString::intern( attrConv->mpAPIName, 108 strlen(attrConv->mpAPIName), 109 RTL_TEXTENCODING_ASCII_US ); 110 attr.type = attrConv->meAttribute; 111 maAttributes.push_back( attr ); 112 OSL_TRACE( "OOX: attrName is %s -> %s", 113 OUSTRING_TO_CSTR( msCurrentAttribute ), 114 attrConv->mpAPIName ); 115 break; 116 } 117 attrConv++; 118 } 119 mbIsInAttrName = false; 120 } 121 break; 122 default: 123 break; 124 } 125 } 126 127 128 void CommonBehaviorContext::characters( const OUString& aChars ) 129 throw( SAXException, RuntimeException ) 130 { 131 if( mbIsInAttrName ) 132 { 133 msCurrentAttribute += aChars; 134 } 135 } 136 137 138 Reference< XFastContextHandler > SAL_CALL CommonBehaviorContext::createFastChildContext( ::sal_Int32 aElementToken, 139 const Reference< XFastAttributeList >& xAttribs ) 140 throw ( SAXException, RuntimeException ) 141 { 142 Reference< XFastContextHandler > xRet; 143 144 switch ( aElementToken ) 145 { 146 case PPT_TOKEN( cTn ): 147 xRet.set( new CommonTimeNodeContext( *this, aElementToken, xAttribs, mpNode ) ); 148 break; 149 case PPT_TOKEN( tgtEl ): 150 xRet.set( new TimeTargetElementContext( *this, mpNode->getTarget() ) ); 151 break; 152 case PPT_TOKEN( attrNameLst ): 153 mbInAttrList = true; 154 break; 155 case PPT_TOKEN( attrName ): 156 { 157 if( mbInAttrList ) 158 { 159 mbIsInAttrName = true; 160 msCurrentAttribute = OUString(); 161 } 162 else 163 { 164 OSL_TRACE( "OOX: Attribute Name outside an Attribute List" ); 165 } 166 break; 167 } 168 default: 169 break; 170 } 171 172 if( !xRet.is() ) 173 xRet.set( this ); 174 175 return xRet; 176 } 177 178 } } 179