JAL-1432 updated copyright notices
[jalview.git] / src / jalview / gui / WebserviceInfo.java
index 9f8a8a8..27cbfe4 100755 (executable)
@@ -1,19 +1,20 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
- * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
+ * Copyright (C) 2014 The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  * Jalview is free software: you can redistribute it and/or
  * modify it under the terms of the GNU General Public License 
  * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
- * 
+ *  
  * Jalview is distributed in the hope that it will be useful, but 
  * WITHOUT ANY WARRANTY; without even the implied warranty 
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
  * PURPOSE.  See the GNU General Public License for more details.
  * 
  * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.gui;
 
@@ -25,11 +26,9 @@ import java.awt.image.*;
 import javax.swing.*;
 import javax.swing.event.HyperlinkEvent;
 import javax.swing.event.HyperlinkListener;
-import javax.swing.event.HyperlinkEvent.EventType;
 import javax.swing.text.html.HTMLEditorKit;
 import javax.swing.text.html.StyleSheet;
 
-import jalview.bin.Cache;
 import jalview.jbgui.*;
 import jalview.ws.WSClientI;
 
@@ -41,7 +40,7 @@ import jalview.ws.WSClientI;
  * @version $Revision$
  */
 public class WebserviceInfo extends GWebserviceInfo implements
-        HyperlinkListener
+        HyperlinkListener, IProgressIndicator
 {
 
   /** Job is Queued */
@@ -296,7 +295,8 @@ public class WebserviceInfo extends GWebserviceInfo implements
     this.title = title;
     setInfoText(info);
 
-    java.net.URL url = getClass().getResource("/images/logo.gif");
+    java.net.URL url = getClass().getResource(
+            "/images/Jalview_Logo_small.png");
     image = java.awt.Toolkit.getDefaultToolkit().createImage(url);
 
     MediaTracker mt = new MediaTracker(this);
@@ -799,9 +799,10 @@ public class WebserviceInfo extends GWebserviceInfo implements
 
       if (image != null)
       {
-        g.rotate(Math.toRadians(angle), 28, 28);
+        int x = image.getWidth(this) / 2, y = image.getHeight(this) / 2;
+        g.rotate(Math.toRadians(angle), 10 + x, 10 + y);
         g.drawImage(image, 10, 10, this);
-        g.rotate(-Math.toRadians(angle), 28, 28);
+        g.rotate(-Math.toRadians(angle), 10 + x, 10 + y);
       }
     }
 
@@ -822,21 +823,109 @@ public class WebserviceInfo extends GWebserviceInfo implements
 
   public void hyperlinkUpdate(HyperlinkEvent e)
   {
-    if (e.getEventType() == EventType.ACTIVATED)
+    Desktop.hyperlinkUpdate(e);
+  }
+
+  // methods for implementing IProgressIndicator
+  // need to refactor to a reusable stub class
+  Hashtable progressBars, progressBarHandlers;
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see jalview.gui.IProgressIndicator#setProgressBar(java.lang.String, long)
+   */
+  @Override
+  public void setProgressBar(String message, long id)
+  {
+    if (progressBars == null)
+    {
+      progressBars = new Hashtable();
+      progressBarHandlers = new Hashtable();
+    }
+
+    JPanel progressPanel;
+    Long lId = new Long(id);
+    GridLayout layout = (GridLayout) statusPanel.getLayout();
+    if (progressBars.get(lId) != null)
     {
-      String url=null;
-      try
+      progressPanel = (JPanel) progressBars.get(new Long(id));
+      statusPanel.remove(progressPanel);
+      progressBars.remove(lId);
+      progressPanel = null;
+      if (message != null)
       {
-        url = e.getURL().toString();
-        Desktop.showUrl(url);
-      } catch (Exception x)
+        statusBar.setText(message);
+      }
+      if (progressBarHandlers.contains(lId))
       {
-        if (url!=null) { 
-          Cache.log.error("Couldn't handle string "+url+" as a URL.");
-        }
-        // ignore any exceptions due to dud links.
+        progressBarHandlers.remove(lId);
       }
+      layout.setRows(layout.getRows() - 1);
+    }
+    else
+    {
+      progressPanel = new JPanel(new BorderLayout(10, 5));
+
+      JProgressBar progressBar = new JProgressBar();
+      progressBar.setIndeterminate(true);
+
+      progressPanel.add(new JLabel(message), BorderLayout.WEST);
+      progressPanel.add(progressBar, BorderLayout.CENTER);
+
+      layout.setRows(layout.getRows() + 1);
+      statusPanel.add(progressPanel);
+
+      progressBars.put(lId, progressPanel);
+    }
+    // update GUI
+    // setMenusForViewport();
+    validate();
+  }
+
+  @Override
+  public void registerHandler(final long id,
+          final IProgressIndicatorHandler handler)
+  {
+    if (progressBarHandlers == null || !progressBars.contains(new Long(id)))
+    {
+      throw new Error(
+              "call setProgressBar before registering the progress bar's handler.");
+    }
+    progressBarHandlers.put(new Long(id), handler);
+    final JPanel progressPanel = (JPanel) progressBars.get(new Long(id));
+    if (handler.canCancel())
+    {
+      JButton cancel = new JButton("Cancel");
+      final IProgressIndicator us = this;
+      cancel.addActionListener(new ActionListener()
+      {
 
+        @Override
+        public void actionPerformed(ActionEvent e)
+        {
+          handler.cancelActivity(id);
+          us.setProgressBar(
+                  "Cancelled "
+                          + ((JLabel) progressPanel.getComponent(0))
+                                  .getText(), id);
+        }
+      });
+      progressPanel.add(cancel, BorderLayout.EAST);
+    }
+  }
+
+  /**
+   * 
+   * @return true if any progress bars are still active
+   */
+  @Override
+  public boolean operationInProgress()
+  {
+    if (progressBars != null && progressBars.size() > 0)
+    {
+      return true;
     }
+    return false;
   }
 }