2 * Jalview - A Sequence Alignment Editor and Viewer
\r
3 * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
\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
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
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
19 package jalview.gui;
\r
22 import java.awt.datatransfer.*;
\r
23 import java.awt.dnd.*;
\r
24 import java.awt.event.*;
\r
25 import javax.swing.*;
\r
27 import jalview.datamodel.*;
\r
28 import jalview.io.*;
\r
30 public class Desktop
\r
31 extends jalview.jbgui.GDesktop implements DropTargetListener
\r
33 public static JDesktopPane desktop;
\r
34 static int openFrameCount = 0;
\r
35 static final int xOffset = 30;
\r
36 static final int yOffset = 30;
\r
44 java.net.URL url = getClass().getResource("/images/logo.gif");
\r
48 image = java.awt.Toolkit.getDefaultToolkit().createImage(url);
\r
50 MediaTracker mt = new MediaTracker(this);
\r
51 mt.addImage(image, 0);
\r
53 setIconImage(image);
\r
56 catch (Exception ex)
\r
60 setTitle("Jalview 2005");
\r
61 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
\r
62 desktop = new JDesktopPane();
\r
63 desktop.setBackground(Color.white);
\r
64 setContentPane(desktop);
\r
65 desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
\r
67 // This line prevents Windows Look&Feel resizing all new windows to maximum
\r
68 // if previous window was maximised
\r
69 desktop.setDesktopManager(new DefaultDesktopManager());
\r
71 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
\r
72 String x = jalview.bin.Cache.getProperty("SCREEN_X");
\r
73 String y = jalview.bin.Cache.getProperty("SCREEN_Y");
\r
74 String width = jalview.bin.Cache.getProperty("SCREEN_WIDTH");
\r
75 String height = jalview.bin.Cache.getProperty("SCREEN_HEIGHT");
\r
77 if ( (x != null) && (y != null) && (width != null) && (height != null))
\r
79 setBounds(Integer.parseInt(x), Integer.parseInt(y),
\r
80 Integer.parseInt(width), Integer.parseInt(height));
\r
84 setBounds( (int) (screenSize.width - 900) / 2,
\r
85 (int) (screenSize.height - 650) / 2, 900, 650);
\r
88 this.addWindowListener(new WindowAdapter()
\r
90 public void windowClosing(WindowEvent evt)
\r
97 this.setDropTarget(new java.awt.dnd.DropTarget(desktop, this));
\r
99 /////////Add a splashscreen on startup
\r
100 /////////Add a splashscreen on startup
\r
101 JInternalFrame frame = new JInternalFrame();
\r
103 SplashScreen splash = new SplashScreen(frame, image);
\r
104 frame.setContentPane(splash);
\r
105 frame.setLayer(JLayeredPane.PALETTE_LAYER);
\r
106 addInternalFrame(frame, "", 750, 160, false);
\r
107 frame.setLocation( (int) ( (getWidth() - 750) / 2),
\r
108 (int) ( (getHeight() - 160) / 2));
\r
111 public static void addInternalFrame(final JInternalFrame frame,
\r
112 String title, int w, int h)
\r
114 addInternalFrame(frame, title, w, h, true);
\r
117 public static void addInternalFrame(final JInternalFrame frame,
\r
118 String title, int w, int h,
\r
121 desktop.add(frame);
\r
126 frame.setSelected(true);
\r
128 catch (java.beans.PropertyVetoException e)
\r
132 frame.setTitle(title);
\r
133 frame.setSize(w, h);
\r
134 frame.setClosable(true);
\r
135 frame.setResizable(resizable);
\r
136 frame.setMaximizable(resizable);
\r
137 frame.setIconifiable(resizable);
\r
138 frame.setFrameIcon(null);
\r
139 frame.setLocation(xOffset * openFrameCount, yOffset * openFrameCount);
\r
142 final JMenuItem menuItem = new JMenuItem(title);
\r
143 frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
\r
145 public void internalFrameClosed(
\r
146 javax.swing.event.InternalFrameEvent evt)
\r
149 windowMenu.remove(menuItem);
\r
154 menuItem.addActionListener(new ActionListener()
\r
156 public void actionPerformed(ActionEvent e)
\r
160 frame.setSelected(true);
\r
161 frame.setIcon(false);
\r
163 catch (java.beans.PropertyVetoException ex)
\r
171 frame.setVisible(true);
\r
172 windowMenu.add(menuItem);
\r
175 public void dragEnter(DropTargetDragEvent evt)
\r
179 public void dragExit(DropTargetEvent evt)
\r
183 public void dragOver(DropTargetDragEvent evt)
\r
187 public void dropActionChanged(DropTargetDragEvent evt)
\r
191 public void drop(DropTargetDropEvent evt)
\r
193 Transferable t = evt.getTransferable();
\r
195 if (!t.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
\r
200 evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
\r
204 java.util.List files = (java.util.List) t.getTransferData(DataFlavor.
\r
205 javaFileListFlavor);
\r
207 for (int i = 0; i < files.size(); i++)
\r
209 String file = files.get(i).toString();
\r
210 String protocol = "File";
\r
212 if (file.endsWith(".jar"))
\r
214 Jalview2XML.LoadJalviewAlign(file);
\r
218 String format = jalview.io.IdentifyFile.Identify(file,
\r
220 LoadFile(file, protocol, format);
\r
224 catch (Exception ex)
\r
226 ex.printStackTrace();
\r
230 public void inputLocalFileMenuItem_actionPerformed(ActionEvent e)
\r
232 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
237 "fa, fasta, fastq", "aln", "pfam", "msf", "pir", "blc",
\r
242 "Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "Jalview"
\r
243 }, jalview.bin.Cache.getProperty("DEFAULT_FILE_FORMAT"));
\r
245 chooser.setFileView(new JalviewFileView());
\r
246 chooser.setDialogTitle("Open local file");
\r
247 chooser.setToolTipText("Open");
\r
249 int value = chooser.showOpenDialog(this);
\r
251 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
253 String choice = chooser.getSelectedFile().getPath();
\r
254 jalview.bin.Cache.setProperty("LAST_DIRECTORY",
\r
255 chooser.getSelectedFile().getParent());
\r
257 if (chooser.getSelectedFormat().equals("Jalview"))
\r
259 jalview.bin.Cache.setProperty("DEFAULT_FILE_FORMAT", "Jalivew");
\r
260 Jalview2XML.LoadJalviewAlign(choice);
\r
264 String format = IdentifyFile.Identify(choice, "File");
\r
265 jalview.bin.Cache.setProperty("DEFAULT_FILE_FORMAT", format);
\r
266 LoadFile(choice, "File", format);
\r
271 public void LoadFile(String file, String protocol, String format)
\r
273 LoadingThread loader = new LoadingThread(file, protocol, format);
\r
277 public void inputURLMenuItem_actionPerformed(ActionEvent e)
\r
279 String url = JOptionPane.showInternalInputDialog(Desktop.desktop,
\r
280 "Enter url of input file", "Input alignment from URL",
\r
281 JOptionPane.QUESTION_MESSAGE, null, null, "http://www.")
\r
289 String format = IdentifyFile.Identify(url, "URL");
\r
291 if (format.equals("URL NOT FOUND"))
\r
293 JOptionPane.showInternalMessageDialog(Desktop.desktop,
\r
294 "Couldn't locate " + url,
\r
296 JOptionPane.WARNING_MESSAGE);
\r
301 LoadFile(url, "URL", format);
\r
304 public void inputTextboxMenuItem_actionPerformed(ActionEvent e)
\r
306 CutAndPasteTransfer cap = new CutAndPasteTransfer();
\r
308 Desktop.addInternalFrame(cap, "Cut & Paste Alignment File", 600, 500);
\r
316 if (jalview.bin.Jalview.applet != null)
\r
318 jalview.bin.Jalview.applet.destroy();
\r
322 jalview.bin.Cache.setProperty("SCREEN_X", getBounds().x +
\r
324 jalview.bin.Cache.setProperty("SCREEN_Y", getBounds().y +
\r
326 jalview.bin.Cache.setProperty("SCREEN_WIDTH",
\r
328 jalview.bin.Cache.setProperty("SCREEN_HEIGHT",
\r
334 public void aboutMenuItem_actionPerformed(ActionEvent e)
\r
336 JOptionPane.showInternalMessageDialog(Desktop.desktop,
\r
337 "JalView 2005 version " +
\r
338 jalview.bin.Cache.VERSION +
\r
339 "; last updated: " +
\r
340 jalview.bin.Cache.BUILD_DATE +
\r
341 "\nAuthors: Michele Clamp, James Cuff, Steve Searle, Andrew Waterhouse, Jim Procter & Geoff Barton." +
\r
342 "\nCurrent development managed by Andrew Waterhouse; Barton Group, University of Dundee." +
\r
343 "\nFor all issues relating to Jalview, email help@jalview.org" +
\r
344 "\n\nIf you use JalView, please cite:" +
\r
345 "\n\"Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004), The Jalview Java Alignment Editor\"" +
\r
346 "\nBioinformatics, 2004 12;426-7.",
\r
348 JOptionPane.INFORMATION_MESSAGE);
\r
351 public void documentationMenuItem_actionPerformed(ActionEvent e)
\r
355 ClassLoader cl = jalview.gui.Desktop.class.getClassLoader();
\r
356 java.net.URL url = javax.help.HelpSet.findHelpSet(cl, "help/help");
\r
357 javax.help.HelpSet hs = new javax.help.HelpSet(cl, url);
\r
359 javax.help.HelpBroker hb = hs.createHelpBroker();
\r
360 hb.setLocation(new Point(200, 50));
\r
361 hb.setSize(new Dimension(800, 700));
\r
362 hb.setCurrentID("home");
\r
363 hb.setDisplayed(true);
\r
365 catch (Exception ex)
\r
367 ex.printStackTrace();
\r
371 protected void preferences_actionPerformed(ActionEvent e)
\r
373 Preferences pref = new Preferences();
\r
376 public void saveState_actionPerformed(ActionEvent e)
\r
378 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
380 "LAST_DIRECTORY"), new String[]
\r
383 {"Jalview Project"}, "Jalview Project");
\r
385 chooser.setFileView(new JalviewFileView());
\r
386 chooser.setDialogTitle("Save State");
\r
388 int value = chooser.showSaveDialog(this);
\r
390 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
392 java.io.File choice = chooser.getSelectedFile();
\r
393 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice.getParent());
\r
394 Jalview2XML.SaveState(choice);
\r
398 public void loadState_actionPerformed(ActionEvent e)
\r
400 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
402 "LAST_DIRECTORY"), new String[]
\r
405 {"Jalview Project"}, "Jalview Project");
\r
406 chooser.setFileView(new JalviewFileView());
\r
407 chooser.setDialogTitle("Restore state");
\r
409 int value = chooser.showOpenDialog(this);
\r
411 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
413 String choice = chooser.getSelectedFile().getAbsolutePath();
\r
414 jalview.bin.Cache.setProperty("LAST_DIRECTORY",
\r
415 chooser.getSelectedFile().getParent());
\r
416 Jalview2XML.LoadJalviewAlign(choice);
\r
420 class LoadingThread
\r
427 public LoadingThread(String file, String protocol, String format)
\r
430 this.protocol = protocol;
\r
431 this.format = format;
\r
436 SequenceI[] sequences = null;
\r
438 if (FormatAdapter.formats.contains(format))
\r
440 sequences = FormatAdapter.readFile(file, protocol, format);
\r
443 if ( (sequences != null) && (sequences.length > 0))
\r
445 AlignFrame af = new AlignFrame(new Alignment(sequences));
\r
446 addInternalFrame(af, file, AlignFrame.NEW_WINDOW_WIDTH,
\r
447 AlignFrame.NEW_WINDOW_HEIGHT);
\r
448 af.currentFileFormat = format;
\r
449 af.statusBar.setText("Successfully loaded file " + file);
\r
453 af.setMaximum(Preferences.showFullscreen);
\r
455 catch (Exception ex)
\r
461 JOptionPane.showInternalMessageDialog(Desktop.desktop,
\r
462 "Couldn't open file.\n" +
\r
463 "Formats currently supported are\n" +
\r
464 "Fasta, MSF, Clustal, BLC, PIR, MSP, and PFAM" // JBPNote - message should be generated through FormatAdapter!
\r
465 , "Error loading file",
\r
466 JOptionPane.WARNING_MESSAGE);
\r