Merge branch 'features/r2_11_2_alphafold/JAL-629' into features/JAL-3858_PAEsInProjects
[jalview.git] / src / jalview / gui / JvOptionPane.java
index 752f25c..0e0b13d 100644 (file)
@@ -18,7 +18,6 @@
  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
  * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
-
 package jalview.gui;
 
 import java.awt.AWTEvent;
@@ -58,6 +57,7 @@ import javax.swing.UIManager;
 import javax.swing.event.InternalFrameEvent;
 import javax.swing.event.InternalFrameListener;
 
+import jalview.util.ChannelProperties;
 import jalview.util.Platform;
 import jalview.util.dialogrunner.DialogRunnerI;
 
@@ -75,14 +75,15 @@ public class JvOptionPane extends JOptionPane
   private Map<Object, Callable<Void>> callbacks = new HashMap<>();
 
   /*
-   * JalviewJS reports user choice in the dialog as the selected
-   * option (text); this list allows conversion to index (int)
+   * JalviewJS reports user choice in the dialog as the selected option (text);
+   * this list allows conversion to index (int)
    */
   List<Object> ourOptions;
 
   public JvOptionPane(final Component parent)
   {
     this.parentComponent = Platform.isJS() ? this : parent;
+    this.setIcon(null);
   }
 
   public static int showConfirmDialog(Component parentComponent,
@@ -804,6 +805,7 @@ public class JvOptionPane extends JOptionPane
     if (!isInteractiveMode())
     {
       handleResponse(getMockResponse());
+      return;
     }
     // two uses:
     //
@@ -918,8 +920,8 @@ public class JvOptionPane extends JOptionPane
               useButtons ? initialValueButton : initialValue);
 
       /*
-       * In Java, the response is returned to this thread and handled here;
-       * (for Javascript, see propertyChange)
+       * In Java, the response is returned to this thread and handled here; (for
+       * Javascript, see propertyChange)
        */
       if (!Platform.isJS())
       /**
@@ -934,9 +936,9 @@ public class JvOptionPane extends JOptionPane
     else
     {
       /*
-       * This is java similar to the swingjs handling, with the callbacks
-       * attached to the button press of the dialog.  This means we can use
-       * a non-modal JDialog for the confirmation without blocking the GUI.
+       * This is java similar to the swingjs handling, with the callbacks attached to
+       * the button press of the dialog. This means we can use a non-modal JDialog for
+       * the confirmation without blocking the GUI.
        */
       JOptionPane joptionpane = new JOptionPane();
       // Make button options
@@ -965,13 +967,14 @@ public class JvOptionPane extends JOptionPane
 
       ArrayList<JButton> options_btns = new ArrayList<>();
       Object initialValue_btn = null;
-      if (!Platform.isJS()) // JalviewJS already uses callback, don't need to add them here
+      if (!Platform.isJS()) // JalviewJS already uses callback, don't need to
+                            // add them here
       {
         for (int i = 0; i < options.length && i < 3; i++)
         {
           Object o = options[i];
           int buttonAction = buttonActions[i];
-          Runnable action = callbacks.get(buttonAction);
+          Callable<Void> action = callbacks.get(buttonAction);
           JButton jb = new JButton();
           jb.setText((String) o);
           jb.addActionListener(new ActionListener()
@@ -981,7 +984,7 @@ public class JvOptionPane extends JOptionPane
             {
               joptionpane.setValue(buttonAction);
               if (action != null)
-                Executors.defaultThreadFactory().newThread(action).start();
+                Executors.newSingleThreadExecutor().submit(action);
               // joptionpane.transferFocusBackward();
               joptionpane.transferFocusBackward();
               joptionpane.setVisible(false);
@@ -1028,7 +1031,7 @@ public class JvOptionPane extends JOptionPane
               Platform.isJS() ? initialValue : initialValue_btn);
 
       JDialog dialog = joptionpane.createDialog(parentComponent, title);
-      dialog.setIconImage(WindowIcons.logoIcon.getImage());
+      dialog.setIconImages(ChannelProperties.getIconList());
       dialog.setModalityType(modal ? ModalityType.APPLICATION_MODAL
               : ModalityType.MODELESS);
       dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
@@ -1058,7 +1061,7 @@ public class JvOptionPane extends JOptionPane
     if (parentComponent != this)
     {
       JInternalFrame jif = this.createInternalFrame(parentComponent, title);
-      jif.setFrameIcon(WindowIcons.logoIcon);
+      jif.setFrameIcon(null);
       jif.addInternalFrameListener(new InternalFrameListener()
       {
         @Override
@@ -1104,7 +1107,7 @@ public class JvOptionPane extends JOptionPane
     else
     {
       JDialog dialog = this.createDialog(parentComponent, title);
-      dialog.setIconImage(WindowIcons.logoIcon.getImage());
+      dialog.setIconImages(ChannelProperties.getIconList());
       dialog.setVisible(true); // blocking
       this.internalDialogHandleResponse();
       return;
@@ -1128,21 +1131,12 @@ public class JvOptionPane extends JOptionPane
   }
 
   /*
-  @Override
-  public JvOptionPane setResponseHandler(Object response, Runnable action)
-  {
-    callbacks.put(response, new Callable<Void>()
-    {
-      @Override
-      public Void call()
-      {
-        action.run();
-        return null;
-      }
-    });
-    return this;
-  }
-  */
+   * @Override public JvOptionPane setResponseHandler(Object response, Runnable
+   * action) { callbacks.put(response, new Callable<Void>() {
+   * 
+   * @Override public Void call() { action.run(); return null; } }); return this;
+   * }
+   */
   @Override
   public JvOptionPane setResponseHandler(Object response,
           Callable<Void> action)
@@ -1158,6 +1152,10 @@ public class JvOptionPane extends JOptionPane
   public static int showDialogOnTop(String label, String actionString,
           int JOPTIONPANE_OPTION, int JOPTIONPANE_MESSAGETYPE)
   {
+    if (!isInteractiveMode())
+    {
+      return (int) getMockResponse();
+    }
     // Ensure Jalview window is brought to front (primarily for Quit
     // confirmation window to be visible)
 
@@ -1168,6 +1166,7 @@ public class JvOptionPane extends JOptionPane
     // A better hack which works is to create a new JFrame parent with
     // setAlwaysOnTop(true)
     JFrame dialogParent = new JFrame();
+    dialogParent.setIconImages(ChannelProperties.getIconList());
     dialogParent.setAlwaysOnTop(true);
 
     int answer = JOptionPane.showConfirmDialog(dialogParent, label,
@@ -1183,9 +1182,10 @@ public class JvOptionPane extends JOptionPane
           int JOPTIONPANE_OPTION, int JOPTIONPANE_MESSAGETYPE, Icon icon,
           Object[] options, Object initialValue, boolean modal)
   {
-    showDialogOnTopAsync(new JFrame(), label, actionString,
-            JOPTIONPANE_OPTION, JOPTIONPANE_MESSAGETYPE, icon, options,
-            initialValue, modal);
+    JFrame frame = new JFrame();
+    frame.setIconImages(ChannelProperties.getIconList());
+    showDialogOnTopAsync(frame, label, actionString, JOPTIONPANE_OPTION,
+            JOPTIONPANE_MESSAGETYPE, icon, options, initialValue, modal);
   }
 
   public void showDialogOnTopAsync(JFrame dialogParent, Object label,
@@ -1203,6 +1203,11 @@ public class JvOptionPane extends JOptionPane
           int JOPTIONPANE_MESSAGETYPE, Icon icon, Object[] options,
           Object initialValue, boolean modal, JButton[] buttons)
   {
+    if (!isInteractiveMode())
+    {
+      handleResponse(getMockResponse());
+      return;
+    }
     // Ensure Jalview window is brought to front (primarily for Quit
     // confirmation window to be visible)
 
@@ -1250,8 +1255,8 @@ public class JvOptionPane extends JOptionPane
   public void handleResponse(Object response)
   {
     /*
-    * this test is for NaN in Chrome
-    */
+     * this test is for NaN in Chrome
+     */
     if (response != null && !response.equals(response))
     {
       return;
@@ -1287,6 +1292,11 @@ public class JvOptionPane extends JOptionPane
           Object[] options, Object initialValue, boolean modal,
           JButton[] buttons)
   {
+    if (!isInteractiveMode())
+    {
+      handleResponse(getMockResponse());
+      return null;
+    }
     JButton[] optionsButtons = null;
     Object initialValueButton = null;
     JOptionPane joptionpane = new JOptionPane();
@@ -1398,6 +1408,7 @@ public class JvOptionPane extends JOptionPane
             Platform.isJS() ? initialValue : initialValueButton);
 
     JDialog dialog = joptionpane.createDialog(parentComponent, title);
+    dialog.setIconImages(ChannelProperties.getIconList());
     dialog.setModalityType(
             modal ? ModalityType.APPLICATION_MODAL : ModalityType.MODELESS);
     dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);