JAL-1988 JAL-3776 Formatting JvOptionPane
[jalview.git] / src / jalview / gui / JvOptionPane.java
index 752f25c..364d4c1 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;
@@ -75,8 +74,8 @@ 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;
 
@@ -918,8 +917,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 +933,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 +964,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 +981,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);
@@ -1128,21 +1128,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)
@@ -1168,6 +1159,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.setIconImage(WindowIcons.logoIcon.getImage());
     dialogParent.setAlwaysOnTop(true);
 
     int answer = JOptionPane.showConfirmDialog(dialogParent, label,
@@ -1183,9 +1175,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.setIconImage(WindowIcons.logoIcon.getImage());
+    showDialogOnTopAsync(frame, label, actionString, JOPTIONPANE_OPTION,
+            JOPTIONPANE_MESSAGETYPE, icon, options, initialValue, modal);
   }
 
   public void showDialogOnTopAsync(JFrame dialogParent, Object label,
@@ -1250,8 +1243,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;
@@ -1398,6 +1391,7 @@ public class JvOptionPane extends JOptionPane
             Platform.isJS() ? initialValue : initialValueButton);
 
     JDialog dialog = joptionpane.createDialog(parentComponent, title);
+    dialog.setIconImage(WindowIcons.logoIcon.getImage());
     dialog.setModalityType(
             modal ? ModalityType.APPLICATION_MODAL : ModalityType.MODELESS);
     dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);