blob: 73cd892a05efe28036b36fd0ab66a80a98ceab8c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.xwt.animation.internal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.WeakHashMap;
/**
* This class manages all scenarios and orchestrates the scenarios execution.
*
* @author yyang
*/
public class AnimationManager {
private WeakHashMap<Object, ScenarioManager> scenarioManagers = new WeakHashMap<Object, ScenarioManager>();
private static AnimationManager INSTANCE;
/**
* This class manages all scenarios of an UI element. It orchestrates the scenarios execution.
*
* @author yyang
*/
static class ScenarioManager {
private Collection<ITimeline> timelines = new ArrayList<ITimeline>();
public void play(ITimeline timeline) {
for (ITimeline timelineScenario : timelines) {
if (timelineScenario != timeline) {
timelineScenario.cancel();
}
}
timeline.play();
}
public void cancel(ITimeline timeline) {
timeline.end();
}
public void pause(ITimeline timeline) {
timeline.pause();
}
public void resume(ITimeline timeline) {
timeline.resume();
}
public void playReverse(ITimeline timeline) {
timeline.playReverse();
}
public void addTimeline(ITimeline timeline) {
timelines.add(timeline);
}
}
public static AnimationManager getInstance() {
if (INSTANCE == null) {
INSTANCE = new AnimationManager();
}
return INSTANCE;
}
public void play(ITimeline timeline) {
ScenarioManager manager = scenarioManagers.get(timeline.getTarget());
if (manager != null) {
manager.play(timeline);
}
}
public void stop(ITimeline timeline) {
ScenarioManager manager = scenarioManagers.get(timeline.getTarget());
if (manager != null) {
manager.cancel(timeline);
}
}
public void pause(ITimeline timeline) {
ScenarioManager manager = scenarioManagers.get(timeline.getTarget());
if (manager != null) {
manager.pause(timeline);
}
}
public void resume(ITimeline timeline) {
ScenarioManager manager = scenarioManagers.get(timeline.getTarget());
if (manager != null) {
manager.resume(timeline);
}
}
public void playReverse(ITimeline timeline) {
ScenarioManager manager = scenarioManagers.get(timeline.getTarget());
if (manager != null) {
manager.playReverse(timeline);
}
}
public void addTimeline(ITimeline timeline) {
ScenarioManager manager = scenarioManagers.get(timeline.getTarget());
if (manager == null) {
manager = new ScenarioManager();
scenarioManagers.put(timeline.getTarget(), manager);
}
manager.addTimeline(timeline);
}
}