| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| #ifndef INCLUDED_SLIDESHOW_ANIMATIONNODE_HXX |
| #define INCLUDED_SLIDESHOW_ANIMATIONNODE_HXX |
| |
| #include "disposable.hxx" |
| |
| #include <com/sun/star/animations/XAnimationNode.hpp> |
| #include <boost/shared_ptr.hpp> |
| |
| namespace slideshow { |
| namespace internal { |
| |
| /** This interface is used to mirror every XAnimateNode object |
| in the presentation core. |
| */ |
| class AnimationNode : public Disposable |
| { |
| public: |
| /** The current state of this AnimationNode |
| */ |
| enum NodeState { |
| /// Invalid state, node is disposed or otherwise invalid |
| INVALID =0, |
| /// Unresolved start time |
| UNRESOLVED =1, |
| /// Resolved start time, node will start eventually |
| RESOLVED =2, |
| /// Node is active |
| ACTIVE =4, |
| /// Node is frozen (no longer active, but changes remain in place) |
| FROZEN =8, |
| /// Node has completed an active lifecycle, |
| /// and any effect is removed from the document |
| ENDED =16 |
| }; |
| |
| /** Query the corresponding XAnimationNode. |
| */ |
| virtual ::com::sun::star::uno::Reference< |
| ::com::sun::star::animations::XAnimationNode > |
| getXAnimationNode() const = 0; |
| |
| /** Init this node |
| |
| If this node is not in state INVALID, init() sets up the |
| node state and schedules necessary events. |
| If this node has children, they have their init() called, too. |
| You will call this method whenever a slide is going to be |
| shown. |
| |
| @return true, if init was successful; state has changed to UNRESOLVED |
| */ |
| virtual bool init() = 0; |
| |
| /** Resolve node start time |
| |
| Nodes can have unresolved start times, i.e. indefinite |
| start time for container nodes, or child nodes whose |
| parent has not yet started. Calling this method fixes |
| the node's start time. This does not mean that this |
| node immediately starts its animations, that is only |
| the case for begin=0.0. The node will change its state |
| to RESOLVED. |
| |
| @return true, if a start event was successfully scheduled. |
| */ |
| virtual bool resolve() = 0; |
| |
| /** Immediately start this node |
| |
| This method starts the animation on this node, without |
| begin timeout. The node will change its state to ACTIVE. |
| |
| @return true, if start was successful. This method |
| might return false, if e.g. a restart is not permitted |
| on this node. |
| */ |
| virtual bool activate() = 0; |
| |
| /** Immediately stop this node |
| |
| This method stops the animation on this node. The node |
| will change its state to either ENDED or FROZEN, |
| depending on XAnimationNode attributes. |
| */ |
| virtual void deactivate() = 0; |
| |
| /** End the animation on this node |
| |
| This method force-ends animation on this node. Parents |
| may call this for their children, if their active |
| duration ends. An ended animation will no longer have |
| any effect on the shape attributes. The node will |
| change its state to ENDED. |
| */ |
| virtual void end() = 0; |
| |
| /** Query node state |
| |
| @return the current state of this animation node. |
| */ |
| virtual NodeState getState() const = 0; |
| |
| /** Register a deactivating listener |
| |
| This method registers another AnimationNode as an |
| deactivating listener, which gets notified via a |
| notifyDeactivating() call. The node calls all |
| registered listener, when it leaves the ACTIVE state. |
| |
| @param rNotifee AnimationNode to notify |
| */ |
| virtual bool registerDeactivatingListener( |
| const ::boost::shared_ptr< AnimationNode >& rNotifee ) = 0; |
| |
| /** Called to notify another AnimationNode's deactivation |
| |
| @param rNotifier The instance who calls this method. |
| */ |
| virtual void notifyDeactivating( |
| const ::boost::shared_ptr< AnimationNode >& rNotifier ) = 0; |
| |
| /** Query node whether it has an animation pending. |
| |
| @return true, if this node (or at least one of its children) |
| has an animation pending. Used to determine if the main |
| sequence is actually empty, or contains effects |
| */ |
| virtual bool hasPendingAnimation() const = 0; |
| }; |
| |
| typedef ::boost::shared_ptr< AnimationNode > AnimationNodeSharedPtr; |
| |
| } // namespace internal |
| } // namespace presentation |
| |
| #endif /* INCLUDED_SLIDESHOW_ANIMATIONNODE_HXX */ |
| |