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