JAL-1130 new logo in help, splash screen and web services spinner
[jalview.git] / src / jalview / gui / SplashScreen.java
index f7c42b3..297a5e0 100755 (executable)
@@ -21,6 +21,8 @@ import java.awt.*;
 import java.awt.event.*;
 
 import javax.swing.*;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkListener;
 
 /**
  * DOCUMENT ME!
@@ -28,7 +30,7 @@ import javax.swing.*;
  * @author $author$
  * @version $Revision$
  */
-public class SplashScreen extends JPanel implements Runnable
+public class SplashScreen extends JPanel implements Runnable, HyperlinkListener
 {
   boolean visible = true;
 
@@ -49,18 +51,33 @@ public class SplashScreen extends JPanel implements Runnable
    */
   public SplashScreen()
   {
+    this(false);
+  }
+  private boolean interactiveDialog=false;
+  /**
+   * 
+   * @param interactive if true - an internal dialog is opened rather than a free-floating splash screen
+   */
+  public SplashScreen(boolean interactive)
+  {
+    this.interactiveDialog=interactive;
+    // show a splashscreen that will disapper
     Thread t = new Thread(this);
     t.start();
   }
 
+
   MouseAdapter closer = new MouseAdapter()
   {
     public void mousePressed(MouseEvent evt)
     {
       try
       {
-        visible = false;
-        closeSplash();
+        if (!interactiveDialog)
+        {
+          visible = false;
+          closeSplash();
+        }
       } catch (Exception ex)
       {
       }
@@ -76,7 +93,7 @@ public class SplashScreen extends JPanel implements Runnable
     addMouseListener(closer);
     try
     {
-      java.net.URL url = getClass().getResource("/images/logo.gif");
+      java.net.URL url = getClass().getResource("/images/Jalviewlogo.png");
 
       if (url != null)
       {
@@ -93,7 +110,7 @@ public class SplashScreen extends JPanel implements Runnable
 
     iframe = new JInternalFrame();
     iframe.setFrameIcon(null);
-    iframe.setClosable(false);
+    iframe.setClosable(interactiveDialog);
     this.setLayout(new BorderLayout());
     iframe.setContentPane(this);
     iframe.setLayer(JLayeredPane.PALETTE_LAYER);
@@ -101,16 +118,11 @@ public class SplashScreen extends JPanel implements Runnable
     Desktop.desktop.add(iframe);
     SplashImage splashimg = new SplashImage(image);
     iconimg.add(splashimg, BorderLayout.CENTER);
-    add(iconimg, BorderLayout.WEST);
+    add(iconimg, BorderLayout.NORTH);
     add(authlist, BorderLayout.CENTER);
     authlist.setEditable(false);
     authlist.addMouseListener(closer);
     refreshText();
-    iframe.setVisible(true);
-    iframe.setBounds((int) ((Desktop.instance.getWidth() - 750) / 2),
-            (int) ((Desktop.instance.getHeight() - 160) / 2), 750,
-            iframe.getPreferredSize().height);
-
   }
 
   long oldtext = -1;
@@ -121,11 +133,26 @@ public class SplashScreen extends JPanel implements Runnable
   protected boolean refreshText()
   {
     String newtext = Desktop.instance.getAboutMessage(true).toString();
-    if (oldtext != newtext.hashCode())
+    //System.err.println("Text found: \n"+newtext+"\nEnd of newtext.");
+    if (oldtext != newtext.length())
     {
-      oldtext = newtext.hashCode();
+      iframe.setVisible(false);
+      oldtext = newtext.length();
+      authlist=new JTextPane();
+      authlist.setEditable(false);
+      authlist.addMouseListener(closer);
+      authlist.addHyperlinkListener(this);
       authlist.setContentType("text/html");
       authlist.setText(newtext);
+      authlist.setVisible(true);
+      add(authlist, BorderLayout.CENTER);
+      iframe.setBounds((int) ((Desktop.instance.getWidth() - 750) / 2),
+              (int) ((Desktop.instance.getHeight() - 160) / 2), 750,
+              iframe.getPreferredSize().height);
+      //System.err.println("New preferred size: "+iframe.getPreferredSize().height);
+      iframe.validate();
+      iframe.setVisible(true);
+
       return true;
     }
     return false;
@@ -142,23 +169,30 @@ public class SplashScreen extends JPanel implements Runnable
 
     while (visible)
     {
+      iframe.repaint();
       try
       {
-        Thread.sleep(1000);
+        Thread.sleep(500);
       } catch (Exception ex)
       {
       }
-
-      if (((System.currentTimeMillis() / 1000) - startTime) > 5)
+      
+      if (!interactiveDialog && ((System.currentTimeMillis() / 1000) - startTime) > 5)
       {
         visible = false;
       }
-      else
+
+      if (visible && refreshText())
       {
-        if (refreshText())
-        {
-          repaint();
-        }
+//          if (interactiveDialog) {
+            iframe.repaint();
+//          } else {
+//            iframe.repaint();
+//          };
+      }
+      if (interactiveDialog)
+      {
+        return;
       }
     }
 
@@ -199,7 +233,7 @@ public class SplashScreen extends JPanel implements Runnable
 
       if (image != null)
       {
-        g.drawImage(image, 4, (getHeight() - image.getHeight(this)) / 2,
+        g.drawImage(image, (getWidth() - image.getWidth(this)) / 2, (getHeight() - image.getHeight(this)) / 2,
                 this);
       }
     }
@@ -244,4 +278,10 @@ public class SplashScreen extends JPanel implements Runnable
      * += fontSize + 4); }
      */
   }
+  @Override
+  public void hyperlinkUpdate(HyperlinkEvent e)
+  {
+    Desktop.hyperlinkUpdate(e);
+    
+  }
 }
\ No newline at end of file