still trying to prevent null painting
[jalview.git] / src / jalview / gui / SplashScreen.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4  *\r
5  * This program is free software; you can redistribute it and/or\r
6  * modify it under the terms of the GNU General Public License\r
7  * as published by the Free Software Foundation; either version 2\r
8  * of the License, or (at your option) any later version.\r
9  *\r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  *\r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program; if not, write to the Free Software\r
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18  */\r
19 package jalview.gui;\r
20 \r
21 import java.awt.*;\r
22 import java.awt.event.*;\r
23 import javax.swing.*;\r
24 \r
25 /**\r
26  * DOCUMENT ME!\r
27  *\r
28  * @author $author$\r
29  * @version $Revision$\r
30  */\r
31 public class SplashScreen\r
32     extends JPanel implements Runnable\r
33 {\r
34   boolean visible = true;\r
35   JInternalFrame iframe;\r
36   Image image;\r
37   int fontSize = 11;\r
38   int yoffset = 30;\r
39 \r
40   /**\r
41    * Creates a new SplashScreen object.\r
42    *\r
43    * @param iframe DOCUMENT ME!\r
44    * @param i DOCUMENT ME!\r
45    */\r
46   public SplashScreen()\r
47   {\r
48     try\r
49     {\r
50       java.net.URL url = getClass().getResource("/images/logo.gif");\r
51 \r
52       if (url != null)\r
53       {\r
54         image = java.awt.Toolkit.getDefaultToolkit().createImage(url);\r
55 \r
56         MediaTracker mt = new MediaTracker(this);\r
57         mt.addImage(image, 0);\r
58         mt.waitForID(0);\r
59         Desktop.instance.setIconImage(image);\r
60       }\r
61     }\r
62     catch (Exception ex)\r
63     {\r
64     }\r
65 \r
66     Thread t = new Thread(this);\r
67     t.start();\r
68     addMouseListener(new MouseAdapter()\r
69     {\r
70       public void mousePressed(MouseEvent evt)\r
71       {\r
72         try\r
73         {\r
74           closeSplash();\r
75         }\r
76         catch (Exception ex)\r
77         {\r
78         }\r
79       }\r
80     });\r
81 \r
82     iframe = new JInternalFrame();\r
83     iframe.setFrameIcon(null);\r
84     iframe.setClosable(false);\r
85     iframe.setContentPane(this);\r
86     iframe.setLayer(JLayeredPane.PALETTE_LAYER);\r
87 \r
88     Desktop.desktop.add(iframe);\r
89 \r
90     iframe.setVisible(true);\r
91     iframe.setBounds( (int) ( (Desktop.instance.getWidth() - 750) / 2),\r
92                       (int) ( (Desktop.instance.getHeight() - 160) / 2),\r
93                       750, 160);\r
94   }\r
95 \r
96   /**\r
97    * DOCUMENT ME!\r
98    */\r
99   public void run()\r
100   {\r
101     long startTime = System.currentTimeMillis() / 1000;\r
102 \r
103     while (visible)\r
104     {\r
105       try\r
106       {\r
107         Thread.sleep(1000);\r
108       }\r
109       catch (Exception ex)\r
110       {\r
111       }\r
112 \r
113       if ( ( (System.currentTimeMillis() / 1000) - startTime) > 5)\r
114       {\r
115         visible = false;\r
116       }\r
117       else\r
118         repaint();\r
119     }\r
120 \r
121     closeSplash();\r
122   }\r
123 \r
124   /**\r
125    * DOCUMENT ME!\r
126    */\r
127   public void closeSplash()\r
128   {\r
129     try\r
130     {\r
131 \r
132       iframe.setClosed(true);\r
133     }\r
134     catch (Exception ex)\r
135     {  }\r
136   }\r
137 \r
138   /**\r
139    * DOCUMENT ME!\r
140    *\r
141    * @param g DOCUMENT ME!\r
142    */\r
143   public void paintComponent(Graphics g)\r
144   {\r
145     g.setColor(Color.white);\r
146     g.fillRect(0, 0, getWidth(), getHeight());\r
147     g.setColor(Color.black);\r
148     g.setFont(new Font("Verdana", Font.BOLD, fontSize + 6));\r
149 \r
150     if (image != null)\r
151     {\r
152       g.drawImage(image, 5, yoffset + 12, this);\r
153     }\r
154 \r
155     int y = yoffset;\r
156 \r
157     g.drawString("Jalview " + jalview.bin.Cache.getProperty("VERSION"), 50, y);\r
158 \r
159     FontMetrics fm = g.getFontMetrics();\r
160     int vwidth = fm.stringWidth("Jalview " +\r
161                                 jalview.bin.Cache.getProperty("VERSION"));\r
162     g.setFont(new Font("Verdana", Font.BOLD, fontSize + 2));\r
163     g.drawString("Last updated: " +\r
164                  jalview.bin.Cache.getDefault("BUILD_DATE", "unknown"),\r
165                  50 + vwidth + 5, y);\r
166 \r
167     if (jalview.bin.Cache.getDefault("LATEST_VERSION",\r
168         "Checking").equals("Checking"))\r
169     {\r
170       // Displayed when code version and jnlp version do not match\r
171       g.drawString("...Checking latest version...",\r
172                    50, y += fontSize + 10);\r
173       y += 5;\r
174       g.setColor(Color.black);\r
175     }\r
176     else if (!jalview.bin.Cache.getDefault("LATEST_VERSION", "Checking").equals(\r
177         jalview.bin.Cache.getProperty("VERSION")))\r
178     {\r
179       // Displayed when code version and jnlp version do not match\r
180       g.setColor(Color.red);\r
181       g.drawString("!! Jalview version " +\r
182                    jalview.bin.Cache.getDefault("LATEST_VERSION",\r
183                                                 "..Checking..")\r
184                    +\r
185                    " is available for download from http://www.jalview.org !!",\r
186                    50, y += fontSize + 10);\r
187       y += 5;\r
188       g.setColor(Color.black);\r
189     }\r
190 \r
191     g.setFont(new Font("Verdana", Font.BOLD, fontSize));\r
192     g.drawString("Authors: Michele Clamp, James Cuff, Steve Searle, Andrew Waterhouse, Jim Procter & Geoff Barton.",\r
193                  50, y += fontSize + 4);\r
194     g.drawString("Current development managed by Andrew Waterhouse; Barton Group, University of Dundee.",\r
195                  50, y += fontSize + 4);\r
196     g.drawString("If  you use JalView, please cite: Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004),",\r
197                  50, y += fontSize + 4);\r
198     g.drawString(\r
199         "\"The Jalview Java Alignment Editor\" Bioinformatics,  2004 20; 426-7.",\r
200         50, y += fontSize + 4);\r
201   }\r
202 }\r