From: Ben Soares Date: Wed, 1 Jul 2020 13:55:55 +0000 (+0100) Subject: Merge branch 'task/JAL-3608_property_set_laf_and_tests_from_Release_2_11_1_Branch... X-Git-Tag: Release_2_11_1_1~22^2~17^2~1 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=6e2b4ee8fb9bdb978087ed19516bfd8d7f00f544;hp=fa750d6b432ef31a7407fdb8bf01c1edf687bcf4;p=jalview.git Merge branch 'task/JAL-3608_property_set_laf_and_tests_from_Release_2_11_1_Branch' into merge/JAL-3609_and_JAL-3608 --- diff --git a/build.gradle b/build.gradle index f7233f1..24f1fd9 100644 --- a/build.gradle +++ b/build.gradle @@ -958,6 +958,11 @@ test { workingDir = jalviewDir //systemProperties 'clover.jar' System.properties.clover.jar + def testLaf = project.findProperty("test_laf") + if (testLaf != null) { + println("Setting Test LaF to '${testLaf}'") + systemProperty "laf", testLaf + } sourceCompatibility = compile_source_compatibility targetCompatibility = compile_target_compatibility jvmArgs += additional_compiler_args diff --git a/src/jalview/bin/Cache.java b/src/jalview/bin/Cache.java index 35d6aa3..751461f 100755 --- a/src/jalview/bin/Cache.java +++ b/src/jalview/bin/Cache.java @@ -20,16 +20,6 @@ */ package jalview.bin; -import jalview.datamodel.PDBEntry; -import jalview.gui.UserDefinedColours; -import jalview.schemes.ColourSchemeLoader; -import jalview.schemes.ColourSchemes; -import jalview.schemes.UserColourScheme; -import jalview.structure.StructureImportSettings; -import jalview.urls.IdOrgSettings; -import jalview.util.ColorUtils; -import jalview.ws.sifts.SiftsSettings; - import java.awt.Color; import java.io.BufferedReader; import java.io.File; @@ -46,12 +36,26 @@ import java.util.Locale; import java.util.Properties; import java.util.StringTokenizer; import java.util.TreeSet; +import java.util.regex.Pattern; + +import javax.swing.LookAndFeel; +import javax.swing.UIManager; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.SimpleLayout; +import jalview.datamodel.PDBEntry; +import jalview.gui.UserDefinedColours; +import jalview.schemes.ColourSchemeLoader; +import jalview.schemes.ColourSchemes; +import jalview.schemes.UserColourScheme; +import jalview.structure.StructureImportSettings; +import jalview.urls.IdOrgSettings; +import jalview.util.ColorUtils; +import jalview.ws.sifts.SiftsSettings; + /** * Stores and retrieves Jalview Application Properties Lists and fields within * list entries are separated by '|' symbols unless otherwise stated (|) clauses @@ -435,7 +439,8 @@ public class Cache String jnlpVersion = System.getProperty("jalview.version"); - // jnlpVersion will be null if a latest version check for the channel needs to + // jnlpVersion will be null if a latest version check for the channel needs + // to // be done // Dont do this check if running in headless mode @@ -555,8 +560,8 @@ public class Cache new BuildDetails(codeVersion, null, codeInstallation); if (printV && reportVersion) { - System.out - .println("Jalview Version: " + codeVersion + codeInstallation); + System.out.println( + "Jalview Version: " + codeVersion + codeInstallation); } } @@ -1099,16 +1104,20 @@ public class Cache public static String getVersionDetailsForConsole() { StringBuilder sb = new StringBuilder(); - sb.append("Jalview Version: " + jalview.bin.Cache.getDefault("VERSION", "TEST")); + sb.append("Jalview Version: " + + jalview.bin.Cache.getDefault("VERSION", "TEST")); sb.append("\n"); sb.append("Jalview Installation: " + jalview.bin.Cache.getDefault("INSTALLATION", "unknown")); sb.append("\n"); - sb.append("Build Date: " + jalview.bin.Cache.getDefault("BUILD_DATE", "unknown")); + sb.append("Build Date: " + + jalview.bin.Cache.getDefault("BUILD_DATE", "unknown")); sb.append("\n"); sb.append("Java version: " + System.getProperty("java.version")); sb.append("\n"); - sb.append(System.getProperty("os.arch") + " " + System.getProperty("os.name") + " " + System.getProperty("os.version")); + sb.append(System.getProperty("os.arch") + " " + + System.getProperty("os.name") + " " + + System.getProperty("os.version")); sb.append("\n"); appendIfNotNull(sb, "Install4j version: ", System.getProperty("sys.install4jVersion"), "\n", null); @@ -1116,7 +1125,12 @@ public class Cache System.getProperty("installer_template_version"), "\n", null); appendIfNotNull(sb, "Launcher version: ", System.getProperty("launcher_version"), "\n", null); - if (jalview.bin.Cache.getDefault("VERSION", "TEST").equals("DEVELOPMENT")) { + LookAndFeel laf = UIManager.getLookAndFeel(); + String lafName = laf == null?"Not obtained":laf.getName(); + String lafClass = laf == null?"unknown":laf.getClass().getName(); + appendIfNotNull(sb, "LookAndFeel: ", lafName+" ("+lafClass+")", "\n", null); + // Not displayed in release version ( determined by possible version number regex 9[9.]*9[.-_a9]* ) + if (Pattern.matches("^\\d[\\d\\.]*\\d[\\.\\-\\w]*$", jalview.bin.Cache.getDefault("VERSION", "TEST"))) { appendIfNotNull(sb, "Getdown appdir: ", System.getProperty("getdownappdir"), "\n", null); appendIfNotNull(sb, "Java home: ", System.getProperty("java.home"), diff --git a/src/jalview/bin/Jalview.java b/src/jalview/bin/Jalview.java index a571ce9..021aad6 100755 --- a/src/jalview/bin/Jalview.java +++ b/src/jalview/bin/Jalview.java @@ -40,8 +40,8 @@ import java.util.HashMap; import java.util.Map; import java.util.Vector; -import javax.swing.LookAndFeel; import javax.swing.UIManager; +import javax.swing.UIManager.LookAndFeelInfo; import com.threerings.getdown.util.LaunchUtil; @@ -297,49 +297,88 @@ public class Jalview desktop = null; - try + // property laf = "crossplatform", "system", "gtk", "metal" or "mac" + // If not set (or chosen laf fails), use the normal SystemLaF and if on Mac, + // try Quaqua/Vaqua. + String lafProp = System.getProperty("laf"); + String lafSetting = Cache.getDefault("PREFERRED_LAF", null); + String laf = "none"; + if (lafProp != null) { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - } catch (Exception ex) + laf = lafProp; + } + else if (lafSetting != null) { - System.err.println("Unexpected Look and Feel Exception"); - ex.printStackTrace(); + laf = lafSetting; } - if (Platform.isAMac()) + boolean lafSet = false; + switch (laf) { - - LookAndFeel lookAndFeel = ch.randelshofer.quaqua.QuaquaManager - .getLookAndFeel(); - System.setProperty("com.apple.mrj.application.apple.menu.about.name", - "Jalview"); - System.setProperty("apple.laf.useScreenMenuBar", "true"); - if (lookAndFeel != null) + case "crossplatform": + lafSet = setCrossPlatformLookAndFeel(); + if (!lafSet) { - try - { - UIManager.setLookAndFeel(lookAndFeel); - } catch (Throwable e) - { - System.err.println( - "Failed to set QuaQua look and feel: " + e.toString()); - } + System.err.println("Could not set requested laf=" + laf); } - if (lookAndFeel == null - || !(lookAndFeel.getClass().isAssignableFrom( - UIManager.getLookAndFeel().getClass())) - || !UIManager.getLookAndFeel().getClass().toString() - .toLowerCase().contains("quaqua")) + break; + case "system": + lafSet = setSystemLookAndFeel(); + if (!lafSet) { - try - { - System.err.println( - "Quaqua LaF not available on this plaform. Using VAqua(4).\nSee https://issues.jalview.org/browse/JAL-2976"); - UIManager.setLookAndFeel("org.violetlib.aqua.AquaLookAndFeel"); - } catch (Throwable e) - { - System.err.println( - "Failed to reset look and feel: " + e.toString()); - } + System.err.println("Could not set requested laf=" + laf); + } + break; + case "gtk": + lafSet = setGtkLookAndFeel(); + { + System.err.println("Could not set requested laf=" + laf); + } + break; + case "metal": + lafSet = setMetalLookAndFeel(); + { + System.err.println("Could not set requested laf=" + laf); + } + break; + case "nimbus": + lafSet = setNimbusLookAndFeel(); + { + System.err.println("Could not set requested laf=" + laf); + } + break; + case "quaqua": + lafSet = setQuaquaLookAndFeel(); + { + System.err.println("Could not set requested laf=" + laf); + } + break; + case "vaqua": + lafSet = setVaquaLookAndFeel(); + { + System.err.println("Could not set requested laf=" + laf); + } + break; + case "mac": + lafSet = setMacLookAndFeel(); + if (!lafSet) + { + System.err.println("Could not set requested laf=" + laf); + } + break; + case "none": + break; + default: + System.err.println("Requested laf=" + laf + " not implemented"); + } + if (!lafSet) + { + setSystemLookAndFeel(); + if (Platform.isLinux()) { + setMetalLookAndFeel(); + } + if (Platform.isAMac()) + { + setMacLookAndFeel(); } } @@ -762,6 +801,111 @@ public class Jalview } } + private static boolean setCrossPlatformLookAndFeel() + { + boolean set = false; + try + { + UIManager.setLookAndFeel( + UIManager.getCrossPlatformLookAndFeelClassName()); + set = true; + } catch (Exception ex) + { + System.err.println("Unexpected Look and Feel Exception"); + ex.printStackTrace(); + } + return set; + } + + private static boolean setSystemLookAndFeel() + { + boolean set = false; + try + { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + set = true; + } catch (Exception ex) + { + System.err.println("Unexpected Look and Feel Exception"); + ex.printStackTrace(); + } + return set; + } + + private static boolean setSpecificLookAndFeel(String name, + String className, boolean nameStartsWith) + { + boolean set = false; + try + { + for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) + { + if (info.getName() != null && nameStartsWith + ? info.getName().toLowerCase() + .startsWith(name.toLowerCase()) + : info.getName().toLowerCase().equals(name.toLowerCase())) + { + className = info.getClassName(); + break; + } + } + UIManager.setLookAndFeel(className); + set = true; + } catch (Exception ex) + { + System.err.println("Unexpected Look and Feel Exception"); + ex.printStackTrace(); + } + return set; + } + + private static boolean setGtkLookAndFeel() + { + return setSpecificLookAndFeel("gtk", + "com.sun.java.swing.plaf.gtk.GTKLookAndFeel", true); + } + + private static boolean setMetalLookAndFeel() + { + return setSpecificLookAndFeel("metal", + "javax.swing.plaf.metal.MetalLookAndFeel", false); + } + + private static boolean setNimbusLookAndFeel() + { + return setSpecificLookAndFeel("nimbus", + "javax.swing.plaf.nimbus.NimbusLookAndFeel", false); + } + + private static boolean setQuaquaLookAndFeel() + { + return setSpecificLookAndFeel("quaqua", + ch.randelshofer.quaqua.QuaquaManager.getLookAndFeel().getClass() + .getName(), + false); + } + + private static boolean setVaquaLookAndFeel() + { + return setSpecificLookAndFeel("vaqua", + "org.violetlib.aqua.AquaLookAndFeel", false); + } + + private static boolean setMacLookAndFeel() + { + boolean set = false; + System.setProperty("com.apple.mrj.application.apple.menu.about.name", + "Jalview"); + System.setProperty("apple.laf.useScreenMenuBar", "true"); + set = setQuaquaLookAndFeel(); + if ((!set) || !UIManager.getLookAndFeel().getClass().toString() + .toLowerCase().contains("quaqua")) + { + set = setVaquaLookAndFeel(); + } + return set; + } + private static void showUsage() { System.out.println( diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index d7d4af0..def4be1 100644 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -862,7 +862,8 @@ public class SeqPanel extends JPanel { setStatusMessage(results); } - return results.isEmpty() ? null : getHighlightInfo(results); + // JAL-3303 feature suppressed for now pending review + return null; // results.isEmpty() ? null : getHighlightInfo(results); } /** diff --git a/src/jalview/util/BrowserLauncher.java b/src/jalview/util/BrowserLauncher.java index 87e57fd..0bc09cc 100755 --- a/src/jalview/util/BrowserLauncher.java +++ b/src/jalview/util/BrowserLauncher.java @@ -523,10 +523,6 @@ public class BrowserLauncher */ private static Object locateBrowser() { - if (true) - { - return "/Volumes/Macintosh HD/Applications/Firefox.app/Contents/MacOS/firefox"; - } if (browser != null) { return browser; @@ -715,7 +711,7 @@ public class BrowserLauncher */ public static void openURL(String url) throws IOException { - if (false && !loadedWithoutErrors) + if (!loadedWithoutErrors) { throw new IOException(MessageManager .formatMessage("exception.browser_not_found", new String[] diff --git a/src/jalview/util/Platform.java b/src/jalview/util/Platform.java index e8558fa..a5bee7c 100644 --- a/src/jalview/util/Platform.java +++ b/src/jalview/util/Platform.java @@ -29,11 +29,23 @@ import java.awt.event.MouseEvent; */ public class Platform { - private static Boolean isAMac = null, isWindows = null; + private static Boolean isAMac = null, isWindows = null, isLinux = null; private static Boolean isHeadless = null; /** + * added to check LaF for Linux + * + * @return + */ + public static boolean isLinux() + { + return (isLinux == null + ? (isLinux = (System.getProperty("os.name").indexOf("Linux") >= 0)) + : isLinux); + } + + /** * sorry folks - Macs really are different * * @return true if we do things in a special way. @@ -131,7 +143,8 @@ public class Platform { return false; } - return (jalview.util.ShortcutKeyMaskExWrapper.getMenuShortcutKeyMaskEx() // .getMenuShortcutKeyMaskEx() + return (jalview.util.ShortcutKeyMaskExWrapper + .getMenuShortcutKeyMaskEx() // .getMenuShortcutKeyMaskEx() & jalview.util.ShortcutKeyMaskExWrapper .getModifiersEx(e)) != 0; // getModifiers()) != 0; } @@ -139,8 +152,8 @@ public class Platform } /** - * A (case sensitive) file path comparator that ignores the difference between / - * and \ + * A (case sensitive) file path comparator that ignores the difference between + * / and \ * * @param path1 * @param path2