JAL-3063 temporary extra menu option to save/load project as JAXB
[jalview.git] / src / jalview / gui / Desktop.java
index 259e693..bbdddbb 100644 (file)
@@ -69,6 +69,7 @@ import java.awt.dnd.DropTargetEvent;
 import java.awt.dnd.DropTargetListener;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.InputEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
@@ -92,10 +93,13 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.Semaphore;
 
 import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.ActionMap;
 import javax.swing.Box;
 import javax.swing.BoxLayout;
 import javax.swing.DefaultDesktopManager;
 import javax.swing.DesktopManager;
+import javax.swing.InputMap;
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
 import javax.swing.JComboBox;
@@ -904,8 +908,6 @@ public class Desktop extends jalview.jbgui.GDesktop
           menuItem.removeActionListener(menuItem.getActionListeners()[0]);
         }
         windowMenu.remove(menuItem);
-
-        System.gc();
       };
     });
 
@@ -925,6 +927,8 @@ public class Desktop extends jalview.jbgui.GDesktop
       }
     });
 
+    setKeyBindings(frame);
+
     desktop.add(frame);
 
     windowMenu.add(menuItem);
@@ -944,6 +948,42 @@ public class Desktop extends jalview.jbgui.GDesktop
     }
   }
 
+  /**
+   * Add key bindings to a JInternalFrame so that Ctrl-W and Cmd-W will close
+   * the window
+   * 
+   * @param frame
+   */
+  private static void setKeyBindings(JInternalFrame frame)
+  {
+    @SuppressWarnings("serial")
+    final Action closeAction = new AbstractAction()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        frame.dispose();
+      }
+    };
+
+    /*
+     * set up key bindings for Ctrl-W and Cmd-W, with the same (Close) action
+     */
+    KeyStroke ctrlWKey = KeyStroke.getKeyStroke(KeyEvent.VK_W,
+            InputEvent.CTRL_DOWN_MASK);
+    KeyStroke cmdWKey = KeyStroke.getKeyStroke(KeyEvent.VK_W,
+            Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
+
+    InputMap inputMap = frame
+            .getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+    String ctrlW = ctrlWKey.toString();
+    inputMap.put(ctrlWKey, ctrlW);
+    inputMap.put(cmdWKey, ctrlW);
+
+    ActionMap actionMap = frame.getActionMap();
+    actionMap.put(ctrlW, closeAction);
+  }
+
   @Override
   public void lostOwnership(Clipboard clipboard, Transferable contents)
   {
@@ -1393,7 +1433,6 @@ public class Desktop extends jalview.jbgui.GDesktop
     {
       ssm.resetAll();
     }
-    System.gc();
   }
 
   @Override
@@ -1566,9 +1605,10 @@ public class Desktop extends jalview.jbgui.GDesktop
    *          DOCUMENT ME!
    */
   @Override
-  public void saveState_actionPerformed(ActionEvent e)
+  public void saveState_actionPerformed(boolean asCastor)
   {
-    JalviewFileChooser chooser = new JalviewFileChooser("jvp",
+    JalviewFileChooser chooser = new JalviewFileChooser(
+            asCastor ? "jvp" : "jvx",
             "Jalview Project");
 
     chooser.setFileView(new JalviewFileView());
@@ -1597,7 +1637,14 @@ public class Desktop extends jalview.jbgui.GDesktop
           // TODO prevent user from messing with the Desktop whilst we're saving
           try
           {
-            new Jalview2XML().saveState(choice);
+            if (asCastor)
+            {
+              new Jalview2XML().saveState(choice);
+            }
+            else
+            {
+              new jalview.project.Jalview2XML().saveState(choice);
+            }
           } catch (OutOfMemoryError oom)
           {
             new OOMWarning(
@@ -1639,13 +1686,19 @@ public class Desktop extends jalview.jbgui.GDesktop
    *          DOCUMENT ME!
    */
   @Override
-  public void loadState_actionPerformed(ActionEvent e)
-  {
+  public void loadState_actionPerformed(boolean asCastor)
+  {
+    final String[] suffix = asCastor ? new String[] { "jvp", "jar" }
+            : new String[]
+            { "jvx" };
+    final String[] desc = asCastor
+            ? new String[]
+            { "Jalview Project", "Jalview Project (old)" }
+            : new String[]
+            { "Jalview Project" };
     JalviewFileChooser chooser = new JalviewFileChooser(
-            Cache.getProperty("LAST_DIRECTORY"), new String[]
-            { "jvp", "jar" },
-            new String[]
-            { "Jalview Project", "Jalview Project (old)" },
+            Cache.getProperty("LAST_DIRECTORY"), suffix,
+            desc,
             "Jalview Project");
     chooser.setFileView(new JalviewFileView());
     chooser.setDialogTitle(MessageManager.getString("label.restore_state"));
@@ -1668,7 +1721,14 @@ public class Desktop extends jalview.jbgui.GDesktop
                   { choice }), choice.hashCode());
           try
           {
-            new Jalview2XML().loadJalviewAlign(choice);
+            if (asCastor)
+            {
+              new Jalview2XML().loadJalviewAlign(choice);
+            }
+            else
+            {
+              new jalview.project.Jalview2XML().loadJalviewAlign(choice);
+            }
           } catch (OutOfMemoryError oom)
           {
             new OOMWarning("Whilst loading project from " + choice, oom);