splashscreen activated
[jalview.git] / src / jalview / gui / Desktop.java
1 /********************\r
2  * 2004 Jalview Reengineered\r
3  * Barton Group\r
4  * Dundee University\r
5  *\r
6  * AM Waterhouse\r
7  *******************/\r
8 \r
9 \r
10 package jalview.gui;\r
11 \r
12 import jalview.gui.*;\r
13 import jalview.io.*;\r
14 import jalview.datamodel.*;\r
15 import javax.swing.*;\r
16 import java.awt.*;\r
17 import java.awt.event.*;\r
18 \r
19 \r
20 public class Desktop extends jalview.jbgui.GDesktop\r
21 {\r
22   public static JDesktopPane desktop;\r
23   static int openFrameCount = 0;\r
24   static final int xOffset = 30, yOffset = 30;\r
25   static boolean splashScreenVisible = false;\r
26 \r
27   public Desktop()\r
28   {\r
29     Image image =null;\r
30     try{\r
31       java.net.URL url = getClass().getResource("/BartonGroupBanner.gif");\r
32       if(url!=null)\r
33       {\r
34         image = java.awt.Toolkit.getDefaultToolkit().createImage(url);\r
35         MediaTracker mt = new MediaTracker(this);\r
36         mt.addImage(image, 0);\r
37         mt.waitForID(0);\r
38         setIconImage(image);\r
39       }\r
40 \r
41     }catch(Exception ex){}\r
42 \r
43     setTitle("Jalview 2005");\r
44     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\r
45     setVisible(true);\r
46     desktop = new JDesktopPane();\r
47     setContentPane(desktop);\r
48     desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);\r
49 \r
50     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();\r
51     setBounds( (int)(screenSize.getWidth()-1200)/2,\r
52                (int)(screenSize.getHeight()-800)/2,\r
53               1200 ,\r
54               800);\r
55 \r
56 \r
57    /////////Add a splashscreen on startup\r
58     JInternalFrame frame = new JInternalFrame();\r
59 \r
60     SplashScreen splash = new SplashScreen(frame, image);\r
61     frame.setContentPane(splash);\r
62     addInternalFrame(frame, "",820,200);\r
63     splashScreenVisible = true;\r
64 \r
65     frame.setLocation( (int)((getWidth()-820) /2), (int)((getHeight()-240) /2));\r
66     frame.setClosable(false);\r
67     frame.setIconifiable(false);\r
68     frame.setMaximizable(false);\r
69     frame.setFrameIcon(null);\r
70   }\r
71 \r
72   public static void splashScreenClosing()\r
73   {\r
74     splashScreenVisible = false;\r
75     JInternalFrame [] frames  = desktop.getAllFrames();\r
76     for(int i=0; i<frames.length; i++)\r
77     {\r
78       frames[i].invalidate();\r
79       frames[i].setVisible(true);\r
80       frames[i].validate();\r
81     }\r
82   }\r
83 \r
84   public static void addInternalFrame(final JInternalFrame frame, String title, int w, int h)\r
85   {\r
86    if(!splashScreenVisible)\r
87       frame.setVisible(true); //necessary as of 1.3\r
88    desktop.add(frame);\r
89    openFrameCount++;\r
90    try {\r
91        frame.setSelected(true);\r
92    } catch (java.beans.PropertyVetoException e) {}\r
93    frame.setTitle(title);\r
94    frame.setResizable(true);\r
95    frame.setSize(w,h);\r
96    frame.setClosable(true);\r
97    frame.setMaximizable(true);\r
98    frame.setIconifiable(true);\r
99    frame.setLocation(xOffset*openFrameCount, yOffset*openFrameCount);\r
100    frame.toFront();\r
101    final JMenuItem menuItem = new JMenuItem(title);\r
102    frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()\r
103                                    { public void internalFrameClosed(javax.swing.event.InternalFrameEvent evt)\r
104                                      {\r
105                                        openFrameCount--;\r
106                                        windowMenu.remove(menuItem);\r
107                                      };\r
108                                    });\r
109 \r
110    menuItem.addActionListener(new ActionListener()\r
111     {\r
112       public void actionPerformed(ActionEvent e)\r
113       {\r
114         try{  frame.setSelected(true);   frame.setIcon(false); }\r
115         catch(java.beans.PropertyVetoException ex){};\r
116       }\r
117     });\r
118 \r
119    windowMenu.add(menuItem);\r
120  }\r
121 \r
122 \r
123 \r
124  public void inputLocalFileMenuItem_actionPerformed(ActionEvent e)\r
125  {\r
126    JFileChooser chooser = new JFileChooser(jalview.bin.Cache.LAST_DIRECTORY);\r
127    chooser.setDialogTitle("Open local file");\r
128    chooser.setToolTipText("Open");\r
129    int value = chooser.showOpenDialog(this);\r
130    if(value == JFileChooser.APPROVE_OPTION)\r
131    {\r
132      String choice =  chooser.getSelectedFile().getPath();\r
133      jalview.bin.Cache.LAST_DIRECTORY = choice;\r
134      String format = IdentifyFile.Identify(choice, "File");\r
135      LoadFile(choice, "File", format);\r
136    }\r
137  }\r
138 \r
139  public void LoadFile(String file, String protocol,  String format)\r
140  {\r
141    SequenceI [] sequences = null;\r
142 \r
143    if (FormatProperties.contains(format))\r
144        sequences = FormatAdapter.read(file, protocol, format);\r
145 \r
146    if (sequences != null)\r
147    {\r
148      AlignFrame af = new AlignFrame(new Alignment(sequences));\r
149      addInternalFrame(af, file, 700, 500);\r
150      af.statusBar.setText("Successfully loaded file " + file);\r
151 \r
152 \r
153    }\r
154    else\r
155      JOptionPane.showInternalMessageDialog(this,  "Couldn't open file.\n"\r
156                           + "Formats currently supported are\n"\r
157                           + "Fasta, MSF, Clustal, BLC, PIR, MSP or PFAM"\r
158                           ,"Error loading file",\r
159                                    JOptionPane.WARNING_MESSAGE);\r
160 \r
161  }\r
162 \r
163  public void inputURLMenuItem_actionPerformed(ActionEvent e)\r
164  {\r
165    String url = JOptionPane.showInternalInputDialog(this,"Enter url of input file",\r
166                                             "Input alignment from URL",\r
167                                             JOptionPane.QUESTION_MESSAGE);\r
168    if (url == null)\r
169      return;\r
170 \r
171    String format = IdentifyFile.Identify(url, "URL");\r
172 \r
173    System.out.println(format +" format");\r
174    if (format.equals("URL NOT FOUND"))\r
175    {\r
176      JOptionPane.showInternalMessageDialog(this,"Couldn't locate " + url,\r
177                                    "URL not found",\r
178                                    JOptionPane.WARNING_MESSAGE);\r
179      return;\r
180    }\r
181 \r
182     LoadFile(url, "URL", format);\r
183  }\r
184 \r
185  public void inputTextboxMenuItem_actionPerformed(ActionEvent e)\r
186  {\r
187    CutAndPasteTransfer cap = new CutAndPasteTransfer(true);\r
188    int accept =  JOptionPane.showInternalOptionDialog(desktop, cap, "Cut & paste Alignment File",\r
189                                        JOptionPane.YES_NO_CANCEL_OPTION,\r
190                                        JOptionPane.PLAIN_MESSAGE,\r
191                                        null,\r
192                                        new Object[]{"Accept", "Cancel", }, null);\r
193 \r
194 \r
195   if(accept == JOptionPane.YES_OPTION)\r
196   {\r
197     String format = IdentifyFile.Identify(cap.getText(), "Paste");\r
198     SequenceI [] sequences = null;\r
199 \r
200     if (FormatProperties.contains( format ))\r
201       sequences = FormatAdapter.read(cap.getText(), "Paste", format);\r
202 \r
203 \r
204       if(sequences!=null)\r
205       {\r
206         AlignFrame af = new AlignFrame(new Alignment(sequences));\r
207         addInternalFrame(af, "Cut & Paste input - "+format, 700, 500);\r
208         af.statusBar.setText("Successfully pasted alignment file");\r
209       }\r
210       else\r
211         JOptionPane.showInternalMessageDialog(this, "Couldn't read the pasted text.\n"\r
212                                       +"Formats currently supported are\n"\r
213                                       +"Fasta, MSF, Clustal, BLC, PIR, MSP or PFAM",\r
214                                       "Error parsing text", JOptionPane.WARNING_MESSAGE);\r
215 \r
216 \r
217    }\r
218  }\r
219 \r
220 /*\r
221 * Exit the program\r
222 */\r
223  public void quit_actionPerformed(ActionEvent e)\r
224  {\r
225    this.setVisible(false);\r
226    System.exit(0);\r
227  }\r
228 \r
229 \r
230  protected void colourIndexMenuItem_actionPerformed(ActionEvent e)\r
231  {\r
232    ColourKey colourKey = new ColourKey(null);\r
233    addInternalFrame(colourKey, "Colour scheme key", 400, 320);\r
234  }\r
235 \r
236 \r
237  public void aboutMenuItem_actionPerformed(ActionEvent e)\r
238  {\r
239    JOptionPane.showInternalMessageDialog(desktop,\r
240                                          "JalView 2005"\r
241                                        +"\nAuthors:  Michele Clamp, James Cuff, Steve Searle, Andrew Waterhouse and Geoff Barton."\r
242                                        +"\nCurrent development managed by Andrew Waterhouse; Barton Group, University of Dundee."\r
243                                        +"\nIf  you use JalView, please cite:  \"Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004), The Jalview Java Alignment Editor\"",\r
244                                          "About Jalview",\r
245                                          JOptionPane.INFORMATION_MESSAGE);\r
246  }\r
247 \r
248  public void documentationMenuItem_actionPerformed(ActionEvent e)\r
249  {\r
250    try{\r
251      jalview.util.BrowserLauncher.openURL("http://jalview.org/documentation.html");\r
252    }catch(Exception ex){}\r
253  }\r
254 \r
255 \r
256 }\r