Merge branch 'improvement/JAL-1988+JAL-3416_Java8_macOS_APQHandlers_and_FlatLaF_optio...
authorJim Procter <j.procter@dundee.ac.uk>
Mon, 13 Jun 2022 11:22:31 +0000 (12:22 +0100)
committerJim Procter <j.procter@dundee.ac.uk>
Mon, 13 Jun 2022 11:22:31 +0000 (12:22 +0100)
1  2 
src/jalview/bin/Jalview.java

@@@ -20,6 -20,7 +20,7 @@@
   */
  package jalview.bin;
  
+ import java.awt.Color;
  import java.io.BufferedReader;
  import java.io.File;
  import java.io.FileOutputStream;
@@@ -44,12 -45,14 +45,15 @@@ import java.util.logging.ConsoleHandler
  import java.util.logging.Level;
  import java.util.logging.Logger;
  
+ import javax.swing.SwingUtilities;
  import javax.swing.UIManager;
  import javax.swing.UIManager.LookAndFeelInfo;
  
+ import com.formdev.flatlaf.FlatLightLaf;
+ import com.formdev.flatlaf.util.SystemInfo;
  import com.threerings.getdown.util.LaunchUtil;
  
 +//import edu.stanford.ejalbert.launching.IBrowserLaunching;
  import groovy.lang.Binding;
  import groovy.util.GroovyScriptEngine;
  import jalview.ext.so.SequenceOntology;
@@@ -96,10 -99,6 +100,10 @@@ public class Jalvie
    static
    {
      Platform.getURLCommandArguments();
 +    Platform.addJ2SDirectDatabaseCall("https://www.jalview.org");
 +    Platform.addJ2SDirectDatabaseCall("http://www.jalview.org");
 +    Platform.addJ2SDirectDatabaseCall("http://www.compbio.dundee.ac.uk");
 +    Platform.addJ2SDirectDatabaseCall("https://www.compbio.dundee.ac.uk");
    }
  
    /*
      }
      System.setProperty("http.agent",
              "Jalview Desktop/" + Cache.getDefault("VERSION", "Unknown"));
 +
      try
      {
 -      Cache.initLogger();
 +      Console.initLogger();
      } catch (NoClassDefFoundError error)
      {
        error.printStackTrace();
          JalviewTaskbar.setTaskbar(this);
        } catch (Exception e)
        {
 -        Cache.log.info("Cannot set Taskbar");
 -        Cache.log.error(e.getMessage());
 +        Console.info("Cannot set Taskbar");
 +        Console.error(e.getMessage());
          // e.printStackTrace();
        } catch (Throwable t)
        {
 -        Cache.log.info("Cannot set Taskbar");
 -        Cache.log.error(t.getMessage());
 +        Console.info("Cannot set Taskbar");
 +        Console.error(t.getMessage());
          // t.printStackTrace();
        }
  
            {
              // Start the desktop questionnaire prompter with the specified
              // questionnaire
 -            Cache.log.debug("Starting questionnaire url at " + url);
 +            Console.debug("Starting questionnaire url at " + url);
              desktop.checkForQuestionnaire(url);
              System.out.println("CMD questionnaire[-" + url
                      + "] executed successfully!");
                // "http://anaplog.compbio.dundee.ac.uk/cgi-bin/questionnaire.pl";
                // //
                String defurl = "https://www.jalview.org/cgi-bin/questionnaire.pl";
 -              Cache.log.debug(
 +              Console.debug(
                        "Starting questionnaire with default url: " + defurl);
                desktop.checkForQuestionnaire(defurl);
              }
                    .println("CMD [-noquestionnaire] executed successfully!");
          }
  
 -        if (!aparser.contains("nonews"))
 +        if (!aparser.contains("nonews")
 +                || Cache.getProperty("NONEWS") == null)
          {
            desktop.checkForNews();
          }
  
 -        BioJsHTMLOutput.updateBioJS();
 +        if (!aparser.contains("nohtmltemplates")
 +                || Cache.getProperty("NOHTMLTEMPLATES") == null)
 +        {
 +          BioJsHTMLOutput.updateBioJS();
 +        }
        }
      }
  
       * @j2sIgnore
       */
      {
 -      file = jalview.bin.Cache.getDefault("STARTUP_FILE",
 -              jalview.bin.Cache.getDefault("www.jalview.org",
 -                      "https://www.jalview.org")
 +      file = Cache.getDefault("STARTUP_FILE",
 +              Cache.getDefault("www.jalview.org", "https://www.jalview.org")
                        + "/examples/exampleFile_2_7.jvp");
        if (file.equals("http://www.jalview.org/examples/exampleFile_2_3.jar")
                || file.equals(
  
    private static void setLookAndFeel()
    {
-     // property laf = "crossplatform", "system", "gtk", "metal", "nimbus" or
-     // "mac"
+     // property laf = "crossplatform", "system", "gtk", "metal", "nimbus",
+     // "mac" or "flat"
      // If not set (or chosen laf fails), use the normal SystemLaF and if on Mac,
      // try Quaqua/Vaqua.
      String lafProp = System.getProperty("laf");
        lafSet = setCrossPlatformLookAndFeel();
        if (!lafSet)
        {
 -        Cache.log.error("Could not set requested laf=" + laf);
 +        Console.error("Could not set requested laf=" + laf);
        }
        break;
      case "system":
        lafSet = setSystemLookAndFeel();
        if (!lafSet)
        {
 -        Cache.log.error("Could not set requested laf=" + laf);
 +        Console.error("Could not set requested laf=" + laf);
        }
        break;
      case "gtk":
        lafSet = setGtkLookAndFeel();
        if (!lafSet)
        {
 -        Cache.log.error("Could not set requested laf=" + laf);
 +        Console.error("Could not set requested laf=" + laf);
        }
        break;
      case "metal":
        lafSet = setMetalLookAndFeel();
        if (!lafSet)
        {
 -        Cache.log.error("Could not set requested laf=" + laf);
 +        Console.error("Could not set requested laf=" + laf);
        }
        break;
      case "nimbus":
        lafSet = setNimbusLookAndFeel();
        if (!lafSet)
        {
 -        Cache.log.error("Could not set requested laf=" + laf);
 +        Console.error("Could not set requested laf=" + laf);
        }
        break;
+     case "flat":
+       lafSet = setFlatLookAndFeel();
+       if (!lafSet)
+       {
 -        Cache.log.error("Could not set requested laf=" + laf);
++        Console.error("Could not set requested laf=" + laf);
+       }
+       break;
      case "quaqua":
        lafSet = setQuaquaLookAndFeel();
        if (!lafSet)
        {
 -        Cache.log.error("Could not set requested laf=" + laf);
 +        Console.error("Could not set requested laf=" + laf);
        }
        break;
      case "vaqua":
        lafSet = setVaquaLookAndFeel();
        if (!lafSet)
        {
 -        Cache.log.error("Could not set requested laf=" + laf);
 +        Console.error("Could not set requested laf=" + laf);
        }
        break;
      case "mac":
        lafSet = setMacLookAndFeel();
        if (!lafSet)
        {
 -        Cache.log.error("Could not set requested laf=" + laf);
 +        Console.error("Could not set requested laf=" + laf);
        }
        break;
      case "none":
        break;
      default:
 -      Cache.log.error("Requested laf=" + laf + " not implemented");
 +      Console.error("Requested laf=" + laf + " not implemented");
      }
      if (!lafSet)
      {
        set = true;
      } catch (Exception ex)
      {
 -      Cache.log.error("Unexpected Look and Feel Exception");
 -      Cache.log.error(ex.getMessage());
 -      Cache.log.debug(Cache.getStackTraceString(ex));
 +      Console.error("Unexpected Look and Feel Exception");
 +      Console.error(ex.getMessage());
 +      Console.debug(Cache.getStackTraceString(ex));
      }
      return set;
    }
        set = true;
      } catch (Exception ex)
      {
 -      Cache.log.error("Unexpected Look and Feel Exception");
 -      Cache.log.error(ex.getMessage());
 -      Cache.log.debug(Cache.getStackTraceString(ex));
 +      Console.error("Unexpected Look and Feel Exception");
 +      Console.error(ex.getMessage());
 +      Console.debug(Cache.getStackTraceString(ex));
      }
      return set;
    }
        set = true;
      } catch (Exception ex)
      {
 -      Cache.log.error("Unexpected Look and Feel Exception");
 -      Cache.log.error(ex.getMessage());
 -      Cache.log.debug(Cache.getStackTraceString(ex));
 +      Console.error("Unexpected Look and Feel Exception");
 +      Console.error(ex.getMessage());
 +      Console.debug(Cache.getStackTraceString(ex));
      }
      return set;
    }
              "javax.swing.plaf.nimbus.NimbusLookAndFeel", false);
    }
  
+   private static boolean setFlatLookAndFeel()
+   {
+     boolean set = setSpecificLookAndFeel("flatlaf light",
+             "com.formdev.flatlaf.FlatLightLaf", false);
+     if (set)
+     {
+       if (Platform.isMac())
+       {
+         System.setProperty("apple.laf.useScreenMenuBar", "true");
+         System.setProperty("apple.awt.application.name",
+                 ChannelProperties.getProperty("app_name"));
+         System.setProperty("apple.awt.application.appearance", "system");
+         if (SystemInfo.isMacFullWindowContentSupported
+                 && Desktop.desktop != null)
+         {
+           Desktop.desktop.getRootPane()
+                   .putClientProperty("apple.awt.fullWindowContent", true);
+           Desktop.desktop.getRootPane()
+                   .putClientProperty("apple.awt.transparentTitleBar", true);
+         }
+         SwingUtilities.invokeLater(() -> {
+           FlatLightLaf.setup();
+         });
+       }
+       UIManager.put("TabbedPane.showTabSeparators", true);
+       UIManager.put("TabbedPane.tabSeparatorsFullHeight", true);
+       UIManager.put("TabbedPane.tabsOverlapBorder", true);
+       // UIManager.put("TabbedPane.hasFullBorder", true);
+       UIManager.put("TabbedPane.tabLayoutPolicy", "scroll");
+       UIManager.put("TabbedPane.scrollButtonsPolicy", "asNeeded");
+       UIManager.put("TabbedPane.smoothScrolling", true);
+       UIManager.put("TabbedPane.tabWidthMode", "compact");
+       UIManager.put("TabbedPane.selectedBackground", Color.white);
+     }
+     return set;
+   }
    private static boolean setQuaquaLookAndFeel()
    {
      return setSpecificLookAndFeel("quaqua",
                @Override
                public void run()
                {
 -                Cache.log.debug(
 +                Console.debug(
                          "Initialising googletracker for usage stats.");
                  Cache.initGoogleTracker();
 -                Cache.log.debug("Tracking enabled.");
 +                Console.debug("Tracking enabled.");
                }
              }, new Runnable()
              {
                @Override
                public void run()
                {
 -                Cache.log.debug("Not enabling Google Tracking.");
 +                Console.debug("Not enabling Google Tracking.");
                }
              }, null, true);
      desktop.addDialogThread(prompter);