8b92644a39cbafbcdd34be4074469800f1ae7491
[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         repaint();\r
109       }\r
110       catch (Exception ex)\r
111       {\r
112       }\r
113 \r
114       if ( ( (System.currentTimeMillis() / 1000) - startTime) > 5)\r
115       {\r
116         visible = false;\r
117       }\r
118     }\r
119 \r
120     closeSplash();\r
121   }\r
122 \r
123   /**\r
124    * DOCUMENT ME!\r
125    */\r
126   public void closeSplash()\r
127   {\r
128     try\r
129     {\r
130 \r
131       iframe.setClosed(true);\r
132     }\r
133     catch (Exception ex)\r
134     {  }\r
135   }\r
136 \r
137   /**\r
138    * DOCUMENT ME!\r
139    *\r
140    * @param g DOCUMENT ME!\r
141    */\r
142   public void paintComponent(Graphics g)\r
143   {\r
144     g.setColor(Color.white);\r
145     g.fillRect(0, 0, getWidth(), getHeight());\r
146     g.setColor(Color.black);\r
147     g.setFont(new Font("Verdana", Font.BOLD, fontSize + 6));\r
148 \r
149     if (image != null)\r
150     {\r
151       g.drawImage(image, 5, yoffset + 12, this);\r
152     }\r
153 \r
154     int y = yoffset;\r
155 \r
156     g.drawString("Jalview " + jalview.bin.Cache.getProperty("VERSION"), 50, y);\r
157 \r
158     FontMetrics fm = g.getFontMetrics();\r
159     int vwidth = fm.stringWidth("Jalview " +\r
160                                 jalview.bin.Cache.getProperty("VERSION"));\r
161     g.setFont(new Font("Verdana", Font.BOLD, fontSize + 2));\r
162     g.drawString("Last updated: " +\r
163                  jalview.bin.Cache.getDefault("BUILD_DATE", "unknown"),\r
164                  50 + vwidth + 5, y);\r
165 \r
166     if (jalview.bin.Cache.getDefault("LATEST_VERSION",\r
167         "Checking").equals("Checking"))\r
168     {\r
169       // Displayed when code version and jnlp version do not match\r
170       g.drawString("...Checking latest version...",\r
171                    50, y += fontSize + 10);\r
172       y += 5;\r
173       g.setColor(Color.black);\r
174     }\r
175     else if (!jalview.bin.Cache.getDefault("LATEST_VERSION", "Checking").equals(\r
176         jalview.bin.Cache.getProperty("VERSION")))\r
177     {\r
178       // Displayed when code version and jnlp version do not match\r
179       g.setColor(Color.red);\r
180       g.drawString("!! Jalview version " +\r
181                    jalview.bin.Cache.getDefault("LATEST_VERSION",\r
182                                                 "..Checking..")\r
183                    +\r
184                    " is available for download from http://www.jalview.org !!",\r
185                    50, y += fontSize + 10);\r
186       y += 5;\r
187       g.setColor(Color.black);\r
188     }\r
189 \r
190     g.setFont(new Font("Verdana", Font.BOLD, fontSize));\r
191     g.drawString("Authors: Michele Clamp, James Cuff, Steve Searle, Andrew Waterhouse, Jim Procter & Geoff Barton.",\r
192                  50, y += fontSize + 4);\r
193     g.drawString("Current development managed by Andrew Waterhouse; Barton Group, University of Dundee.",\r
194                  50, y += fontSize + 4);\r
195     g.drawString("If  you use JalView, please cite: Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004),",\r
196                  50, y += fontSize + 4);\r
197     g.drawString(\r
198         "\"The Jalview Java Alignment Editor\" Bioinformatics,  2004 20; 426-7.",\r
199         50, y += fontSize + 4);\r
200   }\r
201 }\r