Splash screen is not added using normal method, prevents null paint bug
[jalview.git] / src / jalview / gui / SplashScreen.java
index 7fc4439..8b92644 100755 (executable)
+/*\r
+ * Jalview - A Sequence Alignment Editor and Viewer\r
+ * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
+ */\r
 package jalview.gui;\r
 \r
-import javax.swing.*;\r
 import java.awt.*;\r
 import java.awt.event.*;\r
+import javax.swing.*;\r
 \r
-public class SplashScreen extends JPanel implements Runnable\r
+/**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @author $author$\r
+ * @version $Revision$\r
+ */\r
+public class SplashScreen\r
+    extends JPanel implements Runnable\r
 {\r
   boolean visible = true;\r
   JInternalFrame iframe;\r
   Image image;\r
+  int fontSize = 11;\r
+  int yoffset = 30;\r
 \r
-  public SplashScreen(JInternalFrame iframe, Image i)\r
+  /**\r
+   * Creates a new SplashScreen object.\r
+   *\r
+   * @param iframe DOCUMENT ME!\r
+   * @param i DOCUMENT ME!\r
+   */\r
+  public SplashScreen()\r
   {\r
-    this.iframe = iframe;\r
-    image = i;\r
+    try\r
+    {\r
+      java.net.URL url = getClass().getResource("/images/logo.gif");\r
+\r
+      if (url != null)\r
+      {\r
+        image = java.awt.Toolkit.getDefaultToolkit().createImage(url);\r
+\r
+        MediaTracker mt = new MediaTracker(this);\r
+        mt.addImage(image, 0);\r
+        mt.waitForID(0);\r
+        Desktop.instance.setIconImage(image);\r
+      }\r
+    }\r
+    catch (Exception ex)\r
+    {\r
+    }\r
+\r
     Thread t = new Thread(this);\r
     t.start();\r
     addMouseListener(new MouseAdapter()\r
-    { public void mousePressed(MouseEvent evt)\r
+    {\r
+      public void mousePressed(MouseEvent evt)\r
       {\r
         try\r
-        {   closeSplash();  }\r
+        {\r
+          closeSplash();\r
+        }\r
         catch (Exception ex)\r
-        {}\r
+        {\r
+        }\r
       }\r
-      });\r
-  }\r
+    });\r
 \r
+    iframe = new JInternalFrame();\r
+    iframe.setFrameIcon(null);\r
+    iframe.setClosable(false);\r
+    iframe.setContentPane(this);\r
+    iframe.setLayer(JLayeredPane.PALETTE_LAYER);\r
 \r
+    Desktop.desktop.add(iframe);\r
+\r
+    iframe.setVisible(true);\r
+    iframe.setBounds( (int) ( (Desktop.instance.getWidth() - 750) / 2),\r
+                      (int) ( (Desktop.instance.getHeight() - 160) / 2),\r
+                      750, 160);\r
+  }\r
+\r
+  /**\r
+   * DOCUMENT ME!\r
+   */\r
   public void run()\r
   {\r
-    long startTime =  System.currentTimeMillis()/1000;\r
+    long startTime = System.currentTimeMillis() / 1000;\r
 \r
-    while( visible )\r
+    while (visible)\r
     {\r
-      if( System.currentTimeMillis()/1000 - startTime > 5)\r
-        visible = false;\r
+      try\r
+      {\r
+        Thread.sleep(1000);\r
+        repaint();\r
+      }\r
+      catch (Exception ex)\r
+      {\r
+      }\r
 \r
-      try{\r
-        Thread.sleep(400);\r
-        iframe.setSelected(true);\r
+      if ( ( (System.currentTimeMillis() / 1000) - startTime) > 5)\r
+      {\r
+        visible = false;\r
       }\r
-      catch(Exception ex){}\r
     }\r
 \r
     closeSplash();\r
-\r
   }\r
 \r
+  /**\r
+   * DOCUMENT ME!\r
+   */\r
   public void closeSplash()\r
   {\r
     try\r
     {\r
+\r
       iframe.setClosed(true);\r
     }\r
     catch (Exception ex)\r
-    {}\r
-\r
+    {  }\r
   }\r
 \r
-  int fontSize = 11;\r
-  int yoffset = 30;\r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param g DOCUMENT ME!\r
+   */\r
   public void paintComponent(Graphics g)\r
   {\r
     g.setColor(Color.white);\r
-    g.fillRect(0,0,getWidth(),getHeight());\r
+    g.fillRect(0, 0, getWidth(), getHeight());\r
     g.setColor(Color.black);\r
-    g.setFont( new Font("Verdana", Font.BOLD, fontSize+6));\r
-    if(image!=null)\r
-    g.drawImage(image, 5,yoffset+12,this);\r
-    g.drawString("JalView 2005 ", 50,yoffset);\r
-    g.setFont( new Font("Verdana", Font.BOLD, fontSize+2));\r
-    g.drawString("Version "+jalview.bin.Cache.VERSION+"; Last updated: "+jalview.bin.Cache.BUILD_DATE, 180,yoffset);\r
-    g.setFont( new Font("Verdana", Font.BOLD, fontSize));\r
-    g.drawString("Authors: Michele Clamp, James Cuff, Steve Searle, Andrew Waterhouse, Jim Procter & Geoff Barton.",50,yoffset+20);\r
-    g.drawString("Current development managed by Andrew Waterhouse; Barton Group, University of Dundee.",50,yoffset+24+fontSize);\r
-    g.drawString("If  you use JalView, please cite: Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004),",50,yoffset+28+fontSize*2);\r
-    g.drawString("\"The Jalview Java Alignment Editor\" Bioinformatics,  2004 12;426-7.",50,yoffset+32+fontSize*3);\r
+    g.setFont(new Font("Verdana", Font.BOLD, fontSize + 6));\r
 \r
-  }\r
+    if (image != null)\r
+    {\r
+      g.drawImage(image, 5, yoffset + 12, this);\r
+    }\r
+\r
+    int y = yoffset;\r
 \r
+    g.drawString("Jalview " + jalview.bin.Cache.getProperty("VERSION"), 50, y);\r
+\r
+    FontMetrics fm = g.getFontMetrics();\r
+    int vwidth = fm.stringWidth("Jalview " +\r
+                                jalview.bin.Cache.getProperty("VERSION"));\r
+    g.setFont(new Font("Verdana", Font.BOLD, fontSize + 2));\r
+    g.drawString("Last updated: " +\r
+                 jalview.bin.Cache.getDefault("BUILD_DATE", "unknown"),\r
+                 50 + vwidth + 5, y);\r
+\r
+    if (jalview.bin.Cache.getDefault("LATEST_VERSION",\r
+        "Checking").equals("Checking"))\r
+    {\r
+      // Displayed when code version and jnlp version do not match\r
+      g.drawString("...Checking latest version...",\r
+                   50, y += fontSize + 10);\r
+      y += 5;\r
+      g.setColor(Color.black);\r
+    }\r
+    else if (!jalview.bin.Cache.getDefault("LATEST_VERSION", "Checking").equals(\r
+        jalview.bin.Cache.getProperty("VERSION")))\r
+    {\r
+      // Displayed when code version and jnlp version do not match\r
+      g.setColor(Color.red);\r
+      g.drawString("!! Jalview version " +\r
+                   jalview.bin.Cache.getDefault("LATEST_VERSION",\r
+                                                "..Checking..")\r
+                   +\r
+                   " is available for download from http://www.jalview.org !!",\r
+                   50, y += fontSize + 10);\r
+      y += 5;\r
+      g.setColor(Color.black);\r
+    }\r
+\r
+    g.setFont(new Font("Verdana", Font.BOLD, fontSize));\r
+    g.drawString("Authors: Michele Clamp, James Cuff, Steve Searle, Andrew Waterhouse, Jim Procter & Geoff Barton.",\r
+                 50, y += fontSize + 4);\r
+    g.drawString("Current development managed by Andrew Waterhouse; Barton Group, University of Dundee.",\r
+                 50, y += fontSize + 4);\r
+    g.drawString("If  you use JalView, please cite: Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004),",\r
+                 50, y += fontSize + 4);\r
+    g.drawString(\r
+        "\"The Jalview Java Alignment Editor\" Bioinformatics,  2004 20; 426-7.",\r
+        50, y += fontSize + 4);\r
+  }\r
 }\r