From 8dca84768d848bc368985a8f0938a6c7ac059952 Mon Sep 17 00:00:00 2001 From: Ben Soares Date: Tue, 12 Sep 2023 02:05:07 +0100 Subject: [PATCH] JAL-4285 JAL-4262 Added a scrollable dialog to display errors. Moved old-style CLI warning so it appears above Jalview desktop. --- resources/lang/Messages.properties | 1 + resources/lang/Messages_es.properties | 2 + src/jalview/bin/Commands.java | 35 +++++++------ src/jalview/bin/Jalview.java | 64 +++++++++++++++++++++++ src/jalview/gui/Desktop.java | 91 +++++++++++++-------------------- 5 files changed, 122 insertions(+), 71 deletions(-) diff --git a/resources/lang/Messages.properties b/resources/lang/Messages.properties index eafabb2..d1e4536 100644 --- a/resources/lang/Messages.properties +++ b/resources/lang/Messages.properties @@ -1467,3 +1467,4 @@ label.all_known_alignment_files = All known alignment files label.command_line_arguments = Command Line Arguments warning.using_old_command_line_arguments = It looks like you are using old command line arguments. These are now deprecated and will be removed in a future release of Jalview.\nFind out about the new command line arguments at\n warning.using_mixed_command_line_arguments = Jalview cannot use both old (-arg) and new (--arg) command line arguments. Please check your command line arguments.\ne.g. {0} and {1} +warning.the_following_errors = The following errors and warnings occurred whilst processing files. diff --git a/resources/lang/Messages_es.properties b/resources/lang/Messages_es.properties index 72b49f8..999c8cd 100644 --- a/resources/lang/Messages_es.properties +++ b/resources/lang/Messages_es.properties @@ -1441,3 +1441,5 @@ label.all_known_alignment_files = Todos los archivos de alineaci label.command_line_arguments = Argumentos de línea de comando warning.using_old_command_line_arguments = Parece que estás utilizando argumentos antiguos de línea de comando. Estos ahora están en desuso y se eliminarán en una versión futura de Jalview.\nObtenga más información sobre los nuevos argumentos de la línea de comando en\n warning.using_mixed_command_line_arguments = Jalview no puede utilizar argumentos de línea de comando antiguos (-arg) y nuevos (--arg). Verifique los argumentos de su línea de comando.\ne.g. {0} y {1} +warning.the_following_errors = Se produjeron los siguientes errores y advertencias al procesar archivos. + diff --git a/src/jalview/bin/Commands.java b/src/jalview/bin/Commands.java index e6c7b54..8312b29 100644 --- a/src/jalview/bin/Commands.java +++ b/src/jalview/bin/Commands.java @@ -143,22 +143,9 @@ public class Commands } // report errors - StringBuilder sb = new StringBuilder(); - for (String error : errors) - { - sb.append("- " + error); - sb.append("\n"); - } - if (Platform.isHeadless()) - { - Console.debug("All errors from command line argument commands:\n" - + sb.toString()); - } - else - { - // scrollable dialog box - - } + Console.debug("All errors from command line argument commands:\n" + + errorsToString()); + // gui errors reported in Jalview if (argParser.getBoolean(Arg.QUIT)) { @@ -1176,4 +1163,20 @@ public class Commands return whatNext.OKAY; } + + public List getErrors() + { + return errors; + } + + public String errorsToString() + { + StringBuilder sb = new StringBuilder(); + for (String error : errors) + { + sb.append("- " + error); + sb.append("\n"); + } + return sb.toString(); + } } diff --git a/src/jalview/bin/Jalview.java b/src/jalview/bin/Jalview.java index 51e8a82..dbc1d88 100755 --- a/src/jalview/bin/Jalview.java +++ b/src/jalview/bin/Jalview.java @@ -76,6 +76,7 @@ import jalview.bin.argparser.BootstrapArgs; import jalview.ext.so.SequenceOntology; import jalview.gui.AlignFrame; import jalview.gui.Desktop; +import jalview.gui.JvOptionPane; import jalview.gui.PromptUserConfig; import jalview.gui.QuitHandler; import jalview.gui.QuitHandler.QResponse; @@ -673,6 +674,8 @@ public class Jalview desktop = new Desktop(); desktop.setInBatchMode(true); // indicate we are starting up + mixedCliWarning(); + try { JalviewTaskbar.setTaskbar(this); @@ -838,6 +841,8 @@ public class Jalview cmds.processArgs(); boolean commandsSuccess = cmds.argsWereParsed(); + cliWarning(); + if (commandsSuccess) { if (headlessArg) @@ -2020,4 +2025,63 @@ public class Jalview || getInstance().desktop.isInBatchMode()); } + /** + * Warning about old or mixed command line arguments + */ + private void mixedCliWarning() + { + Jalview j = Jalview.getInstance(); + boolean mixedStyle = j.getArgParser() != null + && j.getArgParser().isMixedStyle(); + String title = MessageManager.getString("label.command_line_arguments"); + if (mixedStyle) + { + String warning = MessageManager.formatMessage( + "warning.using_mixed_command_line_arguments", + j.getArgParser().getMixedExamples()); + String quit = MessageManager.getString("action.quit"); + + Desktop.instance.nonBlockingDialog(title, warning, quit, + JvOptionPane.WARNING_MESSAGE, false, true); + + Jalview.exit( + "Exiting due to mixed old and new command line arguments.", + ExitCode.MIXED_CLI_ARGUMENTS); + } + } + + private void cliWarning() + { + Jalview j = Jalview.getInstance(); + Commands c = j.getCommands(); + boolean oldStyle = j.getArgParser() != null + && j.getArgParser().isOldStyle(); + String title = MessageManager.getString("label.command_line_arguments"); + if (oldStyle) + { + String warning = MessageManager + .getString("warning.using_old_command_line_arguments") + + "https://www.jalview.org/help/html/features/commandline.html"; + if (Desktop.instance != null) + { + String cont = MessageManager.getString("label.continue"); + + Desktop.instance.nonBlockingDialog(32, 2, title, warning, cont, + JvOptionPane.WARNING_MESSAGE, false, false); + } + } + if (j.getCommands() != null && j.getCommands().getErrors().size() > 0) + { + if (Desktop.instance != null) + { + String message = MessageManager + .getString("warning.the_following_errors"); + String ok = MessageManager.getString("action.ok"); + Desktop.instance.nonBlockingDialog(60, 16, title, + message + "\n" + j.getCommands().errorsToString(), ok, + JvOptionPane.WARNING_MESSAGE, true, true); + } + } + } + } diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index 6b2044c..f0753bc 100644 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -91,6 +91,7 @@ import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JProgressBar; +import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.KeyStroke; @@ -639,61 +640,6 @@ public class Desktop extends jalview.jbgui.GDesktop jalview.bin.Console.info("JALVIEWJS: CREATED DESKTOP"); } - cliWarning(); - } - - /** - * Warning about old or mixed command line arguments - */ - private void cliWarning() - { - Jalview j = Jalview.getInstance(); - boolean oldStyle = j.getArgParser() != null - && j.getArgParser().isOldStyle(); - boolean mixedStyle = j.getArgParser() != null - && j.getArgParser().isMixedStyle(); - - String title = MessageManager.getString("label.command_line_arguments"); - if (mixedStyle) - { - String warning = MessageManager.formatMessage( - "warning.using_mixed_command_line_arguments", - j.getArgParser().getMixedExamples()); - String quit = MessageManager.getString("action.quit"); - JvOptionPane jvp = JvOptionPane.newOptionDialog(this); - jvp.setResponseHandler(JOptionPane.YES_OPTION, () -> { - }); - jvp.showDialogOnTopAsync(this, warning, title, JOptionPane.YES_OPTION, - JOptionPane.WARNING_MESSAGE, null, new Object[] - { quit }, quit, true, null, false); - - Jalview.getInstance().exit( - "Exiting due to mixed old and new command line arguments.", - ExitCode.MIXED_CLI_ARGUMENTS); - return; - } - if (oldStyle) - { - String warning = MessageManager - .getString("warning.using_old_command_line_arguments") - + "https://www.jalview.org/help/html/features/commandline.html"; - - JTextArea jta = new JTextArea(2, 32); - // jta.setLineWrap(true); - jta.setEditable(false); - jta.setWrapStyleWord(true); - jta.setAutoscrolls(true); - jta.setText(warning); - - String ok = MessageManager.getString("label.continue"); - JvOptionPane jvp = JvOptionPane.newOptionDialog(this); - jvp.setResponseHandler(JOptionPane.YES_OPTION, () -> { - }); - jvp.showDialogOnTopAsync(this, jta, title, JOptionPane.YES_OPTION, - JOptionPane.WARNING_MESSAGE, null, new Object[] - { ok }, ok, false, null, false); - } - } /** @@ -3795,4 +3741,39 @@ public class Desktop extends jalview.jbgui.GDesktop alignFrameModalMap.remove(af); } + public void nonBlockingDialog(String title, String message, String button, + int type, boolean scrollable, boolean modal) + { + nonBlockingDialog(32, 2, title, message, button, type, scrollable, + modal); + } + + public void nonBlockingDialog(int width, int height, String title, + String message, String button, int type, boolean scrollable, + boolean modal) + { + if (type < 0) + { + type = JvOptionPane.WARNING_MESSAGE; + } + JTextArea jta = new JTextArea(height, width); + // jta.setLineWrap(true); + jta.setEditable(false); + jta.setWrapStyleWord(true); + jta.setAutoscrolls(true); + jta.setText(message); + + JScrollPane jsp = scrollable + ? new JScrollPane(jta, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, + JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED) + : null; + + JvOptionPane jvp = JvOptionPane.newOptionDialog(this); + jvp.setResponseHandler(JOptionPane.YES_OPTION, () -> { + }); + jvp.showDialogOnTopAsync(this, scrollable ? jsp : jta, title, + JOptionPane.YES_OPTION, type, null, new Object[] + { button }, button, modal, null, false); + } + } -- 1.7.10.2