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;
private Component parentComponent;
- private DialogRunnerI runner = new DialogRunner();
+ private Map<Object, Runnable> callbacks = new HashMap<>();
/*
* JalviewJS reports user choice in the dialog as the selected
public JvOptionPane(final Component parent)
{
- this.parentComponent = Jalview.isJS() ? this : parent;
+ this.parentComponent = Platform.isJS() ? this : parent;
}
public static int showConfirmDialog(Component parentComponent,
String prefix = "";
// JavaScript only
- if (Jalview.isJS())
+ if (Platform.isJS())
{
switch (messageType)
{
if (!isInteractiveMode())
{
- runner.handleResponse(getMockResponse());
+ handleResponse(getMockResponse());
}
// two uses:
//
* 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);
}
}
{
if (!isInteractiveMode())
{
- runner.handleResponse(getMockResponse());
+ handleResponse(getMockResponse());
}
ourOptions = Arrays.asList(options);
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;
}
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();
}
}
}