001: /*******************************************************************************
002: * Copyright (c) 2003, 2006 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.ui.internal.progress;
011:
012: import org.eclipse.swt.events.DisposeEvent;
013: import org.eclipse.swt.events.DisposeListener;
014: import org.eclipse.swt.events.MouseEvent;
015: import org.eclipse.swt.events.MouseListener;
016: import org.eclipse.swt.events.PaintEvent;
017: import org.eclipse.swt.graphics.Image;
018: import org.eclipse.swt.graphics.ImageData;
019: import org.eclipse.swt.widgets.Composite;
020: import org.eclipse.swt.widgets.Control;
021: import org.eclipse.ui.internal.WorkbenchWindow;
022:
023: /**
024: * The AnimationItem is the class that manages the animation for the progress.
025: */
026: public abstract class AnimationItem {
027: WorkbenchWindow window;
028:
029: interface IAnimationContainer {
030: /**
031: * The animation has started.
032: */
033: public abstract void animationStart();
034:
035: /**
036: * The animation has ended.
037: */
038: public abstract void animationDone();
039: }
040:
041: //Create a containter that does nothing by default
042: IAnimationContainer animationContainer = new IAnimationContainer() {
043: /* (non-Javadoc)
044: * @see org.eclipse.ui.internal.progress.AnimationItem.IAnimationContainer#animationDone()
045: */
046: public void animationDone() {
047: //Do nothing by default
048: }
049:
050: /* (non-Javadoc)
051: * @see org.eclipse.ui.internal.progress.AnimationItem.IAnimationContainer#animationStart()
052: */
053: public void animationStart() {
054: //Do nothing by default
055: }
056: };
057:
058: /**
059: * Create a new instance of the receiver.
060: *
061: * @param workbenchWindow
062: * the window being created
063: */
064: public AnimationItem(WorkbenchWindow workbenchWindow) {
065: this .window = workbenchWindow;
066: }
067:
068: /**
069: * Create the canvas that will display the image.
070: *
071: * @param parent
072: */
073: public void createControl(Composite parent) {
074:
075: Control animationItem = createAnimationItem(parent);
076:
077: animationItem.addMouseListener(new MouseListener() {
078: /*
079: * (non-Javadoc)
080: *
081: * @see org.eclipse.swt.events.MouseListener#mouseDoubleClick(org.eclipse.swt.events.MouseEvent)
082: */
083: public void mouseDoubleClick(MouseEvent arg0) {
084: ProgressManagerUtil
085: .openProgressView(AnimationItem.this .window);
086: }
087:
088: /*
089: * (non-Javadoc)
090: *
091: * @see org.eclipse.swt.events.MouseListener#mouseDown(org.eclipse.swt.events.MouseEvent)
092: */
093: public void mouseDown(MouseEvent arg0) {
094: //Do nothing
095: }
096:
097: /*
098: * (non-Javadoc)
099: *
100: * @see org.eclipse.swt.events.MouseListener#mouseUp(org.eclipse.swt.events.MouseEvent)
101: */
102: public void mouseUp(MouseEvent arg0) {
103: //Do nothing
104: }
105: });
106: animationItem.addDisposeListener(new DisposeListener() {
107: public void widgetDisposed(DisposeEvent e) {
108: AnimationManager.getInstance().removeItem(
109: AnimationItem.this );
110: }
111: });
112: AnimationManager.getInstance().addItem(this );
113: }
114:
115: /**
116: * Create the animation item control.
117: * @param parent the parent Composite
118: * @return Control
119: */
120: protected abstract Control createAnimationItem(Composite parent);
121:
122: /**
123: * Paint the image in the canvas.
124: *
125: * @param event
126: * The PaintEvent that generated this call.
127: * @param image
128: * The image to display
129: * @param imageData
130: * The array of ImageData. Required to show an animation.
131: */
132: void paintImage(PaintEvent event, Image image, ImageData imageData) {
133: event.gc.drawImage(image, 0, 0);
134: }
135:
136: /**
137: * Get the SWT control for the receiver.
138: *
139: * @return Control
140: */
141: public abstract Control getControl();
142:
143: /**
144: * The animation has begun.
145: */
146: void animationStart() {
147: animationContainer.animationStart();
148: }
149:
150: /**
151: * The animation has ended.
152: */
153: void animationDone() {
154: animationContainer.animationDone();
155: }
156:
157: /**
158: * Get the preferred width of the receiver.
159: *
160: * @return int
161: */
162: public int getPreferredWidth() {
163: return AnimationManager.getInstance().getPreferredWidth() + 5;
164: }
165:
166: /**
167: * Set the container that will be updated when this runs.
168: * @param container The animationContainer to set.
169: */
170: void setAnimationContainer(IAnimationContainer container) {
171: this.animationContainer = container;
172: }
173: }
|