X-Git-Url: http://git.phpeclipse.com
diff --git a/net.sourceforge.phpeclipse.webbrowser/src/net/sourceforge/phpeclipse/webbrowser/internal/BusyIndicator.java b/net.sourceforge.phpeclipse.webbrowser/src/net/sourceforge/phpeclipse/webbrowser/internal/BusyIndicator.java
new file mode 100644
index 0000000..baadaeb
--- /dev/null
+++ b/net.sourceforge.phpeclipse.webbrowser/src/net/sourceforge/phpeclipse/webbrowser/internal/BusyIndicator.java
@@ -0,0 +1,157 @@
+/**
+ * Copyright (c) 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * IBM - Initial API and implementation
+ */
+package net.sourceforge.phpeclipse.webbrowser.internal;
+
+import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+/**
+ * An animated image to show busy status of the Web browser.
+ */
+public class BusyIndicator extends Canvas {
+ protected Image[] images;
+ protected Image image;
+
+ protected Thread busyThread;
+ protected boolean stop;
+
+ /**
+ * BusyWidget constructor comment.
+ * @param parent org.eclipse.swt.widgets.Composite
+ * @param style int
+ */
+ public BusyIndicator(Composite parent, int style) {
+ super(parent, style);
+
+ images = ImageResource.getBusyImages();
+
+ addPaintListener(new PaintListener() {
+ public void paintControl(PaintEvent event) {
+ onPaint(event);
+ }
+ });
+
+ image = images[0];
+ }
+
+ public Point computeSize(int wHint, int hHint, boolean changed) {
+ return new Point(25, 25);
+ }
+
+ /**
+ * Creates a thread to animate the image.
+ */
+ protected synchronized void createBusyThread() {
+ if (busyThread != null)
+ return;
+
+ stop = false;
+ busyThread = new Thread() {
+ protected int count;
+ public void run() {
+ try {
+ count = 1;
+ while (!stop) {
+ Display.getDefault().syncExec(new Runnable() {
+ public void run() {
+ if (!stop) {
+ if (count < 13)
+ setImage(images[count]);
+ count++;
+ if (count > 12)
+ count = 1;
+ }
+ }
+ });
+ try {
+ sleep(125);
+ } catch (Exception e) { }
+ }
+ if (busyThread == null)
+ Display.getDefault().syncExec(new Thread() {
+ public void run() {
+ setImage(images[0]);
+ }
+ });
+ } catch (Exception e) {
+ Trace.trace(Trace.WARNING, "Busy error", e);
+ }
+ }
+ };
+
+ busyThread.setPriority(Thread.NORM_PRIORITY + 2);
+ busyThread.setDaemon(true);
+ busyThread.start();
+ }
+
+ public void dispose() {
+ stop = true;
+ busyThread = null;
+ super.dispose();
+ }
+
+ /**
+ * Return the image or null
.
+ */
+ public Image getImage() {
+ return image;
+ }
+
+ /**
+ * Returns true if it is currently busy.
+ *
+ * @return boolean
+ */
+ public boolean isBusy() {
+ return (busyThread != null);
+ }
+
+ /*
+ * Process the paint event
+ */
+ protected void onPaint(PaintEvent event) {
+ Rectangle rect = getClientArea();
+ if (rect.width == 0 || rect.height == 0)
+ return;
+
+ GC gc = event.gc;
+ if (image != null)
+ gc.drawImage(image, 2, 2);
+ }
+
+ /**
+ * Sets the indicators busy count up (true) or down (false) one.
+ *
+ * @param busy boolean
+ */
+ public synchronized void setBusy(boolean busy) {
+ if (busy) {
+ if (busyThread == null)
+ createBusyThread();
+ } else {
+ if (busyThread != null) {
+ stop = true;
+ busyThread = null;
+ }
+ }
+ }
+
+ /**
+ * Set the image.
+ * The value null
clears it.
+ */
+ public void setImage(Image image) {
+ if (image != this.image && !isDisposed()) {
+ this.image = image;
+ redraw();
+ }
+ }
+}
\ No newline at end of file