JAL-4285 JAL-4262 Added a scrollable dialog to display errors. Moved old-style CLI...
authorBen Soares <b.soares@dundee.ac.uk>
Tue, 12 Sep 2023 01:05:07 +0000 (02:05 +0100)
committerBen Soares <b.soares@dundee.ac.uk>
Tue, 12 Sep 2023 01:05:07 +0000 (02:05 +0100)
resources/lang/Messages.properties
resources/lang/Messages_es.properties
src/jalview/bin/Commands.java
src/jalview/bin/Jalview.java
src/jalview/gui/Desktop.java

index eafabb2..d1e4536 100644 (file)
@@ -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.
index 72b49f8..999c8cd 100644 (file)
@@ -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.
+
index e6c7b54..8312b29 100644 (file)
@@ -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<String> getErrors()
+  {
+    return errors;
+  }
+
+  public String errorsToString()
+  {
+    StringBuilder sb = new StringBuilder();
+    for (String error : errors)
+    {
+      sb.append("- " + error);
+      sb.append("\n");
+    }
+    return sb.toString();
+  }
 }
index 51e8a82..dbc1d88 100755 (executable)
@@ -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);
+      }
+    }
+  }
+
 }
index 6b2044c..f0753bc 100644 (file)
@@ -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);
+  }
+
 }