import javax.swing.JDialog;
import javax.swing.JFrame;
+import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import jalview.gui.PromptUserConfig;
import jalview.gui.QuitHandler;
import jalview.gui.QuitHandler.QResponse;
+import jalview.gui.StructureViewerBase;
import jalview.io.AppletFormatAdapter;
import jalview.io.BioJsHTMLOutput;
import jalview.io.DataSourceType;
}
}
+ // set individual session preferences
+ if (bootstrapArgs.contains(Arg.P))
+ {
+ for (String kev : bootstrapArgs.getValueList(Arg.P))
+ {
+ if (kev == null)
+ {
+ continue;
+ }
+ int equalsIndex = kev.indexOf(ArgParser.EQUALS);
+ if (equalsIndex > -1)
+ {
+ String key = kev.substring(0, equalsIndex);
+ String val = kev.substring(equalsIndex + 1);
+ Cache.setSessionProperty(key, val);
+ }
+ }
+ }
+
// Move any new getdown-launcher-new.jar into place over old
// getdown-launcher.jar
String appdirString = System.getProperty("getdownappdir");
// get bootstrap properties (mainly for the logger level)
Properties bootstrapProperties = Cache
- .bootstrapProperties(bootstrapArgs.get(Arg.PROPS));
+ .bootstrapProperties(bootstrapArgs.getValue(Arg.PROPS));
// report Jalview version
Cache.loadBuildProperties(
public void run()
{
Console.debug("Running shutdown hook");
+ QuitHandler.startForceQuit();
+ boolean closeExternal = Cache
+ .getDefault("DEFAULT_CLOSE_EXTERNAL_VIEWERS", false)
+ || Cache.getDefault("ALWAYS_CLOSE_EXTERNAL_VIEWERS", false);
+ StructureViewerBase.setQuitClose(closeExternal);
+ if (desktop != null)
+ {
+ for (JInternalFrame frame : Desktop.desktop.getAllFrames())
+ {
+ if (frame instanceof StructureViewerBase)
+ {
+ ((StructureViewerBase) frame).closeViewer(closeExternal);
+ }
+ }
+ }
+
if (QuitHandler.gotQuitResponse() == QResponse.CANCEL_QUIT)
{
// Got to here by a SIGTERM signal.
// Note we will not actually cancel the quit from here -- it's too
- // late -- but we can wait for saving files.
+ // late -- but we can wait for saving files and close external viewers
+ // if configured.
+ // Close viewers/Leave viewers open
Console.debug("Checking for saving files");
QuitHandler.getQuitResponse(false);
}
});
String usrPropsFile = bootstrapArgs.contains(Arg.PROPS)
- ? bootstrapArgs.get(Arg.PROPS)
+ ? bootstrapArgs.getValue(Arg.PROPS)
: aparser.getValue("props");
// if usrPropsFile == null, loadProperties will use the Channel
// preferences.file
Jalview.exit(null, 0);
}
- if (bootstrapArgs.contains(Arg.HEADLESS))
+ // new CLI
+ headlessArg = bootstrapArgs.isHeadless();
+ if (headlessArg)
{
System.setProperty("java.awt.headless", "true");
- // new
- headlessArg = bootstrapArgs.getBoolean(Arg.HEADLESS);
}
+ // old CLI
if (aparser.contains("nodisplay") || aparser.contains("nogui")
|| aparser.contains("headless"))
{
System.setProperty("java.awt.headless", "true");
- // old
headless = true;
}
// anything else!
// allow https handshakes to download intermediate certs if necessary
System.setProperty("com.sun.security.enableAIAcaIssuers", "true");
- String jabawsUrl = bootstrapArgs.get(Arg.JABAWS);
+ String jabawsUrl = bootstrapArgs.getValue(Arg.JABAWS);
if (jabawsUrl == null)
jabawsUrl = aparser.getValue("jabaws");
if (jabawsUrl != null)
if (!(headless || headlessArg))
{
- Desktop.nosplash = "false".equals(bootstrapArgs.get(Arg.SPLASH))
+ Desktop.nosplash = "false".equals(bootstrapArgs.getValue(Arg.SPLASH))
|| aparser.contains("nosplash")
|| Cache.getDefault("SPLASH", "true").equals("false");
desktop = new Desktop();
testoutput(argparser, Arg.WEBSERVICEDISCOVERY);
}
- boolean usagestats = bootstrapArgs.getBoolean(Arg.USAGESTATS);
+ boolean usagestats = !bootstrapArgs.getBoolean(Arg.NOUSAGESTATS);
if (aparser.contains("nousagestats"))
usagestats = false;
if (usagestats)
{
startUsageStats(desktop);
- testoutput(argparser, Arg.USAGESTATS);
+ testoutput(argparser, Arg.NOUSAGESTATS);
}
else
{
System.out.println("CMD [-nousagestats] executed successfully!");
- testoutput(argparser, Arg.USAGESTATS);
+ testoutput(argparser, Arg.NOUSAGESTATS);
}
boolean questionnaire = bootstrapArgs.getBoolean(Arg.QUESTIONNAIRE);
if ((!aparser.contains("nonews")
&& Cache.getProperty("NONEWS") == null
- && !"false".equals(bootstrapArgs.get(Arg.NEWS)))
- || "true".equals(bootstrapArgs.get(Arg.NEWS)))
+ && !"false".equals(bootstrapArgs.getValue(Arg.NEWS)))
+ || "true".equals(bootstrapArgs.getValue(Arg.NEWS)))
{
desktop.checkForNews();
}
{
if (headlessArg)
{
- Jalview.exit("Successfully completed commands in headless mode", 0);
+ if (argparser.getBoolean(Arg.NOQUIT))
+ {
+ Console.warn(
+ "Completed " + Arg.HEADLESS.getName() + " commands, but "
+ + Arg.NOQUIT + " is set so not quitting!");
+ }
+ else
+ {
+ Jalview.exit("Successfully completed commands in headless mode",
+ 0);
+ }
}
Console.info("Successfully completed commands");
}
if (!Platform.isJS() && !headless && file == null
&& Cache.getDefault("SHOW_STARTUP_FILE", true)
- && !cmds.commandArgsProvided())
+ && !cmds.commandArgsProvided()
+ && !bootstrapArgs.getBoolean(Arg.NOSTARTUPFILE))
// don't open the startup file if command line args have been processed
// (&& !Commands.commandArgsProvided())
/**
}
if (!lafSet)
{
- setSystemLookAndFeel();
+ // Flatlaf default for everyone!
+ lafSet = setFlatLookAndFeel();
+ if (!lafSet)
+ {
+ setSystemLookAndFeel();
+ }
if (Platform.isLinux())
{
setLinuxLookAndFeel();
UIManager.put("TabbedPane.smoothScrolling", true);
UIManager.put("TabbedPane.tabWidthMode", "compact");
UIManager.put("TabbedPane.selectedBackground", Color.white);
+ UIManager.put("TabbedPane.background", new Color(236, 236, 236));
+ UIManager.put("TabbedPane.hoverColor", Color.lightGray);
}
Desktop.setLiveDragMode(Cache.getDefault("FLAT_LIVE_DRAG_MODE", true));
}
/*
- * testoutput for boolean values
+ * testoutput for boolean and unary values
*/
protected static void testoutput(ArgParser ap, Arg a)
{
private static void testoutput(boolean yes, Arg a)
{
- System.out.println("[TESTOUTPUT] arg "
- + (yes ? a.argString() : a.negateArgString()) + " was set");
+ String message = null;
+ if (a.hasOption(Opt.BOOLEAN))
+ {
+ message = (yes ? a.argString() : a.negateArgString()) + " was set";
+ }
+ else if (a.hasOption(Opt.UNARY))
+ {
+ message = a.argString() + (yes ? " was set" : " was not set");
+ }
+ System.out.println("[TESTOUTPUT] arg " + message);
}
}