setbackground white
[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 jalview.schemes.*;\r
16 import javax.swing.*;\r
17 import java.awt.*;\r
18 import java.awt.event.*;\r
19 \r
20 \r
21 public class Desktop extends jalview.jbgui.GDesktop\r
22 {\r
23   public static JDesktopPane desktop;\r
24   static int openFrameCount = 0;\r
25   static final int xOffset = 30, yOffset = 30;\r
26 \r
27   public Desktop()\r
28   {\r
29     Image image =null;\r
30     try{\r
31       java.net.URL url = getClass().getResource("/images/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     desktop.setBackground(Color.white);\r
48     setContentPane(desktop);\r
49     desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);\r
50 \r
51     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();\r
52     int width = 900, height = 650;\r
53     if(screenSize.getWidth()<width)\r
54       width = screenSize.width;\r
55     if(screenSize.getHeight()<height)\r
56       height = screenSize.height;\r
57 \r
58     setBounds( (int)(screenSize.width-width)/2,\r
59                (int)(screenSize.height-height)/2,\r
60               width ,\r
61               height);\r
62 \r
63 \r
64    /////////Add a splashscreen on startup\r
65     JInternalFrame frame = new JInternalFrame();\r
66 \r
67     SplashScreen splash = new SplashScreen(frame, image);\r
68     frame.setContentPane(splash);\r
69     desktop.add(frame);\r
70     frame.setVisible(true);\r
71     openFrameCount++;\r
72     try\r
73     {\r
74       frame.setSelected(true);\r
75     }\r
76     catch (java.beans.PropertyVetoException e)\r
77     {}\r
78     frame.setResizable(true);\r
79     frame.setSize(845, 200);\r
80     frame.setLocation( (int)((getWidth()-845) /2), (int)((getHeight()-240) /2));\r
81     frame.setClosable(false);\r
82     frame.setIconifiable(false);\r
83     frame.setMaximizable(false);\r
84     frame.setFrameIcon(null);\r
85 \r
86   }\r
87 \r
88   public static void addInternalFrame(final JInternalFrame frame, String title, int w, int h)\r
89   {\r
90    desktop.add(frame);\r
91    frame.setVisible(true);\r
92    openFrameCount++;\r
93    try {\r
94        frame.setSelected(true);\r
95    } catch (java.beans.PropertyVetoException e) {}\r
96    frame.setTitle(title);\r
97    frame.setResizable(true);\r
98    frame.setSize(w,h);\r
99    frame.setClosable(true);\r
100    frame.setMaximizable(true);\r
101    frame.setIconifiable(true);\r
102    frame.setLocation(xOffset*openFrameCount, yOffset*openFrameCount);\r
103    frame.toFront();\r
104    final JMenuItem menuItem = new JMenuItem(title);\r
105    frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()\r
106                                    { public void internalFrameClosed(javax.swing.event.InternalFrameEvent evt)\r
107                                      {\r
108                                        openFrameCount--;\r
109                                        windowMenu.remove(menuItem);\r
110                                      };\r
111                                    });\r
112 \r
113    menuItem.addActionListener(new ActionListener()\r
114     {\r
115       public void actionPerformed(ActionEvent e)\r
116       {\r
117         try{  frame.setSelected(true);   frame.setIcon(false); }\r
118         catch(java.beans.PropertyVetoException ex){};\r
119       }\r
120     });\r
121 \r
122    windowMenu.add(menuItem);\r
123  }\r
124 \r
125 \r
126 \r
127  public void inputLocalFileMenuItem_actionPerformed(ActionEvent e)\r
128  {\r
129    JFileChooser chooser = new JFileChooser(jalview.bin.Cache.getProperty("LAST_DIRECTORY"));\r
130    chooser.setFileView(new JalviewFileView());\r
131    chooser.setDialogTitle("Open local file");\r
132    chooser.setToolTipText("Open");\r
133    int value = chooser.showOpenDialog(this);\r
134    if(value == JFileChooser.APPROVE_OPTION)\r
135    {\r
136      String choice =  chooser.getSelectedFile().getPath();\r
137      jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);\r
138      String format = IdentifyFile.Identify(choice, "File");\r
139      LoadFile(choice, "File", format);\r
140    }\r
141  }\r
142 \r
143  public void LoadFile(String file, String protocol,  String format)\r
144  {\r
145    SequenceI [] sequences = null;\r
146 \r
147    if (FormatProperties.contains(format))\r
148        sequences = FormatAdapter.read(file, protocol, format);\r
149 \r
150    if (sequences != null)\r
151    {\r
152      AlignFrame af = new AlignFrame(new Alignment(sequences));\r
153      addInternalFrame(af, file, 700, 500);\r
154      af.statusBar.setText("Successfully loaded file " + file);\r
155 \r
156 \r
157    }\r
158    else\r
159      JOptionPane.showInternalMessageDialog(Desktop.desktop,  "Couldn't open file.\n"\r
160                           + "Formats currently supported are\n"\r
161                           + "Fasta, MSF, Clustal, BLC, PIR, MSP or PFAM"\r
162                           ,"Error loading file",\r
163                                    JOptionPane.WARNING_MESSAGE);\r
164 \r
165  }\r
166 \r
167  public void inputURLMenuItem_actionPerformed(ActionEvent e)\r
168  {\r
169    String url = JOptionPane.showInternalInputDialog(Desktop.desktop,"Enter url of input file",\r
170                                             "Input alignment from URL",\r
171                                             JOptionPane.QUESTION_MESSAGE);\r
172    if (url == null)\r
173      return;\r
174 \r
175    String format = IdentifyFile.Identify(url, "URL");\r
176 \r
177    System.out.println(format +" format");\r
178    if (format.equals("URL NOT FOUND"))\r
179    {\r
180      JOptionPane.showInternalMessageDialog(Desktop.desktop,"Couldn't locate " + url,\r
181                                    "URL not found",\r
182                                    JOptionPane.WARNING_MESSAGE);\r
183      return;\r
184    }\r
185 \r
186     LoadFile(url, "URL", format);\r
187  }\r
188 \r
189  public void inputTextboxMenuItem_actionPerformed(ActionEvent e)\r
190  {\r
191    CutAndPasteTransfer cap = new CutAndPasteTransfer(true);\r
192    int accept =  JOptionPane.showInternalOptionDialog(Desktop.desktop, cap, "Cut & paste Alignment File",\r
193                                        JOptionPane.YES_NO_CANCEL_OPTION,\r
194                                        JOptionPane.PLAIN_MESSAGE,\r
195                                        null,\r
196                                        new Object[]{"Accept", "Cancel", }, null);\r
197 \r
198 \r
199   if(accept == JOptionPane.YES_OPTION)\r
200   {\r
201     String format = IdentifyFile.Identify(cap.getText(), "Paste");\r
202     SequenceI [] sequences = null;\r
203 \r
204     if (FormatProperties.contains( format ))\r
205       sequences = FormatAdapter.read(cap.getText(), "Paste", format);\r
206 \r
207 \r
208       if(sequences!=null)\r
209       {\r
210         AlignFrame af = new AlignFrame(new Alignment(sequences));\r
211         addInternalFrame(af, "Cut & Paste input - "+format, 700, 500);\r
212         af.statusBar.setText("Successfully pasted alignment file");\r
213       }\r
214       else\r
215         JOptionPane.showInternalMessageDialog(Desktop.desktop, "Couldn't read the pasted text.\n"\r
216                                       +"Formats currently supported are\n"\r
217                                       +"Fasta, MSF, Clustal, BLC, PIR, MSP or PFAM",\r
218                                       "Error parsing text", JOptionPane.WARNING_MESSAGE);\r
219 \r
220    }\r
221  }\r
222 \r
223 /*\r
224 * Exit the program\r
225 */\r
226  public void quit_actionPerformed(ActionEvent e)\r
227  {\r
228    if(jalview.bin.Jalview.applet!=null)\r
229      jalview.bin.Jalview.applet.destroy();\r
230     else\r
231       System.exit(0);\r
232  }\r
233 \r
234 \r
235 \r
236  public void aboutMenuItem_actionPerformed(ActionEvent e)\r
237  {\r
238    JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
239                                          "JalView 2005"\r
240                                        +"\nAuthors:  Michele Clamp, James Cuff, Steve Searle, Andrew Waterhouse, Jim Procter & Geoff Barton."\r
241                                        +"\nCurrent development managed by Andrew Waterhouse; Barton Group, University of Dundee."\r
242                                        +"\nIf  you use JalView, please cite:  \"Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004), The Jalview Java Alignment Editor\"",\r
243                                          "About Jalview",\r
244                                          JOptionPane.INFORMATION_MESSAGE);\r
245  }\r
246 \r
247  public void documentationMenuItem_actionPerformed(ActionEvent e)\r
248  {\r
249    try\r
250    {\r
251       ClassLoader cl = jalview.gui.Desktop.class.getClassLoader();\r
252       java.net.URL url = javax.help.HelpSet.findHelpSet(cl,"help/help");\r
253       javax.help.HelpSet hs = new javax.help.HelpSet(cl,url);\r
254 \r
255       javax.help.HelpBroker hb = hs.createHelpBroker();\r
256       hb.setLocation(new Point(200, 50));\r
257       hb.setSize(new Dimension(800,700));\r
258       hb.setCurrentID("home");\r
259       hb.setDisplayed(true);\r
260    }\r
261    catch (Exception ex)\r
262    {\r
263      ex.printStackTrace();\r
264    }\r
265  }\r
266 \r
267  static JInternalFrame conservationSlider;\r
268  static JInternalFrame PIDSlider;\r
269  public static int setConservationSliderSource(AlignmentPanel ap, ColourSchemeI cs, String source)\r
270  {\r
271    SliderPanel sp = null;\r
272 \r
273    if(conservationSlider == null)\r
274    {\r
275      sp = new SliderPanel(ap, 30, true, cs);\r
276      conservationSlider = new JInternalFrame();\r
277      conservationSlider.setContentPane(sp);\r
278      conservationSlider.setResizable(false);\r
279      addInternalFrame(conservationSlider, "Conservation Colour Increment  ("+source+")", 420, 90);\r
280      conservationSlider.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()\r
281                   {\r
282                     public void internalFrameClosed(javax.swing.event.InternalFrameEvent e)\r
283                     {\r
284                       conservationSlider = null;\r
285                     }\r
286                   });\r
287    }\r
288    else\r
289    {\r
290        conservationSlider.setTitle("Conservation Colour Increment  ("+source+")");\r
291        sp = (SliderPanel)conservationSlider.getContentPane();\r
292        sp.cs = cs;\r
293    }\r
294 \r
295    if(ap.av.alignment.getGroups()!=null)\r
296      sp.setAllGroupsCheckEnabled( true );\r
297    else\r
298      sp.setAllGroupsCheckEnabled( false);\r
299 \r
300    return sp.getValue();\r
301 \r
302  }\r
303 \r
304  public static void hideConservationSlider()\r
305  {\r
306   try{\r
307     conservationSlider.setClosed(true);\r
308     conservationSlider = null;\r
309   }catch(Exception ex){}\r
310 }\r
311 \r
312 \r
313  public static void hidePIDSlider()\r
314  {\r
315    try{\r
316      PIDSlider.setClosed(true);\r
317      PIDSlider = null;\r
318    }catch(Exception ex){}\r
319  }\r
320 \r
321  public static int setPIDSliderSource(AlignmentPanel ap, ColourSchemeI cs, String source)\r
322  {\r
323    SliderPanel pid = null;\r
324    if(PIDSlider == null)\r
325    {\r
326      pid = new SliderPanel(ap, 50, false, cs);\r
327      PIDSlider = new JInternalFrame();\r
328      PIDSlider.setContentPane(pid);\r
329      PIDSlider.setResizable(false);\r
330      addInternalFrame(PIDSlider, "Percentage Identity Threshold ("+source+")", 420, 90);\r
331    }\r
332    else\r
333    {\r
334        PIDSlider.setTitle("Percentage Identity Threshold ("+source+")");\r
335        pid = (SliderPanel)PIDSlider.getContentPane();\r
336        pid.cs = cs;\r
337    }\r
338 \r
339    if (ap.av.alignment.getGroups() != null)\r
340      pid.setAllGroupsCheckEnabled(true);\r
341    else\r
342      pid.setAllGroupsCheckEnabled(false);\r
343 \r
344 \r
345    return pid.getValue();\r
346 \r
347  }\r
348 \r
349 }\r