From a9474b488d0756b465ee507dbba639f62d0dcb85 Mon Sep 17 00:00:00 2001 From: gmungoc Date: Tue, 21 Jun 2016 14:41:08 +0100 Subject: [PATCH 1/1] JAL-2074 reuse Groovy window when reopening; rebind Cmd-Q to Jalview when closing --- src/jalview/gui/Desktop.java | 74 ++++++++++++++++++++++++++++++------------ 1 file changed, 53 insertions(+), 21 deletions(-) diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index e56c42f..45a52ee 100644 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -61,6 +61,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; +import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; @@ -82,6 +83,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; +import javax.swing.AbstractAction; import javax.swing.DefaultDesktopManager; import javax.swing.DesktopManager; import javax.swing.JButton; @@ -96,6 +98,7 @@ import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JProgressBar; +import javax.swing.KeyStroke; import javax.swing.SwingUtilities; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkEvent.EventType; @@ -1178,6 +1181,11 @@ public class Desktop extends jalview.jbgui.GDesktop implements dialogExecutor.shutdownNow(); } closeAll_actionPerformed(null); + + if (groovyConsole != null) + { + groovyConsole.exit(); + } System.exit(0); } @@ -2465,39 +2473,63 @@ public class Desktop extends jalview.jbgui.GDesktop implements */ void openGroovyConsole() { - groovyConsole = new groovy.ui.Console(); + if (groovyConsole == null) + { + groovyConsole = new groovy.ui.Console(); + groovyConsole.setVariable("Jalview", this); + groovyConsole.run(); - /* - * bind groovy variable 'Jalview' to the Desktop object - */ - groovyConsole.setVariable("Jalview", this); + /* + * We allow only one console at a time, so that AlignFrame menu option + * 'Calculate | Run Groovy script' is unambiguous. + * Disable 'Groovy Console', and enable 'Run script', when the console is + * opened, and the reverse when it is closed + */ + Window window = (Window) groovyConsole.getFrame(); + window.addWindowListener(new WindowAdapter() + { + @Override + public void windowClosed(WindowEvent e) + { + /* + * rebind CMD-Q from Groovy Console to Jalview Quit + */ + addQuitHandler(); + enableExecuteGroovy(false); + } + }); + } /* - * start the console + * show Groovy console window (after close and reopen) */ - groovyConsole.run(); + ((Window) groovyConsole.getFrame()).setVisible(true); /* - * Allow only one console at a time, so that the AlignFrame menu option - * 'Calculate | Run Groovy script' is unambiguous. - * Disable 'new console', and enable 'Run script', when the console is - * opened, and the reverse when it is closed + * if we got this far, enable 'Run Groovy' in AlignFrame menus + * and disable opening a second console */ - Window window = (Window) groovyConsole.getFrame(); - window.addWindowListener(new WindowAdapter() + enableExecuteGroovy(true); + } + + /** + * Bind Ctrl/Cmd-Q to Quit - for reset as Groovy Console takes over this + * binding when opened + */ + protected void addQuitHandler() + { + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_Q, Toolkit + .getDefaultToolkit().getMenuShortcutKeyMask()), + "Quit"); + getRootPane().getActionMap().put("Quit", new AbstractAction() { @Override - public void windowClosed(WindowEvent e) + public void actionPerformed(ActionEvent e) { - enableExecuteGroovy(false); + quit(); } }); - - /* - * if we got this far, enable 'Run Groovy' in AlignFrame menus - * and disable opening a second console - */ - enableExecuteGroovy(true); } /** -- 1.7.10.2