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