X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FDesktop.java;h=374f0eab3d8b5625289414d1786f0bb81afa7d4d;hb=f5f5806de6923a8a62906c5a62c6276ba56ae0da;hp=cd01cf80992dba82770b88848738feee7c53f789;hpb=79ec9639d12e785ebcb2299663da267d328f0f32;p=jalview.git diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index cd01cf8..374f0ea 100755 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -1,256 +1,669 @@ -/******************** - * 2004 Jalview Reengineered - * Barton Group - * Dundee University +/* + * Jalview - A Sequence Alignment Editor and Viewer + * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * - * AM Waterhouse - *******************/ - - + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ package jalview.gui; -import jalview.gui.*; import jalview.io.*; -import jalview.datamodel.*; -import javax.swing.*; + import java.awt.*; +import java.awt.datatransfer.*; +import java.awt.dnd.*; import java.awt.event.*; +import java.util.*; + +import javax.swing.*; +/** + * DOCUMENT ME! + * + * @author $author$ + * @version $Revision$ + */ public class Desktop extends jalview.jbgui.GDesktop + implements DropTargetListener, ClipboardOwner { - public static JDesktopPane desktop; - static int openFrameCount = 0; - static final int xOffset = 30, yOffset = 30; - static boolean splashScreenVisible = false; - - public Desktop() - { - Image image =null; - try{ - java.net.URL url = getClass().getResource("/BartonGroupBanner.gif"); - if(url!=null) + /** DOCUMENT ME!! */ + public static Desktop instance; + public static JDesktopPane desktop; + static int openFrameCount = 0; + static final int xOffset = 30; + static final int yOffset = 30; + public static jalview.ws.Discoverer discoverer; + + public static Object [] jalviewClipboard; + + static int fileLoadingCount= 0; + + /** + * Creates a new Desktop object. + */ + public Desktop() + { + instance = this; + + Image image = null; + + try + { + java.net.URL url = getClass().getResource("/images/logo.gif"); + + if (url != null) + { + image = java.awt.Toolkit.getDefaultToolkit().createImage(url); + + MediaTracker mt = new MediaTracker(this); + mt.addImage(image, 0); + mt.waitForID(0); + setIconImage(image); + } + } + catch (Exception ex) + { + } + + setTitle("Jalview "+jalview.bin.Cache.getProperty("VERSION")); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + desktop = new JDesktopPane(); + desktop.setBackground(Color.white); + getContentPane().setLayout(new BorderLayout()); + getContentPane().add(desktop, BorderLayout.CENTER); + desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE); + + // This line prevents Windows Look&Feel resizing all new windows to maximum + // if previous window was maximised + desktop.setDesktopManager(new DefaultDesktopManager()); + + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + String x = jalview.bin.Cache.getProperty("SCREEN_X"); + String y = jalview.bin.Cache.getProperty("SCREEN_Y"); + String width = jalview.bin.Cache.getProperty("SCREEN_WIDTH"); + String height = jalview.bin.Cache.getProperty("SCREEN_HEIGHT"); + + if ((x != null) && (y != null) && (width != null) && (height != null)) + { + setBounds(Integer.parseInt(x), Integer.parseInt(y), + Integer.parseInt(width), Integer.parseInt(height)); + } + else + { + setBounds((int) (screenSize.width - 900) / 2, + (int) (screenSize.height - 650) / 2, 900, 650); + } + + this.addWindowListener(new WindowAdapter() + { + public void windowClosing(WindowEvent evt) + { + quit(); + } + }); + + this.setDropTarget(new java.awt.dnd.DropTarget(desktop, this)); + + /////////Add a splashscreen on startup + /////////Add a splashscreen on startup + JInternalFrame frame = new JInternalFrame(); + + SplashScreen splash = new SplashScreen(frame, image); + frame.setContentPane(splash); + frame.setLayer(JLayeredPane.PALETTE_LAYER); + frame.setLocation((int) ((getWidth() - 750) / 2), + (int) ((getHeight() - 160) / 2)); + + addInternalFrame(frame, "", 750, 160, false); + + discoverer=new jalview.ws.Discoverer(); // Only gets started if gui is displayed. + + } + + /** + * DOCUMENT ME! + * + * @param frame DOCUMENT ME! + * @param title DOCUMENT ME! + * @param w DOCUMENT ME! + * @param h DOCUMENT ME! + */ + public static synchronized void addInternalFrame(final JInternalFrame frame, + String title, int w, int h) + { + addInternalFrame(frame, title, w, h, true); + } + + /** + * DOCUMENT ME! + * + * @param frame DOCUMENT ME! + * @param title DOCUMENT ME! + * @param w DOCUMENT ME! + * @param h DOCUMENT ME! + * @param resizable DOCUMENT ME! + */ + public static synchronized void addInternalFrame(final JInternalFrame frame, + String title, int w, int h, boolean resizable) + { + + frame.setTitle(title); + if(frame.getWidth()<1 || frame.getHeight()<1) + { + frame.setSize(w, h); + } + // THIS IS A PUBLIC STATIC METHOD, SO IT MAY BE CALLED EVEN IN + // A HEADLESS STATE WHEN NO DESKTOP EXISTS. MUST RETURN + // IF JALVIEW IS RUNNING HEADLESS + ///////////////////////////////////////////////// + if (System.getProperty("java.awt.headless") != null + && System.getProperty("java.awt.headless").equals("true")) + { + return; + } + + + openFrameCount++; + + frame.setVisible(true); + frame.setClosable(true); + frame.setResizable(resizable); + frame.setMaximizable(resizable); + frame.setIconifiable(resizable); + frame.setFrameIcon(null); + + if (frame.getX()<1 && frame.getY()<1) + { + frame.setLocation(xOffset * openFrameCount, yOffset * ((openFrameCount-1)%10)+yOffset); + } + + final JMenuItem menuItem = new JMenuItem(title); + frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() + { + public void internalFrameActivated(javax.swing.event. + InternalFrameEvent evt) + { + JInternalFrame itf = desktop.getSelectedFrame(); + if (itf != null) + itf.requestFocus(); + + } + + public void internalFrameClosed( + javax.swing.event.InternalFrameEvent evt) + { + openFrameCount--; + windowMenu.remove(menuItem); + JInternalFrame itf = desktop.getSelectedFrame(); + if (itf != null) + itf.requestFocus(); + } + ; + }); + + menuItem.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + try + { + frame.setSelected(true); + frame.setIcon(false); + } + catch (java.beans.PropertyVetoException ex) + { + + } + } + }); + + windowMenu.add(menuItem); + + desktop.add(frame); + frame.toFront(); + try{ + frame.setSelected(true); + frame.requestFocus(); + }catch(java.beans.PropertyVetoException ve) + {} + } + + public void lostOwnership(Clipboard clipboard, Transferable contents) + { + Desktop.jalviewClipboard = null; + } + + public void dragEnter(DropTargetDragEvent evt) + {} + + public void dragExit(DropTargetEvent evt) + {} + + public void dragOver(DropTargetDragEvent evt) + {} + + public void dropActionChanged(DropTargetDragEvent evt) + {} + + /** + * DOCUMENT ME! + * + * @param evt DOCUMENT ME! + */ + public void drop(DropTargetDropEvent evt) + { + Transferable t = evt.getTransferable(); + java.util.List files = null; + + try + { + DataFlavor uriListFlavor = new DataFlavor("text/uri-list;class=java.lang.String"); + if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) + { + //Works on Windows and MacOSX + evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); + files = (java.util.List) t.getTransferData(DataFlavor.javaFileListFlavor); + } + else if (t.isDataFlavorSupported(uriListFlavor)) + { + // This is used by Unix drag system + evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); + String data = (String) t.getTransferData(uriListFlavor); + files = new java.util.ArrayList(1); + for (java.util.StringTokenizer st = new java.util.StringTokenizer( + data, + "\r\n"); + st.hasMoreTokens(); ) + { + String s = st.nextToken(); + if (s.startsWith("#")) + { + // the line is a comment (as per the RFC 2483) + continue; + } + + java.net.URI uri = new java.net.URI(s); + java.io.File file = new java.io.File(uri); + files.add(file); + } + } + } + catch (Exception e) + { + e.printStackTrace(); + } + + if (files != null) + { + try + { + for (int i = 0; i < files.size(); i++) + { + String file = files.get(i).toString(); + String protocol = FormatAdapter.FILE; + String format = null; + + if (file.endsWith(".jar")) + { + format = "Jalview"; + + } + else + { + format = new IdentifyFile().Identify(file, + protocol); + } + + + new FileLoader().LoadFile(file, protocol, format); + + } + } + catch (Exception ex) + { + ex.printStackTrace(); + } + } + } + + /** + * DOCUMENT ME! + * + * @param e DOCUMENT ME! + */ + public void inputLocalFileMenuItem_actionPerformed(AlignViewport viewport) + { + JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.getProperty( + "LAST_DIRECTORY"), + new String[] + { + "fa, fasta, fastq", "aln", "pfam", "msf", "pir", "blc", + "jar" + }, + new String[] + { + "Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "Jalview" + }, jalview.bin.Cache.getProperty("DEFAULT_FILE_FORMAT")); + + chooser.setFileView(new JalviewFileView()); + chooser.setDialogTitle("Open local file"); + chooser.setToolTipText("Open"); + + int value = chooser.showOpenDialog(this); + + if (value == JalviewFileChooser.APPROVE_OPTION) + { + String choice = chooser.getSelectedFile().getPath(); + jalview.bin.Cache.setProperty("LAST_DIRECTORY", + chooser.getSelectedFile().getParent()); + + String format = null; + if (chooser.getSelectedFormat().equals("Jalview")) + { + format = "Jalview"; + } + else + { + format = new IdentifyFile().Identify(choice, FormatAdapter.FILE); + } + + if (viewport != null) + new FileLoader().LoadFile(viewport, choice, FormatAdapter.FILE, format); + else + new FileLoader().LoadFile(choice, FormatAdapter.FILE, format); + } + } + + + + /** + * DOCUMENT ME! + * + * @param e DOCUMENT ME! + */ + public void inputURLMenuItem_actionPerformed(AlignViewport viewport) + { + // This construct allows us to have a wider textfield + // for viewing + JLabel label = new JLabel("Enter URL of Input File"); + final JComboBox history = new JComboBox(); + + JPanel panel = new JPanel(new GridLayout(2,1)); + panel.add(label); + panel.add(history); + history.setPreferredSize(new Dimension(400,20)); + history.setEditable(true); + history.addItem("http://www."); + + String historyItems = jalview.bin.Cache.getProperty("RECENT_URL"); + + StringTokenizer st; + + if (historyItems != null) { - image = java.awt.Toolkit.getDefaultToolkit().createImage(url); - MediaTracker mt = new MediaTracker(this); - mt.addImage(image, 0); - mt.waitForID(0); - setIconImage(image); + st = new StringTokenizer(historyItems, "\t"); + + while (st.hasMoreTokens()) + { + history.addItem(st.nextElement()); + } } - }catch(Exception ex){} - - setTitle("Jalview 2005"); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - setVisible(true); - desktop = new JDesktopPane(); - setContentPane(desktop); - desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE); - - Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); - setBounds( (int)(screenSize.getWidth()-1200)/2, - (int)(screenSize.getHeight()-800)/2, - 1200 , - 800); - - - /////////Add a splashscreen on startup - JInternalFrame frame = new JInternalFrame(); - - SplashScreen splash = new SplashScreen(frame, image); - frame.setContentPane(splash); - addInternalFrame(frame, "",820,200); - splashScreenVisible = true; - - frame.setLocation( (int)((getWidth()-820) /2), (int)((getHeight()-240) /2)); - frame.setClosable(false); - frame.setIconifiable(false); - frame.setMaximizable(false); - frame.setFrameIcon(null); - } - - public static void splashScreenClosing() - { - splashScreenVisible = false; - JInternalFrame [] frames = desktop.getAllFrames(); - for(int i=0; i