X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FDesktop.java;h=a0b93fbc55815e3b952e160038b35488ed6deaed;hb=50ad147ba0eb763fae29b364c80632abc1155e9c;hp=ff01ed6548c169c37875d3df74fe9041a9861efd;hpb=e6c50ddb6fedc9917c9fbe112750680feb42cd12;p=jalview.git diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index ff01ed6..a0b93fb 100755 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -1,17 +1,17 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle - * + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4) + * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * * 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 @@ -19,6 +19,7 @@ package jalview.gui; import jalview.io.*; + import java.awt.*; import java.awt.datatransfer.*; import java.awt.dnd.*; @@ -32,29 +33,32 @@ import javax.swing.event.MenuListener; /** * DOCUMENT ME! - * + * * @author $author$ * @version $Revision$ */ -public class Desktop - extends jalview.jbgui.GDesktop implements DropTargetListener, - ClipboardOwner +public class Desktop extends jalview.jbgui.GDesktop implements + DropTargetListener, ClipboardOwner, IProgressIndicator { /** DOCUMENT ME!! */ public static Desktop instance; - //Need to decide if the Memory Usage is to be included in - //Next release or not. + // Need to decide if the Memory Usage is to be included in + // Next release or not. public static MyDesktopPane desktop; - // public static JDesktopPane desktop; + // 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; + public static boolean internalCopy = false; static int fileLoadingCount = 0; @@ -64,14 +68,19 @@ public class Desktop */ public Desktop() { + /** + * A note to implementors. It is ESSENTIAL that any activities that might + * block are spawned off as threads rather than waited for during this + * constructor. + */ instance = this; doVamsasClientCheck(); doGroovyCheck(); - setTitle("Jalview " + jalview.bin.Cache.getProperty("VERSION")); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - boolean selmemusage = jalview.bin.Cache.getDefault("SHOW_MEMUSAGE",false); + boolean selmemusage = jalview.bin.Cache.getDefault("SHOW_MEMUSAGE", + false); desktop = new MyDesktopPane(selmemusage); showMemusage.setSelected(selmemusage); desktop.setBackground(Color.white); @@ -89,15 +98,15 @@ public class Desktop 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)) + if ((x != null) && (y != null) && (width != null) && (height != null)) { - setBounds(Integer.parseInt(x), Integer.parseInt(y), - Integer.parseInt(width), Integer.parseInt(height)); + 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); + setBounds((int) (screenSize.width - 900) / 2, + (int) (screenSize.height - 650) / 2, 900, 650); } this.addWindowListener(new WindowAdapter() @@ -109,25 +118,22 @@ public class Desktop }); this.addMouseListener(new MouseAdapter() + { + public void mousePressed(MouseEvent evt) + { + if (SwingUtilities.isRightMouseButton(evt)) { - public void mousePressed(MouseEvent evt) - { - if(SwingUtilities.isRightMouseButton(evt)) - { - showPasteMenu(evt.getX(), evt.getY()); - } - } - }); - + showPasteMenu(evt.getX(), evt.getY()); + } + } + }); this.setDropTarget(new java.awt.dnd.DropTarget(desktop, this)); - - /////////Add a splashscreen on startup - /////////Add a splashscreen on startup + // Spawn a thread that shows the splashscreen new SplashScreen(); - - discoverer = new jalview.ws.Discoverer(); // Only gets started if gui is displayed. + discoverer = new jalview.ws.Discoverer(); // Only gets started if gui is + // displayed. } private void doVamsasClientCheck() @@ -137,14 +143,16 @@ public class Desktop setupVamsasDisconnectedGui(); VamsasMenu.setVisible(true); final Desktop us = this; - VamsasMenu.addMenuListener(new MenuListener() { + VamsasMenu.addMenuListener(new MenuListener() + { // this listener remembers when the menu was first selected, and // doesn't rebuild the session list until it has been cleared and // reselected again. - boolean refresh=true; + boolean refresh = true; + public void menuCanceled(MenuEvent e) { - refresh=true; + refresh = true; } public void menuDeselected(MenuEvent e) @@ -157,7 +165,7 @@ public class Desktop if (refresh) { us.buildVamsasStMenu(); - refresh=false; + refresh = false; } } }); @@ -191,49 +199,62 @@ public class Desktop if (contents != null) { String file = (String) contents - .getTransferData(DataFlavor.stringFlavor); + .getTransferData(DataFlavor.stringFlavor); String format = new IdentifyFile().Identify(file, - FormatAdapter.PASTE); + FormatAdapter.PASTE); new FileLoader().LoadFile(file, FormatAdapter.PASTE, format); } - } - catch (Exception ex) + } catch (Exception ex) { - System.out.println("Unable to paste alignment from system clipboard:\n" - + ex); + System.out + .println("Unable to paste alignment from system clipboard:\n" + + ex); } } /** * DOCUMENT ME! - * - * @param frame DOCUMENT ME! - * @param title DOCUMENT ME! - * @param w DOCUMENT ME! - * @param h 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) + 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! + * + * @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) + public static synchronized void addInternalFrame( + final JInternalFrame frame, String title, int w, int h, + boolean resizable) { + // TODO: consider fixing method to update entries in the window submenu with + // the current window title + frame.setTitle(title); if (frame.getWidth() < 1 || frame.getHeight() < 1) { @@ -242,9 +263,9 @@ public class Desktop // 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")) + && System.getProperty("java.awt.headless").equals("true")) { return; } @@ -260,39 +281,39 @@ public class Desktop if (frame.getX() < 1 && frame.getY() < 1) { - frame.setLocation(xOffset * openFrameCount, - yOffset * ( (openFrameCount - 1) % 10) + yOffset); + 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(); - } + 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) - { - PaintRefresher.RemoveComponent(frame); - openFrameCount--; - windowMenu.remove(menuItem); - JInternalFrame itf = desktop.getSelectedFrame(); - if (itf != null) - { - itf.requestFocus(); - } - System.gc(); - } - ; - }); + public void internalFrameClosed( + javax.swing.event.InternalFrameEvent evt) + { + PaintRefresher.RemoveComponent(frame); + openFrameCount--; + windowMenu.remove(menuItem); + JInternalFrame itf = desktop.getSelectedFrame(); + if (itf != null) + { + itf.requestFocus(); + } + System.gc(); + }; + }); menuItem.addActionListener(new ActionListener() { @@ -302,8 +323,7 @@ public class Desktop { frame.setSelected(true); frame.setIcon(false); - } - catch (java.beans.PropertyVetoException ex) + } catch (java.beans.PropertyVetoException ex) { } @@ -318,9 +338,9 @@ public class Desktop { frame.setSelected(true); frame.requestFocus(); + } catch (java.beans.PropertyVetoException ve) + { } - catch (java.beans.PropertyVetoException ve) - {} } public void lostOwnership(Clipboard clipboard, Transferable contents) @@ -334,21 +354,26 @@ public class Desktop } 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! + * + * @param evt + * DOCUMENT ME! */ public void drop(DropTargetDropEvent evt) { @@ -358,13 +383,13 @@ public class Desktop try { DataFlavor uriListFlavor = new DataFlavor( - "text/uri-list;class=java.lang.String"); + "text/uri-list;class=java.lang.String"); if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { - //Works on Windows and MacOSX + // Works on Windows and MacOSX evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); - files = (java.util.List) t.getTransferData(DataFlavor. - javaFileListFlavor); + files = (java.util.List) t + .getTransferData(DataFlavor.javaFileListFlavor); } else if (t.isDataFlavorSupported(uriListFlavor)) { @@ -373,9 +398,7 @@ public class Desktop 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(); ) + data, "\r\n"); st.hasMoreTokens();) { String s = st.nextToken(); if (s.startsWith("#")) @@ -389,9 +412,9 @@ public class Desktop files.add(file); } } + } catch (Exception e) + { } - catch (Exception e) - {} if (files != null) { @@ -410,31 +433,30 @@ public class Desktop } else { - format = new IdentifyFile().Identify(file, - protocol); + format = new IdentifyFile().Identify(file, protocol); } new FileLoader().LoadFile(file, protocol, format); } + } catch (Exception ex) + { } - catch (Exception ex) - {} } } /** * DOCUMENT ME! - * - * @param e DOCUMENT ME! + * + * @param e + * DOCUMENT ME! */ public void inputLocalFileMenuItem_actionPerformed(AlignViewport viewport) { - JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache. - getProperty( - "LAST_DIRECTORY"), + JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache + .getProperty("LAST_DIRECTORY"), jalview.io.AppletFormatAdapter.READABLE_EXTENSIONS, - jalview.io.AppletFormatAdapter.READABLE_FNAMES, + jalview.io.AppletFormatAdapter.READABLE_FNAMES, jalview.bin.Cache.getProperty("DEFAULT_FILE_FORMAT")); chooser.setFileView(new JalviewFileView()); @@ -446,8 +468,8 @@ public class Desktop if (value == JalviewFileChooser.APPROVE_OPTION) { String choice = chooser.getSelectedFile().getPath(); - jalview.bin.Cache.setProperty("LAST_DIRECTORY", - chooser.getSelectedFile().getParent()); + jalview.bin.Cache.setProperty("LAST_DIRECTORY", chooser + .getSelectedFile().getParent()); String format = null; if (chooser.getSelectedFormat().equals("Jalview")) @@ -461,7 +483,8 @@ public class Desktop if (viewport != null) { - new FileLoader().LoadFile(viewport, choice, FormatAdapter.FILE, format); + new FileLoader().LoadFile(viewport, choice, FormatAdapter.FILE, + format); } else { @@ -472,8 +495,9 @@ public class Desktop /** * DOCUMENT ME! - * - * @param e DOCUMENT ME! + * + * @param e + * DOCUMENT ME! */ public void inputURLMenuItem_actionPerformed(AlignViewport viewport) { @@ -503,9 +527,8 @@ public class Desktop } } - int reply = JOptionPane.showInternalConfirmDialog(desktop, - panel, "Input Alignment From URL", - JOptionPane.OK_CANCEL_OPTION); + int reply = JOptionPane.showInternalConfirmDialog(desktop, panel, + "Input Alignment From URL", JOptionPane.OK_CANCEL_OPTION); if (reply != JOptionPane.OK_OPTION) { @@ -518,7 +541,8 @@ public class Desktop { if (viewport != null) { - new FileLoader().LoadFile(viewport, url, FormatAdapter.URL, "Jalview"); + new FileLoader().LoadFile(viewport, url, FormatAdapter.URL, + "Jalview"); } else { @@ -532,9 +556,8 @@ public class Desktop if (format.equals("URL NOT FOUND")) { JOptionPane.showInternalMessageDialog(Desktop.desktop, - "Couldn't locate " + url, - "URL not found", - JOptionPane.WARNING_MESSAGE); + "Couldn't locate " + url, "URL not found", + JOptionPane.WARNING_MESSAGE); return; } @@ -552,8 +575,9 @@ public class Desktop /** * DOCUMENT ME! - * - * @param e DOCUMENT ME! + * + * @param e + * DOCUMENT ME! */ public void inputTextboxMenuItem_actionPerformed(AlignViewport viewport) { @@ -576,46 +600,45 @@ public class Desktop /** * DOCUMENT ME! - * - * @param e DOCUMENT ME! + * + * @param e + * DOCUMENT ME! */ public void aboutMenuItem_actionPerformed(ActionEvent e) { - StringBuffer message = new StringBuffer("JalView version " + - jalview.bin.Cache.getProperty( - "VERSION") + - "; last updated: " + - jalview.bin. - Cache.getDefault("BUILD_DATE", - "unknown")); + StringBuffer message = new StringBuffer("Jalview version " + + jalview.bin.Cache.getProperty("VERSION") + "; last updated: " + + jalview.bin.Cache.getDefault("BUILD_DATE", "unknown")); if (!jalview.bin.Cache.getProperty("LATEST_VERSION").equals( - jalview.bin.Cache.getProperty("VERSION"))) + jalview.bin.Cache.getProperty("VERSION"))) { - message.append("\n\n!! Jalview version " - + jalview.bin.Cache.getProperty("LATEST_VERSION") - + - " is available for download from http://www.jalview.org !!\n"); + message + .append("\n\n!! Jalview version " + + jalview.bin.Cache.getProperty("LATEST_VERSION") + + " is available for download from http://www.jalview.org !!\n"); } - - message.append("\nAuthors: Michele Clamp, James Cuff, Steve Searle, Andrew Waterhouse, Jim Procter & Geoff Barton." + - "\nCurrent development managed by Andrew Waterhouse; Barton Group, University of Dundee." + - "\nFor all issues relating to Jalview, email help@jalview.org" + - "\n\nIf you use JalView, please cite:" + - "\n\"Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004), The Jalview Java Alignment Editor\"" + - "\nBioinformatics, 2004 20;426-7."); + // TODO: update this text for each release or centrally store it for lite + // and application + message + .append("\nAuthors: Andrew Waterhouse, Jim Procter, Michele Clamp, James Cuff, Steve Searle,\n David Martin & Geoff Barton." + + "\nDevelopment managed by The Barton Group, University of Dundee, Scotland, UK.\n" + + "\nFor help, see the FAQ at www.jalview.org and/or join the jalview-discuss@jalview.org mailing list\n" + + "\nIf you use Jalview, please cite:" + + "\n\"Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004), The Jalview Java Alignment Editor\"" + + "\nBioinformatics, 2004 20;426-7."); JOptionPane.showInternalMessageDialog(Desktop.desktop, - message.toString(), "About Jalview", - JOptionPane.INFORMATION_MESSAGE); + message.toString(), "About Jalview", JOptionPane.INFORMATION_MESSAGE); } /** * DOCUMENT ME! - * - * @param e DOCUMENT ME! + * + * @param e + * DOCUMENT ME! */ public void documentationMenuItem_actionPerformed(ActionEvent e) { @@ -628,9 +651,9 @@ public class Desktop javax.help.HelpBroker hb = hs.createHelpBroker(); hb.setCurrentID("home"); hb.setDisplayed(true); + } catch (Exception ex) + { } - catch (Exception ex) - {} } public void closeAll_actionPerformed(ActionEvent e) @@ -641,12 +664,16 @@ public class Desktop try { frames[i].setClosed(true); + } catch (java.beans.PropertyVetoException ex) + { } - catch (java.beans.PropertyVetoException ex) - {} } System.out.println("ALL CLOSED"); - + if (v_client!=null) + { + // TODO clear binding to vamsas document objects on close_all + + } } public void raiseRelated_actionPerformed(ActionEvent e) @@ -664,7 +691,9 @@ public class Desktop reorderAssociatedWindows(false, true); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see jalview.jbgui.GDesktop#garbageCollect_actionPerformed(java.awt.event.ActionEvent) */ protected void garbageCollect_actionPerformed(ActionEvent e) @@ -675,7 +704,9 @@ public class Desktop jalview.bin.Cache.log.debug("Finished garbage collection."); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see jalview.jbgui.GDesktop#showMemusage_actionPerformed(java.awt.event.ActionEvent) */ protected void showMemusage_actionPerformed(ActionEvent e) @@ -694,19 +725,19 @@ public class Desktop AlignViewport source = null, target = null; if (frames[0] instanceof AlignFrame) { - source = ( (AlignFrame) frames[0]).getCurrentView(); + source = ((AlignFrame) frames[0]).getCurrentView(); } else if (frames[0] instanceof TreePanel) { - source = ( (TreePanel) frames[0]).getViewPort(); + source = ((TreePanel) frames[0]).getViewPort(); } else if (frames[0] instanceof PCAPanel) { - source = ( (PCAPanel) frames[0]).av; + source = ((PCAPanel) frames[0]).av; } else if (frames[0].getContentPane() instanceof PairwiseAlignPanel) { - source = ( (PairwiseAlignPanel) frames[0].getContentPane()).av; + source = ((PairwiseAlignPanel) frames[0].getContentPane()).av; } if (source != null) @@ -720,19 +751,19 @@ public class Desktop } if (frames[i] instanceof AlignFrame) { - target = ( (AlignFrame) frames[i]).getCurrentView(); + target = ((AlignFrame) frames[i]).getCurrentView(); } else if (frames[i] instanceof TreePanel) { - target = ( (TreePanel) frames[i]).getViewPort(); + target = ((TreePanel) frames[i]).getViewPort(); } else if (frames[i] instanceof PCAPanel) { - target = ( (PCAPanel) frames[i]).av; + target = ((PCAPanel) frames[i]).av; } else if (frames[i].getContentPane() instanceof PairwiseAlignPanel) { - target = ( (PairwiseAlignPanel) frames[i].getContentPane()).av; + target = ((PairwiseAlignPanel) frames[i].getContentPane()).av; } if (source == target) @@ -752,17 +783,19 @@ public class Desktop } } + } catch (java.beans.PropertyVetoException ex) + { } - catch (java.beans.PropertyVetoException ex) - {} } } } } + /** * DOCUMENT ME! - * - * @param e DOCUMENT ME! + * + * @param e + * DOCUMENT ME! */ protected void preferences_actionPerformed(ActionEvent e) { @@ -771,17 +804,16 @@ public class Desktop /** * DOCUMENT ME! - * - * @param e DOCUMENT ME! + * + * @param e + * DOCUMENT ME! */ public void saveState_actionPerformed(ActionEvent e) { - JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache. - getProperty( - "LAST_DIRECTORY"), new String[] - {"jar"}, - new String[] - {"Jalview Project"}, "Jalview Project"); + JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache + .getProperty("LAST_DIRECTORY"), new String[] + { "jar" }, new String[] + { "Jalview Project" }, "Jalview Project"); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle("Save State"); @@ -798,17 +830,16 @@ public class Desktop /** * DOCUMENT ME! - * - * @param e DOCUMENT ME! + * + * @param e + * DOCUMENT ME! */ public void loadState_actionPerformed(ActionEvent e) { - JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache. - getProperty( - "LAST_DIRECTORY"), new String[] - {"jar"}, - new String[] - {"Jalview Project"}, "Jalview Project"); + JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache + .getProperty("LAST_DIRECTORY"), new String[] + { "jar" }, new String[] + { "Jalview Project" }, "Jalview Project"); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle("Restore state"); @@ -817,15 +848,15 @@ public class Desktop if (value == JalviewFileChooser.APPROVE_OPTION) { String choice = chooser.getSelectedFile().getAbsolutePath(); - jalview.bin.Cache.setProperty("LAST_DIRECTORY", - chooser.getSelectedFile().getParent()); + jalview.bin.Cache.setProperty("LAST_DIRECTORY", chooser + .getSelectedFile().getParent()); new Jalview2XML().LoadJalviewAlign(choice); } } public void inputSequence_actionPerformed(ActionEvent e) { - new SequenceFetcher(null); + new SequenceFetcher(this); } JPanel progressPanel; @@ -835,22 +866,22 @@ public class Desktop if (fileLoadingCount == 0) { addProgressPanel("Loading File: " + fileName + " "); - + } fileLoadingCount++; } + private JProgressBar addProgressPanel(String string) { - if (progressPanel==null) + if (progressPanel == null) { progressPanel = new JPanel(new BorderLayout()); - totalProgressCount=0; + totalProgressCount = 0; } JProgressBar progressBar = new JProgressBar(); progressBar.setIndeterminate(true); - progressPanel.add(new JLabel(string), - BorderLayout.WEST); + progressPanel.add(new JLabel(string), BorderLayout.WEST); progressPanel.add(progressBar, BorderLayout.CENTER); @@ -859,13 +890,15 @@ public class Desktop validate(); return progressBar; } - int totalProgressCount=0; + + int totalProgressCount = 0; + private void removeProgressPanel(JProgressBar progbar) { - if (progressPanel!=null) + if (progressPanel != null) { progressPanel.remove(progbar); - if (--totalProgressCount<1) + if (--totalProgressCount < 1) { this.getContentPane().remove(progressPanel); progressPanel = null; @@ -873,6 +906,7 @@ public class Desktop } validate(); } + public void stopLoading() { fileLoadingCount--; @@ -887,10 +921,22 @@ public class Desktop } validate(); } + public static int getViewCount(String viewId) { + AlignViewport[] aps = getViewports(viewId); + return (aps==null) ? 0 : aps.length; + } + /** + * + * @param viewId + * @return all AlignmentPanels concerning the viewId sequence set + */ + public static AlignmentPanel[] getAlignmentPanels(String viewId) + { int count = 0; JInternalFrame[] frames = Desktop.desktop.getAllFrames(); + ArrayList aps = new ArrayList(); for (int t = 0; t < frames.length; t++) { if (frames[t] instanceof AlignFrame) @@ -898,18 +944,71 @@ public class Desktop AlignFrame af = (AlignFrame) frames[t]; for (int a = 0; a < af.alignPanels.size(); a++) { - if (viewId.equals( - ( (AlignmentPanel) af.alignPanels.elementAt(a)).av. - getSequenceSetId()) - ) + if (viewId + .equals(((AlignmentPanel) af.alignPanels.elementAt(a)).av + .getSequenceSetId())) { - count++; + aps.add(af.alignPanels.elementAt(a)); } } } } - - return count; + if (aps.size()==0) + { + return null; + } + AlignmentPanel[] vap = new AlignmentPanel[aps.size()]; + for (int t=0;t 0) + { + AlignViewport[] vp = new AlignViewport[viewp.size()]; + viewp.copyInto(vp); + return vp; + } + } + return null; } public void explodeViews(AlignFrame af) @@ -924,17 +1023,16 @@ public class Desktop { AlignmentPanel ap = (AlignmentPanel) af.alignPanels.elementAt(i); AlignFrame newaf = new AlignFrame(ap); - if (ap.av.explodedPosition != null && - !ap.av.explodedPosition.equals(af.getBounds())) + if (ap.av.explodedPosition != null + && !ap.av.explodedPosition.equals(af.getBounds())) { newaf.setBounds(ap.av.explodedPosition); } ap.av.gatherViewsHere = false; - addInternalFrame(newaf, af.getTitle(), - AlignFrame.DEFAULT_WIDTH, - AlignFrame.DEFAULT_HEIGHT); + addInternalFrame(newaf, af.getTitle(), AlignFrame.DEFAULT_WIDTH, + AlignFrame.DEFAULT_HEIGHT); } af.alignPanels.clear(); @@ -978,35 +1076,43 @@ public class Desktop } jalview.gui.VamsasApplication v_client = null; + public void vamsasImport_actionPerformed(ActionEvent e) { - if (v_client==null) + if (v_client == null) { // Load and try to start a session. - JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache. - getProperty("LAST_DIRECTORY")); + JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache + .getProperty("LAST_DIRECTORY")); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle("Open a saved VAMSAS session"); - chooser.setToolTipText("select a vamsas session to be opened as a new vamsas session."); + chooser + .setToolTipText("select a vamsas session to be opened as a new vamsas session."); int value = chooser.showOpenDialog(this); if (value == JalviewFileChooser.APPROVE_OPTION) { - try { - v_client = new jalview.gui.VamsasApplication(this, - chooser.getSelectedFile()); + try + { + v_client = new jalview.gui.VamsasApplication(this, chooser + .getSelectedFile()); } catch (Exception ex) { - jalview.bin.Cache.log.error("New vamsas session from existing session file failed:",ex); + jalview.bin.Cache.log.error( + "New vamsas session from existing session file failed:", + ex); return; } setupVamsasConnectedGui(); v_client.initial_update(); // TODO: thread ? } - }else { - jalview.bin.Cache.log.error("Implementation error - load session from a running session is not supported."); + } + else + { + jalview.bin.Cache.log + .error("Implementation error - load session from a running session is not supported."); } } @@ -1017,21 +1123,19 @@ public class Desktop // Start a session. // we just start a default session for moment. /* - JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache. - getProperty("LAST_DIRECTORY")); - - chooser.setFileView(new JalviewFileView()); - chooser.setDialogTitle("Load Vamsas file"); - chooser.setToolTipText("Import"); - - int value = chooser.showOpenDialog(this); - - if (value == JalviewFileChooser.APPROVE_OPTION) - { - v_client = new jalview.gui.VamsasApplication(this, - chooser.getSelectedFile()); - * - */ + * JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache. + * getProperty("LAST_DIRECTORY")); + * + * chooser.setFileView(new JalviewFileView()); + * chooser.setDialogTitle("Load Vamsas file"); + * chooser.setToolTipText("Import"); + * + * int value = chooser.showOpenDialog(this); + * + * if (value == JalviewFileChooser.APPROVE_OPTION) { v_client = new + * jalview.gui.VamsasApplication(this, chooser.getSelectedFile()); + * + */ v_client = new VamsasApplication(this); setupVamsasConnectedGui(); v_client.initial_update(); // TODO: thread ? @@ -1048,14 +1152,16 @@ public class Desktop vamsasStart.setText("Session Update"); vamsasSave.setVisible(true); vamsasStop.setVisible(true); - vamsasImport.setVisible(false); // Document import to existing session is not possible for vamsas-client-1.0. + vamsasImport.setVisible(false); // Document import to existing session is + // not possible for vamsas-client-1.0. } + protected void setupVamsasDisconnectedGui() { vamsasSave.setVisible(false); vamsasStop.setVisible(false); vamsasImport.setVisible(true); - vamsasStart.setText("New Vamsas Session..."); + vamsasStart.setText("New Vamsas Session"); } public void vamsasStop_actionPerformed(ActionEvent e) @@ -1067,6 +1173,7 @@ public class Desktop setupVamsasDisconnectedGui(); } } + protected void buildVamsasStMenu() { if (v_client == null) @@ -1100,7 +1207,8 @@ public class Desktop { if (dsktp.v_client == null) { - Thread rthr = new Thread(new Runnable() { + Thread rthr = new Thread(new Runnable() + { public void run() { @@ -1108,7 +1216,7 @@ public class Desktop dsktp.setupVamsasConnectedGui(); dsktp.v_client.initial_update(); } - + }); rthr.start(); } @@ -1117,8 +1225,8 @@ public class Desktop VamsasStMenu.add(sessit); } // don't show an empty menu. - VamsasStMenu.setVisible(sess.length>0); - + VamsasStMenu.setVisible(sess.length > 0); + } else { @@ -1126,71 +1234,77 @@ public class Desktop VamsasStMenu.removeAll(); VamsasStMenu.setVisible(false); } - } else { + } + else + { // Not interested in the content. Just hide ourselves. VamsasStMenu.setVisible(false); } } + public void vamsasSave_actionPerformed(ActionEvent e) { if (v_client != null) { - JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache. - getProperty( - "LAST_DIRECTORY"), new String[] - {"vdj"}, // TODO: VAMSAS DOCUMENT EXTENSION is VDJ - new String[] - {"Vamsas Document"}, "Vamsas Document"); + JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache + .getProperty("LAST_DIRECTORY"), new String[] + { "vdj" }, // TODO: VAMSAS DOCUMENT EXTENSION is VDJ + new String[] + { "Vamsas Document" }, "Vamsas Document"); - chooser.setFileView(new JalviewFileView()); - chooser.setDialogTitle("Save Vamsas Document Archive"); + chooser.setFileView(new JalviewFileView()); + chooser.setDialogTitle("Save Vamsas Document Archive"); - int value = chooser.showSaveDialog(this); + int value = chooser.showSaveDialog(this); - if (value == JalviewFileChooser.APPROVE_OPTION) + if (value == JalviewFileChooser.APPROVE_OPTION) + { + java.io.File choice = chooser.getSelectedFile(); + jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice.getParent()); + String warnmsg = null; + String warnttl = null; + try { - java.io.File choice = chooser.getSelectedFile(); - jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice.getParent()); - String warnmsg=null; - String warnttl=null; - try { - v_client.vclient.storeDocument(choice); - } - catch (Error ex) - { - warnttl = "Serious Problem saving Vamsas Document"; - warnmsg = ex.toString(); - jalview.bin.Cache.log.error("Error Whilst saving document to "+choice,ex); - - } - catch (Exception ex) - { - warnttl = "Problem saving Vamsas Document."; - warnmsg = ex.toString(); - jalview.bin.Cache.log.warn("Exception Whilst saving document to "+choice,ex); - - } - if (warnmsg!=null) - { - JOptionPane.showInternalMessageDialog(Desktop.desktop, + v_client.vclient.storeDocument(choice); + } catch (Error ex) + { + warnttl = "Serious Problem saving Vamsas Document"; + warnmsg = ex.toString(); + jalview.bin.Cache.log.error("Error Whilst saving document to " + + choice, ex); - warnmsg, warnttl, - JOptionPane.ERROR_MESSAGE); - } + } catch (Exception ex) + { + warnttl = "Problem saving Vamsas Document."; + warnmsg = ex.toString(); + jalview.bin.Cache.log.warn("Exception Whilst saving document to " + + choice, ex); + + } + if (warnmsg != null) + { + JOptionPane.showInternalMessageDialog(Desktop.desktop, + + warnmsg, warnttl, JOptionPane.ERROR_MESSAGE); } + } } } + JProgressBar vamUpdate = null; + /** * hide vamsas user gui bits when a vamsas document event is being handled. - * @param b true to hide gui, false to reveal gui + * + * @param b + * true to hide gui, false to reveal gui */ public void setVamsasUpdate(boolean b) { - jalview.bin.Cache.log.debug("Setting gui for Vamsas update " + - (b ? "in progress" : "finished")); - - if (vamUpdate!=null) + jalview.bin.Cache.log.debug("Setting gui for Vamsas update " + + (b ? "in progress" : "finished")); + + if (vamUpdate != null) { this.removeProgressPanel(vamUpdate); } @@ -1208,31 +1322,37 @@ public class Desktop return desktop.getAllFrames(); } - /** - * Checks the given url to see if it gives a response indicating that - * the user should be informed of a new questionnaire. + * Checks the given url to see if it gives a response indicating that the user + * should be informed of a new questionnaire. + * * @param url */ public void checkForQuestionnaire(String url) { UserQuestionnaireCheck jvq = new UserQuestionnaireCheck(url); - javax.swing.SwingUtilities.invokeLater(jvq); + // javax.swing.SwingUtilities.invokeLater(jvq); + new Thread(jvq).start(); } + /** - * Proxy class for JDesktopPane which optionally - * displays the current memory usage and highlights - * the desktop area with a red bar if free memory runs low. + * Proxy class for JDesktopPane which optionally displays the current memory + * usage and highlights the desktop area with a red bar if free memory runs + * low. + * * @author AMW */ - public class MyDesktopPane extends JDesktopPane implements Runnable + public class MyDesktopPane extends JDesktopPane implements Runnable { - + boolean showMemoryUsage = false; + Runtime runtime; + java.text.NumberFormat df; - float maxMemory, allocatedMemory, freeMemory, totalFreeMemory, percentUsage; + float maxMemory, allocatedMemory, freeMemory, totalFreeMemory, + percentUsage; public MyDesktopPane(boolean showMemoryUsage) { @@ -1248,10 +1368,12 @@ public class Desktop worker.start(); } } + public boolean isShowMemoryUsage() { return showMemoryUsage; } + public void run() { df = java.text.NumberFormat.getNumberInstance(); @@ -1270,15 +1392,15 @@ public class Desktop percentUsage = (totalFreeMemory / maxMemory) * 100; - // if (percentUsage < 20) + // if (percentUsage < 20) { - // border1 = BorderFactory.createMatteBorder(12, 12, 12, 12, Color.red); - // instance.set.setBorder(border1); + // border1 = BorderFactory.createMatteBorder(12, 12, 12, 12, + // Color.red); + // instance.set.setBorder(border1); } repaint(); - } - catch (Exception ex) + } catch (Exception ex) { ex.printStackTrace(); } @@ -1287,102 +1409,164 @@ public class Desktop public void paintComponent(Graphics g) { - if(showMemoryUsage) + if (showMemoryUsage) { if (percentUsage < 20) g.setColor(Color.red); g.drawString("Total Free Memory: " + df.format(totalFreeMemory) - + "MB; Max Memory: " + df.format(maxMemory) - + "MB; " + df.format(percentUsage) + "%", 10, - getHeight() - g.getFontMetrics().getHeight()); + + "MB; Max Memory: " + df.format(maxMemory) + "MB; " + + df.format(percentUsage) + "%", 10, getHeight() + - g.getFontMetrics().getHeight()); } } - - } + protected JMenuItem groovyShell; - public void doGroovyCheck() { + + public void doGroovyCheck() + { if (jalview.bin.Cache.groovyJarsPresent()) { groovyShell = new JMenuItem(); groovyShell.setText("Groovy Console..."); groovyShell.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - groovyShell_actionPerformed(e); - } + public void actionPerformed(ActionEvent e) + { + groovyShell_actionPerformed(e); + } }); toolsMenu.add(groovyShell); groovyShell.setVisible(true); } } + /** - * Accessor method to quickly get all the AlignmentFrames - * loaded. + * Accessor method to quickly get all the AlignmentFrames loaded. */ - public static AlignFrame[] getAlignframes() { + public static AlignFrame[] getAlignframes() + { JInternalFrame[] frames = Desktop.desktop.getAllFrames(); if (frames == null) { return null; - } - Vector avp=new Vector(); - try - { - //REVERSE ORDER - for (int i = frames.length - 1; i > -1; i--) - { - if (frames[i] instanceof AlignFrame) - { - AlignFrame af = (AlignFrame) frames[i]; - avp.addElement(af); - } - } - } - catch (Exception ex) - { - ex.printStackTrace(); - } - if (avp.size()==0) + } + Vector avp = new Vector(); + try + { + // REVERSE ORDER + for (int i = frames.length - 1; i > -1; i--) { - return null; - } - AlignFrame afs[] = new AlignFrame[avp.size()]; - for (int i=0,j=avp.size(); i