All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.kie.uberfire.client.animations.Sequencer Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2012 JBoss Inc
 * 
 * Licensed 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.
 */
package org.kie.uberfire.client.animations;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.animation.client.Animation;

/**
 * Run a list of animations in order.
 */
public class Sequencer {

    private int currentAnimationIndex = 0;

    //Simple holder for sequenced animation details
    private class AnimationConfiguration {

        final WrappedAnimation animation;

        final int              duration;

        AnimationConfiguration(final WrappedAnimation animation,
                               final int duration) {
            this.animation = animation;
            this.duration = duration;
        }

    }

    //A wrapper for sequenced animations allowing us to hook into the onComplete method to launch the next animation
    private class WrappedAnimation extends Animation {

        private final SequencedAnimation animation;

        WrappedAnimation(final SequencedAnimation animation) {
            this.animation = animation;
        }

        @Override
        public void onComplete() {
            //Pass through to the wrapped animation
            animation.onComplete();
            runNextAnimation();
        }

        @Override
        protected void onUpdate(double progress) {
            //Pass through to the wrapped animation
            animation.onUpdate( progress );
        }

        @Override
        public void cancel() {
            //Pass through to the wrapped animation
            animation.cancel();
        }

        @Override
        protected double interpolate(double progress) {
            //Pass through to the wrapped animation
            return animation.interpolate( progress );
        }

        @Override
        protected void onCancel() {
            //Pass through to the wrapped animation
            animation.onCancel();
        }

        @Override
        protected void onStart() {
            //Pass through to the wrapped animation
            animation.onStart();
        }

    }

    //The list of animations
    private List animations = new ArrayList();

    /**
     * Add an animation to the list of animations to be sequenced.
     * 
     * @param animation
     * @param duration
     */
    public void add(final SequencedAnimation animation,
                    final int duration) {
        animations.add( new AnimationConfiguration( new WrappedAnimation( animation ),
                                                    duration ) );
    }

    /**
     * Run all animations.
     */
    public void run() {
        runNextAnimation();
    }

    /**
     * Reset the sequence to the begining.
     */
    public void reset() {
        currentAnimationIndex = 0;
    }

    private void runNextAnimation() {
        if ( currentAnimationIndex < animations.size() ) {
            final AnimationConfiguration config = animations.get( currentAnimationIndex++ );
            final WrappedAnimation animation = config.animation;
            final int duration = config.duration;
            animation.run( duration );
        } else {
            reset();
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy