X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FJvOptionPane.java;h=bf15b865f405dfdec0f834b423df69fa12fa34d9;hb=9d2408483e451285fd555c3cd6e0273977acbaa7;hp=b3df2f749cf930cda30142240de3860ef840adad;hpb=1e28a196997a1e0b8b74d468bfd3df8ec74c1337;p=jalview.git diff --git a/src/jalview/gui/JvOptionPane.java b/src/jalview/gui/JvOptionPane.java index b3df2f7..bf15b86 100644 --- a/src/jalview/gui/JvOptionPane.java +++ b/src/jalview/gui/JvOptionPane.java @@ -21,17 +21,17 @@ package jalview.gui; -import jalview.bin.Jalview; -import jalview.util.dialogrunner.DialogRunner; +import jalview.util.Platform; import jalview.util.dialogrunner.DialogRunnerI; -import jalview.util.dialogrunner.RunResponse; import java.awt.Component; import java.awt.HeadlessException; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.swing.Icon; import javax.swing.JOptionPane; @@ -48,7 +48,7 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, private Component parentComponent; - private DialogRunnerI runner = new DialogRunner(); + private Map callbacks = new HashMap<>(); /* * JalviewJS reports user choice in the dialog as the selected @@ -58,7 +58,7 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, public JvOptionPane(final Component parent) { - this.parentComponent = Jalview.isJS() ? this : parent; + this.parentComponent = Platform.isJS() ? this : parent; } public static int showConfirmDialog(Component parentComponent, @@ -720,7 +720,7 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, String prefix = ""; // JavaScript only - if (Jalview.isJS()) + if (Platform.isJS()) { switch (messageType) { @@ -763,7 +763,7 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, if (!isInteractiveMode()) { - runner.handleResponse(getMockResponse()); + handleResponse(getMockResponse()); } // two uses: // @@ -789,9 +789,14 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, * In Java, the response is returned to this thread and handled here; * (for Javascript, see propertyChange) */ - if (!Jalview.isJS()) + if (!Platform.isJS()) + /** + * Java only + * + * @j2sIgnore + */ { - runner.handleResponse(response); + handleResponse(response); } } @@ -801,7 +806,7 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, { if (!isInteractiveMode()) { - runner.handleResponse(getMockResponse()); + handleResponse(getMockResponse()); } ourOptions = Arrays.asList(options); @@ -818,16 +823,21 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, yesNoCancelOption, questionMessage, icon, options, initresponse); } - if (!Jalview.isJS()) + if (!Platform.isJS()) + /** + * Java only + * + * @j2sIgnore + */ { - runner.handleResponse(response); + handleResponse(response); } } @Override - public JvOptionPane addResponse(Object response, RunResponse action) + public JvOptionPane setResponseHandler(Object response, Runnable action) { - runner.addResponse(response, action); + callbacks.put(response, action); return this; } @@ -845,12 +855,29 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, int ourOption = ourOptions.indexOf(newValue); if (ourOption >= 0) { - runner.handleResponse(ourOption); + handleResponse(ourOption); } else { // try our luck.. - runner.handleResponse(newValue); + handleResponse(newValue); + } + } + + @Override + public void handleResponse(Object response) + { + /* + * this test is for NaN in Chrome + */ + if (response != null && !response.equals(response)) + { + return; + } + Runnable action = callbacks.get(response); + if (action != null) + { + action.run(); } } }