X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FDesktop.java;h=27f60ea0296d7c4e8fe17268f84a509c4bb0348c;hb=007af0c9001900071f6d8e9214143f79e10f4938;hp=39aa257ff521255a30e21f81fb3c90f411524d28;hpb=1a3aea90a65991ab5e47c1d3c7e663ede50bca6b;p=jalview.git diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index 39aa257..27f60ea 100644 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -23,6 +23,7 @@ package jalview.gui; import jalview.api.AlignViewportI; import jalview.api.AlignmentViewPanel; import jalview.bin.Cache; +import jalview.bin.Jalview; import jalview.io.FileLoader; import jalview.io.FormatAdapter; import jalview.io.IdentifyFile; @@ -33,6 +34,7 @@ import jalview.jbgui.GStructureViewer; import jalview.structure.StructureSelectionManager; import jalview.util.ImageMaker; import jalview.util.MessageManager; +import jalview.util.Platform; import jalview.viewmodel.AlignmentViewport; import jalview.ws.params.ParamManager; @@ -187,6 +189,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements this.delegate = delegate; } + @Override public void activateFrame(JInternalFrame f) { try @@ -199,31 +202,37 @@ public class Desktop extends jalview.jbgui.GDesktop implements } } + @Override public void beginDraggingFrame(JComponent f) { delegate.beginDraggingFrame(f); } + @Override public void beginResizingFrame(JComponent f, int direction) { delegate.beginResizingFrame(f, direction); } + @Override public void closeFrame(JInternalFrame f) { delegate.closeFrame(f); } + @Override public void deactivateFrame(JInternalFrame f) { delegate.deactivateFrame(f); } + @Override public void deiconifyFrame(JInternalFrame f) { delegate.deiconifyFrame(f); } + @Override public void dragFrame(JComponent f, int newX, int newY) { if (newY < 0) @@ -233,31 +242,37 @@ public class Desktop extends jalview.jbgui.GDesktop implements delegate.dragFrame(f, newX, newY); } + @Override public void endDraggingFrame(JComponent f) { delegate.endDraggingFrame(f); } + @Override public void endResizingFrame(JComponent f) { delegate.endResizingFrame(f); } + @Override public void iconifyFrame(JInternalFrame f) { delegate.iconifyFrame(f); } + @Override public void maximizeFrame(JInternalFrame f) { delegate.maximizeFrame(f); } + @Override public void minimizeFrame(JInternalFrame f) { delegate.minimizeFrame(f); } + @Override public void openFrame(JInternalFrame f) { delegate.openFrame(f); @@ -274,6 +289,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements delegate.resizeFrame(f, newX, newY, newWidth, newHeight); } + @Override public void setBoundsForFrame(JComponent f, int newX, int newY, int newWidth, int newHeight) { @@ -305,6 +321,10 @@ public class Desktop extends jalview.jbgui.GDesktop implements boolean showjconsole = jalview.bin.Cache.getDefault( "SHOW_JAVA_CONSOLE", false); desktop = new MyDesktopPane(selmemusage); + if (Platform.isAMac()) + { + desktop.setDoubleBuffered(false); + } showMemusage.setSelected(selmemusage); desktop.setBackground(Color.white); getContentPane().setLayout(new BorderLayout()); @@ -350,6 +370,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements this.addWindowListener(new WindowAdapter() { + @Override public void windowClosing(WindowEvent evt) { quit(); @@ -359,6 +380,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements MouseAdapter ma; this.addMouseListener(ma = new MouseAdapter() { + @Override public void mousePressed(MouseEvent evt) { if (SwingUtilities.isRightMouseButton(evt)) @@ -391,6 +413,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements // Spawn a thread that shows the splashscreen SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { new SplashScreen(); @@ -402,6 +425,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements // takes to open it later on. new Thread(new Runnable() { + @Override public void run() { Cache.log.debug("Filechooser init thread started."); @@ -573,16 +597,19 @@ public class Desktop extends jalview.jbgui.GDesktop implements // reselected again. boolean refresh = true; + @Override public void menuCanceled(MenuEvent e) { refresh = true; } + @Override public void menuDeselected(MenuEvent e) { refresh = true; } + @Override public void menuSelected(MenuEvent e) { if (refresh) @@ -603,6 +630,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements MessageManager.getString("label.paste_new_window")); item.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent evt) { paste(); @@ -625,7 +653,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements String file = (String) contents .getTransferData(DataFlavor.stringFlavor); - String format = new IdentifyFile().Identify(file, + String format = new IdentifyFile().identify(file, FormatAdapter.PASTE); new FileLoader().LoadFile(file, FormatAdapter.PASTE, format); @@ -750,8 +778,13 @@ public class Desktop extends jalview.jbgui.GDesktop implements frame.setResizable(resizable); frame.setMaximizable(resizable); frame.setIconifiable(resizable); - frame.setFrameIcon(null); - + if (Platform.isAMac()) + { + frame.setIconifiable(false); + frame.setFrameIcon(null); + // frame.setDesktopIcon(null); + frame.setDoubleBuffered(false); + } if (frame.getX() < 1 && frame.getY() < 1) { frame.setLocation(xOffset * openFrameCount, yOffset @@ -761,6 +794,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements final JMenuItem menuItem = new JMenuItem(title); frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() { + @Override public void internalFrameActivated( javax.swing.event.InternalFrameEvent evt) { @@ -772,6 +806,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements } + @Override public void internalFrameClosed( javax.swing.event.InternalFrameEvent evt) { @@ -789,6 +824,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements menuItem.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { try @@ -861,6 +897,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements } } + @Override public void lostOwnership(Clipboard clipboard, Transferable contents) { if (!internalCopy) @@ -871,14 +908,17 @@ public class Desktop extends jalview.jbgui.GDesktop implements internalCopy = false; } + @Override public void dragEnter(DropTargetDragEvent evt) { } + @Override public void dragExit(DropTargetEvent evt) { } + @Override public void dragOver(DropTargetDragEvent evt) { } @@ -894,6 +934,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements * @param evt * DOCUMENT ME! */ + @Override public void drop(DropTargetDropEvent evt) { boolean success = true; @@ -966,7 +1007,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements } else { - format = new IdentifyFile().Identify(file, protocol); + format = new IdentifyFile().identify(file, protocol); } new FileLoader().LoadFile(file, protocol, format); @@ -1017,20 +1058,13 @@ public class Desktop extends jalview.jbgui.GDesktop implements } else { - format = new IdentifyFile().Identify(choice, FormatAdapter.FILE); + format = new IdentifyFile().identify(choice, FormatAdapter.FILE); } if (viewport != null) { new FileLoader().LoadFile(viewport, choice, FormatAdapter.FILE, format); - // viewport.setShowSequenceFeatures(JSONFile.isSeqFeaturesEnabled()); - // AlignFrame af = viewport.getAlignPanel().alignFrame; - // if (af != null) - // { - // af.changeColour(JSONFile.getColourScheme()); - // af.setMenusForViewport(); - // } } else { @@ -1100,14 +1134,13 @@ public class Desktop extends jalview.jbgui.GDesktop implements } else { - String format = new IdentifyFile().Identify(url, FormatAdapter.URL); + String format = new IdentifyFile().identify(url, FormatAdapter.URL); if (format.equals("URL NOT FOUND")) { JOptionPane.showInternalMessageDialog(Desktop.desktop, MessageManager.formatMessage("label.couldnt_locate", - new Object[] - { url }), MessageManager + new Object[] { url }), MessageManager .getString("label.url_not_found"), JOptionPane.WARNING_MESSAGE); @@ -1202,6 +1235,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements // message.toString(), "About Jalview", JOptionPane.INFORMATION_MESSAGE); new Thread(new Runnable() { + @Override public void run() { new SplashScreen(true); @@ -1495,9 +1529,9 @@ public class Desktop extends jalview.jbgui.GDesktop implements public void saveState_actionPerformed(ActionEvent e) { JalviewFileChooser chooser = new JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] - { "jvp" }, new String[] - { "Jalview Project" }, "Jalview Project"); + jalview.bin.Cache.getProperty("LAST_DIRECTORY"), + new String[] { "jvp" }, new String[] { "Jalview Project" }, + "Jalview Project"); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle(MessageManager.getString("label.save_state")); @@ -1512,12 +1546,13 @@ public class Desktop extends jalview.jbgui.GDesktop implements new Thread(new Runnable() { + @Override public void run() { // TODO: refactor to Jalview desktop session controller action. setProgressBar(MessageManager.formatMessage( - "label.saving_jalview_project", new Object[] - { choice.getName() }), choice.hashCode()); + "label.saving_jalview_project", + new Object[] { choice.getName() }), choice.hashCode()); jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice.getParent()); // TODO catch and handle errors for savestate @@ -1536,8 +1571,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements ex); JOptionPane.showMessageDialog(me, MessageManager.formatMessage( "label.error_whilst_saving_current_state_to", - new Object[] - { choice.getName() }), MessageManager + new Object[] { choice.getName() }), MessageManager .getString("label.couldnt_save_project"), JOptionPane.WARNING_MESSAGE); } @@ -1567,10 +1601,9 @@ public class Desktop extends jalview.jbgui.GDesktop implements public void loadState_actionPerformed(ActionEvent e) { JalviewFileChooser chooser = new JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] - { "jvp", "jar" }, new String[] - { "Jalview Project", "Jalview Project (old)" }, - "Jalview Project"); + jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] { + "jvp", "jar" }, new String[] { "Jalview Project", + "Jalview Project (old)" }, "Jalview Project"); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle(MessageManager.getString("label.restore_state")); @@ -1585,11 +1618,13 @@ public class Desktop extends jalview.jbgui.GDesktop implements selectedFile.getParent()); new Thread(new Runnable() { + @Override public void run() { - setProgressBar(MessageManager.formatMessage( - "label.loading_jalview_project", new Object[] - { choice }), choice.hashCode()); + setProgressBar( + MessageManager.formatMessage( + "label.loading_jalview_project", + new Object[] { choice }), choice.hashCode()); try { new Jalview2XML().loadJalviewAlign(choice); @@ -1603,8 +1638,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements JOptionPane.showMessageDialog(Desktop.desktop, MessageManager .formatMessage( "label.error_whilst_loading_project_from", - new Object[] - { choice }), MessageManager + new Object[] { choice }), MessageManager .getString("label.couldnt_load_project"), JOptionPane.WARNING_MESSAGE); } @@ -1629,8 +1663,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements if (fileLoadingCount == 0) { fileLoadingPanels.add(addProgressPanel(MessageManager.formatMessage( - "label.loading_file", new Object[] - { fileName }))); + "label.loading_file", new Object[] { fileName }))); } fileLoadingCount++; } @@ -1724,7 +1757,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements { for (AlignmentPanel ap : af.alignPanels) { - if (alignmentId==null || alignmentId.equals(ap.av.getSequenceSetId())) + if (alignmentId == null + || alignmentId.equals(ap.av.getSequenceSetId())) { aps.add(ap); } @@ -1755,7 +1789,9 @@ public class Desktop extends jalview.jbgui.GDesktop implements for (AlignFrame afr : frames) { - if (sequenceSetId==null || afr.getViewport().getSequenceSetId().equals(sequenceSetId)) + if (sequenceSetId == null + || afr.getViewport().getSequenceSetId() + .equals(sequenceSetId)) { if (afr.alignPanels != null) { @@ -1894,8 +1930,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements Desktop.desktop, MessageManager.formatMessage( "label.couldnt_import_as_vamsas_session", - new Object[] - { fle }), + new Object[] { fle }), MessageManager .getString("label.vamsas_document_import_failed"), JOptionPane.ERROR_MESSAGE); @@ -1972,16 +2007,16 @@ public class Desktop extends jalview.jbgui.GDesktop implements } setProgressBar(MessageManager.formatMessage( - "status.importing_vamsas_session_from", new Object[] - { file.getName() }), file.hashCode()); + "status.importing_vamsas_session_from", + new Object[] { file.getName() }), file.hashCode()); try { v_client = new jalview.gui.VamsasApplication(this, file, null); } catch (Exception ex) { setProgressBar(MessageManager.formatMessage( - "status.importing_vamsas_session_from", new Object[] - { file.getName() }), file.hashCode()); + "status.importing_vamsas_session_from", + new Object[] { file.getName() }), file.hashCode()); jalview.bin.Cache.log.error( "New vamsas session from existing session file failed:", ex); return false; @@ -1989,8 +2024,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements setupVamsasConnectedGui(); v_client.initial_update(); // TODO: thread ? setProgressBar(MessageManager.formatMessage( - "status.importing_vamsas_session_from", new Object[] - { file.getName() }), file.hashCode()); + "status.importing_vamsas_session_from", + new Object[] { file.getName() }), file.hashCode()); return v_client.inSession(); } @@ -2097,13 +2132,13 @@ public class Desktop extends jalview.jbgui.GDesktop implements JMenuItem sessit = new JMenuItem(); sessit.setText(sess[i]); sessit.setToolTipText(MessageManager.formatMessage( - "label.connect_to_session", new Object[] - { sess[i] })); + "label.connect_to_session", new Object[] { sess[i] })); final Desktop dsktp = this; final String mysesid = sess[i]; sessit.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { if (dsktp.v_client == null) @@ -2111,6 +2146,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements Thread rthr = new Thread(new Runnable() { + @Override public void run() { dsktp.v_client = new VamsasApplication(dsktp, mysesid); @@ -2151,8 +2187,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements 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"); + new String[] { "Vamsas Document" }, "Vamsas Document"); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle(MessageManager @@ -2164,8 +2199,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements { java.io.File choice = chooser.getSelectedFile(); JPanel progpanel = addProgressPanel(MessageManager.formatMessage( - "label.saving_vamsas_doc", new Object[] - { choice.getName() })); + "label.saving_vamsas_doc", + new Object[] { choice.getName() })); jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice.getParent()); String warnmsg = null; String warnttl = null; @@ -2284,6 +2319,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements return showMemoryUsage; } + @Override public void run() { df = java.text.NumberFormat.getNumberInstance(); @@ -2331,9 +2367,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements { g.drawString(MessageManager.formatMessage( "label.memory_stats", - new Object[] - { df.format(totalFreeMemory), df.format(maxMemory), - df.format(percentUsage) }), 10, + new Object[] { df.format(totalFreeMemory), + df.format(maxMemory), df.format(percentUsage) }), 10, getHeight() - fm.getHeight()); } } @@ -2359,6 +2394,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements groovyShell.setText(MessageManager.getString("label.groovy_console")); groovyShell.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { groovyShell_actionPerformed(); @@ -2376,6 +2412,12 @@ public class Desktop extends jalview.jbgui.GDesktop implements */ public static AlignFrame[] getAlignFrames() { + if (Jalview.isHeadlessMode()) + { + // Desktop.desktop is null in headless mode + return new AlignFrame[] { currentAlignFrame }; + } + JInternalFrame[] frames = Desktop.desktop.getAllFrames(); if (frames == null) @@ -2463,12 +2505,10 @@ public class Desktop extends jalview.jbgui.GDesktop implements "groovy.ui.Console"); Constructor gccons = gcClass.getConstructor(); java.lang.reflect.Method setvar = gcClass.getMethod("setVariable", - new Class[] - { String.class, Object.class }); + new Class[] { String.class, Object.class }); java.lang.reflect.Method run = gcClass.getMethod("run"); Object gc = gccons.newInstance(); - setvar.invoke(gc, new Object[] - { "Jalview", this }); + setvar.invoke(gc, new Object[] { "Jalview", this }); run.invoke(gc); } catch (Exception ex) { @@ -2493,6 +2533,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements * * @see jalview.gui.IProgressIndicator#setProgressBar(java.lang.String, long) */ + @Override public void setProgressBar(String message, long id) { if (progressBars == null) @@ -2522,6 +2563,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements * @see jalview.gui.IProgressIndicator#registerHandler(long, * jalview.gui.IProgressIndicatorHandler) */ + @Override public void registerHandler(final long id, final IProgressIndicatorHandler handler) { @@ -2542,13 +2584,14 @@ public class Desktop extends jalview.jbgui.GDesktop implements cancel.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { handler.cancelActivity(id); us.setProgressBar(MessageManager.formatMessage( - "label.cancelled_params", new Object[] - { ((JLabel) progressPanel.getComponent(0)).getText() }), - id); + "label.cancelled_params", + new Object[] { ((JLabel) progressPanel.getComponent(0)) + .getText() }), id); } }); progressPanel.add(cancel, BorderLayout.EAST); @@ -2570,8 +2613,9 @@ public class Desktop extends jalview.jbgui.GDesktop implements } /** - * This will return the first AlignFrame holding the given viewport instance. It - * will break if there are more than one AlignFrames viewing a particular av. + * This will return the first AlignFrame holding the given viewport instance. + * It will break if there are more than one AlignFrames viewing a particular + * av. * * @param viewport * @return alignFrame for viewport @@ -2580,8 +2624,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements { if (desktop != null) { - AlignmentPanel[] aps = getAlignmentPanels(viewport - .getSequenceSetId()); + AlignmentPanel[] aps = getAlignmentPanels(viewport.getSequenceSetId()); for (int panel = 0; aps != null && panel < aps.length; panel++) { if (aps[panel] != null && aps[panel].av == viewport) @@ -2700,6 +2743,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements // only run if we aren't already displaying one of these. addDialogThread(serviceChangedDialog = new Runnable() { + @Override public void run() { @@ -2783,6 +2827,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements { new Thread(new Runnable() { + @Override public void run() { try @@ -2790,8 +2835,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements if (progress != null) { progress.setProgressBar(MessageManager.formatMessage( - "status.opening_params", new Object[] - { url }), this.hashCode()); + "status.opening_params", new Object[] { url }), this + .hashCode()); } jalview.util.BrowserLauncher.openURL(url); } catch (Exception ex) @@ -2881,6 +2926,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements { dialogExecutor.submit(new Runnable() { + @Override public void run() { if (dialogPause) @@ -2924,7 +2970,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements ImageMaker im = new jalview.util.ImageMaker(this, ImageMaker.TYPE.EPS, "View of Desktop", getWidth(), getHeight(), of = new File( "Jalview_snapshot" + System.currentTimeMillis() - + ".eps"), "View of desktop"); + + ".eps"), "View of desktop", null, 0, false); try { paintAll(im.getGraphics()); @@ -2940,7 +2986,11 @@ public class Desktop extends jalview.jbgui.GDesktop implements } /** - * Explode the views in the given frame into separate AlignFrame windows. + * Explode the views in the given SplitFrame into separate SplitFrame windows. + * This respects (remembers) any previous 'exploded geometry' i.e. the size + * and location last time the view was expanded (if any). However it does not + * remember the split pane divider location - this is set to match the + * 'exploding' frame. * * @param sf */ @@ -2969,27 +3019,39 @@ public class Desktop extends jalview.jbgui.GDesktop implements * AlignmentPanel objects, including their AlignmentViewports, so the * cdna/protein relationships between the viewports is carried over to the * new split frames. + * + * explodedGeometry holds the (x, y) position of the previously exploded + * SplitFrame, and the (width, height) of the AlignFrame component */ AlignmentPanel topPanel = (AlignmentPanel) topPanels.get(i); AlignFrame newTopFrame = new AlignFrame(topPanel); - newTopFrame.setSize(new Dimension(AlignFrame.DEFAULT_WIDTH, - AlignFrame.DEFAULT_HEIGHT)); + newTopFrame.setSize(oldTopFrame.getSize()); newTopFrame.setVisible(true); + Rectangle geometry = ((AlignViewport) topPanel.getAlignViewport()) + .getExplodedGeometry(); + if (geometry != null) + { + newTopFrame.setSize(geometry.getSize()); + } + AlignmentPanel bottomPanel = (AlignmentPanel) bottomPanels.get(i); AlignFrame newBottomFrame = new AlignFrame(bottomPanel); - newBottomFrame.setSize(new Dimension(AlignFrame.DEFAULT_WIDTH, - AlignFrame.DEFAULT_HEIGHT)); + newBottomFrame.setSize(oldBottomFrame.getSize()); newBottomFrame.setVisible(true); + geometry = ((AlignViewport) bottomPanel.getAlignViewport()) + .getExplodedGeometry(); + if (geometry != null) + { + newBottomFrame.setSize(geometry.getSize()); + } + topPanel.av.setGatherViewsHere(false); bottomPanel.av.setGatherViewsHere(false); JInternalFrame splitFrame = new SplitFrame(newTopFrame, newBottomFrame); - // either panel may hold previous exploded frame geometry - Rectangle geometry = ((AlignViewport) topPanel.getAlignViewport()) - .getExplodedGeometry(); if (geometry != null) { - splitFrame.setBounds(geometry); + splitFrame.setLocation(geometry.getLocation()); } Desktop.addInternalFrame(splitFrame, sf.getTitle(), -1, -1); } @@ -3012,15 +3074,23 @@ public class Desktop extends jalview.jbgui.GDesktop implements */ public void gatherViews(GSplitFrame source) { + /* + * special handling of explodedGeometry for a view within a SplitFrame: - it + * holds the (x, y) position of the enclosing SplitFrame, and the (width, + * height) of the AlignFrame component + */ AlignFrame myTopFrame = (AlignFrame) source.getTopFrame(); AlignFrame myBottomFrame = (AlignFrame) source.getBottomFrame(); - myTopFrame.viewport.setExplodedGeometry(source.getBounds()); - myBottomFrame.viewport.setExplodedGeometry(source.getBounds()); + myTopFrame.viewport.setExplodedGeometry(new Rectangle(source.getX(), + source.getY(), myTopFrame.getWidth(), myTopFrame.getHeight())); + myBottomFrame.viewport.setExplodedGeometry(new Rectangle(source.getX(), + source.getY(), myBottomFrame.getWidth(), myBottomFrame + .getHeight())); myTopFrame.viewport.setGatherViewsHere(true); myBottomFrame.viewport.setGatherViewsHere(true); String topViewId = myTopFrame.viewport.getSequenceSetId(); String bottomViewId = myBottomFrame.viewport.getSequenceSetId(); - + JInternalFrame[] frames = desktop.getAllFrames(); for (JInternalFrame frame : frames) { @@ -3040,15 +3110,15 @@ public class Desktop extends jalview.jbgui.GDesktop implements gatherThis = true; topPanel.av.setGatherViewsHere(false); bottomPanel.av.setGatherViewsHere(false); - // both panels refer to the same split frame geometry - Rectangle position = sf.getBounds(); - topPanel.av.setExplodedGeometry(position); - bottomPanel.av.setExplodedGeometry(position); + topPanel.av.setExplodedGeometry(new Rectangle(sf.getLocation(), + topFrame.getSize())); + bottomPanel.av.setExplodedGeometry(new Rectangle(sf + .getLocation(), bottomFrame.getSize())); myTopFrame.addAlignmentPanel(topPanel, false); myBottomFrame.addAlignmentPanel(bottomPanel, false); } } - + if (gatherThis) { topFrame.getAlignPanels().clear(); @@ -3065,15 +3135,14 @@ public class Desktop extends jalview.jbgui.GDesktop implements } - // public static AlignFrame getCurrentAlignFrame() - // { - // return currentAlignFrame; - // } - // - // public static void setCurrentAlignFrame(AlignFrame currentAlignFrame) - // { - // Desktop.currentAlignFrame = currentAlignFrame; - // } + public static AlignFrame getCurrentAlignFrame() + { + return currentAlignFrame; + } + public static void setCurrentAlignFrame(AlignFrame currentAlignFrame) + { + Desktop.currentAlignFrame = currentAlignFrame; + } }