package org.tizen.emulator.manager.ui.widgets;
-import org.eclipse.swt.SWTException;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.tizen.emulator.manager.logging.EMLogger;
import org.tizen.emulator.manager.platform.BaseImage;
import org.tizen.emulator.manager.plugin.PluginImageResources;
public class VMCreateButton extends VMButton {
- private GifAnimationThread thread;
private VMCreateButton button;
public VMCreateButton(Composite parent, int style, BaseImage base) {
setEnabled(false);
//VMsMainView.getInstance().drawCreateVM(false);
} else {
- if (thread != null) {
- thread.isDisposed = true;
- try {
- thread.join();
- } catch (InterruptedException e) {
- EMLogger.getLogger().warning(e.getMessage());
- }
- thread = null;
- aniImageData = null;
- }
setEnabled(true);
}
}
- private ImageData aniImageData = null;
- public void setAnimationImmageData(ImageData data) {
- aniImageData = data;
- }
-
private PaintListener CreateButtonPaintListener = new PaintListener() {
private int W_OFFSET = 2;
private int H_OFFSET = 3;
GC gc = e.gc;
Rectangle rect = ((Canvas) e.widget).getClientArea();
- if (isSelection()) {
- if (thread == null) {
- gc.setBackground(colors.get(state.getId()));
- gc.fillRectangle(rect);
- gc.drawImage(image, rect.x + W_OFFSET, rect.y + H_OFFSET);
+ gc.setBackground(colors.get(state.getId()));
+ gc.fillRectangle(rect);
+ gc.drawImage(image, rect.x + W_OFFSET, rect.y + H_OFFSET);
- gc.drawImage(PluginImageResources.VM_IMAGE_SELECTED.getImage(button.getBaseImage().getPlatform().getPluginPlatformName()), rect.x, rect.y);
-
- thread = new GifAnimationThread(button, gc);
- thread.isDisposed = false;
- thread.start();
- } else {
- if (aniImageData != null) {
- Image newImage = new Image(Display.getCurrent(), aniImageData);
- gc.drawImage(newImage, aniImageData.x + W_OFFSET, aniImageData.y + H_OFFSET);
- newImage.dispose();
- }
- }
- } else {
- gc.setBackground(colors.get(state.getId()));
- gc.fillRectangle(rect);
- gc.drawImage(image, rect.x + W_OFFSET, rect.y + H_OFFSET);
- }
}
};
}
-
-class GifAnimationThread extends Thread {
- int currentFrame = 0;
- boolean isDisposed = false;
- ImageData[] frames;
- Display display = Display.getCurrent();
- VMCreateButton button;
- GC gc;
-
- GifAnimationThread(VMCreateButton button, GC gc) {
- this.button = button;
- this.gc = gc;
- frames = PluginImageResources.VM_IMAGE_CREATE.getImageData(button.getBaseImage().getPlatform().getPluginPlatformName());
- }
-
- @Override
- public void run() {
-
- while(!isDisposed) {
- try {
- if (frames != null) {
- //sleep(frames[currentFrame].delayTime * 10);
- sleep(100);
- } else {
- sleep(1000);
- }
- } catch (InterruptedException e) {
- EMLogger.getLogger().warning(e.getMessage());
- }
-
- if (frames != null) {
- currentFrame = (currentFrame + 1) % frames.length;
- }
-
- if (display.isDisposed()) {
- return;
- }
-
- if (frames != null) {
- display.asyncExec(new Runnable() {
- @Override
- public void run() {
- if (currentFrame != 0) {
- try {
- button.setAnimationImmageData(frames[currentFrame]);
- button.redraw();
- } catch (SWTException e) {
- isDisposed = true;
- }
- }
- }
- }); /* end of asyncExec */
- }
- }
- }
-}
-