JAL-4262 Allow HTML in the dialog box for link to CLI documentation
authorBen Soares <b.soares@dundee.ac.uk>
Tue, 12 Sep 2023 11:32:00 +0000 (12:32 +0100)
committerBen Soares <b.soares@dundee.ac.uk>
Tue, 12 Sep 2023 11:32:00 +0000 (12:32 +0100)
src/jalview/bin/Jalview.java
src/jalview/gui/Desktop.java

index 2c07296..a05c995 100755 (executable)
@@ -2061,13 +2061,13 @@ public class Jalview
     {
       String warning = MessageManager
               .getString("warning.using_old_command_line_arguments");
-      String url = "https://www.jalview.org/help/html/features/commandline.html";
+      String url = "<a href=\"https://www.jalview.org/help/html/features/commandline.html\">https://www.jalview.org/help/html/features/commandline.html</a>";
       if (Desktop.instance != null)
       {
         String cont = MessageManager.getString("label.continue");
 
         Desktop.instance.nonBlockingDialog(32, 2, title, warning, url, cont,
-                JvOptionPane.WARNING_MESSAGE, false, false);
+                JvOptionPane.WARNING_MESSAGE, false, true, false);
       }
     }
     if (j.getCommands() != null && j.getCommands().getErrors().size() > 0)
@@ -2087,7 +2087,7 @@ public class Jalview
                 Math.max(message.length(), Math.min(60, shortest)),
                 Math.min(errors.size(), 20), title, message,
                 j.getCommands().errorsToString(), ok,
-                JvOptionPane.WARNING_MESSAGE, true, true);
+                JvOptionPane.WARNING_MESSAGE, true, false, true);
       }
     }
   }
index ee24c25..e785431 100644 (file)
@@ -95,6 +95,7 @@ import javax.swing.JProgressBar;
 import javax.swing.JScrollPane;
 import javax.swing.JTextArea;
 import javax.swing.JTextField;
+import javax.swing.JTextPane;
 import javax.swing.KeyStroke;
 import javax.swing.SwingUtilities;
 import javax.swing.WindowConstants;
@@ -102,6 +103,7 @@ import javax.swing.event.HyperlinkEvent;
 import javax.swing.event.HyperlinkEvent.EventType;
 import javax.swing.event.InternalFrameAdapter;
 import javax.swing.event.InternalFrameEvent;
+import javax.swing.text.JTextComponent;
 
 import org.stackoverflowusers.file.WindowsShortcut;
 
@@ -3746,12 +3748,12 @@ public class Desktop extends jalview.jbgui.GDesktop
           int type, boolean scrollable, boolean modal)
   {
     nonBlockingDialog(32, 2, title, message, null, button, type, scrollable,
-            modal);
+            false, modal);
   }
 
   public void nonBlockingDialog(int width, int height, String title,
           String message, String boxtext, String button, int type,
-          boolean scrollable, boolean modal)
+          boolean scrollable, boolean html, boolean modal)
   {
     if (type < 0)
     {
@@ -3759,15 +3761,31 @@ public class Desktop extends jalview.jbgui.GDesktop
     }
     JLabel jl = new JLabel(message);
 
-    JTextArea jta = new JTextArea(height, width);
-    // jta.setLineWrap(true);
-    jta.setEditable(false);
-    jta.setWrapStyleWord(true);
-    jta.setAutoscrolls(true);
-    jta.setText(boxtext);
+    JTextComponent jtc = null;
+    if (html)
+    {
+      JTextPane jtp = new JTextPane();
+      jtp.setContentType("text/html");
+      jtp.setEditable(false);
+      jtp.setAutoscrolls(true);
+      jtp.setText(boxtext);
+
+      jtc = jtp;
+    }
+    else
+    {
+      JTextArea jta = new JTextArea(height, width);
+      // jta.setLineWrap(true);
+      jta.setEditable(false);
+      jta.setWrapStyleWord(true);
+      jta.setAutoscrolls(true);
+      jta.setText(boxtext);
+
+      jtc = jta;
+    }
 
     JScrollPane jsp = scrollable
-            ? new JScrollPane(jta, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+            ? new JScrollPane(jtc, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                     JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED)
             : null;
 
@@ -3790,8 +3808,8 @@ public class Desktop extends jalview.jbgui.GDesktop
       }
       else
       {
-        jta.setAlignmentX(Component.LEFT_ALIGNMENT);
-        jp.add(jta);
+        jtc.setAlignmentX(Component.LEFT_ALIGNMENT);
+        jp.add(jtc);
       }
     }