returns to zero degrees when stopped
[jalview.git] / src / jalview / gui / WebserviceInfo.java
index 5241ec4..7c5c5e3 100755 (executable)
@@ -22,34 +22,35 @@ import jalview.jbgui.*;
 \r
 import java.awt.*;\r
 import java.awt.event.*;\r
+import java.awt.image.*;\r
 \r
 import javax.swing.*;\r
 \r
 \r
 /**\r
- * DOCUMENT ME!\r
+ * Base class for web service client thread and gui\r
  *\r
  * @author $author$\r
  * @version $Revision$\r
  */\r
 public class WebserviceInfo extends GWebserviceInfo\r
 {\r
-    /** DOCUMENT ME!! */\r
+    /** Job is Queued */\r
     public static final int STATE_QUEUING = 0;\r
 \r
-    /** DOCUMENT ME!! */\r
+    /** Job is Running */\r
     public static final int STATE_RUNNING = 1;\r
 \r
-    /** DOCUMENT ME!! */\r
+    /** Job has finished with no errors */\r
     public static final int STATE_STOPPED_OK = 2;\r
 \r
-    /** DOCUMENT ME!! */\r
+    /** Job has been cancelled with no errors */\r
     public static final int STATE_CANCELLED_OK = 3;\r
 \r
-    /** DOCUMENT ME!! */\r
+    /** job has stopped because of some error */\r
     public static final int STATE_STOPPED_ERROR = 4;\r
 \r
-    /** DOCUMENT ME!! */\r
+    /** job has failed because of some unavoidable service interruption */\r
     public static final int STATE_STOPPED_SERVERERROR = 5;\r
     int currentStatus = STATE_QUEUING;\r
     Image image;\r
@@ -61,8 +62,8 @@ public class WebserviceInfo extends GWebserviceInfo
     /**\r
      * Creates a new WebserviceInfo object.\r
      *\r
-     * @param title DOCUMENT ME!\r
-     * @param info DOCUMENT ME!\r
+     * @param title short name and job type\r
+     * @param info reference or other human readable description\r
      */\r
     public WebserviceInfo(String title, String info)\r
     {\r
@@ -144,7 +145,7 @@ public class WebserviceInfo extends GWebserviceInfo
     /**\r
      * DOCUMENT ME!\r
      *\r
-     * @param status DOCUMENT ME!\r
+     * @param status integer status from state constants\r
      */\r
     public void setStatus(int status)\r
     {\r
@@ -212,7 +213,7 @@ public class WebserviceInfo extends GWebserviceInfo
     }\r
 \r
     /**\r
-     * DOCUMENT ME!\r
+     * Gui action for cancelling the current job, if possible.\r
      *\r
      * @param e DOCUMENT ME!\r
      */\r
@@ -221,7 +222,7 @@ public class WebserviceInfo extends GWebserviceInfo
         if (!serviceIsCancellable)\r
         {\r
             JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
-                "This job cannot be cancelled.", "Cancel job",\r
+                "This job cannot be cancelled.\nJust close the window.", "Cancel job",\r
                 JOptionPane.WARNING_MESSAGE);\r
         }\r
         else\r
@@ -233,10 +234,12 @@ public class WebserviceInfo extends GWebserviceInfo
     class AnimatedPanel extends JPanel implements Runnable\r
     {\r
         long startTime = 0;\r
+        BufferedImage offscreen;\r
 \r
         public void run()\r
         {\r
             startTime = System.currentTimeMillis();\r
+            Graphics2D g = null;\r
 \r
             while (currentStatus < STATE_STOPPED_OK)\r
             {\r
@@ -244,70 +247,86 @@ public class WebserviceInfo extends GWebserviceInfo
                 {\r
                     Thread.sleep(50);\r
 \r
-                    int units = (int) ((System.currentTimeMillis() - startTime) / 10f);\r
+                    int units = (int) ( (System.currentTimeMillis() - startTime) /\r
+                                       10f);\r
                     angle += units;\r
                     angle %= 360;\r
                     startTime = System.currentTimeMillis();\r
-                    repaint();\r
-                }\r
-                catch (Exception ex)\r
-                {\r
-                }\r
-            }\r
 \r
-            angle = 0;\r
-            cancel.setEnabled(false);\r
-        }\r
+                    if (offscreen == null || offscreen.getWidth(this) != getWidth()\r
+                        || offscreen.getHeight(this) != getHeight())\r
+                    {\r
+                      offscreen = new BufferedImage(getWidth(), getHeight(),\r
+                                                    BufferedImage.TYPE_INT_ARGB);\r
+                      g = (Graphics2D) offscreen.getGraphics();\r
+                    }\r
 \r
-        synchronized public void paintComponent(Graphics g1)\r
-        {\r
-            Graphics2D g = (Graphics2D) g1;\r
-            g.setColor(Color.white);\r
-            g.fillRect(0, 0, getWidth(), getHeight());\r
+                    g.setColor(Color.white);\r
+                    g.fillRect(0, 0, getWidth(), getHeight());\r
 \r
-            if (image != null)\r
-            {\r
-                g.rotate(Math.toRadians(angle), 28, 28);\r
-                g.drawImage(image, 10, 10, this);\r
-                g.rotate(-Math.toRadians(angle), 28, 28);\r
-            }\r
+                    g.setFont(new Font("Arial", Font.BOLD, 12));\r
+                    g.setColor(Color.black);\r
 \r
-            g.setFont(new Font("Arial", Font.BOLD, 12));\r
-            g.setColor(Color.black);\r
+                    switch (currentStatus)\r
+                    {\r
+                      case STATE_QUEUING:\r
+                        g.drawString(title.concat(" - queuing"), 60, 30);\r
 \r
-            switch (currentStatus)\r
-            {\r
-            case STATE_QUEUING:\r
-                g.drawString(title.concat(" - queuing"), 60, 30);\r
+                        break;\r
 \r
-                break;\r
+                      case STATE_RUNNING:\r
+                        g.drawString(title.concat(" - running"), 60, 30);\r
 \r
-            case STATE_RUNNING:\r
-                g.drawString(title.concat(" - running"), 60, 30);\r
+                        break;\r
 \r
-                break;\r
+                      case STATE_STOPPED_OK:\r
+                        g.drawString(title.concat(" - complete"), 60, 30);\r
 \r
-            case STATE_STOPPED_OK:\r
-                g.drawString(title.concat(" - complete"), 60, 30);\r
+                        break;\r
 \r
-                break;\r
+                      case STATE_CANCELLED_OK:\r
+                        g.drawString(title.concat(" - job cancelled!"), 60, 30);\r
 \r
-            case STATE_CANCELLED_OK:\r
-                g.drawString(title.concat(" - job cancelled!"), 60, 30);\r
+                        break;\r
 \r
-                break;\r
+                      case STATE_STOPPED_ERROR:\r
+                        g.drawString(title.concat(" - job error!"), 60, 30);\r
 \r
-            case STATE_STOPPED_ERROR:\r
-                g.drawString(title.concat(" - job error!"), 60, 30);\r
+                        break;\r
 \r
-                break;\r
+                      case STATE_STOPPED_SERVERERROR:\r
+                        g.drawString(title.concat(" - Server Error! (try later)"),\r
+                                     60,\r
+                                     30);\r
 \r
-            case STATE_STOPPED_SERVERERROR:\r
-                g.drawString(title.concat(" - Server Error! (try later)"), 60,\r
-                    30);\r
+                        break;\r
+                    }\r
 \r
-                break;\r
+\r
+                    if (currentStatus >= STATE_STOPPED_OK)\r
+                      angle = 0;\r
+\r
+                    if (image != null)\r
+                    {\r
+                      g.rotate(Math.toRadians(angle), 28, 28);\r
+                      g.drawImage(image, 10, 10, this);\r
+                      g.rotate( -Math.toRadians(angle), 28, 28);\r
+                    }\r
+\r
+\r
+                    repaint();\r
+                }\r
+                catch (Exception ex)\r
+                {\r
+                }\r
             }\r
+\r
+            cancel.setEnabled(false);\r
+        }\r
+\r
+        public void paintComponent(Graphics g1)\r
+        {\r
+            g1.drawImage(offscreen, 0,0,this);\r
         }\r
     }\r
 }\r