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 25 // MARKER(update_precomp.py): autogen include statement, do not remove 26 #include "precompiled_sd.hxx" 27 #include <com/sun/star/animations/XTimeContainer.hpp> 28 #include <com/sun/star/presentation/ParagraphTarget.hpp> 29 #include <com/sun/star/animations/AnimationFill.hpp> 30 #include <com/sun/star/animations/XAnimate.hpp> 31 #include <com/sun/star/animations/AnimationRestart.hpp> 32 #include <com/sun/star/lang/XServiceInfo.hpp> 33 #include <com/sun/star/lang/XInitialization.hpp> 34 #include <com/sun/star/container/XEnumerationAccess.hpp> 35 #include <com/sun/star/util/XCloneable.hpp> 36 #include <comphelper/processfactory.hxx> 37 38 #include <cppuhelper/implbase5.hxx> 39 #include <osl/mutex.hxx> 40 #include "CustomAnimationPreset.hxx" 41 42 using ::osl::Mutex; 43 using ::osl::Guard; 44 using ::rtl::OUString; 45 46 using ::com::sun::star::uno::Reference; 47 using ::com::sun::star::uno::RuntimeException; 48 using ::com::sun::star::uno::Exception; 49 using ::com::sun::star::uno::Sequence; 50 using ::com::sun::star::uno::Any; 51 using ::com::sun::star::uno::UNO_QUERY; 52 using ::com::sun::star::uno::XInterface; 53 using ::com::sun::star::lang::NoSupportException; 54 using ::com::sun::star::beans::NamedValue; 55 using ::com::sun::star::lang::IllegalArgumentException; 56 using ::com::sun::star::container::NoSuchElementException; 57 using ::com::sun::star::container::ElementExistException; 58 using ::com::sun::star::lang::WrappedTargetException; 59 using ::com::sun::star::container::XEnumeration; 60 using ::com::sun::star::container::XEnumerationAccess; 61 using ::com::sun::star::util::XCloneable; 62 using ::com::sun::star::lang::XServiceInfo; 63 using ::com::sun::star::lang::XInitialization; 64 using ::com::sun::star::uno::Type; 65 using ::com::sun::star::uno::XWeak; 66 using ::com::sun::star::lang::XMultiServiceFactory; 67 using ::com::sun::star::presentation::ParagraphTarget; 68 using ::com::sun::star::drawing::XShape; 69 70 using namespace ::com::sun::star::animations; 71 namespace sd 72 { 73 74 typedef ::cppu::WeakImplHelper5< XTimeContainer, XEnumerationAccess, XCloneable, XServiceInfo, XInitialization > RandomAnimationNodeBase; 75 class RandomAnimationNode : public RandomAnimationNodeBase 76 { 77 public: 78 RandomAnimationNode( const RandomAnimationNode& rNode ); 79 RandomAnimationNode( sal_Int16 nPresetClass ); 80 RandomAnimationNode(); 81 82 void init( sal_Int16 nPresetClass ); 83 84 // XInitialization 85 void SAL_CALL initialize( const Sequence< Any >& aArguments ) throw (Exception, RuntimeException); 86 87 // XChild 88 Reference< XInterface > SAL_CALL getParent( ) throw (RuntimeException); 89 void SAL_CALL setParent( const Reference< XInterface >& Parent ) throw (NoSupportException, RuntimeException); 90 91 // XCloneable 92 virtual Reference< XCloneable > SAL_CALL createClone() throw (RuntimeException); 93 94 // XServiceInfo 95 OUString SAL_CALL getImplementationName() throw(); 96 Sequence< OUString > SAL_CALL getSupportedServiceNames(void) throw(); 97 sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw(); 98 99 // XAnimationNode 100 ::sal_Int16 SAL_CALL getType() throw (RuntimeException); 101 Any SAL_CALL getBegin() throw (RuntimeException); 102 void SAL_CALL setBegin( const Any& _begin ) throw (RuntimeException); 103 Any SAL_CALL getDuration() throw (RuntimeException); 104 void SAL_CALL setDuration( const Any& _duration ) throw (RuntimeException); 105 Any SAL_CALL getEnd() throw (RuntimeException); 106 void SAL_CALL setEnd( const Any& _end ) throw (RuntimeException); 107 Any SAL_CALL getEndSync() throw (RuntimeException); 108 void SAL_CALL setEndSync( const Any& _endsync ) throw (RuntimeException); 109 Any SAL_CALL getRepeatCount() throw (RuntimeException); 110 void SAL_CALL setRepeatCount( const Any& _repeatcount ) throw (RuntimeException); 111 Any SAL_CALL getRepeatDuration() throw (RuntimeException); 112 void SAL_CALL setRepeatDuration( const Any& _repeatduration ) throw (RuntimeException); 113 ::sal_Int16 SAL_CALL getFill() throw (RuntimeException); 114 void SAL_CALL setFill( ::sal_Int16 _fill ) throw (RuntimeException); 115 ::sal_Int16 SAL_CALL getFillDefault() throw (RuntimeException); 116 void SAL_CALL setFillDefault( ::sal_Int16 _filldefault ) throw (RuntimeException); 117 ::sal_Int16 SAL_CALL getRestart() throw (RuntimeException); 118 void SAL_CALL setRestart( ::sal_Int16 _restart ) throw (RuntimeException); 119 ::sal_Int16 SAL_CALL getRestartDefault() throw (RuntimeException); 120 void SAL_CALL setRestartDefault( ::sal_Int16 _restartdefault ) throw (RuntimeException); 121 double SAL_CALL getAcceleration() throw (RuntimeException); 122 void SAL_CALL setAcceleration( double _acceleration ) throw (RuntimeException); 123 double SAL_CALL getDecelerate() throw (RuntimeException); 124 void SAL_CALL setDecelerate( double _decelerate ) throw (RuntimeException); 125 ::sal_Bool SAL_CALL getAutoReverse() throw (RuntimeException); 126 void SAL_CALL setAutoReverse( ::sal_Bool _autoreverse ) throw (RuntimeException); 127 Sequence< NamedValue > SAL_CALL getUserData() throw (RuntimeException); 128 void SAL_CALL setUserData( const Sequence< NamedValue >& _userdata ) throw (RuntimeException); 129 130 // XElementAccess 131 virtual Type SAL_CALL getElementType() throw (RuntimeException); 132 virtual sal_Bool SAL_CALL hasElements() throw (RuntimeException); 133 134 // XEnumerationAccess 135 virtual Reference< XEnumeration > SAL_CALL createEnumeration() throw (RuntimeException); 136 137 // XTimeContainer 138 Reference< XAnimationNode > SAL_CALL insertBefore( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& refChild ) throw (IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException); 139 Reference< XAnimationNode > SAL_CALL insertAfter( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& refChild ) throw (IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException); 140 Reference< XAnimationNode > SAL_CALL replaceChild( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& oldChild ) throw (IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException); 141 Reference< XAnimationNode > SAL_CALL removeChild( const Reference< XAnimationNode >& oldChild ) throw (IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException); 142 Reference< XAnimationNode > SAL_CALL appendChild( const Reference< XAnimationNode >& newChild ) throw (IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException); 143 144 private: 145 // our first, last and only protection from mutli-threads! 146 Mutex maMutex; 147 148 sal_Int16 mnPresetClass; 149 Reference< XInterface > mxParent; 150 151 Any maBegin, maDuration, maEnd, maEndSync, maRepeatCount, maRepeatDuration, maTarget; 152 sal_Int16 mnFill, mnFillDefault, mnRestart, mnRestartDefault; 153 double mfAcceleration, mfDecelerate; 154 sal_Bool mbAutoReverse; 155 Sequence< NamedValue > maUserData; 156 157 Reference< XAnimate > mxFirstNode; 158 }; 159 160 // -------------------------------------------------------------------- 161 162 static const sal_Char* pSN1 = "com.sun.star.animations.ParallelTimeContainer"; 163 static const sal_Char* pSN2 = "com.sun.star.comp.sd.RandomAnimationNode"; 164 165 // -------------------------------------------------------------------- 166 167 SD_DLLPUBLIC Reference< XInterface > RandomAnimationNode_createInstance( sal_Int16 nPresetClass ) 168 { 169 Reference< XInterface > xInt( static_cast<XWeak*>( new RandomAnimationNode( nPresetClass ) ) ); 170 return xInt; 171 } 172 173 // -------------------------------------------------------------------- 174 175 Reference< XInterface > SAL_CALL RandomNode_createInstance( const Reference< XMultiServiceFactory > & ) 176 { 177 Reference< XInterface > xInt( static_cast<XWeak*>( new RandomAnimationNode() ) ); 178 return xInt; 179 } 180 181 // -------------------------------------------------------------------- 182 183 OUString RandomNode__getImplementationName() throw( RuntimeException ) 184 { 185 return OUString( RTL_CONSTASCII_USTRINGPARAM( "sd::RandomAnimationNode" ) ); 186 } 187 188 // -------------------------------------------------------------------- 189 190 Sequence< OUString > SAL_CALL RandomNode_getSupportedServiceNames() throw( RuntimeException ) 191 { 192 // static const OUString aSN1( OUString::createFromAscii( pSN1 ) ); 193 static const OUString aSN2( OUString::createFromAscii( pSN2 ) ); 194 Sequence< OUString > aSeq( &aSN2, 1 ); 195 // aSeq[0] = aSN1; 196 /// aSeq[1] = aSN2; 197 return aSeq; 198 } 199 200 // -------------------------------------------------------------------- 201 202 RandomAnimationNode::RandomAnimationNode( const RandomAnimationNode& rNode ) 203 : RandomAnimationNodeBase(), 204 mnPresetClass( rNode.mnPresetClass ), 205 maBegin( rNode.maBegin ), 206 maDuration( rNode.maDuration ), 207 maEnd( rNode.maEnd ), 208 maEndSync( rNode.maEndSync ), 209 maRepeatCount( rNode.maRepeatCount ), 210 maRepeatDuration( rNode.maRepeatDuration ), 211 maTarget( rNode.maTarget ), 212 mnFill( rNode.mnFill ), 213 mnFillDefault( rNode.mnFillDefault ), 214 mnRestart( rNode.mnRestart ), 215 mnRestartDefault( rNode.mnRestartDefault ), 216 mfAcceleration( rNode.mfAcceleration ), 217 mfDecelerate( rNode.mfDecelerate ), 218 mbAutoReverse( rNode.mbAutoReverse ), 219 maUserData( rNode.maUserData ) 220 { 221 } 222 223 // -------------------------------------------------------------------- 224 225 RandomAnimationNode::RandomAnimationNode( sal_Int16 nPresetClass ) 226 { 227 init( nPresetClass ); 228 } 229 230 RandomAnimationNode::RandomAnimationNode() 231 { 232 init( 1 ); 233 } 234 235 void RandomAnimationNode::init( sal_Int16 nPresetClass ) 236 { 237 mnPresetClass = nPresetClass; 238 mnFill = AnimationFill::DEFAULT; 239 mnFillDefault = AnimationFill::INHERIT; 240 mnRestart = AnimationRestart::DEFAULT; 241 mnRestartDefault = AnimationRestart::INHERIT; 242 mfAcceleration = 0.0; 243 mfDecelerate = 0.0; 244 mbAutoReverse = sal_False; 245 } 246 247 // -------------------------------------------------------------------- 248 249 // XInitialization 250 void SAL_CALL RandomAnimationNode::initialize( const Sequence< Any >& aArguments ) throw (Exception, RuntimeException) 251 { 252 if( aArguments.getLength() != 1 ) 253 throw IllegalArgumentException(); 254 255 if( aArguments[0].getValueType() == ::getCppuType((const sal_Int16*)0) ) 256 { 257 aArguments[0] >>= mnPresetClass; 258 } 259 else if( aArguments[0].getValueType() != ::getCppuType((const ParagraphTarget*)0) ) 260 { 261 Reference< XShape > xShape; 262 aArguments[0] >>= xShape; 263 if( !xShape.is() ) 264 throw IllegalArgumentException(); 265 } 266 maTarget = aArguments[0]; 267 } 268 269 // -------------------------------------------------------------------- 270 271 // XAnimationNode 272 sal_Int16 SAL_CALL RandomAnimationNode::getType() throw (RuntimeException) 273 { 274 Guard< Mutex > aGuard( maMutex ); 275 return ::com::sun::star::animations::AnimationNodeType::PAR; 276 } 277 278 // -------------------------------------------------------------------- 279 280 // XAnimationNode 281 Any SAL_CALL RandomAnimationNode::getBegin() throw (RuntimeException) 282 { 283 Guard< Mutex > aGuard( maMutex ); 284 return maBegin; 285 } 286 287 // -------------------------------------------------------------------- 288 289 // XAnimationNode 290 void SAL_CALL RandomAnimationNode::setBegin( const Any& _begin ) throw (RuntimeException) 291 { 292 Guard< Mutex > aGuard( maMutex ); 293 maBegin = _begin; 294 } 295 296 // -------------------------------------------------------------------- 297 298 // XAnimationNode 299 Any SAL_CALL RandomAnimationNode::getDuration() throw (RuntimeException) 300 { 301 Guard< Mutex > aGuard( maMutex ); 302 return maDuration; 303 } 304 305 // -------------------------------------------------------------------- 306 307 // XAnimationNode 308 void SAL_CALL RandomAnimationNode::setDuration( const Any& _duration ) throw (RuntimeException) 309 { 310 Guard< Mutex > aGuard( maMutex ); 311 maDuration = _duration; 312 } 313 314 // -------------------------------------------------------------------- 315 316 // XAnimationNode 317 Any SAL_CALL RandomAnimationNode::getEnd() throw (RuntimeException) 318 { 319 Guard< Mutex > aGuard( maMutex ); 320 return maEnd; 321 } 322 323 // -------------------------------------------------------------------- 324 325 // XAnimationNode 326 void SAL_CALL RandomAnimationNode::setEnd( const Any& _end ) throw (RuntimeException) 327 { 328 Guard< Mutex > aGuard( maMutex ); 329 maEnd = _end; 330 } 331 332 // -------------------------------------------------------------------- 333 334 // XAnimationNode 335 Any SAL_CALL RandomAnimationNode::getEndSync() throw (RuntimeException) 336 { 337 Guard< Mutex > aGuard( maMutex ); 338 return maEndSync; 339 } 340 341 // -------------------------------------------------------------------- 342 343 // XAnimationNode 344 void SAL_CALL RandomAnimationNode::setEndSync( const Any& _endsync ) throw (RuntimeException) 345 { 346 Guard< Mutex > aGuard( maMutex ); 347 maEndSync = _endsync; 348 } 349 350 // -------------------------------------------------------------------- 351 352 // XAnimationNode 353 Any SAL_CALL RandomAnimationNode::getRepeatCount() throw (RuntimeException) 354 { 355 Guard< Mutex > aGuard( maMutex ); 356 return maRepeatCount; 357 } 358 359 // -------------------------------------------------------------------- 360 361 // XAnimationNode 362 void SAL_CALL RandomAnimationNode::setRepeatCount( const Any& _repeatcount ) throw (RuntimeException) 363 { 364 Guard< Mutex > aGuard( maMutex ); 365 maRepeatCount = _repeatcount; 366 } 367 368 // -------------------------------------------------------------------- 369 370 // XAnimationNode 371 Any SAL_CALL RandomAnimationNode::getRepeatDuration() throw (RuntimeException) 372 { 373 Guard< Mutex > aGuard( maMutex ); 374 return maRepeatDuration; 375 } 376 377 // -------------------------------------------------------------------- 378 379 // XAnimationNode 380 void SAL_CALL RandomAnimationNode::setRepeatDuration( const Any& _repeatduration ) throw (RuntimeException) 381 { 382 Guard< Mutex > aGuard( maMutex ); 383 maRepeatDuration = _repeatduration; 384 } 385 386 // -------------------------------------------------------------------- 387 388 // XAnimationNode 389 sal_Int16 SAL_CALL RandomAnimationNode::getFill() throw (RuntimeException) 390 { 391 Guard< Mutex > aGuard( maMutex ); 392 return mnFill; 393 } 394 395 // -------------------------------------------------------------------- 396 397 // XAnimationNode 398 void SAL_CALL RandomAnimationNode::setFill( sal_Int16 _fill ) throw (RuntimeException) 399 { 400 Guard< Mutex > aGuard( maMutex ); 401 mnFill = _fill; 402 } 403 404 // -------------------------------------------------------------------- 405 406 // XAnimationNode 407 sal_Int16 SAL_CALL RandomAnimationNode::getFillDefault() throw (RuntimeException) 408 { 409 Guard< Mutex > aGuard( maMutex ); 410 return mnFillDefault; 411 } 412 413 // -------------------------------------------------------------------- 414 415 // XAnimationNode 416 void SAL_CALL RandomAnimationNode::setFillDefault( sal_Int16 _filldefault ) throw (RuntimeException) 417 { 418 Guard< Mutex > aGuard( maMutex ); 419 mnFillDefault = _filldefault; 420 } 421 422 // -------------------------------------------------------------------- 423 424 // XAnimationNode 425 sal_Int16 SAL_CALL RandomAnimationNode::getRestart() throw (RuntimeException) 426 { 427 Guard< Mutex > aGuard( maMutex ); 428 return mnRestart; 429 } 430 431 // -------------------------------------------------------------------- 432 433 // XAnimationNode 434 void SAL_CALL RandomAnimationNode::setRestart( sal_Int16 _restart ) throw (RuntimeException) 435 { 436 Guard< Mutex > aGuard( maMutex ); 437 mnRestart = _restart; 438 } 439 440 // -------------------------------------------------------------------- 441 442 // XAnimationNode 443 sal_Int16 SAL_CALL RandomAnimationNode::getRestartDefault() throw (RuntimeException) 444 { 445 Guard< Mutex > aGuard( maMutex ); 446 return mnRestartDefault; 447 } 448 449 // -------------------------------------------------------------------- 450 451 // XAnimationNode 452 void SAL_CALL RandomAnimationNode::setRestartDefault( sal_Int16 _restartdefault ) throw (RuntimeException) 453 { 454 Guard< Mutex > aGuard( maMutex ); 455 mnRestartDefault = _restartdefault; 456 } 457 458 // -------------------------------------------------------------------- 459 460 // XAnimationNode 461 double SAL_CALL RandomAnimationNode::getAcceleration() throw (RuntimeException) 462 { 463 Guard< Mutex > aGuard( maMutex ); 464 return mfAcceleration; 465 } 466 467 // -------------------------------------------------------------------- 468 469 // XAnimationNode 470 void SAL_CALL RandomAnimationNode::setAcceleration( double _acceleration ) throw (RuntimeException) 471 { 472 Guard< Mutex > aGuard( maMutex ); 473 mfAcceleration = _acceleration; 474 } 475 476 // -------------------------------------------------------------------- 477 478 // XAnimationNode 479 double SAL_CALL RandomAnimationNode::getDecelerate() throw (RuntimeException) 480 { 481 Guard< Mutex > aGuard( maMutex ); 482 return mfDecelerate; 483 } 484 485 // -------------------------------------------------------------------- 486 487 // XAnimationNode 488 void SAL_CALL RandomAnimationNode::setDecelerate( double _decelerate ) throw (RuntimeException) 489 { 490 Guard< Mutex > aGuard( maMutex ); 491 mfDecelerate = _decelerate; 492 } 493 494 // -------------------------------------------------------------------- 495 496 // XAnimationNode 497 sal_Bool SAL_CALL RandomAnimationNode::getAutoReverse() throw (RuntimeException) 498 { 499 Guard< Mutex > aGuard( maMutex ); 500 return mbAutoReverse; 501 } 502 503 // -------------------------------------------------------------------- 504 505 // XAnimationNode 506 void SAL_CALL RandomAnimationNode::setAutoReverse( sal_Bool _autoreverse ) throw (RuntimeException) 507 { 508 Guard< Mutex > aGuard( maMutex ); 509 mbAutoReverse = _autoreverse; 510 } 511 512 // -------------------------------------------------------------------- 513 514 Sequence< NamedValue > SAL_CALL RandomAnimationNode::getUserData() throw (RuntimeException) 515 { 516 Guard< Mutex > aGuard( maMutex ); 517 return maUserData; 518 } 519 520 // -------------------------------------------------------------------- 521 522 void SAL_CALL RandomAnimationNode::setUserData( const Sequence< NamedValue >& _userdata ) throw (RuntimeException) 523 { 524 Guard< Mutex > aGuard( maMutex ); 525 maUserData = _userdata; 526 } 527 528 // -------------------------------------------------------------------- 529 530 // XChild 531 Reference< XInterface > SAL_CALL RandomAnimationNode::getParent() throw (RuntimeException) 532 { 533 Guard< Mutex > aGuard( maMutex ); 534 return mxParent; 535 } 536 537 // -------------------------------------------------------------------- 538 539 // XChild 540 void SAL_CALL RandomAnimationNode::setParent( const Reference< XInterface >& Parent ) throw (NoSupportException, RuntimeException) 541 { 542 Guard< Mutex > aGuard( maMutex ); 543 mxParent = Parent; 544 } 545 546 // -------------------------------------------------------------------- 547 548 // XCloneable 549 Reference< XCloneable > SAL_CALL RandomAnimationNode::createClone() throw (RuntimeException) 550 { 551 Reference< XCloneable > xNewNode( new RandomAnimationNode( *this ) ); 552 return xNewNode; 553 } 554 555 // -------------------------------------------------------------------- 556 557 // XElementAccess 558 Type SAL_CALL RandomAnimationNode::getElementType() throw (RuntimeException) 559 { 560 return ::getCppuType((const Reference< XAnimationNode >*)0); 561 } 562 563 // -------------------------------------------------------------------- 564 565 // XElementAccess 566 sal_Bool SAL_CALL RandomAnimationNode::hasElements() throw (RuntimeException) 567 { 568 return sal_True; 569 } 570 571 // -------------------------------------------------------------------- 572 573 // XEnumerationAccess 574 Reference< XEnumeration > SAL_CALL RandomAnimationNode::createEnumeration() 575 throw (RuntimeException) 576 { 577 Guard< Mutex > aGuard( maMutex ); 578 579 if( !maTarget.hasValue() && mxFirstNode.is() ) 580 { 581 Any aTarget( mxFirstNode->getTarget() ); 582 if( aTarget.hasValue() ) 583 { 584 maTarget = aTarget; 585 mxFirstNode.clear(); 586 } 587 } 588 589 Reference< XEnumeration > xEnum; 590 591 Reference< XEnumerationAccess > aEnumAccess( CustomAnimationPresets::getCustomAnimationPresets().getRandomPreset( mnPresetClass ), UNO_QUERY ); 592 593 if( aEnumAccess.is() ) 594 { 595 Reference< XEnumeration > xEnumeration( aEnumAccess->createEnumeration(), UNO_QUERY ); 596 if( xEnumeration.is() ) 597 { 598 while( xEnumeration->hasMoreElements() ) 599 { 600 Reference< XAnimate > xAnimate( xEnumeration->nextElement(), UNO_QUERY ); 601 if( xAnimate.is() ) 602 xAnimate->setTarget( maTarget ); 603 } 604 } 605 xEnum = aEnumAccess->createEnumeration(); 606 } 607 else 608 { 609 // no presets? give empty node! 610 Reference< XMultiServiceFactory > xServiceFactory( comphelper::getProcessServiceFactory() ); 611 Reference< XEnumerationAccess > aEmptyEnumAccess( 612 xServiceFactory->createInstance( 613 OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.animations.ParallelTimeContainer" ))), 614 UNO_QUERY ); 615 616 if( aEmptyEnumAccess.is() ) 617 xEnum = aEmptyEnumAccess->createEnumeration(); 618 } 619 620 return xEnum; 621 } 622 623 // -------------------------------------------------------------------- 624 625 626 // XTimeContainer 627 Reference< XAnimationNode > SAL_CALL RandomAnimationNode::insertBefore( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& ) 628 throw (IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException) 629 { 630 return appendChild( newChild ); 631 } 632 633 // -------------------------------------------------------------------- 634 635 // XTimeContainer 636 Reference< XAnimationNode > SAL_CALL RandomAnimationNode::insertAfter( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& ) 637 throw (IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException) 638 { 639 return appendChild( newChild ); 640 } 641 642 // -------------------------------------------------------------------- 643 644 // XTimeContainer 645 Reference< XAnimationNode > SAL_CALL RandomAnimationNode::replaceChild( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& ) 646 throw( IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException) 647 { 648 return appendChild( newChild ); 649 } 650 651 // -------------------------------------------------------------------- 652 653 // XTimeContainer 654 Reference< XAnimationNode > SAL_CALL RandomAnimationNode::removeChild( const Reference< XAnimationNode >& oldChild ) 655 throw(IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException) 656 { 657 return oldChild; 658 } 659 660 // -------------------------------------------------------------------- 661 662 // XTimeContainer 663 Reference< XAnimationNode > SAL_CALL RandomAnimationNode::appendChild( const Reference< XAnimationNode >& newChild ) 664 throw(IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException) 665 { 666 Reference< XAnimate > xAnimate( newChild, UNO_QUERY ); 667 if( xAnimate.is() ) 668 { 669 Any aTarget( xAnimate->getTarget() ); 670 if( aTarget.hasValue() ) 671 maTarget = aTarget; 672 } 673 674 if( !maTarget.hasValue() && !mxFirstNode.is() ) 675 mxFirstNode = xAnimate; 676 677 return newChild; 678 } 679 680 // XServiceInfo 681 OUString RandomAnimationNode::getImplementationName() throw() 682 { 683 return RandomNode__getImplementationName(); 684 } 685 686 // XServiceInfo 687 sal_Bool RandomAnimationNode::supportsService(const OUString& ServiceName) throw() 688 { 689 return ServiceName.equalsAscii( pSN1 ) || ServiceName.equalsAscii( pSN2 ); 690 } 691 692 // XServiceInfo 693 Sequence< OUString > RandomAnimationNode::getSupportedServiceNames(void) throw() 694 { 695 return RandomNode_getSupportedServiceNames(); 696 } 697 698 } 699 700