JAL-3026-JAL-3063 transpiler and runtime update
[jalview.git] / src / jalview / util / dialogrunner / DialogRunner.java
index fc99b2d..fa85ef4 100644 (file)
@@ -62,6 +62,10 @@ public class DialogRunner<T extends DialogRunnerI> implements DialogRunnerI
       }
     }
     responses.clear();
+    if (defaultResponse != null)
+    {
+      defaultResponse.reset();
+    }
     firstRunWasCalled = false;
   }
 
@@ -189,11 +193,21 @@ public class DialogRunner<T extends DialogRunnerI> implements DialogRunnerI
       return;
     }
     responses.add(response);
-    List<RunResponse> laction = callbacks.get(response);
+    
+    List<RunResponse> laction = response.isNull() ? null : callbacks.get(response);
 
     if (laction == null)
     {
-      System.err.println("Doing nothing for " + response);
+      if (defaultResponse != null)
+      {
+        defaultResponse.ourTrigger = response;
+        defaultResponse.wasRun = true;
+        defaultResponse.run();
+      }
+      else
+      {
+        System.err.println("Doing nothing for " + response);
+      }
       return;
     }
     boolean wasRun = false;
@@ -224,4 +238,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;
+  }
 }