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
92 jalview.bin.Cache.setProperty("SCREEN_X", getBounds().x +
\r
94 jalview.bin.Cache.setProperty("SCREEN_Y", getBounds().y +
\r
96 jalview.bin.Cache.setProperty("SCREEN_WIDTH",
\r
98 jalview.bin.Cache.setProperty("SCREEN_HEIGHT",
\r
104 this.setDropTarget(new java.awt.dnd.DropTarget(desktop, this));
\r
106 /////////Add a splashscreen on startup
\r
107 /////////Add a splashscreen on startup
\r
108 JInternalFrame frame = new JInternalFrame();
\r
110 SplashScreen splash = new SplashScreen(frame, image);
\r
111 frame.setContentPane(splash);
\r
112 frame.setLayer(JLayeredPane.PALETTE_LAYER);
\r
113 addInternalFrame(frame, "", 750, 160, false);
\r
114 frame.setLocation( (int) ( (getWidth() - 750) / 2),
\r
115 (int) ( (getHeight() - 160) / 2));
\r
118 public static void addInternalFrame(final JInternalFrame frame,
\r
119 String title, int w, int h)
\r
121 addInternalFrame(frame, title, w, h, true);
\r
124 public static void addInternalFrame(final JInternalFrame frame,
\r
125 String title, int w, int h,
\r
128 desktop.add(frame);
\r
133 frame.setSelected(true);
\r
135 catch (java.beans.PropertyVetoException e)
\r
139 frame.setTitle(title);
\r
140 frame.setSize(w, h);
\r
141 frame.setClosable(true);
\r
142 frame.setResizable(resizable);
\r
143 frame.setMaximizable(resizable);
\r
144 frame.setIconifiable(resizable);
\r
145 frame.setFrameIcon(null);
\r
146 frame.setLocation(xOffset * openFrameCount, yOffset * openFrameCount);
\r
149 final JMenuItem menuItem = new JMenuItem(title);
\r
150 frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
\r
152 public void internalFrameClosed(
\r
153 javax.swing.event.InternalFrameEvent evt)
\r
156 windowMenu.remove(menuItem);
\r
161 menuItem.addActionListener(new ActionListener()
\r
163 public void actionPerformed(ActionEvent e)
\r
167 frame.setSelected(true);
\r
168 frame.setIcon(false);
\r
170 catch (java.beans.PropertyVetoException ex)
\r
178 frame.setVisible(true);
\r
179 windowMenu.add(menuItem);
\r
182 public void dragEnter(DropTargetDragEvent evt)
\r
186 public void dragExit(DropTargetEvent evt)
\r
190 public void dragOver(DropTargetDragEvent evt)
\r
194 public void dropActionChanged(DropTargetDragEvent evt)
\r
198 public void drop(DropTargetDropEvent evt)
\r
200 Transferable t = evt.getTransferable();
\r
202 if (!t.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
\r
207 evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
\r
211 java.util.List files = (java.util.List) t.getTransferData(DataFlavor.
\r
212 javaFileListFlavor);
\r
214 for (int i = 0; i < files.size(); i++)
\r
216 String file = files.get(i).toString();
\r
217 String protocol = "File";
\r
219 if (file.endsWith(".jar"))
\r
221 Jalview2XML.LoadJalviewAlign(file);
\r
225 String format = jalview.io.IdentifyFile.Identify(file,
\r
227 LoadFile(file, protocol, format);
\r
231 catch (Exception ex)
\r
233 ex.printStackTrace();
\r
237 public void inputLocalFileMenuItem_actionPerformed(ActionEvent e)
\r
239 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
244 "fa, fasta, fastq", "aln", "pfam", "msf", "pir", "blc",
\r
249 "Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "Jalview"
\r
250 }, jalview.bin.Cache.getProperty("DEFAULT_FILE_FORMAT"));
\r
252 chooser.setFileView(new JalviewFileView());
\r
253 chooser.setDialogTitle("Open local file");
\r
254 chooser.setToolTipText("Open");
\r
256 int value = chooser.showOpenDialog(this);
\r
258 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
260 String choice = chooser.getSelectedFile().getPath();
\r
261 jalview.bin.Cache.setProperty("LAST_DIRECTORY",
\r
262 chooser.getSelectedFile().getParent());
\r
264 if (chooser.getSelectedFormat().equals("Jalview"))
\r
266 jalview.bin.Cache.setProperty("DEFAULT_FILE_FORMAT", "Jalivew");
\r
267 Jalview2XML.LoadJalviewAlign(choice);
\r
271 String format = IdentifyFile.Identify(choice, "File");
\r
272 jalview.bin.Cache.setProperty("DEFAULT_FILE_FORMAT", format);
\r
273 LoadFile(choice, "File", format);
\r
278 public void LoadFile(String file, String protocol, String format)
\r
280 LoadingThread loader = new LoadingThread(file, protocol, format);
\r
284 public void inputURLMenuItem_actionPerformed(ActionEvent e)
\r
286 String url = JOptionPane.showInternalInputDialog(Desktop.desktop,
\r
287 "Enter url of input file", "Input alignment from URL",
\r
288 JOptionPane.QUESTION_MESSAGE, null, null, "http://www.")
\r
296 String format = IdentifyFile.Identify(url, "URL");
\r
298 if (format.equals("URL NOT FOUND"))
\r
300 JOptionPane.showInternalMessageDialog(Desktop.desktop,
\r
301 "Couldn't locate " + url,
\r
303 JOptionPane.WARNING_MESSAGE);
\r
308 LoadFile(url, "URL", format);
\r
311 public void inputTextboxMenuItem_actionPerformed(ActionEvent e)
\r
313 CutAndPasteTransfer cap = new CutAndPasteTransfer();
\r
315 Desktop.addInternalFrame(cap, "Cut & Paste Alignment File", 600, 500);
\r
321 public void quit_actionPerformed(ActionEvent e)
\r
323 if (jalview.bin.Jalview.applet != null)
\r
325 jalview.bin.Jalview.applet.destroy();
\r
333 public void aboutMenuItem_actionPerformed(ActionEvent e)
\r
335 JOptionPane.showInternalMessageDialog(Desktop.desktop,
\r
336 "JalView 2005 version " +
\r
337 jalview.bin.Cache.VERSION +
\r
338 "; last updated: " +
\r
339 jalview.bin.Cache.BUILD_DATE +
\r
340 "\nAuthors: Michele Clamp, James Cuff, Steve Searle, Andrew Waterhouse, Jim Procter & Geoff Barton." +
\r
341 "\nCurrent development managed by Andrew Waterhouse; Barton Group, University of Dundee." +
\r
342 "\nFor all issues relating to Jalview, email help@jalview.org" +
\r
343 "\n\nIf you use JalView, please cite:" +
\r
344 "\n\"Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004), The Jalview Java Alignment Editor\"" +
\r
345 "\nBioinformatics, 2004 12;426-7.",
\r
347 JOptionPane.INFORMATION_MESSAGE);
\r
350 public void documentationMenuItem_actionPerformed(ActionEvent e)
\r
354 ClassLoader cl = jalview.gui.Desktop.class.getClassLoader();
\r
355 java.net.URL url = javax.help.HelpSet.findHelpSet(cl, "help/help");
\r
356 javax.help.HelpSet hs = new javax.help.HelpSet(cl, url);
\r
358 javax.help.HelpBroker hb = hs.createHelpBroker();
\r
359 hb.setLocation(new Point(200, 50));
\r
360 hb.setSize(new Dimension(800, 700));
\r
361 hb.setCurrentID("home");
\r
362 hb.setDisplayed(true);
\r
364 catch (Exception ex)
\r
366 ex.printStackTrace();
\r
370 protected void preferences_actionPerformed(ActionEvent e)
\r
372 Preferences pref = new Preferences();
\r
375 public void saveState_actionPerformed(ActionEvent e)
\r
377 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
379 "LAST_DIRECTORY"), new String[]
\r
382 {"Jalview Project"}, "Jalview Project");
\r
384 chooser.setFileView(new JalviewFileView());
\r
385 chooser.setDialogTitle("Save State");
\r
387 int value = chooser.showSaveDialog(this);
\r
389 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
391 java.io.File choice = chooser.getSelectedFile();
\r
392 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice.getParent());
\r
393 Jalview2XML.SaveState(choice);
\r
397 public void loadState_actionPerformed(ActionEvent e)
\r
399 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
401 "LAST_DIRECTORY"), new String[]
\r
404 {"Jalview Project"}, "Jalview Project");
\r
405 chooser.setFileView(new JalviewFileView());
\r
406 chooser.setDialogTitle("Restore state");
\r
408 int value = chooser.showOpenDialog(this);
\r
410 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
412 String choice = chooser.getSelectedFile().getAbsolutePath();
\r
413 jalview.bin.Cache.setProperty("LAST_DIRECTORY",
\r
414 chooser.getSelectedFile().getParent());
\r
415 Jalview2XML.LoadJalviewAlign(choice);
\r
419 class LoadingThread
\r
426 public LoadingThread(String file, String protocol, String format)
\r
429 this.protocol = protocol;
\r
430 this.format = format;
\r
435 SequenceI[] sequences = null;
\r
437 if (FormatAdapter.formats.contains(format))
\r
439 sequences = FormatAdapter.readFile(file, protocol, format);
\r
442 if ( (sequences != null) && (sequences.length > 0))
\r
444 AlignFrame af = new AlignFrame(new Alignment(sequences));
\r
445 addInternalFrame(af, file, AlignFrame.NEW_WINDOW_WIDTH,
\r
446 AlignFrame.NEW_WINDOW_HEIGHT);
\r
447 af.currentFileFormat = format;
\r
448 af.statusBar.setText("Successfully loaded file " + file);
\r
452 af.setMaximum(Preferences.showFullscreen);
\r
454 catch (Exception ex)
\r
460 JOptionPane.showInternalMessageDialog(Desktop.desktop,
\r
461 "Couldn't open file.\n" +
\r
462 "Formats currently supported are\n" +
\r
463 "Fasta, MSF, Clustal, BLC, PIR, MSP, and PFAM" // JBPNote - message should be generated through FormatAdapter!
\r
464 , "Error loading file",
\r
465 JOptionPane.WARNING_MESSAGE);
\r