blob: 736d76216eddc158644ab28815c95bc4831635bd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2008 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.ui.internal;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.Shell;
/**
* AnimationFeedBackBase is an abstract class which provides renderStep(), jobInit() and
* initialize() methods for AnimationEngine.
* Its the base class for all the
* animationFeedbacks
*
* @since 3.3
*
*/
public abstract class AnimationFeedbackBase {
private AnimationEngine engine;
private Shell baseShell;
private Shell animationShell = null;
/**
* Creates an AnimationFeedback
*
* @param parentShell specifies the composite where the animation will be drawn
*/
public AnimationFeedbackBase(Shell parentShell) {
baseShell = parentShell;
baseShell.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
if (engine != null)
engine.cancelAnimation();
}
});
}
/**
* Perform any initialization you want to do -prior- to the Job actually
* gets scheduled.
*
* @param animationEngine The engine we're hosted in.
*/
public abstract void initialize(AnimationEngine animationEngine);
/**
* Its a draw method. All the code to render an animation goes in this
* method.
*
* @param engine
*/
public abstract void renderStep(AnimationEngine engine);
/**
* Perform any initialization you want to have happen -before- the animation
* starts. Subclasses may subclass but not override (i.e. you have to call super).
*
* @param engine The AnimationEngine hosting the feedback
* @return 'true' iff the animation is capable of running
*/
public boolean jobInit(AnimationEngine engine) {
this.engine = engine;
return engine != null;
}
/**
* Dispose any locally created resources
*/
public void dispose() {
if (animationShell != null && !animationShell.isDisposed())
animationShell.dispose();
}
/**
* @return The shell this animation is being rendered 'on'
*/
public Shell getBaseShell() {
return baseShell;
}
/**
* @return A shell that can be used to render the animation on
*/
public Shell getAnimationShell() {
if (animationShell == null) {
animationShell = new Shell(getBaseShell(), SWT.NO_TRIM | SWT.ON_TOP);
animationShell.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
if (engine != null)
engine.cancelAnimation();
}
});
}
return animationShell;
}
}