JAL-1988 Make sensible choices if only the opening file has been opened, and alter...
[jalview.git] / src / jalview / gui / QuitHandler.java
index e90a2d5..bedddd1 100644 (file)
@@ -29,15 +29,29 @@ import jalview.util.Platform;
 
 public class QuitHandler
 {
-  private static final int MIN_WAIT_FOR_SAVE = 3000;
+  private static final int MIN_WAIT_FOR_SAVE = 1000;
 
   private static final int MAX_WAIT_FOR_SAVE = 20000;
 
+  private static boolean interactive = true;
+
   public static enum QResponse
   {
     NULL, QUIT, CANCEL_QUIT, FORCE_QUIT
   };
 
+  public static enum Message
+  {
+    UNSAVED_CHANGES, UNSAVED_ALIGNMENTS
+  };
+
+  protected static Message message = Message.UNSAVED_CHANGES;
+
+  public static void setMessage(Message m)
+  {
+    message = m;
+  }
+
   private static ExecutorService executor = Executors.newFixedThreadPool(3);
 
   public static QResponse setQuitHandler()
@@ -67,7 +81,7 @@ public class QuitHandler
 
   private static QResponse gotQuitResponse = QResponse.NULL;
 
-  private static QResponse setResponse(QResponse qresponse)
+  protected static QResponse setResponse(QResponse qresponse)
   {
     gotQuitResponse = qresponse;
     return qresponse;
@@ -81,7 +95,7 @@ public class QuitHandler
   public static final Callable<Void> defaultCancelQuit = () -> {
     Console.debug("QuitHandler: (default) Quit action CANCELLED by user");
     // reset
-    setResponse(QResponse.NULL);
+    setResponse(QResponse.CANCEL_QUIT);
     return null;
   };
 
@@ -105,8 +119,6 @@ public class QuitHandler
             defaultCancelQuit);
   }
 
-  private static boolean interactive = true;
-
   public static QResponse getQuitResponse(boolean ui, Callable<Void> okQuit,
           Callable<Void> forceQuit, Callable<Void> cancelQuit)
   {
@@ -145,16 +157,17 @@ public class QuitHandler
 
     if (confirmQuit)
     {
+      String messageString = MessageManager
+              .getString(message == Message.UNSAVED_ALIGNMENTS
+                      ? "label.unsaved_alignments"
+                      : "label.unsaved_changes");
       JvOptionPane.newOptionDialog()
               .setResponseHandler(JOptionPane.YES_OPTION, defaultOkQuit)
-              .setResponseHandler(JOptionPane.NO_OPTION, defaultCancelQuit)
+              .setResponseHandler(JOptionPane.NO_OPTION, cancelQuit)
               .showDialogOnTopAsync(
                       new StringBuilder(MessageManager
-                              .getString("label.quit_jalview"))
-                                      .append("\n")
-                                      .append(MessageManager.getString(
-                                              "label.unsaved_changes"))
-                                      .toString(),
+                              .getString("label.quit_jalview")).append("\n")
+                              .append(messageString).toString(),
                       MessageManager.getString("action.quit"),
                       JOptionPane.YES_NO_OPTION,
                       JOptionPane.QUESTION_MESSAGE, null, new Object[]
@@ -168,6 +181,7 @@ public class QuitHandler
     if (got == QResponse.CANCEL_QUIT)
     {
       // reset
+      Console.debug("Cancelling quit.  Resetting response to NULL");
       setResponse(QResponse.NULL);
       // but return cancel
       return QResponse.CANCEL_QUIT;