X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FDesktop.java;h=8f0d21092203a4584a582e0b2ad7e71f02f76d88;hb=9db8c298fdcb298dc192871d45d57a60517b2add;hp=270805a32bba31c64342d3a9193361f74be415ca;hpb=4d7f98a6dd54d9863ba449ec79dcd95d25ed863d;p=jalview.git diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index 270805a..8f0d210 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,7 +1058,7 @@ 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) @@ -1100,7 +1141,7 @@ 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")) { @@ -1201,6 +1242,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); @@ -1511,6 +1553,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements new Thread(new Runnable() { + @Override public void run() { // TODO: refactor to Jalview desktop session controller action. @@ -1582,6 +1625,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements selectedFile.getParent()); new Thread(new Runnable() { + @Override public void run() { setProgressBar( @@ -2101,6 +2145,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements sessit.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { if (dsktp.v_client == null) @@ -2108,6 +2153,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); @@ -2280,6 +2326,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements return showMemoryUsage; } + @Override public void run() { df = java.text.NumberFormat.getNumberInstance(); @@ -2354,6 +2401,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(); @@ -2371,6 +2419,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) @@ -2486,6 +2540,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) @@ -2515,6 +2570,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) { @@ -2535,6 +2591,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements cancel.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { handler.cancelActivity(id); @@ -2693,6 +2750,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() { @@ -2776,6 +2834,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements { new Thread(new Runnable() { + @Override public void run() { try @@ -2874,6 +2933,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements { dialogExecutor.submit(new Runnable() { + @Override public void run() { if (dialogPause) @@ -2917,7 +2977,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()); @@ -2933,7 +2993,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 */ @@ -2962,27 +3026,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); } @@ -3005,10 +3081,18 @@ 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(); @@ -3033,10 +3117,10 @@ 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); }