X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FJvOptionPane.java;h=bf15b865f405dfdec0f834b423df69fa12fa34d9;hb=5757f3c3ee60e52a2446ab111f35452cf4435ab2;hp=92a57ca8558db69a452c033546f18efd5109cd48;hpb=a4aa14220a6a53391ca8e171bc774cef908057a3;p=jalview.git diff --git a/src/jalview/gui/JvOptionPane.java b/src/jalview/gui/JvOptionPane.java index 92a57ca..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(RunResponse action) + public JvOptionPane setResponseHandler(Object response, Runnable action) { - runner.addResponse(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(); } } }