1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #include <com/sun/star/util/XCloneable.hpp> 25 #include <com/sun/star/uno/XComponentContext.hpp> 26 #include <com/sun/star/lang/XServiceInfo.hpp> 27 #include <com/sun/star/lang/XTypeProvider.hpp> 28 #include <com/sun/star/animations/XAnimateColor.hpp> 29 #include <com/sun/star/animations/XAnimateSet.hpp> 30 #include <com/sun/star/animations/XAnimateMotion.hpp> 31 #include <com/sun/star/animations/XAnimateTransform.hpp> 32 #include <com/sun/star/animations/XTransitionFilter.hpp> 33 #include <com/sun/star/animations/XTimeContainer.hpp> 34 #include <com/sun/star/animations/XIterateContainer.hpp> 35 #include <com/sun/star/animations/XAudio.hpp> 36 #include <com/sun/star/animations/XCommand.hpp> 37 #include <com/sun/star/animations/AnimationNodeType.hpp> 38 #include <com/sun/star/animations/AnimationCalcMode.hpp> 39 #include <com/sun/star/animations/AnimationFill.hpp> 40 #include <com/sun/star/animations/AnimationRestart.hpp> 41 #include <com/sun/star/animations/AnimationColorSpace.hpp> 42 #include <com/sun/star/animations/AnimationAdditiveMode.hpp> 43 #include <com/sun/star/animations/AnimationTransformType.hpp> 44 #include <com/sun/star/animations/TransitionType.hpp> 45 #include <com/sun/star/animations/TransitionSubType.hpp> 46 #include <com/sun/star/presentation/ShapeAnimationSubType.hpp> 47 #include <com/sun/star/container/XEnumerationAccess.hpp> 48 #include <com/sun/star/beans/NamedValue.hpp> 49 #include <com/sun/star/util/XChangesNotifier.hpp> 50 #include <com/sun/star/lang/XUnoTunnel.hpp> 51 #include <cppuhelper/interfacecontainer.hxx> 52 53 #include <cppuhelper/implbase1.hxx> 54 #include <rtl/uuid.h> 55 56 #include <osl/mutex.hxx> 57 #include <list> 58 #include <algorithm> 59 60 using ::osl::Mutex; 61 using ::osl::Guard; 62 using ::rtl::OUString; 63 using ::cppu::OInterfaceContainerHelper; 64 using ::cppu::OInterfaceIteratorHelper; 65 using ::com::sun::star::uno::Any; 66 using ::com::sun::star::uno::UNO_QUERY; 67 using ::com::sun::star::uno::XInterface; 68 using ::com::sun::star::uno::RuntimeException; 69 using ::com::sun::star::uno::Sequence; 70 using ::com::sun::star::uno::Reference; 71 using ::com::sun::star::uno::XComponentContext; 72 using ::com::sun::star::uno::Exception; 73 using ::com::sun::star::uno::XWeak; 74 using ::com::sun::star::uno::Type; 75 using ::com::sun::star::uno::makeAny; 76 using ::com::sun::star::lang::NoSupportException; 77 using ::com::sun::star::lang::IllegalArgumentException; 78 using ::com::sun::star::lang::WrappedTargetException; 79 using ::com::sun::star::lang::NoSupportException; 80 using ::com::sun::star::lang::XServiceInfo; 81 using ::com::sun::star::lang::XTypeProvider; 82 using ::com::sun::star::container::NoSuchElementException; 83 using ::com::sun::star::container::ElementExistException; 84 using ::com::sun::star::container::XEnumeration; 85 using ::com::sun::star::container::XEnumerationAccess; 86 using ::com::sun::star::beans::NamedValue; 87 using ::com::sun::star::util::XCloneable; 88 using ::com::sun::star::lang::XUnoTunnel; 89 using ::com::sun::star::util::XChangesNotifier; 90 using ::com::sun::star::util::XChangesListener; 91 using ::com::sun::star::util::ElementChange; 92 using ::com::sun::star::util::ChangesEvent; 93 94 using ::cppu::OWeakObject; 95 96 using namespace ::com::sun::star::animations; 97 using namespace ::com::sun::star::animations::AnimationNodeType; 98 99 namespace animcore 100 { 101 102 // ==================================================================== 103 104 typedef ::std::list< Reference< XAnimationNode > > ChildList_t; 105 106 // ==================================================================== 107 108 class AnimationNodeBase : public XAnimateMotion, 109 public XAnimateColor, 110 public XTransitionFilter, 111 public XAnimateSet, 112 public XAnimateTransform, 113 public XIterateContainer, 114 public XEnumerationAccess, 115 public XServiceInfo, 116 public XTypeProvider, 117 public XAudio, 118 public XCommand, 119 public XCloneable, 120 public XChangesNotifier, 121 public XUnoTunnel, 122 public OWeakObject 123 { 124 public: 125 // our first, last and only protection from mutli-threads! 126 Mutex maMutex; 127 }; 128 129 class AnimationNode : public AnimationNodeBase 130 { 131 public: 132 AnimationNode( sal_Int16 nNodeType ); 133 AnimationNode( const AnimationNode& rNode ); 134 virtual ~AnimationNode(); 135 136 // XInterface 137 virtual Any SAL_CALL queryInterface( const Type& aType ) throw (RuntimeException); 138 virtual void SAL_CALL acquire() throw (); 139 virtual void SAL_CALL release() throw (); 140 141 // XTypeProvider 142 virtual Sequence< Type > SAL_CALL getTypes() throw (RuntimeException); 143 virtual Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (RuntimeException); 144 145 // XServiceInfo 146 OUString SAL_CALL getImplementationName() throw(); 147 Sequence< OUString > SAL_CALL getSupportedServiceNames(void) throw(); 148 sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw(); 149 150 // XChild 151 virtual Reference< XInterface > SAL_CALL getParent() throw (RuntimeException); 152 virtual void SAL_CALL setParent( const Reference< XInterface >& Parent ) throw (NoSupportException, RuntimeException); 153 154 // XCloneable 155 virtual Reference< XCloneable > SAL_CALL createClone() throw (RuntimeException); 156 157 // XAnimationNode 158 virtual sal_Int16 SAL_CALL getType() throw (RuntimeException); 159 virtual Any SAL_CALL getBegin() throw (RuntimeException); 160 virtual void SAL_CALL setBegin( const Any& _begin ) throw (RuntimeException); 161 virtual Any SAL_CALL getDuration() throw (RuntimeException); 162 virtual void SAL_CALL setDuration( const Any& _duration ) throw (RuntimeException); 163 virtual Any SAL_CALL getEnd() throw (RuntimeException); 164 virtual void SAL_CALL setEnd( const Any& _end ) throw (RuntimeException); 165 virtual Any SAL_CALL getEndSync() throw (RuntimeException); 166 virtual void SAL_CALL setEndSync( const Any& _endsync ) throw (RuntimeException); 167 virtual Any SAL_CALL getRepeatCount() throw (RuntimeException); 168 virtual void SAL_CALL setRepeatCount( const Any& _repeatcount ) throw (RuntimeException); 169 virtual Any SAL_CALL getRepeatDuration() throw (RuntimeException); 170 virtual void SAL_CALL setRepeatDuration( const Any& _repeatduration ) throw (RuntimeException); 171 virtual sal_Int16 SAL_CALL getFill() throw (RuntimeException); 172 virtual void SAL_CALL setFill( sal_Int16 _fill ) throw (RuntimeException); 173 virtual sal_Int16 SAL_CALL getFillDefault() throw (RuntimeException); 174 virtual void SAL_CALL setFillDefault( sal_Int16 _filldefault ) throw (RuntimeException); 175 virtual sal_Int16 SAL_CALL getRestart() throw (RuntimeException); 176 virtual void SAL_CALL setRestart( sal_Int16 _restart ) throw (RuntimeException); 177 virtual sal_Int16 SAL_CALL getRestartDefault() throw (RuntimeException); 178 virtual void SAL_CALL setRestartDefault( sal_Int16 _restartdefault ) throw (RuntimeException); 179 virtual double SAL_CALL getAcceleration() throw (RuntimeException); 180 virtual void SAL_CALL setAcceleration( double _acceleration ) throw (RuntimeException); 181 virtual double SAL_CALL getDecelerate() throw (RuntimeException); 182 virtual void SAL_CALL setDecelerate( double _decelerate ) throw (RuntimeException); 183 virtual sal_Bool SAL_CALL getAutoReverse() throw (RuntimeException); 184 virtual void SAL_CALL setAutoReverse( sal_Bool _autoreverse ) throw (RuntimeException); 185 virtual Sequence< NamedValue > SAL_CALL getUserData() throw (RuntimeException); 186 virtual void SAL_CALL setUserData( const Sequence< NamedValue >& _userdata ) throw (RuntimeException); 187 188 // XAnimate 189 virtual Any SAL_CALL getTarget() throw (RuntimeException); 190 virtual void SAL_CALL setTarget( const Any& _target ) throw (RuntimeException); 191 virtual sal_Int16 SAL_CALL getSubItem() throw (RuntimeException); 192 virtual void SAL_CALL setSubItem( sal_Int16 _subitem ) throw (RuntimeException); 193 virtual OUString SAL_CALL getAttributeName() throw (RuntimeException); 194 virtual void SAL_CALL setAttributeName( const OUString& _attribute ) throw (RuntimeException); 195 virtual Sequence< Any > SAL_CALL getValues() throw (RuntimeException); 196 virtual void SAL_CALL setValues( const Sequence< Any >& _values ) throw (RuntimeException); 197 virtual Sequence< double > SAL_CALL getKeyTimes() throw (RuntimeException); 198 virtual void SAL_CALL setKeyTimes( const Sequence< double >& _keytimes ) throw (RuntimeException); 199 virtual sal_Int16 SAL_CALL getValueType() throw (RuntimeException); 200 virtual void SAL_CALL setValueType( sal_Int16 _valuetype ) throw (RuntimeException); 201 virtual sal_Int16 SAL_CALL getCalcMode() throw (RuntimeException); 202 virtual void SAL_CALL setCalcMode( sal_Int16 _calcmode ) throw (RuntimeException); 203 virtual sal_Bool SAL_CALL getAccumulate() throw (RuntimeException); 204 virtual void SAL_CALL setAccumulate( sal_Bool _accumulate ) throw (RuntimeException); 205 virtual sal_Int16 SAL_CALL getAdditive() throw (RuntimeException); 206 virtual void SAL_CALL setAdditive( sal_Int16 _additive ) throw (RuntimeException); 207 virtual Any SAL_CALL getFrom() throw (RuntimeException); 208 virtual void SAL_CALL setFrom( const Any& _from ) throw (RuntimeException); 209 virtual Any SAL_CALL getTo() throw (RuntimeException); 210 virtual void SAL_CALL setTo( const Any& _to ) throw (RuntimeException); 211 virtual Any SAL_CALL getBy() throw (RuntimeException); 212 virtual void SAL_CALL setBy( const Any& _by ) throw (RuntimeException); 213 virtual Sequence< TimeFilterPair > SAL_CALL getTimeFilter() throw (RuntimeException); 214 virtual void SAL_CALL setTimeFilter( const Sequence< TimeFilterPair >& _timefilter ) throw (RuntimeException); 215 virtual OUString SAL_CALL getFormula() throw (RuntimeException); 216 virtual void SAL_CALL setFormula( const OUString& _formula ) throw (RuntimeException); 217 218 // XAnimateColor 219 virtual sal_Int16 SAL_CALL getColorInterpolation() throw (RuntimeException); 220 virtual void SAL_CALL setColorInterpolation( sal_Int16 _colorspace ) throw (RuntimeException); 221 virtual sal_Bool SAL_CALL getDirection() throw (RuntimeException); 222 virtual void SAL_CALL setDirection( sal_Bool _direction ) throw (RuntimeException); 223 224 // XAnimateMotion 225 virtual Any SAL_CALL getPath() throw (RuntimeException); 226 virtual void SAL_CALL setPath( const Any& _path ) throw (RuntimeException); 227 virtual Any SAL_CALL getOrigin() throw (RuntimeException); 228 virtual void SAL_CALL setOrigin( const Any& _origin ) throw (RuntimeException); 229 230 // XAnimateTransform 231 virtual sal_Int16 SAL_CALL getTransformType() throw (RuntimeException); 232 virtual void SAL_CALL setTransformType( sal_Int16 _transformtype ) throw (RuntimeException); 233 234 // XTransitionFilter 235 virtual sal_Int16 SAL_CALL getTransition() throw (RuntimeException); 236 virtual void SAL_CALL setTransition( sal_Int16 _transition ) throw (RuntimeException); 237 virtual sal_Int16 SAL_CALL getSubtype() throw (RuntimeException); 238 virtual void SAL_CALL setSubtype( sal_Int16 _subtype ) throw (RuntimeException); 239 virtual sal_Bool SAL_CALL getMode() throw (RuntimeException); 240 virtual void SAL_CALL setMode( sal_Bool _mode ) throw (RuntimeException); 241 // virtual sal_Bool SAL_CALL getDirection() throw (RuntimeException); 242 // virtual void SAL_CALL setDirection( sal_Bool _direction ) throw (RuntimeException); 243 virtual sal_Int32 SAL_CALL getFadeColor() throw (RuntimeException); 244 virtual void SAL_CALL setFadeColor( sal_Int32 _fadecolor ) throw (RuntimeException); 245 246 // XAudio 247 virtual Any SAL_CALL getSource() throw (RuntimeException); 248 virtual void SAL_CALL setSource( const Any& _source ) throw (RuntimeException); 249 virtual double SAL_CALL getVolume() throw (RuntimeException); 250 virtual void SAL_CALL setVolume( double _volume ) throw (RuntimeException); 251 252 253 // XCommand 254 // virtual Any SAL_CALL getTarget() throw (RuntimeException); 255 // virtual void SAL_CALL setTarget( const Any& _target ) throw (RuntimeException); 256 virtual sal_Int16 SAL_CALL getCommand() throw (RuntimeException); 257 virtual void SAL_CALL setCommand( sal_Int16 _command ) throw (RuntimeException); 258 virtual Any SAL_CALL getParameter() throw (RuntimeException); 259 virtual void SAL_CALL setParameter( const Any& _parameter ) throw (RuntimeException); 260 261 // XElementAccess 262 virtual Type SAL_CALL getElementType() throw (RuntimeException); 263 virtual sal_Bool SAL_CALL hasElements() throw (RuntimeException); 264 265 // XEnumerationAccess 266 virtual Reference< XEnumeration > SAL_CALL createEnumeration() throw (RuntimeException); 267 268 // XTimeContainer 269 virtual Reference< XAnimationNode > SAL_CALL insertBefore( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& refChild ) throw (IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException); 270 virtual Reference< XAnimationNode > SAL_CALL insertAfter( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& refChild ) throw (IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException); 271 virtual Reference< XAnimationNode > SAL_CALL replaceChild( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& oldChild ) throw( IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException); 272 virtual Reference< XAnimationNode > SAL_CALL removeChild( const Reference< XAnimationNode >& oldChild ) throw(IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException); 273 virtual Reference< XAnimationNode > SAL_CALL appendChild( const Reference< XAnimationNode >& newChild ) throw(IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException); 274 275 // XIterateContainer 276 virtual sal_Int16 SAL_CALL getIterateType() throw (RuntimeException); 277 virtual void SAL_CALL setIterateType( sal_Int16 _iteratetype ) throw (RuntimeException); 278 virtual double SAL_CALL getIterateInterval() throw (RuntimeException); 279 virtual void SAL_CALL setIterateInterval( double _iterateinterval ) throw (RuntimeException); 280 281 // XChangesNotifier 282 virtual void SAL_CALL addChangesListener( const Reference< XChangesListener >& aListener ) throw (RuntimeException); 283 virtual void SAL_CALL removeChangesListener( const Reference< XChangesListener >& aListener ) throw (RuntimeException); 284 285 // XUnoTunnel 286 virtual ::sal_Int64 SAL_CALL getSomething( const Sequence< ::sal_Int8 >& aIdentifier ) throw (RuntimeException); 287 288 static const Sequence< sal_Int8 > & getUnoTunnelId(); 289 void fireChangeListener(); 290 291 private: 292 OInterfaceContainerHelper maChangeListener; 293 294 static void initTypeProvider( sal_Int16 nNodeType ) throw(); 295 296 const sal_Int16 mnNodeType; 297 298 // for XTypeProvider 299 static Sequence< Type >* mpTypes[12]; 300 static Sequence< sal_Int8 >* mpId[12]; 301 302 // attributes for the XAnimationNode interface implementation 303 Any maBegin, maDuration, maEnd, maEndSync, maRepeatCount, maRepeatDuration; 304 sal_Int16 mnFill, mnFillDefault, mnRestart, mnRestartDefault; 305 double mfAcceleration, mfDecelerate; 306 sal_Bool mbAutoReverse; 307 Sequence< NamedValue > maUserData; 308 309 // parent interface for XChild interface implementation 310 Reference<XInterface> mxParent; 311 AnimationNode* mpParent; 312 313 // attributes for XAnimate 314 Any maTarget; 315 OUString maAttributeName, maFormula; 316 Sequence< Any > maValues; 317 Sequence< double > maKeyTimes; 318 sal_Int16 mnValueType, mnSubItem; 319 sal_Int16 mnCalcMode, mnAdditive; 320 sal_Bool mbAccumulate; 321 Any maFrom, maTo, maBy; 322 Sequence< TimeFilterPair > maTimeFilter; 323 324 // attributes for XAnimateColor 325 sal_Int16 mnColorSpace; 326 sal_Bool mbDirection; 327 328 // atributes for XAnimateMotion 329 Any maPath, maOrigin; 330 331 // attributes for XAnimateTransform 332 sal_Int16 mnTransformType; 333 334 // attributes for XTransitionFilter 335 sal_Int16 mnTransition; 336 sal_Int16 mnSubtype; 337 sal_Bool mbMode; 338 sal_Int32 mnFadeColor; 339 340 // XAudio 341 double mfVolume; 342 343 // XCommand 344 sal_Int16 mnCommand; 345 Any maParameter; 346 347 // XIterateContainer 348 sal_Int16 mnIterateType; 349 double mfIterateInterval; 350 351 /** sorted list of child nodes for XTimeContainer*/ 352 ChildList_t maChilds; 353 }; 354 355 // ==================================================================== 356 357 class TimeContainerEnumeration : public ::cppu::WeakImplHelper1< XEnumeration > 358 { 359 public: 360 TimeContainerEnumeration( const ChildList_t &rChilds ); 361 virtual ~TimeContainerEnumeration(); 362 363 // Methods 364 virtual sal_Bool SAL_CALL hasMoreElements() throw (RuntimeException); 365 virtual Any SAL_CALL nextElement( ) throw (NoSuchElementException, WrappedTargetException, RuntimeException); 366 367 private: 368 /** sorted list of child nodes */ 369 ChildList_t maChilds; 370 371 /** current iteration position */ 372 ChildList_t::iterator maIter; 373 374 /** our first, last and only protection from mutli-threads! */ 375 Mutex maMutex; 376 }; 377 378 TimeContainerEnumeration::TimeContainerEnumeration( const ChildList_t &rChilds ) 379 : maChilds( rChilds ) 380 { 381 maIter = maChilds.begin(); 382 } 383 384 TimeContainerEnumeration::~TimeContainerEnumeration() 385 { 386 } 387 388 // Methods 389 sal_Bool SAL_CALL TimeContainerEnumeration::hasMoreElements() throw (RuntimeException) 390 { 391 Guard< Mutex > aGuard( maMutex ); 392 393 return maIter != maChilds.end(); 394 } 395 396 Any SAL_CALL TimeContainerEnumeration::nextElement() 397 throw (NoSuchElementException, WrappedTargetException, RuntimeException) 398 { 399 Guard< Mutex > aGuard( maMutex ); 400 401 if( maIter == maChilds.end() ) 402 throw NoSuchElementException(); 403 404 return makeAny( (*maIter++) ); 405 } 406 407 // ==================================================================== 408 409 Sequence< Type >* AnimationNode::mpTypes[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; 410 Sequence< sal_Int8 >* AnimationNode::mpId[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; 411 412 AnimationNode::AnimationNode( sal_Int16 nNodeType ) 413 : maChangeListener(maMutex), 414 mnNodeType( nNodeType ), 415 mnFill( AnimationFill::DEFAULT ), 416 mnFillDefault( AnimationFill::INHERIT ), 417 mnRestart( AnimationRestart:: DEFAULT ), 418 mnRestartDefault( AnimationRestart:: INHERIT ), 419 mfAcceleration( 0.0 ), 420 mfDecelerate( 0.0 ), 421 mbAutoReverse( sal_False ), 422 mpParent(0), 423 mnValueType( 0 ), 424 mnSubItem( 0 ), 425 mnCalcMode( (nNodeType == AnimationNodeType::ANIMATEMOTION) ? AnimationCalcMode::PACED : AnimationCalcMode::LINEAR), 426 mnAdditive(AnimationAdditiveMode::REPLACE), 427 mbAccumulate(sal_False), 428 mnColorSpace( AnimationColorSpace::RGB ), 429 mbDirection( sal_True ), 430 mnTransformType( AnimationTransformType::TRANSLATE ), 431 mnTransition(TransitionType::BARWIPE), 432 mnSubtype(TransitionSubType::DEFAULT), 433 mbMode(true), 434 mnFadeColor(0), 435 mfVolume(1.0), 436 mnCommand(0), 437 mnIterateType( ::com::sun::star::presentation::ShapeAnimationSubType::AS_WHOLE ), 438 mfIterateInterval(0.0) 439 { 440 OSL_ENSURE((sal_uInt32)nNodeType < sizeof(mpTypes)/sizeof(Sequence<Type>*), "NodeType out of range"); 441 } 442 443 AnimationNode::AnimationNode( const AnimationNode& rNode ) 444 : AnimationNodeBase(), 445 maChangeListener(maMutex), 446 mnNodeType( rNode.mnNodeType ), 447 448 // attributes for the XAnimationNode interface implementation 449 maBegin( rNode.maBegin ), 450 maDuration( rNode.maDuration ), 451 maEnd( rNode.maEnd ), 452 maEndSync( rNode.maEndSync ), 453 maRepeatCount( rNode.maRepeatCount ), 454 maRepeatDuration( rNode.maRepeatDuration ), 455 mnFill( rNode.mnFill ), 456 mnFillDefault( rNode.mnFillDefault ), 457 mnRestart( rNode.mnRestart ), 458 mnRestartDefault( rNode.mnRestartDefault ), 459 mfAcceleration( rNode.mfAcceleration ), 460 mfDecelerate( rNode.mfDecelerate ), 461 mbAutoReverse( rNode.mbAutoReverse ), 462 maUserData( rNode.maUserData ), 463 mpParent(0), 464 465 // attributes for XAnimate 466 maTarget( rNode.maTarget ), 467 maAttributeName( rNode.maAttributeName ), 468 maFormula( rNode.maFormula ), 469 maValues( rNode.maValues ), 470 maKeyTimes( rNode.maKeyTimes ), 471 mnValueType( rNode.mnValueType ), 472 mnSubItem( rNode.mnSubItem ), 473 mnCalcMode( rNode.mnCalcMode ), 474 mnAdditive( rNode.mnAdditive ), 475 mbAccumulate( rNode.mbAccumulate ), 476 maFrom( rNode.maFrom ), 477 maTo( rNode.maTo ), 478 maBy( rNode.maBy ), 479 maTimeFilter( rNode.maTimeFilter ), 480 481 // attributes for XAnimateColor 482 mnColorSpace( rNode.mnColorSpace ), 483 mbDirection( rNode.mbDirection ), 484 485 // atributes for XAnimateMotion 486 maPath( rNode.maPath ), 487 maOrigin( rNode.maOrigin ), 488 489 // attributes for XAnimateTransform 490 mnTransformType( rNode.mnTransformType ), 491 492 // attributes for XTransitionFilter 493 mnTransition( rNode.mnTransition ), 494 mnSubtype( rNode.mnSubtype ), 495 mbMode( rNode.mbMode ), 496 mnFadeColor( rNode.mnFadeColor ), 497 498 // XAudio 499 mfVolume( rNode.mfVolume ), 500 501 // XCommand 502 mnCommand( rNode.mnCommand ), 503 maParameter( rNode.maParameter ), 504 505 // XIterateContainer 506 mnIterateType( rNode.mnIterateType ), 507 mfIterateInterval( rNode.mfIterateInterval ) 508 { 509 } 510 511 AnimationNode::~AnimationNode() 512 { 513 } 514 515 // -------------------------------------------------------------------- 516 517 #define IMPL_NODE_FACTORY(N,IN,SN)\ 518 Reference< XInterface > SAL_CALL createInstance_##N( const Reference< XComponentContext > & ) throw (Exception)\ 519 {\ 520 return Reference < XInterface > ( SAL_STATIC_CAST( ::cppu::OWeakObject * , new AnimationNode( N ) ) );\ 521 }\ 522 OUString getImplementationName_##N()\ 523 {\ 524 return OUString( RTL_CONSTASCII_USTRINGPARAM ( IN ) );\ 525 }\ 526 Sequence<OUString> getSupportedServiceNames_##N(void)\ 527 {\ 528 Sequence<OUString> aRet(1);\ 529 aRet.getArray()[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( SN ));\ 530 return aRet;\ 531 } 532 533 IMPL_NODE_FACTORY( PAR, "animcore::ParallelTimeContainer", "com.sun.star.animations.ParallelTimeContainer" ) 534 IMPL_NODE_FACTORY( SEQ, "animcore::SequenceTimeContainer", "com.sun.star.animations.SequenceTimeContainer" ) 535 IMPL_NODE_FACTORY( ITERATE, "animcore::IterateContainer", "com.sun.star.animations.IterateContainer" ) 536 IMPL_NODE_FACTORY( ANIMATE, "animcore::Animate", "com.sun.star.animations.Animate" ) 537 IMPL_NODE_FACTORY( SET, "animcore::AnimateSet", "com.sun.star.animations.AnimateSet" ) 538 IMPL_NODE_FACTORY( ANIMATECOLOR, "animcore::AnimateColor", "com.sun.star.animations.AnimateColor" ) 539 IMPL_NODE_FACTORY( ANIMATEMOTION, "animcore::AnimateMotion", "com.sun.star.animations.AnimateMotion" ) 540 IMPL_NODE_FACTORY( ANIMATETRANSFORM, "animcore::AnimateTransform", "com.sun.star.animations.AnimateTransform" ) 541 IMPL_NODE_FACTORY( TRANSITIONFILTER, "animcore::TransitionFilter", "com.sun.star.animations.TransitionFilter" ) 542 IMPL_NODE_FACTORY( AUDIO, "animcore::Audio", "com.sun.star.animations.Audio" ); 543 IMPL_NODE_FACTORY( COMMAND, "animcore::Command", "com.sun.star.animations.Command" ); 544 545 // -------------------------------------------------------------------- 546 547 // XInterface 548 Any SAL_CALL AnimationNode::queryInterface( const Type& aType ) throw (RuntimeException) 549 { 550 Any aRet( ::cppu::queryInterface( 551 aType, 552 static_cast< XServiceInfo * >( this ), 553 static_cast< XTypeProvider * >( this ), 554 static_cast< XChild * >( static_cast< XTimeContainer * >(this) ), 555 static_cast< XCloneable* >( this ), 556 static_cast< XAnimationNode* >( static_cast< XTimeContainer * >(this) ), 557 static_cast< XInterface* >(static_cast< OWeakObject * >(this)), 558 static_cast< XWeak* >(static_cast< OWeakObject * >(this)), 559 static_cast< XChangesNotifier* >( this ), 560 static_cast< XUnoTunnel* >( this ) ) ); 561 562 if(!aRet.hasValue()) 563 { 564 switch( mnNodeType ) 565 { 566 case AnimationNodeType::PAR: 567 case AnimationNodeType::SEQ: 568 aRet = ::cppu::queryInterface( 569 aType, 570 static_cast< XTimeContainer * >( this ), 571 static_cast< XEnumerationAccess * >( this ), 572 static_cast< XElementAccess * >( this ) ); 573 break; 574 case AnimationNodeType::ITERATE: 575 aRet = ::cppu::queryInterface( 576 aType, 577 static_cast< XTimeContainer * >( this ), 578 static_cast< XIterateContainer * >( this ), 579 static_cast< XEnumerationAccess * >( this ), 580 static_cast< XElementAccess * >( this ) ); 581 break; 582 case AnimationNodeType::ANIMATE: 583 aRet = ::cppu::queryInterface( 584 aType, 585 static_cast< XAnimate * >( static_cast< XAnimateMotion * >(this) ) ); 586 break; 587 case AnimationNodeType::ANIMATEMOTION: 588 aRet = ::cppu::queryInterface( 589 aType, 590 static_cast< XAnimate * >( static_cast< XAnimateMotion * >(this) ), 591 static_cast< XAnimateMotion * >( this ) ); 592 break; 593 case AnimationNodeType::ANIMATECOLOR: 594 aRet = ::cppu::queryInterface( 595 aType, 596 static_cast< XAnimate * >( static_cast< XAnimateColor * >(this) ), 597 static_cast< XAnimateColor * >( this ) ); 598 break; 599 case AnimationNodeType::SET: 600 aRet = ::cppu::queryInterface( 601 aType, 602 static_cast< XAnimate * >( static_cast< XAnimateSet * >(this) ), 603 static_cast< XAnimateSet * >( this ) ); 604 break; 605 case AnimationNodeType::ANIMATETRANSFORM: 606 aRet = ::cppu::queryInterface( 607 aType, 608 static_cast< XAnimate * >( static_cast< XAnimateTransform * >(this) ), 609 static_cast< XAnimateTransform * >( this ) ); 610 break; 611 case AnimationNodeType::AUDIO: 612 aRet = ::cppu::queryInterface( 613 aType, 614 static_cast< XAudio * >( static_cast< XAudio * >(this) ) ); 615 break; 616 case AnimationNodeType::COMMAND: 617 aRet = ::cppu::queryInterface( 618 aType, 619 static_cast< XCommand * >( static_cast< XCommand * >(this) ) ); 620 break; 621 case AnimationNodeType::TRANSITIONFILTER: 622 aRet = ::cppu::queryInterface( 623 aType, 624 static_cast< XAnimate * >( static_cast< XTransitionFilter * >(this) ), 625 static_cast< XTransitionFilter * >( this ) ); 626 break; 627 } 628 } 629 630 return aRet.hasValue() ? aRet : OWeakObject::queryInterface( aType ); 631 } 632 633 // -------------------------------------------------------------------- 634 635 void AnimationNode::initTypeProvider( sal_Int16 nNodeType ) throw() 636 { 637 ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); 638 639 if(! mpTypes[nNodeType] ) 640 { 641 // create id 642 mpId[nNodeType] = new Sequence< sal_Int8 >( 16 ); 643 rtl_createUuid( (sal_uInt8 *)mpId[nNodeType]->getArray(), 0, sal_True ); 644 645 static sal_Int32 type_numbers[] = 646 { 647 7, // CUSTOM 648 9, // PAR 649 9, // SEQ 650 9, // ITERATE 651 8, // ANIMATE 652 8, // SET 653 8, // ANIMATEMOTION 654 8, // ANIMATECOLOR 655 8, // ANIMATETRANSFORM 656 8, // TRANSITIONFILTER 657 8, // AUDIO 658 8, // COMMAND 659 }; 660 661 // collect types 662 Sequence< Type > * types = new Sequence< Type >( type_numbers[nNodeType] ); 663 Type * pTypeAr = types->getArray(); 664 sal_Int32 nPos = 0; 665 666 pTypeAr[nPos++] = ::getCppuType( (const Reference< XWeak > *)0 ); 667 pTypeAr[nPos++] = ::getCppuType( (const Reference< XChild > *)0 ); 668 pTypeAr[nPos++] = ::getCppuType( (const Reference< XCloneable > *)0 ); 669 pTypeAr[nPos++] = ::getCppuType( (const Reference< XTypeProvider > *)0 ); 670 pTypeAr[nPos++] = ::getCppuType( (const Reference< XServiceInfo > *)0 ); 671 pTypeAr[nPos++] = ::getCppuType( (const Reference< XUnoTunnel > *)0 ); 672 pTypeAr[nPos++] = ::getCppuType( (const Reference< XChangesNotifier> *)0 ); 673 674 switch( nNodeType ) 675 { 676 case AnimationNodeType::PAR: 677 case AnimationNodeType::SEQ: 678 pTypeAr[nPos++] = ::getCppuType( (const Reference< XTimeContainer > *)0 ); 679 pTypeAr[nPos++] = ::getCppuType( (const Reference< XEnumerationAccess > *)0 ); 680 break; 681 case AnimationNodeType::ITERATE: 682 pTypeAr[nPos++] = ::getCppuType( (const Reference< XIterateContainer > *)0 ); 683 pTypeAr[nPos++] = ::getCppuType( (const Reference< XEnumerationAccess > *)0 ); 684 break; 685 case AnimationNodeType::ANIMATE: 686 pTypeAr[nPos++] = ::getCppuType( (const Reference< XAnimate > *)0 ); 687 break; 688 case AnimationNodeType::ANIMATEMOTION: 689 pTypeAr[nPos++] = ::getCppuType( (const Reference< XAnimateMotion > *)0 ); 690 break; 691 case AnimationNodeType::ANIMATECOLOR: 692 pTypeAr[nPos++] = ::getCppuType( (const Reference< XAnimateColor > *)0 ); 693 break; 694 case AnimationNodeType::ANIMATETRANSFORM: 695 pTypeAr[nPos++] = ::getCppuType( (const Reference< XAnimateTransform > *)0 ); 696 break; 697 case AnimationNodeType::SET: 698 pTypeAr[nPos++] = ::getCppuType( (const Reference< XAnimateSet > *)0 ); 699 break; 700 case AnimationNodeType::TRANSITIONFILTER: 701 pTypeAr[nPos++] = ::getCppuType( (const Reference< XTransitionFilter > *)0 ); 702 break; 703 case AnimationNodeType::AUDIO: 704 pTypeAr[nPos++] = ::getCppuType( (const Reference< XAudio > *)0 ); 705 break; 706 case AnimationNodeType::COMMAND: 707 pTypeAr[nPos++] = ::getCppuType( ( const Reference< XCommand > *)0 ); 708 break; 709 } 710 mpTypes[nNodeType] = types; 711 } 712 } 713 714 // -------------------------------------------------------------------- 715 716 Sequence< Type > AnimationNode::getTypes() throw (RuntimeException) 717 { 718 if (! mpTypes[mnNodeType]) 719 initTypeProvider(mnNodeType); 720 return *mpTypes[mnNodeType]; 721 } 722 // -------------------------------------------------------------------- 723 724 Sequence< sal_Int8 > AnimationNode::getImplementationId() throw (RuntimeException) 725 { 726 if (! mpId[mnNodeType]) 727 initTypeProvider(mnNodeType); 728 return *mpId[mnNodeType]; 729 } 730 731 // -------------------------------------------------------------------- 732 733 // XInterface 734 void SAL_CALL AnimationNode::acquire( ) throw () 735 { 736 OWeakObject::acquire(); 737 } 738 739 // -------------------------------------------------------------------- 740 741 // XInterface 742 void SAL_CALL AnimationNode::release( ) throw () 743 { 744 OWeakObject::release(); 745 } 746 747 // -------------------------------------------------------------------- 748 749 // XServiceInfo 750 OUString AnimationNode::getImplementationName() throw() 751 { 752 switch( mnNodeType ) 753 { 754 case AnimationNodeType::PAR: 755 return getImplementationName_PAR(); 756 case AnimationNodeType::SEQ: 757 return getImplementationName_SEQ(); 758 case AnimationNodeType::ITERATE: 759 return getImplementationName_ITERATE(); 760 case AnimationNodeType::SET: 761 return getImplementationName_SET(); 762 case AnimationNodeType::ANIMATECOLOR: 763 return getImplementationName_ANIMATECOLOR(); 764 case AnimationNodeType::ANIMATEMOTION: 765 return getImplementationName_ANIMATEMOTION(); 766 case AnimationNodeType::TRANSITIONFILTER: 767 return getImplementationName_TRANSITIONFILTER(); 768 case AnimationNodeType::ANIMATETRANSFORM: 769 return getImplementationName_ANIMATETRANSFORM(); 770 case AnimationNodeType::AUDIO: 771 return getImplementationName_AUDIO(); 772 case AnimationNodeType::COMMAND: 773 return getImplementationName_COMMAND(); 774 case AnimationNodeType::ANIMATE: 775 default: 776 return getImplementationName_ANIMATE(); 777 } 778 } 779 780 // -------------------------------------------------------------------- 781 782 // XServiceInfo 783 sal_Bool AnimationNode::supportsService(const OUString& ServiceName) throw() 784 { 785 Sequence< OUString > aSNL( getSupportedServiceNames() ); 786 const OUString * pArray = aSNL.getConstArray(); 787 788 for( sal_Int32 i = 0; i < aSNL.getLength(); i++ ) 789 if( pArray[i] == ServiceName ) 790 return sal_True; 791 792 return sal_False; 793 } 794 795 // -------------------------------------------------------------------- 796 797 // XServiceInfo 798 Sequence< OUString > AnimationNode::getSupportedServiceNames(void) throw() 799 { 800 switch( mnNodeType ) 801 { 802 case AnimationNodeType::PAR: 803 return getSupportedServiceNames_PAR(); 804 case AnimationNodeType::SEQ: 805 return getSupportedServiceNames_SEQ(); 806 case AnimationNodeType::ITERATE: 807 return getSupportedServiceNames_ITERATE(); 808 case AnimationNodeType::SET: 809 return getSupportedServiceNames_SET(); 810 case AnimationNodeType::ANIMATECOLOR: 811 return getSupportedServiceNames_ANIMATECOLOR(); 812 case AnimationNodeType::ANIMATEMOTION: 813 return getSupportedServiceNames_ANIMATEMOTION(); 814 case AnimationNodeType::TRANSITIONFILTER: 815 return getSupportedServiceNames_TRANSITIONFILTER(); 816 case AnimationNodeType::AUDIO: 817 return getSupportedServiceNames_AUDIO(); 818 case AnimationNodeType::COMMAND: 819 return getSupportedServiceNames_COMMAND(); 820 case AnimationNodeType::ANIMATE: 821 default: 822 return getSupportedServiceNames_ANIMATE(); 823 } 824 } 825 826 // -------------------------------------------------------------------- 827 828 // XAnimationNode 829 sal_Int16 SAL_CALL AnimationNode::getType() throw (RuntimeException) 830 { 831 Guard< Mutex > aGuard( maMutex ); 832 return mnNodeType; 833 } 834 835 // -------------------------------------------------------------------- 836 837 // XAnimationNode 838 Any SAL_CALL AnimationNode::getBegin() throw (RuntimeException) 839 { 840 Guard< Mutex > aGuard( maMutex ); 841 return maBegin; 842 } 843 844 // -------------------------------------------------------------------- 845 846 // XAnimationNode 847 void SAL_CALL AnimationNode::setBegin( const Any& _begin ) throw (RuntimeException) 848 { 849 Guard< Mutex > aGuard( maMutex ); 850 if( _begin != maBegin ) 851 { 852 maBegin = _begin; 853 fireChangeListener(); 854 } 855 } 856 857 // -------------------------------------------------------------------- 858 859 // XAnimationNode 860 Any SAL_CALL AnimationNode::getDuration() throw (RuntimeException) 861 { 862 Guard< Mutex > aGuard( maMutex ); 863 return maDuration; 864 } 865 866 // -------------------------------------------------------------------- 867 868 // XAnimationNode 869 void SAL_CALL AnimationNode::setDuration( const Any& _duration ) throw (RuntimeException) 870 { 871 Guard< Mutex > aGuard( maMutex ); 872 if( _duration != maDuration ) 873 { 874 maDuration = _duration; 875 fireChangeListener(); 876 } 877 } 878 879 // -------------------------------------------------------------------- 880 881 // XAnimationNode 882 Any SAL_CALL AnimationNode::getEnd() throw (RuntimeException) 883 { 884 Guard< Mutex > aGuard( maMutex ); 885 return maEnd; 886 } 887 888 // -------------------------------------------------------------------- 889 890 // XAnimationNode 891 void SAL_CALL AnimationNode::setEnd( const Any& _end ) throw (RuntimeException) 892 { 893 Guard< Mutex > aGuard( maMutex ); 894 if( _end != maEnd ) 895 { 896 maEnd = _end; 897 fireChangeListener(); 898 } 899 } 900 901 // -------------------------------------------------------------------- 902 903 // XAnimationNode 904 Any SAL_CALL AnimationNode::getEndSync() throw (RuntimeException) 905 { 906 Guard< Mutex > aGuard( maMutex ); 907 return maEndSync; 908 } 909 910 // -------------------------------------------------------------------- 911 912 // XAnimationNode 913 void SAL_CALL AnimationNode::setEndSync( const Any& _endsync ) throw (RuntimeException) 914 { 915 Guard< Mutex > aGuard( maMutex ); 916 if( _endsync != maEndSync ) 917 { 918 maEndSync = _endsync; 919 fireChangeListener(); 920 } 921 } 922 923 // -------------------------------------------------------------------- 924 925 // XAnimationNode 926 Any SAL_CALL AnimationNode::getRepeatCount() throw (RuntimeException) 927 { 928 Guard< Mutex > aGuard( maMutex ); 929 return maRepeatCount; 930 } 931 932 // -------------------------------------------------------------------- 933 934 // XAnimationNode 935 void SAL_CALL AnimationNode::setRepeatCount( const Any& _repeatcount ) throw (RuntimeException) 936 { 937 Guard< Mutex > aGuard( maMutex ); 938 if( _repeatcount != maRepeatCount ) 939 { 940 maRepeatCount = _repeatcount; 941 fireChangeListener(); 942 } 943 } 944 945 // -------------------------------------------------------------------- 946 947 // XAnimationNode 948 Any SAL_CALL AnimationNode::getRepeatDuration() throw (RuntimeException) 949 { 950 Guard< Mutex > aGuard( maMutex ); 951 return maRepeatDuration; 952 } 953 954 // -------------------------------------------------------------------- 955 956 // XAnimationNode 957 void SAL_CALL AnimationNode::setRepeatDuration( const Any& _repeatduration ) throw (RuntimeException) 958 { 959 Guard< Mutex > aGuard( maMutex ); 960 if( _repeatduration != maRepeatDuration ) 961 { 962 maRepeatDuration = _repeatduration; 963 fireChangeListener(); 964 } 965 } 966 967 // -------------------------------------------------------------------- 968 969 // XAnimationNode 970 sal_Int16 SAL_CALL AnimationNode::getFill() throw (RuntimeException) 971 { 972 Guard< Mutex > aGuard( maMutex ); 973 return mnFill; 974 } 975 976 // -------------------------------------------------------------------- 977 978 // XAnimationNode 979 void SAL_CALL AnimationNode::setFill( sal_Int16 _fill ) throw (RuntimeException) 980 { 981 Guard< Mutex > aGuard( maMutex ); 982 if( _fill != mnFill ) 983 { 984 mnFill = _fill; 985 fireChangeListener(); 986 } 987 } 988 989 // -------------------------------------------------------------------- 990 991 // XAnimationNode 992 sal_Int16 SAL_CALL AnimationNode::getFillDefault() throw (RuntimeException) 993 { 994 Guard< Mutex > aGuard( maMutex ); 995 return mnFillDefault; 996 } 997 998 // -------------------------------------------------------------------- 999 1000 // XAnimationNode 1001 void SAL_CALL AnimationNode::setFillDefault( sal_Int16 _filldefault ) throw (RuntimeException) 1002 { 1003 Guard< Mutex > aGuard( maMutex ); 1004 if( _filldefault != mnFillDefault ) 1005 { 1006 mnFillDefault = _filldefault; 1007 fireChangeListener(); 1008 } 1009 } 1010 1011 // -------------------------------------------------------------------- 1012 1013 // XAnimationNode 1014 sal_Int16 SAL_CALL AnimationNode::getRestart() throw (RuntimeException) 1015 { 1016 Guard< Mutex > aGuard( maMutex ); 1017 return mnRestart; 1018 } 1019 1020 // -------------------------------------------------------------------- 1021 1022 // XAnimationNode 1023 void SAL_CALL AnimationNode::setRestart( sal_Int16 _restart ) throw (RuntimeException) 1024 { 1025 Guard< Mutex > aGuard( maMutex ); 1026 if( _restart != mnRestart ) 1027 { 1028 mnRestart = _restart; 1029 fireChangeListener(); 1030 } 1031 } 1032 1033 // -------------------------------------------------------------------- 1034 1035 // XAnimationNode 1036 sal_Int16 SAL_CALL AnimationNode::getRestartDefault() throw (RuntimeException) 1037 { 1038 Guard< Mutex > aGuard( maMutex ); 1039 return mnRestartDefault; 1040 } 1041 1042 // -------------------------------------------------------------------- 1043 1044 // XAnimationNode 1045 void SAL_CALL AnimationNode::setRestartDefault( sal_Int16 _restartdefault ) throw (RuntimeException) 1046 { 1047 Guard< Mutex > aGuard( maMutex ); 1048 if( _restartdefault != mnRestartDefault ) 1049 { 1050 mnRestartDefault = _restartdefault; 1051 fireChangeListener(); 1052 } 1053 } 1054 1055 // -------------------------------------------------------------------- 1056 1057 // XAnimationNode 1058 double SAL_CALL AnimationNode::getAcceleration() throw (RuntimeException) 1059 { 1060 Guard< Mutex > aGuard( maMutex ); 1061 return mfAcceleration; 1062 } 1063 1064 // -------------------------------------------------------------------- 1065 1066 // XAnimationNode 1067 void SAL_CALL AnimationNode::setAcceleration( double _acceleration ) throw (RuntimeException) 1068 { 1069 Guard< Mutex > aGuard( maMutex ); 1070 if( _acceleration != mfAcceleration ) 1071 { 1072 mfAcceleration = _acceleration; 1073 fireChangeListener(); 1074 } 1075 } 1076 1077 // -------------------------------------------------------------------- 1078 1079 // XAnimationNode 1080 double SAL_CALL AnimationNode::getDecelerate() throw (RuntimeException) 1081 { 1082 Guard< Mutex > aGuard( maMutex ); 1083 return mfDecelerate; 1084 } 1085 1086 // -------------------------------------------------------------------- 1087 1088 // XAnimationNode 1089 void SAL_CALL AnimationNode::setDecelerate( double _decelerate ) throw (RuntimeException) 1090 { 1091 Guard< Mutex > aGuard( maMutex ); 1092 if( _decelerate != mfDecelerate ) 1093 { 1094 mfDecelerate = _decelerate; 1095 fireChangeListener(); 1096 } 1097 } 1098 1099 // -------------------------------------------------------------------- 1100 1101 // XAnimationNode 1102 sal_Bool SAL_CALL AnimationNode::getAutoReverse() throw (RuntimeException) 1103 { 1104 Guard< Mutex > aGuard( maMutex ); 1105 return mbAutoReverse; 1106 } 1107 1108 // -------------------------------------------------------------------- 1109 1110 // XAnimationNode 1111 void SAL_CALL AnimationNode::setAutoReverse( sal_Bool _autoreverse ) throw (RuntimeException) 1112 { 1113 Guard< Mutex > aGuard( maMutex ); 1114 if( _autoreverse != mbAutoReverse ) 1115 { 1116 mbAutoReverse = _autoreverse; 1117 fireChangeListener(); 1118 } 1119 } 1120 1121 // -------------------------------------------------------------------- 1122 1123 Sequence< NamedValue > SAL_CALL AnimationNode::getUserData() throw (RuntimeException) 1124 { 1125 Guard< Mutex > aGuard( maMutex ); 1126 return maUserData; 1127 } 1128 1129 // -------------------------------------------------------------------- 1130 1131 void SAL_CALL AnimationNode::setUserData( const Sequence< NamedValue >& _userdata ) throw (RuntimeException) 1132 { 1133 Guard< Mutex > aGuard( maMutex ); 1134 maUserData = _userdata; 1135 fireChangeListener(); 1136 } 1137 1138 // -------------------------------------------------------------------- 1139 1140 // XChild 1141 Reference< XInterface > SAL_CALL AnimationNode::getParent() throw (RuntimeException) 1142 { 1143 Guard< Mutex > aGuard( maMutex ); 1144 return mxParent; 1145 } 1146 1147 // -------------------------------------------------------------------- 1148 1149 // XChild 1150 void SAL_CALL AnimationNode::setParent( const Reference< XInterface >& Parent ) throw (NoSupportException, RuntimeException) 1151 { 1152 Guard< Mutex > aGuard( maMutex ); 1153 if( Parent != mxParent ) 1154 { 1155 mxParent = Parent; 1156 1157 mpParent = 0; 1158 Reference< XUnoTunnel > xTunnel( mxParent, UNO_QUERY ); 1159 if( xTunnel.is() ) 1160 mpParent = reinterpret_cast< AnimationNode* >( sal::static_int_cast< sal_IntPtr >(xTunnel->getSomething( getUnoTunnelId() ))); 1161 1162 fireChangeListener(); 1163 } 1164 } 1165 1166 // -------------------------------------------------------------------- 1167 1168 // XCloneable 1169 Reference< XCloneable > SAL_CALL AnimationNode::createClone() throw (RuntimeException) 1170 { 1171 Guard< Mutex > aGuard( maMutex ); 1172 1173 Reference< XCloneable > xNewNode; 1174 try 1175 { 1176 xNewNode = new AnimationNode( *this ); 1177 1178 if( maChilds.size() ) 1179 { 1180 Reference< XTimeContainer > xContainer( xNewNode, UNO_QUERY ); 1181 if( xContainer.is() ) 1182 { 1183 ChildList_t::iterator aIter( maChilds.begin() ); 1184 ChildList_t::iterator aEnd( maChilds.end() ); 1185 while( aIter != aEnd ) 1186 { 1187 Reference< XCloneable > xCloneable((*aIter++), UNO_QUERY ); 1188 if( xCloneable.is() ) try 1189 { 1190 Reference< XAnimationNode > xNewChildNode( xCloneable->createClone(), UNO_QUERY ); 1191 if( xNewChildNode.is() ) 1192 xContainer->appendChild( xNewChildNode ); 1193 } 1194 catch( Exception& e ) 1195 { 1196 (void)e; 1197 OSL_TRACE( "animations::AnimationNode::createClone(), exception caught!" ); 1198 } 1199 } 1200 } 1201 } 1202 } 1203 catch( Exception& e ) 1204 { 1205 (void)e; 1206 OSL_TRACE( "animations::AnimationNode::createClone(), exception caught!" ); 1207 } 1208 1209 return xNewNode; 1210 } 1211 1212 // -------------------------------------------------------------------- 1213 1214 // XAnimate 1215 Any SAL_CALL AnimationNode::getTarget() 1216 throw (RuntimeException) 1217 { 1218 Guard< Mutex > aGuard( maMutex ); 1219 return maTarget; 1220 } 1221 1222 // -------------------------------------------------------------------- 1223 1224 // XAnimate 1225 void SAL_CALL AnimationNode::setTarget( const Any& _target ) 1226 throw (RuntimeException) 1227 { 1228 Guard< Mutex > aGuard( maMutex ); 1229 if( _target != maTarget ) 1230 { 1231 maTarget= _target; 1232 fireChangeListener(); 1233 } 1234 } 1235 1236 // -------------------------------------------------------------------- 1237 1238 // XAnimate 1239 OUString SAL_CALL AnimationNode::getAttributeName() throw (RuntimeException) 1240 { 1241 Guard< Mutex > aGuard( maMutex ); 1242 return maAttributeName; 1243 } 1244 1245 // -------------------------------------------------------------------- 1246 1247 // XAnimate 1248 void SAL_CALL AnimationNode::setAttributeName( const OUString& _attribute ) 1249 throw (RuntimeException) 1250 { 1251 Guard< Mutex > aGuard( maMutex ); 1252 if( _attribute != maAttributeName ) 1253 { 1254 maAttributeName = _attribute; 1255 fireChangeListener(); 1256 } 1257 } 1258 1259 // -------------------------------------------------------------------- 1260 1261 // XAnimate 1262 Sequence< Any > SAL_CALL AnimationNode::getValues() 1263 throw (RuntimeException) 1264 { 1265 Guard< Mutex > aGuard( maMutex ); 1266 return maValues; 1267 } 1268 1269 // -------------------------------------------------------------------- 1270 1271 // XAnimate 1272 void SAL_CALL AnimationNode::setValues( const Sequence< Any >& _values ) 1273 throw (RuntimeException) 1274 { 1275 Guard< Mutex > aGuard( maMutex ); 1276 maValues = _values; 1277 fireChangeListener(); 1278 } 1279 1280 // -------------------------------------------------------------------- 1281 1282 // XAnimate 1283 sal_Int16 SAL_CALL AnimationNode::getSubItem() throw (RuntimeException) 1284 { 1285 Guard< Mutex > aGuard( maMutex ); 1286 return mnSubItem; 1287 } 1288 1289 // -------------------------------------------------------------------- 1290 1291 // XAnimate 1292 void SAL_CALL AnimationNode::setSubItem( sal_Int16 _subitem ) throw (RuntimeException) 1293 { 1294 Guard< Mutex > aGuard( maMutex ); 1295 if( _subitem != mnSubItem ) 1296 { 1297 mnSubItem = _subitem; 1298 fireChangeListener(); 1299 } 1300 } 1301 1302 // -------------------------------------------------------------------- 1303 1304 // XAnimate 1305 Sequence< double > SAL_CALL AnimationNode::getKeyTimes() throw (RuntimeException) 1306 { 1307 Guard< Mutex > aGuard( maMutex ); 1308 return maKeyTimes; 1309 } 1310 1311 // -------------------------------------------------------------------- 1312 1313 // XAnimate 1314 void SAL_CALL AnimationNode::setKeyTimes( const Sequence< double >& _keytimes ) throw (RuntimeException) 1315 { 1316 Guard< Mutex > aGuard( maMutex ); 1317 maKeyTimes = _keytimes; 1318 fireChangeListener(); 1319 } 1320 1321 // -------------------------------------------------------------------- 1322 1323 // XAnimate 1324 sal_Int16 SAL_CALL AnimationNode::getValueType() throw (RuntimeException) 1325 { 1326 Guard< Mutex > aGuard( maMutex ); 1327 return mnValueType; 1328 } 1329 1330 // -------------------------------------------------------------------- 1331 1332 void SAL_CALL AnimationNode::setValueType( sal_Int16 _valuetype ) throw (RuntimeException) 1333 { 1334 Guard< Mutex > aGuard( maMutex ); 1335 if( _valuetype != mnValueType ) 1336 { 1337 mnValueType = _valuetype; 1338 fireChangeListener(); 1339 } 1340 } 1341 1342 // -------------------------------------------------------------------- 1343 1344 // XAnimate 1345 sal_Int16 SAL_CALL AnimationNode::getCalcMode() 1346 throw (RuntimeException) 1347 { 1348 Guard< Mutex > aGuard( maMutex ); 1349 return mnCalcMode; 1350 } 1351 1352 // -------------------------------------------------------------------- 1353 1354 // XAnimate 1355 void SAL_CALL AnimationNode::setCalcMode( sal_Int16 _calcmode ) 1356 throw (RuntimeException) 1357 { 1358 Guard< Mutex > aGuard( maMutex ); 1359 if( _calcmode != mnCalcMode ) 1360 { 1361 mnCalcMode = _calcmode; 1362 fireChangeListener(); 1363 } 1364 } 1365 1366 // -------------------------------------------------------------------- 1367 1368 // XAnimate 1369 sal_Bool SAL_CALL AnimationNode::getAccumulate() 1370 throw (RuntimeException) 1371 { 1372 Guard< Mutex > aGuard( maMutex ); 1373 return mbAccumulate; 1374 } 1375 1376 // -------------------------------------------------------------------- 1377 1378 // XAnimate 1379 void SAL_CALL AnimationNode::setAccumulate( sal_Bool _accumulate ) 1380 throw (RuntimeException) 1381 { 1382 Guard< Mutex > aGuard( maMutex ); 1383 if( _accumulate != mbAccumulate ) 1384 { 1385 mbAccumulate = _accumulate; 1386 fireChangeListener(); 1387 } 1388 } 1389 1390 // -------------------------------------------------------------------- 1391 1392 // XAnimate 1393 sal_Int16 SAL_CALL AnimationNode::getAdditive() 1394 throw (RuntimeException) 1395 { 1396 Guard< Mutex > aGuard( maMutex ); 1397 return mnAdditive; 1398 } 1399 1400 // -------------------------------------------------------------------- 1401 1402 // XAnimate 1403 void SAL_CALL AnimationNode::setAdditive( sal_Int16 _additive ) 1404 throw (RuntimeException) 1405 { 1406 Guard< Mutex > aGuard( maMutex ); 1407 if( _additive != mnAdditive ) 1408 { 1409 mnAdditive = _additive; 1410 fireChangeListener(); 1411 } 1412 } 1413 1414 // -------------------------------------------------------------------- 1415 1416 // XAnimate 1417 Any SAL_CALL AnimationNode::getFrom() 1418 throw (RuntimeException) 1419 { 1420 Guard< Mutex > aGuard( maMutex ); 1421 return maFrom; 1422 } 1423 1424 // -------------------------------------------------------------------- 1425 1426 // XAnimate 1427 void SAL_CALL AnimationNode::setFrom( const Any& _from ) 1428 throw (RuntimeException) 1429 { 1430 Guard< Mutex > aGuard( maMutex ); 1431 if( _from != maFrom ) 1432 { 1433 maFrom = _from; 1434 fireChangeListener(); 1435 } 1436 } 1437 1438 // -------------------------------------------------------------------- 1439 1440 // XAnimate 1441 Any SAL_CALL AnimationNode::getTo() 1442 throw (RuntimeException) 1443 { 1444 Guard< Mutex > aGuard( maMutex ); 1445 return maTo; 1446 } 1447 1448 // -------------------------------------------------------------------- 1449 1450 // XAnimate 1451 void SAL_CALL AnimationNode::setTo( const Any& _to ) 1452 throw (RuntimeException) 1453 { 1454 Guard< Mutex > aGuard( maMutex ); 1455 if( _to != maTo ) 1456 { 1457 maTo = _to; 1458 fireChangeListener(); 1459 } 1460 } 1461 1462 // -------------------------------------------------------------------- 1463 1464 // XAnimate 1465 Any SAL_CALL AnimationNode::getBy() 1466 throw (RuntimeException) 1467 { 1468 Guard< Mutex > aGuard( maMutex ); 1469 return maBy; 1470 } 1471 1472 // -------------------------------------------------------------------- 1473 1474 // XAnimate 1475 void SAL_CALL AnimationNode::setBy( const Any& _by ) 1476 throw (RuntimeException) 1477 { 1478 Guard< Mutex > aGuard( maMutex ); 1479 if( _by != maBy ) 1480 { 1481 maBy = _by; 1482 fireChangeListener(); 1483 } 1484 } 1485 1486 // -------------------------------------------------------------------- 1487 1488 // XAnimate 1489 Sequence< TimeFilterPair > SAL_CALL AnimationNode::getTimeFilter() 1490 throw (RuntimeException) 1491 { 1492 Guard< Mutex > aGuard( maMutex ); 1493 return maTimeFilter; 1494 } 1495 1496 // -------------------------------------------------------------------- 1497 1498 // XAnimate 1499 void SAL_CALL AnimationNode::setTimeFilter( const Sequence< TimeFilterPair >& _timefilter ) 1500 throw (RuntimeException) 1501 { 1502 Guard< Mutex > aGuard( maMutex ); 1503 maTimeFilter = _timefilter; 1504 fireChangeListener(); 1505 } 1506 1507 // -------------------------------------------------------------------- 1508 1509 OUString SAL_CALL AnimationNode::getFormula() throw (RuntimeException) 1510 { 1511 Guard< Mutex > aGuard( maMutex ); 1512 return maFormula; 1513 } 1514 1515 // -------------------------------------------------------------------- 1516 1517 void SAL_CALL AnimationNode::setFormula( const OUString& _formula ) throw (RuntimeException) 1518 { 1519 Guard< Mutex > aGuard( maMutex ); 1520 if( _formula != maFormula ) 1521 { 1522 maFormula = _formula; 1523 fireChangeListener(); 1524 } 1525 } 1526 1527 // -------------------------------------------------------------------- 1528 1529 // XAnimateColor 1530 sal_Int16 SAL_CALL AnimationNode::getColorInterpolation() throw (RuntimeException) 1531 { 1532 Guard< Mutex > aGuard( maMutex ); 1533 return mnColorSpace; 1534 } 1535 1536 // -------------------------------------------------------------------- 1537 1538 // XAnimateColor 1539 void SAL_CALL AnimationNode::setColorInterpolation( sal_Int16 _colorspace ) throw (RuntimeException) 1540 { 1541 Guard< Mutex > aGuard( maMutex ); 1542 if( _colorspace != mnColorSpace ) 1543 { 1544 mnColorSpace = _colorspace; 1545 fireChangeListener(); 1546 } 1547 } 1548 1549 // -------------------------------------------------------------------- 1550 1551 // XAnimateColor 1552 sal_Bool SAL_CALL AnimationNode::getDirection() throw (RuntimeException) 1553 { 1554 Guard< Mutex > aGuard( maMutex ); 1555 return mbDirection; 1556 } 1557 1558 // -------------------------------------------------------------------- 1559 1560 // XAnimateColor 1561 void SAL_CALL AnimationNode::setDirection( sal_Bool _direction ) throw (RuntimeException) 1562 { 1563 Guard< Mutex > aGuard( maMutex ); 1564 if( _direction != mbDirection ) 1565 { 1566 mbDirection = _direction; 1567 fireChangeListener(); 1568 } 1569 } 1570 1571 // -------------------------------------------------------------------- 1572 1573 // XAnimateMotion 1574 Any SAL_CALL AnimationNode::getPath() throw (RuntimeException) 1575 { 1576 Guard< Mutex > aGuard( maMutex ); 1577 return maPath; 1578 } 1579 1580 // -------------------------------------------------------------------- 1581 1582 // XAnimateMotion 1583 void SAL_CALL AnimationNode::setPath( const Any& _path ) throw (RuntimeException) 1584 { 1585 Guard< Mutex > aGuard( maMutex ); 1586 maPath = _path; 1587 fireChangeListener(); 1588 } 1589 1590 // -------------------------------------------------------------------- 1591 1592 // XAnimateMotion 1593 Any SAL_CALL AnimationNode::getOrigin() throw (RuntimeException) 1594 { 1595 Guard< Mutex > aGuard( maMutex ); 1596 return maOrigin; 1597 } 1598 1599 // -------------------------------------------------------------------- 1600 1601 // XAnimateMotion 1602 void SAL_CALL AnimationNode::setOrigin( const Any& _origin ) throw (RuntimeException) 1603 { 1604 Guard< Mutex > aGuard( maMutex ); 1605 maOrigin = _origin; 1606 fireChangeListener(); 1607 } 1608 1609 // -------------------------------------------------------------------- 1610 1611 // XAnimateTransform 1612 sal_Int16 SAL_CALL AnimationNode::getTransformType() throw (RuntimeException) 1613 { 1614 Guard< Mutex > aGuard( maMutex ); 1615 return mnTransformType; 1616 } 1617 1618 // -------------------------------------------------------------------- 1619 1620 // XAnimateTransform 1621 void SAL_CALL AnimationNode::setTransformType( sal_Int16 _transformtype ) throw (RuntimeException) 1622 { 1623 Guard< Mutex > aGuard( maMutex ); 1624 if( _transformtype != mnTransformType ) 1625 { 1626 mnTransformType = _transformtype; 1627 fireChangeListener(); 1628 } 1629 } 1630 1631 // -------------------------------------------------------------------- 1632 1633 // XTransitionFilter 1634 sal_Int16 SAL_CALL AnimationNode::getTransition() throw (RuntimeException) 1635 { 1636 Guard< Mutex > aGuard( maMutex ); 1637 return mnTransition; 1638 } 1639 1640 // -------------------------------------------------------------------- 1641 1642 // XTransitionFilter 1643 void SAL_CALL AnimationNode::setTransition( sal_Int16 _transition ) throw (RuntimeException) 1644 { 1645 Guard< Mutex > aGuard( maMutex ); 1646 if( _transition != mnTransition ) 1647 { 1648 mnTransition = _transition; 1649 fireChangeListener(); 1650 } 1651 } 1652 1653 // -------------------------------------------------------------------- 1654 1655 // XTransitionFilter 1656 sal_Int16 SAL_CALL AnimationNode::getSubtype() throw (RuntimeException) 1657 { 1658 Guard< Mutex > aGuard( maMutex ); 1659 return mnSubtype; 1660 } 1661 1662 // -------------------------------------------------------------------- 1663 1664 // XTransitionFilter 1665 void SAL_CALL AnimationNode::setSubtype( sal_Int16 _subtype ) throw (RuntimeException) 1666 { 1667 Guard< Mutex > aGuard( maMutex ); 1668 if( _subtype != mnSubtype ) 1669 { 1670 mnSubtype = _subtype; 1671 fireChangeListener(); 1672 } 1673 } 1674 1675 // -------------------------------------------------------------------- 1676 1677 // XTransitionFilter 1678 sal_Bool SAL_CALL AnimationNode::getMode() throw (RuntimeException) 1679 { 1680 Guard< Mutex > aGuard( maMutex ); 1681 return mbMode; 1682 } 1683 1684 // -------------------------------------------------------------------- 1685 1686 // XTransitionFilter 1687 void SAL_CALL AnimationNode::setMode( sal_Bool _mode ) throw (RuntimeException) 1688 { 1689 Guard< Mutex > aGuard( maMutex ); 1690 if( _mode != mbMode ) 1691 { 1692 mbMode = _mode; 1693 fireChangeListener(); 1694 } 1695 } 1696 1697 // -------------------------------------------------------------------- 1698 1699 // XTransitionFilter 1700 sal_Int32 SAL_CALL AnimationNode::getFadeColor() throw (RuntimeException) 1701 { 1702 Guard< Mutex > aGuard( maMutex ); 1703 return mnFadeColor; 1704 } 1705 1706 // -------------------------------------------------------------------- 1707 1708 // XTransitionFilter 1709 void SAL_CALL AnimationNode::setFadeColor( sal_Int32 _fadecolor ) throw (RuntimeException) 1710 { 1711 Guard< Mutex > aGuard( maMutex ); 1712 if( _fadecolor != mnFadeColor ) 1713 { 1714 mnFadeColor = _fadecolor; 1715 fireChangeListener(); 1716 } 1717 } 1718 1719 // -------------------------------------------------------------------- 1720 1721 // XAudio 1722 Any SAL_CALL AnimationNode::getSource() throw (RuntimeException) 1723 { 1724 Guard< Mutex > aGuard( maMutex ); 1725 return maTarget; 1726 } 1727 1728 // -------------------------------------------------------------------- 1729 1730 // XAudio 1731 void SAL_CALL AnimationNode::setSource( const Any& _source ) throw (RuntimeException) 1732 { 1733 Guard< Mutex > aGuard( maMutex ); 1734 maTarget = _source; 1735 fireChangeListener(); 1736 } 1737 1738 // -------------------------------------------------------------------- 1739 1740 // XAudio 1741 double SAL_CALL AnimationNode::getVolume() throw (RuntimeException) 1742 { 1743 Guard< Mutex > aGuard( maMutex ); 1744 return mfVolume; 1745 } 1746 1747 // -------------------------------------------------------------------- 1748 1749 // XAudio 1750 void SAL_CALL AnimationNode::setVolume( double _volume ) throw (RuntimeException) 1751 { 1752 Guard< Mutex > aGuard( maMutex ); 1753 if( _volume != mfVolume ) 1754 { 1755 mfVolume = _volume; 1756 fireChangeListener(); 1757 } 1758 } 1759 1760 // -------------------------------------------------------------------- 1761 1762 // XCommand 1763 sal_Int16 SAL_CALL AnimationNode::getCommand() throw (RuntimeException) 1764 { 1765 Guard< Mutex > aGuard( maMutex ); 1766 return mnCommand; 1767 } 1768 1769 // -------------------------------------------------------------------- 1770 1771 // XCommand 1772 void SAL_CALL AnimationNode::setCommand( sal_Int16 _command ) throw (RuntimeException) 1773 { 1774 Guard< Mutex > aGuard( maMutex ); 1775 if( _command != mnCommand ) 1776 { 1777 mnCommand = _command; 1778 fireChangeListener(); 1779 } 1780 } 1781 1782 // -------------------------------------------------------------------- 1783 1784 // XCommand 1785 Any SAL_CALL AnimationNode::getParameter() throw (RuntimeException) 1786 { 1787 Guard< Mutex > aGuard( maMutex ); 1788 return maParameter; 1789 } 1790 1791 // -------------------------------------------------------------------- 1792 1793 // XCommand 1794 void SAL_CALL AnimationNode::setParameter( const Any& _parameter ) throw (RuntimeException) 1795 { 1796 Guard< Mutex > aGuard( maMutex ); 1797 maParameter = _parameter; 1798 fireChangeListener(); 1799 } 1800 1801 // -------------------------------------------------------------------- 1802 1803 // XElementAccess 1804 Type SAL_CALL AnimationNode::getElementType() throw (RuntimeException) 1805 { 1806 return ::getCppuType((const Reference< XAnimationNode >*)0); 1807 } 1808 1809 // -------------------------------------------------------------------- 1810 1811 // XElementAccess 1812 sal_Bool SAL_CALL AnimationNode::hasElements() throw (RuntimeException) 1813 { 1814 Guard< Mutex > aGuard( maMutex ); 1815 return !maChilds.empty(); 1816 } 1817 1818 // -------------------------------------------------------------------- 1819 1820 // XEnumerationAccess 1821 Reference< XEnumeration > SAL_CALL AnimationNode::createEnumeration() 1822 throw (RuntimeException) 1823 { 1824 Guard< Mutex > aGuard( maMutex ); 1825 1826 return new TimeContainerEnumeration( maChilds); 1827 } 1828 1829 // -------------------------------------------------------------------- 1830 1831 1832 // XTimeContainer 1833 Reference< XAnimationNode > SAL_CALL AnimationNode::insertBefore( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& refChild ) 1834 throw (IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException) 1835 { 1836 Guard< Mutex > aGuard( maMutex ); 1837 1838 if( !newChild.is() || !refChild.is() ) 1839 throw IllegalArgumentException(); 1840 1841 ChildList_t::iterator before = ::std::find(maChilds.begin(), maChilds.end(), refChild); 1842 if( before == maChilds.end() ) 1843 throw NoSuchElementException(); 1844 1845 if( ::std::find(maChilds.begin(), maChilds.end(), newChild) != maChilds.end() ) 1846 throw ElementExistException(); 1847 1848 maChilds.insert( before, newChild ); 1849 1850 Reference< XInterface > xThis( static_cast< OWeakObject * >(this) ); 1851 newChild->setParent( xThis ); 1852 1853 return newChild; 1854 } 1855 1856 // -------------------------------------------------------------------- 1857 1858 // XTimeContainer 1859 Reference< XAnimationNode > SAL_CALL AnimationNode::insertAfter( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& refChild ) 1860 throw (IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException) 1861 { 1862 Guard< Mutex > aGuard( maMutex ); 1863 1864 if( !newChild.is() || !refChild.is() ) 1865 throw IllegalArgumentException(); 1866 1867 ChildList_t::iterator before = ::std::find(maChilds.begin(), maChilds.end(), refChild); 1868 if( before == maChilds.end() ) 1869 throw NoSuchElementException(); 1870 1871 if( ::std::find(maChilds.begin(), maChilds.end(), newChild) != maChilds.end() ) 1872 throw ElementExistException(); 1873 1874 before++; 1875 if( before != maChilds.end() ) 1876 maChilds.insert( before, newChild ); 1877 else 1878 maChilds.push_back( newChild ); 1879 1880 Reference< XInterface > xThis( static_cast< OWeakObject * >(this) ); 1881 newChild->setParent( xThis ); 1882 1883 return newChild; 1884 } 1885 1886 // -------------------------------------------------------------------- 1887 1888 // XTimeContainer 1889 Reference< XAnimationNode > SAL_CALL AnimationNode::replaceChild( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& oldChild ) 1890 throw( IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException) 1891 { 1892 Guard< Mutex > aGuard( maMutex ); 1893 1894 if( !newChild.is() || !oldChild.is() ) 1895 throw IllegalArgumentException(); 1896 1897 ChildList_t::iterator replace = ::std::find(maChilds.begin(), maChilds.end(), oldChild); 1898 if( replace == maChilds.end() ) 1899 throw NoSuchElementException(); 1900 1901 if( ::std::find(maChilds.begin(), maChilds.end(), newChild) != maChilds.end() ) 1902 throw ElementExistException(); 1903 1904 Reference< XInterface > xNull( 0 ); 1905 oldChild->setParent( xNull ); 1906 1907 (*replace) = newChild; 1908 1909 Reference< XInterface > xThis( static_cast< OWeakObject * >(this) ); 1910 newChild->setParent( xThis ); 1911 1912 return newChild; 1913 } 1914 1915 // -------------------------------------------------------------------- 1916 1917 // XTimeContainer 1918 Reference< XAnimationNode > SAL_CALL AnimationNode::removeChild( const Reference< XAnimationNode >& oldChild ) 1919 throw(IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException) 1920 { 1921 Guard< Mutex > aGuard( maMutex ); 1922 1923 if( !oldChild.is() ) 1924 throw IllegalArgumentException(); 1925 1926 ChildList_t::iterator old = ::std::find(maChilds.begin(), maChilds.end(), oldChild); 1927 if( old == maChilds.end() ) 1928 throw NoSuchElementException(); 1929 1930 Reference< XInterface > xNull( 0 ); 1931 oldChild->setParent( xNull ); 1932 1933 maChilds.erase( old ); 1934 1935 return oldChild; 1936 } 1937 1938 // -------------------------------------------------------------------- 1939 1940 // XTimeContainer 1941 Reference< XAnimationNode > SAL_CALL AnimationNode::appendChild( const Reference< XAnimationNode >& newChild ) 1942 throw(IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException) 1943 { 1944 Guard< Mutex > aGuard( maMutex ); 1945 1946 if( !newChild.is() ) 1947 throw IllegalArgumentException(); 1948 1949 if( ::std::find(maChilds.begin(), maChilds.end(), newChild) != maChilds.end() ) 1950 throw ElementExistException(); 1951 1952 Reference< XInterface > xThis( static_cast< OWeakObject * >(this) ); 1953 Reference< XInterface > xChild( newChild ); 1954 1955 if( xThis == xChild ) 1956 throw IllegalArgumentException(); 1957 1958 maChilds.push_back( newChild ); 1959 1960 newChild->setParent( xThis ); 1961 1962 return newChild; 1963 } 1964 1965 // -------------------------------------------------------------------- 1966 1967 // XIterateContainer 1968 sal_Int16 SAL_CALL AnimationNode::getIterateType() throw (RuntimeException) 1969 { 1970 Guard< Mutex > aGuard( maMutex ); 1971 return mnIterateType; 1972 } 1973 1974 // -------------------------------------------------------------------- 1975 1976 // XIterateContainer 1977 void SAL_CALL AnimationNode::setIterateType( sal_Int16 _iteratetype ) throw (RuntimeException) 1978 { 1979 Guard< Mutex > aGuard( maMutex ); 1980 if( _iteratetype != mnIterateType ) 1981 { 1982 mnIterateType = _iteratetype; 1983 fireChangeListener(); 1984 } 1985 } 1986 1987 // -------------------------------------------------------------------- 1988 1989 // XIterateContainer 1990 double SAL_CALL AnimationNode::getIterateInterval() throw (RuntimeException) 1991 { 1992 Guard< Mutex > aGuard( maMutex ); 1993 return mfIterateInterval; 1994 } 1995 1996 // -------------------------------------------------------------------- 1997 1998 // XIterateContainer 1999 void SAL_CALL AnimationNode::setIterateInterval( double _iterateinterval ) throw (RuntimeException) 2000 { 2001 Guard< Mutex > aGuard( maMutex ); 2002 if( _iterateinterval != mfIterateInterval ) 2003 { 2004 mfIterateInterval = _iterateinterval; 2005 fireChangeListener(); 2006 } 2007 } 2008 2009 // -------------------------------------------------------------------- 2010 2011 // XChangesNotifier 2012 void SAL_CALL AnimationNode::addChangesListener( const Reference< XChangesListener >& aListener ) throw (RuntimeException) 2013 { 2014 maChangeListener.addInterface( aListener ); 2015 } 2016 2017 // -------------------------------------------------------------------- 2018 2019 // XChangesNotifier 2020 void SAL_CALL AnimationNode::removeChangesListener( const Reference< XChangesListener >& aListener ) throw (RuntimeException) 2021 { 2022 maChangeListener.removeInterface(aListener); 2023 } 2024 2025 // -------------------------------------------------------------------- 2026 2027 // XUnoTunnel 2028 ::sal_Int64 SAL_CALL AnimationNode::getSomething( const Sequence< ::sal_Int8 >& rId ) throw (RuntimeException) 2029 { 2030 if( rId.getLength() == 16 && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), rId.getConstArray(), 16 ) ) 2031 { 2032 return sal::static_int_cast< sal_Int64 >(reinterpret_cast< sal_IntPtr >(this)); 2033 2034 } 2035 else 2036 { 2037 return 0; 2038 } 2039 } 2040 2041 // -------------------------------------------------------------------- 2042 2043 const ::com::sun::star::uno::Sequence< sal_Int8 > & AnimationNode::getUnoTunnelId() 2044 { 2045 static ::com::sun::star::uno::Sequence< sal_Int8 > * pSeq = 0; 2046 if( !pSeq ) 2047 { 2048 ::osl::Guard< ::osl::Mutex > aGuard( ::osl::Mutex::getGlobalMutex() ); 2049 if( !pSeq ) 2050 { 2051 static ::com::sun::star::uno::Sequence< sal_Int8 > aSeq( 16 ); 2052 rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); 2053 pSeq = &aSeq; 2054 } 2055 } 2056 return *pSeq; 2057 } 2058 2059 // -------------------------------------------------------------------- 2060 2061 void AnimationNode::fireChangeListener() 2062 { 2063 Guard< Mutex > aGuard( maMutex ); 2064 2065 OInterfaceIteratorHelper aIterator( maChangeListener ); 2066 if( aIterator.hasMoreElements() ) 2067 { 2068 Reference< XInterface > xSource( static_cast<OWeakObject*>(this), UNO_QUERY ); 2069 Sequence< ElementChange > aChanges; 2070 const ChangesEvent aEvent( xSource, makeAny( mxParent ), aChanges ); 2071 while( aIterator.hasMoreElements() ) 2072 { 2073 Reference< XChangesListener > xListener( aIterator.next(), UNO_QUERY ); 2074 if( xListener.is() ) 2075 xListener->changesOccurred( aEvent ); 2076 } 2077 } 2078 2079 if( mpParent ) 2080 mpParent->fireChangeListener(); 2081 } 2082 2083 // -------------------------------------------------------------------- 2084 2085 } // namespace animcore 2086