JAL-3048 allow a default response handler to be set
authorJim Procter <jprocter@issues.jalview.org>
Tue, 3 Jul 2018 16:26:30 +0000 (17:26 +0100)
committerJim Procter <jprocter@issues.jalview.org>
Tue, 3 Jul 2018 16:26:30 +0000 (17:26 +0100)
src/jalview/util/dialogrunner/DialogRunner.java

index fc99b2d..9f23832 100644 (file)
@@ -62,6 +62,10 @@ public class DialogRunner<T extends DialogRunnerI> implements DialogRunnerI
       }
     }
     responses.clear();
+    if (defaultResponse != null)
+    {
+      defaultResponse.reset();
+    }
     firstRunWasCalled = false;
   }
 
@@ -193,6 +197,12 @@ public class DialogRunner<T extends DialogRunnerI> implements DialogRunnerI
 
     if (laction == null)
     {
+      if (defaultResponse != null)
+      {
+        defaultResponse.ourTrigger = response;
+        defaultResponse.wasRun = true;
+        defaultResponse.run();
+      }
       System.err.println("Doing nothing for " + response);
       return;
     }
@@ -224,4 +234,33 @@ public class DialogRunner<T extends DialogRunnerI> implements DialogRunnerI
 
   List<Response> responses = new ArrayList<>();
 
+  RunResponse defaultResponse = null;
+
+  /**
+   * Convenience wrapper for setting default response to a runnable
+   * 
+   * @param runnable
+   */
+  public void setDefaultResponse(Runnable runnable)
+  {
+    defaultResponse = new RunResponse(runnable)
+    {
+      @Override
+      public void run()
+      {
+        runnable.run();
+      }
+    };
+  }
+
+  /**
+   * Default responses are called once, with ourTrigger set to the unHandled
+   * response received
+   * 
+   * @param runnable
+   */
+  public void setDefaultResponse(RunResponse runnable)
+  {
+    defaultResponse = runnable;
+  }
 }