| /******************************************************************************* |
| * 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; |
| } |
| |
| } |