X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FDesktop.java;h=7a972a181f18dcec6eb94a7246231abc35d396e4;hb=de87ceaadf42025516d3201bb8f1ba1ea1776fd1;hp=4cdf84c2b92a04b9ff2eac233dd7bc3c0ad5e8d9;hpb=06b8ab919b9d65007873fdf1d357ffbb7b10b1b0;p=jalview.git diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index 4cdf84c..7a972a1 100755 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -1,30 +1,38 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4) - * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5) + * Copyright (C) 2010 J Procter, AM Waterhouse, 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 file is part of Jalview. * - * 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. + * Jalview 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 3 of the License, or (at your option) any later version. * - * 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 + * Jalview 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 Jalview. If not, see . */ package jalview.gui; +import jalview.bin.Cache; import jalview.io.*; import java.awt.*; import java.awt.datatransfer.*; import java.awt.dnd.*; import java.awt.event.*; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; import java.lang.reflect.Constructor; +import java.net.URL; +import java.net.URLConnection; +import java.nio.channels.ReadableByteChannel; import java.util.*; import javax.swing.*; @@ -81,6 +89,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); boolean selmemusage = jalview.bin.Cache.getDefault("SHOW_MEMUSAGE", false); + boolean showjconsole = jalview.bin.Cache.getDefault( + "SHOW_JAVA_CONSOLE", false); desktop = new MyDesktopPane(selmemusage); showMemusage.setSelected(selmemusage); desktop.setBackground(Color.white); @@ -92,22 +102,29 @@ public class Desktop extends jalview.jbgui.GDesktop implements // 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)) + Rectangle dims = getLastKnownDimensions(""); + if (dims != null) { - setBounds(Integer.parseInt(x), Integer.parseInt(y), Integer - .parseInt(width), Integer.parseInt(height)); + setBounds(dims); } else { + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); setBounds((int) (screenSize.width - 900) / 2, (int) (screenSize.height - 650) / 2, 900, 650); } + jconsole = new Console(this, showjconsole); + // add essential build information + jconsole.setHeader("Jalview Desktop " + + jalview.bin.Cache.getProperty("VERSION") + "\n" + + "Build Date: " + + jalview.bin.Cache.getDefault("BUILD_DATE", "unknown") + "\n" + + "Java version: " + System.getProperty("java.version") + "\n" + + System.getProperty("os.arch") + " " + + System.getProperty("os.name") + " " + + System.getProperty("os.version")); + + showConsole(showjconsole); this.addWindowListener(new WindowAdapter() { @@ -130,10 +147,79 @@ public class Desktop extends jalview.jbgui.GDesktop implements this.setDropTarget(new java.awt.dnd.DropTarget(desktop, this)); // Spawn a thread that shows the splashscreen - new SplashScreen(); + SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + new SplashScreen(); + } + }); discoverer = new jalview.ws.Discoverer(); // Only gets started if gui is - // displayed. + // displayed. + // Thread off a new instance of the file chooser - this reduces the time it + // takes to open it later on. + new Thread(new Runnable() + { + public void run() + { + Cache.log.debug("Filechooser init thread started."); + JalviewFileChooser chooser = new JalviewFileChooser( + jalview.bin.Cache.getProperty("LAST_DIRECTORY"), + jalview.io.AppletFormatAdapter.READABLE_EXTENSIONS, + jalview.io.AppletFormatAdapter.READABLE_FNAMES, + jalview.bin.Cache.getProperty("DEFAULT_FILE_FORMAT")); + Cache.log.debug("Filechooser init thread finished."); + } + }).start(); + } + + /** + * recover the last known dimensions for a jalview window + * + * @param windowName + * - empty string is desktop, all other windows have unique prefix + * @return null or last known dimensions scaled to current geometry (if last + * window geom was known) + */ + Rectangle getLastKnownDimensions(String windowName) + { + // TODO: lock aspect ratio for scaling desktop Bug #0058199 + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + String x = jalview.bin.Cache.getProperty(windowName + "SCREEN_X"); + String y = jalview.bin.Cache.getProperty(windowName + "SCREEN_Y"); + String width = jalview.bin.Cache.getProperty(windowName + + "SCREEN_WIDTH"); + String height = jalview.bin.Cache.getProperty(windowName + + "SCREEN_HEIGHT"); + if ((x != null) && (y != null) && (width != null) && (height != null)) + { + int ix = Integer.parseInt(x), iy = Integer.parseInt(y), iw = Integer + .parseInt(width), ih = Integer.parseInt(height); + if (jalview.bin.Cache.getProperty("SCREENGEOMETRY_WIDTH") != null) + { + // attempt #1 - try to cope with change in screen geometry - this + // version doesn't preserve original jv aspect ratio. + // take ratio of current screen size vs original screen size. + double sw = ((1f * screenSize.width) / (1f * Integer + .parseInt(jalview.bin.Cache + .getProperty("SCREENGEOMETRY_WIDTH")))); + double sh = ((1f * screenSize.height) / (1f * Integer + .parseInt(jalview.bin.Cache + .getProperty("SCREENGEOMETRY_HEIGHT")))); + // rescale the bounds depending upon the current screen geometry. + ix = (int) (ix * sw); + iw = (int) (iw * sw); + iy = (int) (iy * sh); + ih = (int) (ih * sh); + jalview.bin.Cache.log.debug("Got last known dimensions for " + + windowName + ": x:" + ix + " y:" + iy + " width:" + iw + + " height:" + ih); + } + // return dimensions for new instance + return new Rectangle(ix, iy, iw, ih); + } + return null; } private void doVamsasClientCheck() @@ -216,16 +302,16 @@ public class Desktop extends jalview.jbgui.GDesktop implements } /** - * DOCUMENT ME! + * Adds and opens the given frame to the desktop * * @param frame - * DOCUMENT ME! + * DOCUMENT ME! * @param title - * DOCUMENT ME! + * DOCUMENT ME! * @param w - * DOCUMENT ME! + * DOCUMENT ME! * @param h - * DOCUMENT ME! + * DOCUMENT ME! */ public static synchronized void addInternalFrame( final JInternalFrame frame, String title, int w, int h) @@ -237,21 +323,23 @@ public class Desktop extends jalview.jbgui.GDesktop implements * DOCUMENT ME! * * @param frame - * DOCUMENT ME! + * DOCUMENT ME! * @param title - * DOCUMENT ME! + * DOCUMENT ME! * @param w - * DOCUMENT ME! + * DOCUMENT ME! * @param h - * DOCUMENT ME! + * DOCUMENT ME! * @param resizable - * DOCUMENT ME! + * DOCUMENT ME! */ public static synchronized void addInternalFrame( final JInternalFrame frame, String title, int w, int h, boolean resizable) { + // TODO: allow callers to determine X and Y position of frame (eg. via + // bounds object). // TODO: consider fixing method to update entries in the window submenu with // the current window title @@ -373,12 +461,13 @@ public class Desktop extends jalview.jbgui.GDesktop implements * DOCUMENT ME! * * @param evt - * DOCUMENT ME! + * DOCUMENT ME! */ public void drop(DropTargetDropEvent evt) { Transferable t = evt.getTransferable(); java.util.List files = null; + java.util.List protocols = null; try { @@ -397,6 +486,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); String data = (String) t.getTransferData(uriListFlavor); files = new java.util.ArrayList(1); + protocols = new java.util.ArrayList(1); for (java.util.StringTokenizer st = new java.util.StringTokenizer( data, "\r\n"); st.hasMoreTokens();) { @@ -406,10 +496,19 @@ public class Desktop extends jalview.jbgui.GDesktop implements // 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); + if (uri.getScheme().toLowerCase().startsWith("http")) + { + protocols.add(FormatAdapter.URL); + files.add(uri.toString()); + } + else + { + // otherwise preserve old behaviour: catch all for file objects + java.io.File file = new java.io.File(uri); + protocols.add(FormatAdapter.FILE); + files.add(file.toString()); + } } } } catch (Exception e) @@ -423,7 +522,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements for (int i = 0; i < files.size(); i++) { String file = files.get(i).toString(); - String protocol = FormatAdapter.FILE; + String protocol = (protocols == null) ? FormatAdapter.FILE + : (String) protocols.get(i); String format = null; if (file.endsWith(".jar")) @@ -449,7 +549,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void inputLocalFileMenuItem_actionPerformed(AlignViewport viewport) { @@ -497,7 +597,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void inputURLMenuItem_actionPerformed(AlignViewport viewport) { @@ -577,7 +677,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void inputTextboxMenuItem_actionPerformed(AlignViewport viewport) { @@ -591,18 +691,39 @@ public class Desktop extends jalview.jbgui.GDesktop implements */ public void quit() { - jalview.bin.Cache.setProperty("SCREEN_X", getBounds().x + ""); - jalview.bin.Cache.setProperty("SCREEN_Y", getBounds().y + ""); - jalview.bin.Cache.setProperty("SCREEN_WIDTH", getWidth() + ""); - jalview.bin.Cache.setProperty("SCREEN_HEIGHT", getHeight() + ""); + Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); + jalview.bin.Cache + .setProperty("SCREENGEOMETRY_WIDTH", screen.width + ""); + jalview.bin.Cache.setProperty("SCREENGEOMETRY_HEIGHT", screen.height + + ""); + storeLastKnownDimensions("", new Rectangle(getBounds().x, + getBounds().y, getWidth(), getHeight())); + + if (jconsole != null) + { + storeLastKnownDimensions("JAVA_CONSOLE_", jconsole.getBounds()); + jconsole.stopConsole(); + } System.exit(0); } + private void storeLastKnownDimensions(String string, Rectangle jc) + { + jalview.bin.Cache.log.debug("Storing last known dimensions for " + + string + ": x:" + jc.x + " y:" + jc.y + " width:" + jc.width + + " height:" + jc.height); + + jalview.bin.Cache.setProperty(string + "SCREEN_X", jc.x + ""); + jalview.bin.Cache.setProperty(string + "SCREEN_Y", jc.y + ""); + jalview.bin.Cache.setProperty(string + "SCREEN_WIDTH", jc.width + ""); + jalview.bin.Cache.setProperty(string + "SCREEN_HEIGHT", jc.height + ""); + } + /** * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void aboutMenuItem_actionPerformed(ActionEvent e) { @@ -627,8 +748,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements + "\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:" + "\nWaterhouse, A.M., Procter, J.B., Martin, D.M.A, Clamp, M. and Barton, G. J. (2009)" - + "\nJalview Version 2 - a multiple sequence alignment editor and analysis workbench" - + "\nBioinformatics doi: 10.1093/bioinformatics/btp033"); + + "\nJalview Version 2 - a multiple sequence alignment editor and analysis workbench" + + "\nBioinformatics doi: 10.1093/bioinformatics/btp033"); JOptionPane.showInternalMessageDialog(Desktop.desktop, message.toString(), "About Jalview", JOptionPane.INFORMATION_MESSAGE); @@ -638,7 +759,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void documentationMenuItem_actionPerformed(ActionEvent e) { @@ -669,10 +790,10 @@ public class Desktop extends jalview.jbgui.GDesktop implements } } System.out.println("ALL CLOSED"); - if (v_client!=null) + if (v_client != null) { // TODO clear binding to vamsas document objects on close_all - + } } @@ -694,7 +815,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements /* * (non-Javadoc) * - * @see jalview.jbgui.GDesktop#garbageCollect_actionPerformed(java.awt.event.ActionEvent) + * @seejalview.jbgui.GDesktop#garbageCollect_actionPerformed(java.awt.event. + * ActionEvent) */ protected void garbageCollect_actionPerformed(ActionEvent e) { @@ -707,13 +829,43 @@ public class Desktop extends jalview.jbgui.GDesktop implements /* * (non-Javadoc) * - * @see jalview.jbgui.GDesktop#showMemusage_actionPerformed(java.awt.event.ActionEvent) + * @see + * jalview.jbgui.GDesktop#showMemusage_actionPerformed(java.awt.event.ActionEvent + * ) */ protected void showMemusage_actionPerformed(ActionEvent e) { desktop.showMemoryUsage(showMemusage.isSelected()); } + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GDesktop#showConsole_actionPerformed(java.awt.event.ActionEvent + * ) + */ + protected void showConsole_actionPerformed(ActionEvent e) + { + showConsole(showConsole.isSelected()); + } + + Console jconsole = null; + + /** + * control whether the java console is visible or not + * + * @param selected + */ + void showConsole(boolean selected) + { + showConsole.setSelected(selected); + // TODO: decide if we should update properties file + Cache.setProperty("SHOW_JAVA_CONSOLE", Boolean.valueOf(selected) + .toString()); + jconsole.setVisible(selected); + } + void reorderAssociatedWindows(boolean minimize, boolean close) { JInternalFrame[] frames = desktop.getAllFrames(); @@ -795,7 +947,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void preferences_actionPerformed(ActionEvent e) { @@ -806,7 +958,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void saveState_actionPerformed(ActionEvent e) { @@ -823,8 +975,13 @@ public class Desktop extends jalview.jbgui.GDesktop implements if (value == JalviewFileChooser.APPROVE_OPTION) { java.io.File choice = chooser.getSelectedFile(); + JProgressBar progpanel = addProgressPanel("Saving jalview project " + + choice.getName()); jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice.getParent()); + // TODO catch and handle errors for savestate new Jalview2XML().SaveState(choice); + removeProgressPanel(progpanel); + } } @@ -832,7 +989,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void loadState_actionPerformed(ActionEvent e) { @@ -848,9 +1005,12 @@ public class Desktop extends jalview.jbgui.GDesktop implements if (value == JalviewFileChooser.APPROVE_OPTION) { String choice = chooser.getSelectedFile().getAbsolutePath(); + setProgressBar("loading jalview project " + + chooser.getSelectedFile().getName(), choice.hashCode()); jalview.bin.Cache.setProperty("LAST_DIRECTORY", chooser .getSelectedFile().getParent()); new Jalview2XML().LoadJalviewAlign(choice); + setProgressBar(null, choice.hashCode()); } } @@ -925,8 +1085,9 @@ public class Desktop extends jalview.jbgui.GDesktop implements public static int getViewCount(String viewId) { AlignViewport[] aps = getViewports(viewId); - return (aps==null) ? 0 : aps.length; + return (aps == null) ? 0 : aps.length; } + /** * * @param viewId @@ -935,6 +1096,12 @@ public class Desktop extends jalview.jbgui.GDesktop implements public static AlignmentPanel[] getAlignmentPanels(String viewId) { int count = 0; + if (Desktop.desktop == null) + { + // no frames created and in headless mode + // TODO: verify that frames are recoverable when in headless mode + return null; + } JInternalFrame[] frames = Desktop.desktop.getAllFrames(); ArrayList aps = new ArrayList(); for (int t = 0; t < frames.length; t++) @@ -953,20 +1120,23 @@ public class Desktop extends jalview.jbgui.GDesktop implements } } } - if (aps.size()==0) + if (aps.size() == 0) { return null; } AlignmentPanel[] vap = new AlignmentPanel[aps.size()]; - for (int t=0;t -1) + { + fos.write(buffer, 0, ln); + } + bis.close(); + fos.close(); + v_client = new jalview.gui.VamsasApplication(this, file, url + .toExternalForm()); + } catch (Exception ex) + { + jalview.bin.Cache.log.error( + "Failed to create new vamsas session from contents of URL " + + url, ex); + return false; + } + setupVamsasConnectedGui(); + v_client.initial_update(); // TODO: thread ? + return v_client.inSession(); + } + + /** + * import file into a new vamsas session (uses jalview.gui.VamsasApplication) + * + * @param file + * @return true if import was a success and a session was started. + */ + public boolean vamsasImport(File file) + { + if (v_client != null) + { + + jalview.bin.Cache.log + .error("Implementation error - load session from a running session is not supported."); + return false; + } + + setProgressBar("Importing VAMSAS session from " + file.getName(), file + .hashCode()); + try + { + v_client = new jalview.gui.VamsasApplication(this, file, null); + } catch (Exception ex) + { + setProgressBar("Importing VAMSAS session from " + file.getName(), + file.hashCode()); + jalview.bin.Cache.log.error( + "New vamsas session from existing session file failed:", ex); + return false; + } + setupVamsasConnectedGui(); + v_client.initial_update(); // TODO: thread ? + setProgressBar("Importing VAMSAS session from " + file.getName(), file + .hashCode()); + return v_client.inSession(); + } + + public boolean joinVamsasSession(String mysesid) + { + if (v_client != null) + { + throw new Error( + "Trying to join a vamsas session when another is already connected."); + } + if (mysesid == null) + { + throw new Error("Invalid vamsas session id."); + } + v_client = new VamsasApplication(this, mysesid); + setupVamsasConnectedGui(); + v_client.initial_update(); + return (v_client.inSession()); + } + public void vamsasStart_actionPerformed(ActionEvent e) { if (v_client == null) @@ -1134,7 +1399,6 @@ public class Desktop extends jalview.jbgui.GDesktop implements * * if (value == JalviewFileChooser.APPROVE_OPTION) { v_client = new * jalview.gui.VamsasApplication(this, chooser.getSelectedFile()); - * */ v_client = new VamsasApplication(this); setupVamsasConnectedGui(); @@ -1153,7 +1417,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements vamsasSave.setVisible(true); vamsasStop.setVisible(true); vamsasImport.setVisible(false); // Document import to existing session is - // not possible for vamsas-client-1.0. + // not possible for vamsas-client-1.0. } protected void setupVamsasDisconnectedGui() @@ -1260,6 +1524,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements if (value == JalviewFileChooser.APPROVE_OPTION) { java.io.File choice = chooser.getSelectedFile(); + JProgressBar progpanel = addProgressPanel("Saving VAMSAS Document to " + + choice.getName()); jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice.getParent()); String warnmsg = null; String warnttl = null; @@ -1281,6 +1547,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements + choice, ex); } + removeProgressPanel(progpanel); if (warnmsg != null) { JOptionPane.showInternalMessageDialog(Desktop.desktop, @@ -1297,7 +1564,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements * hide vamsas user gui bits when a vamsas document event is being handled. * * @param b - * true to hide gui, false to reveal gui + * true to hide gui, false to reveal gui */ public void setVamsasUpdate(boolean b) { @@ -1384,7 +1651,6 @@ public class Desktop extends jalview.jbgui.GDesktop implements { try { - Thread.sleep(3000); maxMemory = runtime.maxMemory() / 1048576f; allocatedMemory = runtime.totalMemory() / 1048576f; freeMemory = runtime.freeMemory() / 1048576f; @@ -1399,7 +1665,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements // instance.set.setBorder(border1); } repaint(); - + // sleep after showing usage + Thread.sleep(3000); } catch (Exception ex) { ex.printStackTrace(); @@ -1409,15 +1676,18 @@ public class Desktop extends jalview.jbgui.GDesktop implements public void paintComponent(Graphics g) { - if (showMemoryUsage) + if (showMemoryUsage && g != null) { 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()); + FontMetrics fm = g.getFontMetrics(); + if (fm != null) + { + g.drawString("Total Free Memory: " + df.format(totalFreeMemory) + + "MB; Max Memory: " + df.format(maxMemory) + "MB; " + + df.format(percentUsage) + "%", 10, getHeight() + - fm.getHeight()); + } } } @@ -1544,7 +1814,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements .remove(new Long(id)); if (progressBarHandlers.contains(new Long(id))) { - progressBarHandlers.remove(new Long(id)); + progressBarHandlers.remove(new Long(id)); } removeProgressPanel(progressPanel); } @@ -1553,32 +1823,41 @@ public class Desktop extends jalview.jbgui.GDesktop implements progressBars.put(new Long(id), addProgressPanel(message)); } } - /* (non-Javadoc) - * @see jalview.gui.IProgressIndicator#registerHandler(long, jalview.gui.IProgressIndicatorHandler) + + /* + * (non-Javadoc) + * + * @see jalview.gui.IProgressIndicator#registerHandler(long, + * jalview.gui.IProgressIndicatorHandler) */ - public void registerHandler(final long id, final IProgressIndicatorHandler handler) + public void registerHandler(final long id, + final IProgressIndicatorHandler handler) { - if (progressBarHandlers==null || !progressBars.contains(new Long(id))) + if (progressBarHandlers == null || !progressBars.contains(new Long(id))) { - throw new Error("call setProgressBar before registering the progress bar's handler."); + throw new Error( + "call setProgressBar before registering the progress bar's handler."); } progressBarHandlers.put(new Long(id), handler); final JPanel progressPanel = (JPanel) progressBars.get(new Long(id)); if (handler.canCancel()) { JButton cancel = new JButton("Cancel"); - final IProgressIndicator us=this; - cancel.addActionListener(new ActionListener() { + final IProgressIndicator us = this; + cancel.addActionListener(new ActionListener() + { public void actionPerformed(ActionEvent e) { handler.cancelActivity(id); - us.setProgressBar("Cancelled "+((JLabel)progressPanel.getComponent(0)).getText(), id); + us.setProgressBar("Cancelled " + + ((JLabel) progressPanel.getComponent(0)).getText(), id); } }); progressPanel.add(cancel, BorderLayout.EAST); } } + /** * This will return the first AlignFrame viewing AlignViewport av. It will * break if there are more than one AlignFrames viewing a particular av. This @@ -1591,12 +1870,20 @@ public class Desktop extends jalview.jbgui.GDesktop implements if (desktop != null) { AlignmentPanel[] aps = getAlignmentPanels(av.getSequenceSetId()); - for (int panel=0;aps!=null && panel