JAL-4125 Move confirmation of closing external viewer windows into the quit handler...
[jalview.git] / src / jalview / gui / StructureViewerBase.java
index 9a575ff..01a3c2d 100644 (file)
@@ -37,9 +37,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
 import java.util.Vector;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.TimeUnit;
 
 import javax.swing.ButtonGroup;
 import javax.swing.JCheckBoxMenuItem;
@@ -1255,6 +1252,20 @@ public abstract class StructureViewerBase extends GStructureViewer
     return session;
   }
 
+  private static boolean quitClose = false;
+
+  public static void setQuitClose(boolean b)
+  {
+    quitClose = b;
+  }
+
+  @Override
+  public boolean stillRunning()
+  {
+    AAStructureBindingModel binding = getBinding();
+    return binding != null && binding.isViewerRunning();
+  }
+
   /**
    * Close down this instance of Jalview's Chimera viewer, giving the user the
    * option to close the associated Chimera window (process). They may wish to
@@ -1267,19 +1278,29 @@ public abstract class StructureViewerBase extends GStructureViewer
   public void closeViewer(boolean forceClose)
   {
     AAStructureBindingModel binding = getBinding();
-    if (binding != null && binding.isViewerRunning())
+    if (stillRunning())
     {
       if (!forceClose)
       {
         String viewerName = getViewerName();
 
         int confirm = JvOptionPane.CANCEL_OPTION;
-        String prompt = MessageManager
-                .formatMessage("label.confirm_close_viewer", new Object[]
-                { binding.getViewerTitle(viewerName, false), viewerName });
-        prompt = JvSwingUtils.wrapTooltip(true, prompt);
-        String title = MessageManager.getString("label.close_viewer");
-        confirm = showCloseDialog(title, prompt);
+        if (QuitHandler.quitting())
+        {
+          // already asked about closing external windows
+          confirm = quitClose ? JvOptionPane.YES_OPTION
+                  : JvOptionPane.NO_OPTION;
+        }
+        else
+        {
+          String prompt = MessageManager
+                  .formatMessage("label.confirm_close_viewer", new Object[]
+                  { binding.getViewerTitle(viewerName, false),
+                      viewerName });
+          prompt = JvSwingUtils.wrapTooltip(true, prompt);
+          String title = MessageManager.getString("label.close_viewer");
+          confirm = showCloseDialog(title, prompt);
+        }
 
         /*
          * abort closure if user hits escape or Cancel
@@ -1320,54 +1341,11 @@ public abstract class StructureViewerBase extends GStructureViewer
 
   private int showCloseDialog(final String title, final String prompt)
   {
-    confirmResponse = JvOptionPane.CANCEL_OPTION;
-
-    if (QuitHandler.quitting())
-    {
-
-      Callable<Void> yesCall = () -> {
-        Console.debug("YES");
-        confirmResponse = JvOptionPane.YES_OPTION;
-        return null;
-      };
-      Callable<Void> noCall = () -> {
-        Console.debug("NO");
-        confirmResponse = JvOptionPane.NO_OPTION;
-        return null;
-      };
-      Callable<Void> cancelCall = () -> {
-        Console.debug("CANCEL");
-        confirmResponse = JvOptionPane.CANCEL_OPTION;
-        return null;
-      };
-      Callable<Void>[] calls = new Callable[] { yesCall, noCall,
-          cancelCall };
-      String cancelQuit = MessageManager.getString("action.cancel_quit");
-      String[] buttonsText = { MessageManager.getString("action.yes"),
-          MessageManager.getString("action.no"), cancelQuit };
-      JvOptionPane dialog = JvOptionPane.frameDialog(prompt,
-              MessageManager.getString("label.close_viewer"),
-              JvOptionPane.WARNING_MESSAGE, buttonsText, cancelQuit, calls,
-              false);
-      // wait for response
-      ExecutorService executor = dialog.getExecutor();
-      executor.shutdown();
-      try
-      {
-        Console.debug("### executor.awaitTermination() starting");
-        executor.awaitTermination(60, TimeUnit.SECONDS);
-        Console.debug("### executor.awaitTermination() finished");
-      } catch (InterruptedException e)
-      {
-      }
-    }
-    else
-    {
-      confirmResponse = JvOptionPane.showConfirmDialog(this, prompt,
-              MessageManager.getString("label.close_viewer"),
-              JvOptionPane.YES_NO_CANCEL_OPTION,
-              JvOptionPane.WARNING_MESSAGE);
-    }
+    int confirmResponse = JvOptionPane.CANCEL_OPTION;
+    confirmResponse = JvOptionPane.showConfirmDialog(this, prompt,
+            MessageManager.getString("label.close_viewer"),
+            JvOptionPane.YES_NO_CANCEL_OPTION,
+            JvOptionPane.WARNING_MESSAGE);
     return confirmResponse;
   }
 
@@ -1402,5 +1380,4 @@ public abstract class StructureViewerBase extends GStructureViewer
             && viewerActionMenu.isVisible();
   }
 
-  private static int confirmResponse = 0;
 }