+ * Returns the animation to be used for transitioning creating the animation if needed.
+ * @return The initialised transition animation.
+ */
+ Dali::Animation GetTransitionAnimation();
+
+ /**
+ * Prepares the actor to be transitioned in.
+ * @param[in] actor The actor that will be transitioned in.
+ */
+ virtual void PrepareForTranstionIn( Actor actor ) {}
+
+ /**
+ * Prepares the actor to be transitioned in.
+ * @param[in] actor The actor that will be transitioned out.
+ */
+ virtual void PrepareForTranstionOut( Actor actor ) {}
+
+ /**
+ * Transitions the actor in, allowing derived classes to configure
+ * the GetTransitionAnimation() animation ready.
+ * Button is in charge of calling Dali::Animation::Play and so derived classes
+ * only need to add the animation.
+ */
+ virtual void OnTransitionIn( Actor actor ) {}
+
+ /**
+ * Transitions the actor out, allowing derived classes to configure
+ * the GetTransitionAnimation() animation ready.
+ * Button is in charge of calling Dali::Animation::Play and so derived classes
+ * only need to add the animation.
+ */
+ virtual void OnTransitionOut( Actor actor ) {}
+
+private:
+ /**
+ * Starts the transition animation.
+ * Button::TransitionFinished is called when the animation finishes.
+ */
+ void StartTransitionAnimation();
+
+ /**
+ * This method stops all transition animations
+ */
+ void StopTransitionAnimation();
+
+ /**
+ * Called when the transition animation finishes.
+ */
+ void TransitionAnimationFinished( Dali::Animation& source );
+
+ /**
+ * Resets the Button to the base state for the current paint state.
+ * Any additionally inserted images needed for transitions that are
+ * no longer needed and the removed.
+ */
+ void ResetImageLayers();
+
+ /**
+ * Transitions in the actor, inserting the actor above childLower below the childUpper.
+ * Will not insert the actor if it is already attached to a parent (and so will not reorder the actor)
+ */
+ void TransitionInBetween( Actor childLower, Actor childUpper, Actor actor );
+
+ /**
+ * Transitions in the actor, inserting the actor above the child if the child exists or at the bottom otherwise
+ * Will not insert the actor if it is already attached to a parent (and so will not reorder the actor)
+ */
+ void TransitionInAbove( Actor child, Actor actor );
+
+ /**
+ * Transitions in the actor, inserting the actor at the index
+ * Will not insert the actor if it is already attached to a parent (and so will not reorder the actor)
+ */
+ void TransitionInAtIndex( unsigned int index, Actor actor );
+
+ /**
+ * Transitions out the actor