Merge branch 'improvement/JAL-1988+JAL-3416_Java8_macOS_APQHandlers_and_FlatLaF_optio...
[jalview.git] / src / jalview / jbgui / GDesktop.java
index 3e3691c..ca95222 100755 (executable)
  */
 package jalview.jbgui;
 
-import jalview.api.AlignmentViewPanel;
-import jalview.io.FileFormatException;
-import jalview.util.MessageManager;
-import jalview.util.Platform;
-
 import java.awt.FlowLayout;
-import java.awt.Toolkit;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 
@@ -36,14 +30,22 @@ import javax.swing.JMenu;
 import javax.swing.JMenuBar;
 import javax.swing.JMenuItem;
 
+import jalview.api.AlignmentViewPanel;
+import jalview.bin.Cache;
+import jalview.io.FileFormatException;
+import jalview.util.MessageManager;
+import jalview.util.Platform;
+
 /**
  * DOCUMENT ME!
  * 
  * @author $author$
  * @version $Revision$
  */
+@SuppressWarnings("serial")
 public class GDesktop extends JFrame
 {
+
   protected static JMenu windowMenu = new JMenu();
 
   JMenuBar desktopMenubar = new JMenuBar();
@@ -52,10 +54,6 @@ public class GDesktop extends JFrame
 
   JMenu HelpMenu = new JMenu();
 
-  protected JMenu VamsasMenu = new JMenu();
-
-  protected JMenu VamsasStMenu = new JMenu();
-
   JMenuItem inputLocalFileMenuItem = new JMenuItem();
 
   JMenuItem inputURLMenuItem = new JMenuItem();
@@ -76,20 +74,14 @@ public class GDesktop extends JFrame
 
   JMenuItem saveState = new JMenuItem();
 
+  JMenuItem saveAsState = new JMenuItem();
+
   JMenuItem loadState = new JMenuItem();
 
   JMenu inputMenu = new JMenu();
 
-  protected JMenuItem vamsasStart = new JMenuItem();
-
-  protected JMenuItem vamsasImport = new JMenuItem();
-
-  protected JMenuItem vamsasSave = new JMenuItem();
-
   JMenuItem inputSequence = new JMenuItem();
 
-  protected JMenuItem vamsasStop = new JMenuItem();
-
   JMenuItem closeAll = new JMenuItem();
 
   JMenuItem raiseRelated = new JMenuItem();
@@ -115,6 +107,7 @@ public class GDesktop extends JFrame
    */
   public GDesktop()
   {
+    super();
     try
     {
       jbInit();
@@ -124,11 +117,12 @@ public class GDesktop extends JFrame
       e.printStackTrace();
     }
 
-    if (!Platform.isAMac())
+    if (Platform.allowMnemonics())
     {
+      // BH was !Platform.isAMacAndNotJS()) i.e. "JS or not Mac"
+      // but here we want just not a Mac, period, right?
       FileMenu.setMnemonic('F');
       inputLocalFileMenuItem.setMnemonic('L');
-      VamsasMenu.setMnemonic('V');
       inputURLMenuItem.setMnemonic('U');
       inputTextboxMenuItem.setMnemonic('C');
       quit.setMnemonic('Q');
@@ -146,20 +140,38 @@ public class GDesktop extends JFrame
    */
   private void jbInit() throws Exception
   {
+    boolean apqHandlersSet = false;
+    /**
+     * APQHandlers sets handlers for About, Preferences and Quit actions
+     * peculiar to macOS's application menu. APQHandlers will check to see if a
+     * handler is supported before setting it.
+     */
+    try
+    {
+      apqHandlersSet = APQHandlers.setAPQHandlers(this);
+    } catch (Exception e)
+    {
+      System.out.println("Cannot set APQHandlers");
+      // e.printStackTrace();
+    } catch (Throwable t)
+    {
+      jalview.bin.Console
+              .warn("Error setting APQHandlers: " + t.toString());
+      jalview.bin.Console.trace(Cache.getStackTraceString(t));
+    }
 
+    setName("jalview-desktop");
     FileMenu.setText(MessageManager.getString("action.file"));
     HelpMenu.setText(MessageManager.getString("action.help"));
-    VamsasMenu.setText("Vamsas");
-    VamsasMenu.setToolTipText(MessageManager
-            .getString("label.share_data_vamsas_applications"));
-    VamsasStMenu.setText(MessageManager.getString("label.connect_to"));
-    VamsasStMenu.setToolTipText(MessageManager
-            .getString("label.join_existing_vamsas_session"));
-    inputLocalFileMenuItem.setText(MessageManager
-            .getString("label.load_tree_from_file"));
-    inputLocalFileMenuItem.setAccelerator(javax.swing.KeyStroke
-            .getKeyStroke(java.awt.event.KeyEvent.VK_O, Toolkit
-                    .getDefaultToolkit().getMenuShortcutKeyMask(), false));
+    inputLocalFileMenuItem
+            .setText(MessageManager.getString("label.load_tree_from_file"));
+    inputLocalFileMenuItem
+            .setAccelerator(
+                    javax.swing.KeyStroke
+                            .getKeyStroke(java.awt.event.KeyEvent.VK_O,
+                                    jalview.util.ShortcutKeyMaskExWrapper
+                                            .getMenuShortcutKeyMaskEx(),
+                                    false));
     inputLocalFileMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
@@ -184,8 +196,8 @@ public class GDesktop extends JFrame
         }
       }
     });
-    inputTextboxMenuItem.setText(MessageManager
-            .getString("label.from_textbox"));
+    inputTextboxMenuItem
+            .setText(MessageManager.getString("label.from_textbox"));
     inputTextboxMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
@@ -213,8 +225,8 @@ public class GDesktop extends JFrame
         aboutMenuItem_actionPerformed(e);
       }
     });
-    documentationMenuItem.setText(MessageManager
-            .getString("label.documentation"));
+    documentationMenuItem
+            .setText(MessageManager.getString("label.documentation"));
     documentationMenuItem.setAccelerator(javax.swing.KeyStroke
             .getKeyStroke(java.awt.event.KeyEvent.VK_F1, 0, false));
     documentationMenuItem
@@ -223,7 +235,7 @@ public class GDesktop extends JFrame
               @Override
               public void actionPerformed(ActionEvent e)
               {
-                documentationMenuItem_actionPerformed(e);
+                documentationMenuItem_actionPerformed();
               }
             });
     this.getContentPane().setLayout(flowLayout1);
@@ -244,54 +256,30 @@ public class GDesktop extends JFrame
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        saveState_actionPerformed(e);
-      }
-    });
-    loadState.setText(MessageManager.getString("action.load_project"));
-    loadState.addActionListener(new ActionListener()
-    {
-      @Override
-      public void actionPerformed(ActionEvent e)
-      {
-        loadState_actionPerformed(e);
-      }
-    });
-    inputMenu.setText(MessageManager.getString("label.input_alignment"));
-    vamsasStart.setText(MessageManager
-            .getString("label.new_vamsas_session"));
-    vamsasStart.setVisible(false);
-    vamsasStart.addActionListener(new ActionListener()
-    {
-      @Override
-      public void actionPerformed(ActionEvent e)
-      {
-        vamsasStart_actionPerformed(e);
+        saveState_actionPerformed();
       }
     });
-    vamsasImport.setText(MessageManager
-            .getString("action.load_vamsas_session"));
-    vamsasImport.setVisible(false);
-    vamsasImport.addActionListener(new ActionListener()
+    saveAsState.setText(MessageManager.getString("action.save_project_as"));
+    saveAsState.addActionListener(new ActionListener()
     {
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        vamsasImport_actionPerformed(e);
+        saveAsState_actionPerformed(e);
       }
     });
-    vamsasSave.setText(MessageManager
-            .getString("action.save_vamsas_session"));
-    vamsasSave.setVisible(false);
-    vamsasSave.addActionListener(new ActionListener()
+    loadState.setText(MessageManager.getString("action.load_project"));
+    loadState.addActionListener(new ActionListener()
     {
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        vamsasSave_actionPerformed(e);
+        loadState_actionPerformed();
       }
     });
-    inputSequence.setText(MessageManager
-            .getString("action.fetch_sequences"));
+    inputMenu.setText(MessageManager.getString("label.input_alignment"));
+    inputSequence
+            .setText(MessageManager.getString("action.fetch_sequences"));
     inputSequence.addActionListener(new ActionListener()
     {
       @Override
@@ -300,17 +288,6 @@ public class GDesktop extends JFrame
         inputSequence_actionPerformed(e);
       }
     });
-    vamsasStop.setText(MessageManager
-            .getString("label.stop_vamsas_session"));
-    vamsasStop.setVisible(false);
-    vamsasStop.addActionListener(new ActionListener()
-    {
-      @Override
-      public void actionPerformed(ActionEvent e)
-      {
-        vamsasStop_actionPerformed(e);
-      }
-    });
     closeAll.setText(MessageManager.getString("action.close_all"));
     closeAll.addActionListener(new ActionListener()
     {
@@ -320,8 +297,8 @@ public class GDesktop extends JFrame
         closeAll_actionPerformed(e);
       }
     });
-    raiseRelated.setText(MessageManager
-            .getString("action.raise_associated_windows"));
+    raiseRelated.setText(
+            MessageManager.getString("action.raise_associated_windows"));
     raiseRelated.addActionListener(new ActionListener()
     {
       @Override
@@ -330,8 +307,8 @@ public class GDesktop extends JFrame
         raiseRelated_actionPerformed(e);
       }
     });
-    minimizeAssociated.setText(MessageManager
-            .getString("action.minimize_associated_windows"));
+    minimizeAssociated.setText(
+            MessageManager.getString("action.minimize_associated_windows"));
     minimizeAssociated.addActionListener(new ActionListener()
     {
       @Override
@@ -340,8 +317,8 @@ public class GDesktop extends JFrame
         minimizeAssociated_actionPerformed(e);
       }
     });
-    garbageCollect.setText(MessageManager
-            .getString("label.collect_garbage"));
+    garbageCollect
+            .setText(MessageManager.getString("label.collect_garbage"));
     garbageCollect.addActionListener(new ActionListener()
     {
       @Override
@@ -350,8 +327,8 @@ public class GDesktop extends JFrame
         garbageCollect_actionPerformed(e);
       }
     });
-    showMemusage.setText(MessageManager
-            .getString("label.show_memory_usage"));
+    showMemusage
+            .setText(MessageManager.getString("label.show_memory_usage"));
     showMemusage.addActionListener(new ActionListener()
     {
       @Override
@@ -390,10 +367,10 @@ public class GDesktop extends JFrame
       }
     });
     experimentalFeatures = new JCheckBoxMenuItem();
-    experimentalFeatures.setText(MessageManager
-            .getString("label.show_experimental"));
-    experimentalFeatures.setToolTipText(MessageManager
-            .getString("label.show_experimental_tip"));
+    experimentalFeatures
+            .setText(MessageManager.getString("label.show_experimental"));
+    experimentalFeatures.setToolTipText(
+            MessageManager.getString("label.show_experimental_tip"));
     experimentalFeatures.addActionListener(new ActionListener()
     {
       @Override
@@ -415,31 +392,36 @@ public class GDesktop extends JFrame
 
     desktopMenubar.add(FileMenu);
     desktopMenubar.add(toolsMenu);
-    VamsasMenu.setVisible(false);
-    desktopMenubar.add(VamsasMenu);
     desktopMenubar.add(HelpMenu);
     desktopMenubar.add(windowMenu);
     FileMenu.add(inputMenu);
     FileMenu.add(inputSequence);
     FileMenu.addSeparator();
-    FileMenu.add(saveState);
+    // FileMenu.add(saveState);
+    FileMenu.add(saveAsState);
     FileMenu.add(loadState);
     FileMenu.addSeparator();
-    FileMenu.add(quit);
-    HelpMenu.add(aboutMenuItem);
+    if (!APQHandlers.setQuit)
+    {
+      FileMenu.add(quit);
+    }
+    if (!APQHandlers.setAbout)
+    {
+      HelpMenu.add(aboutMenuItem);
+    }
     HelpMenu.add(documentationMenuItem);
-    VamsasMenu.add(VamsasStMenu);
-    VamsasStMenu.setVisible(false);
-    VamsasMenu.add(vamsasStart);
-    VamsasMenu.add(vamsasImport);
-    VamsasMenu.add(vamsasSave);
-    VamsasMenu.add(vamsasStop);
-    toolsMenu.add(preferences);
-    toolsMenu.add(showMemusage);
-    toolsMenu.add(showConsole);
-    toolsMenu.add(showNews);
-    toolsMenu.add(garbageCollect);
-    toolsMenu.add(groovyShell);
+    if (!APQHandlers.setPreferences)
+    {
+      toolsMenu.add(preferences);
+    }
+    if (!Platform.isJS())
+    {
+      toolsMenu.add(showMemusage);
+      toolsMenu.add(showConsole);
+      toolsMenu.add(showNews);
+      toolsMenu.add(garbageCollect);
+      toolsMenu.add(groovyShell);
+    }
     toolsMenu.add(experimentalFeatures);
     // toolsMenu.add(snapShotWindow);
     inputMenu.add(inputLocalFileMenuItem);
@@ -527,7 +509,8 @@ public class GDesktop extends JFrame
    * @param e
    *          DOCUMENT ME!
    */
-  protected void inputTextboxMenuItem_actionPerformed(AlignmentViewPanel avp)
+  protected void inputTextboxMenuItem_actionPerformed(
+          AlignmentViewPanel avp)
   {
   }
 
@@ -536,6 +519,7 @@ public class GDesktop extends JFrame
    */
   protected void quit()
   {
+    // System.out.println("********** GDesktop.quit()");
   }
 
   /**
@@ -548,13 +532,7 @@ public class GDesktop extends JFrame
   {
   }
 
-  /**
-   * DOCUMENT ME!
-   * 
-   * @param e
-   *          DOCUMENT ME!
-   */
-  protected void documentationMenuItem_actionPerformed(ActionEvent e)
+  protected void documentationMenuItem_actionPerformed()
   {
   }
 
@@ -564,7 +542,7 @@ public class GDesktop extends JFrame
    * @param e
    *          DOCUMENT ME!
    */
-  public void SaveState_actionPerformed(ActionEvent e)
+  protected void preferences_actionPerformed(ActionEvent e)
   {
   }
 
@@ -574,17 +552,11 @@ public class GDesktop extends JFrame
    * @param e
    *          DOCUMENT ME!
    */
-  protected void preferences_actionPerformed(ActionEvent e)
+  public void saveState_actionPerformed()
   {
   }
 
-  /**
-   * DOCUMENT ME!
-   * 
-   * @param e
-   *          DOCUMENT ME!
-   */
-  public void saveState_actionPerformed(ActionEvent e)
+  public void saveAsState_actionPerformed(ActionEvent e)
   {
   }
 
@@ -594,7 +566,7 @@ public class GDesktop extends JFrame
    * @param e
    *          DOCUMENT ME!
    */
-  public void loadState_actionPerformed(ActionEvent e)
+  public void loadState_actionPerformed()
   {
   }