X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FJvOptionPane.java;h=733223d7792480caf2731cb51812d7748e988092;hb=a1cb36ade41d94aa93dd5b023e942c48f7e19de1;hp=b3df2f749cf930cda30142240de3860ef840adad;hpb=1e28a196997a1e0b8b74d468bfd3df8ec74c1337;p=jalview.git diff --git a/src/jalview/gui/JvOptionPane.java b/src/jalview/gui/JvOptionPane.java index b3df2f7..733223d 100644 --- a/src/jalview/gui/JvOptionPane.java +++ b/src/jalview/gui/JvOptionPane.java @@ -21,24 +21,24 @@ package jalview.gui; -import jalview.bin.Jalview; -import jalview.util.dialogrunner.DialogRunner; -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; import javax.swing.JPanel; -public class JvOptionPane extends JOptionPane implements DialogRunnerI, - PropertyChangeListener +import jalview.util.Platform; +import jalview.util.dialogrunner.DialogRunnerI; + +public class JvOptionPane extends JOptionPane + implements DialogRunnerI, PropertyChangeListener { private static final long serialVersionUID = -3019167117756785229L; @@ -48,17 +48,17 @@ 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 * option (text); this list allows conversion to index (int) */ List ourOptions; - + public JvOptionPane(final Component parent) { - this.parentComponent = Jalview.isJS() ? this : parent; + this.parentComponent = Platform.isJS() ? this : parent; } public static int showConfirmDialog(Component parentComponent, @@ -91,7 +91,7 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, switch (optionType) { case JvOptionPane.YES_NO_CANCEL_OPTION: - // FeatureRenderer amendFeatures ?? TODO ?? + // FeatureRenderer amendFeatures ?? TODO ?? // Chimera close // PromptUserConfig // $FALL-THROUGH$ @@ -164,8 +164,10 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, Object message) { // JvOptionPaneTest only; - return isInteractiveMode() ? JOptionPane.showInternalConfirmDialog( - parentComponent, message) : (int) getMockResponse(); + return isInteractiveMode() + ? JOptionPane.showInternalConfirmDialog(parentComponent, + message) + : (int) getMockResponse(); } /** @@ -399,7 +401,6 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, JOptionPane.showMessageDialog(parentComponent, message); } - /** * Adds title and messageType * @@ -506,6 +507,7 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, return JOptionPane.showInputDialog(message, initialSelectionValue); } + /** * centered on parent * @@ -535,15 +537,14 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, public static String showInputDialog(Component parentComponent, String message, String initialSelectionValue) { - + // AnnotationPanel - + return isInteractiveMode() ? JOptionPane.showInputDialog(parentComponent, message, initialSelectionValue) : getMockResponse().toString(); } - /** * input with initial selection @@ -556,9 +557,9 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, public static String showInputDialog(Component parentComponent, Object message, Object initialSelectionValue) { - + // AnnotationPanel - + return isInteractiveMode() ? JOptionPane.showInputDialog(parentComponent, message, initialSelectionValue) @@ -581,13 +582,14 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, // test only - return isInteractiveMode() ? JOptionPane - .showInputDialog(parentComponent, message, title, messageType) + return isInteractiveMode() + ? JOptionPane.showInputDialog(parentComponent, message, title, + messageType) : getMockResponse().toString(); } /** - * Customized input option + * Customized input option * * @param parentComponent * @param message @@ -604,9 +606,9 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, Object[] selectionValues, Object initialSelectionValue) throws HeadlessException { - + // test only - + return isInteractiveMode() ? JOptionPane.showInputDialog(parentComponent, message, title, messageType, icon, selectionValues, @@ -614,8 +616,6 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, : getMockResponse().toString(); } - - /** * internal version * @@ -627,13 +627,12 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, String message) { // test only - + return isInteractiveMode() ? JOptionPane.showInternalInputDialog(parentComponent, message) : getMockResponse().toString(); } - /** * internal with title and messageType * @@ -646,9 +645,9 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, public static String showInternalInputDialog(Component parentComponent, String message, String title, int messageType) { - + // AlignFrame tabbedPane_mousePressed - + return isInteractiveMode() ? JOptionPane.showInternalInputDialog(parentComponent, getPrefix(messageType) + message, title, messageType) @@ -672,7 +671,7 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, Object[] selectionValues, Object initialSelectionValue) { // test only - + return isInteractiveMode() ? JOptionPane.showInternalInputDialog(parentComponent, message, title, messageType, icon, selectionValues, @@ -680,10 +679,8 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, : getMockResponse().toString(); } - ///////////// end of options /////////////// - - + private static void outputMessage(Object message) { System.out.println(">>> JOption Message : " + message.toString()); @@ -717,10 +714,10 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, private static String getPrefix(int messageType) { - String prefix = ""; - + String prefix = ""; + // JavaScript only - if (Jalview.isJS()) + if (Platform.isJS()) { switch (messageType) { @@ -756,14 +753,13 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, return new JvOptionPane(parentComponent); } - public void showDialog( - String message, String title, int optionType, int messageType, - Icon icon, Object[] options, Object initialValue) + public void showDialog(String message, String title, int optionType, + int messageType, Icon icon, Object[] options, Object initialValue) { if (!isInteractiveMode()) { - runner.handleResponse(getMockResponse()); + handleResponse(getMockResponse()); } // two uses: // @@ -779,19 +775,24 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, // // 2) UserDefinedColors warning about saving over a name already defined // - + ourOptions = Arrays.asList(options); - - int response = JOptionPane.showOptionDialog(parentComponent, message, title, - optionType, messageType, icon, options, initialValue); - + + int response = JOptionPane.showOptionDialog(parentComponent, message, + title, optionType, messageType, icon, options, initialValue); + /* * 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,40 +802,45 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, { if (!isInteractiveMode()) { - runner.handleResponse(getMockResponse()); + handleResponse(getMockResponse()); } - + ourOptions = Arrays.asList(options); int response; - if (parentComponent != this) + if (parentComponent != this) { - response = JOptionPane.showInternalOptionDialog(parentComponent, mainPanel, - title, yesNoCancelOption, questionMessage, icon, options, - initresponse); + response = JOptionPane.showInternalOptionDialog(parentComponent, + mainPanel, title, yesNoCancelOption, questionMessage, icon, + options, initresponse); } else { - response = JOptionPane.showOptionDialog(parentComponent, mainPanel, title, - yesNoCancelOption, questionMessage, icon, options, + response = JOptionPane.showOptionDialog(parentComponent, mainPanel, + title, 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; } /** - * JalviewJS signals option selection by a property change event - * for the option e.g. "OK". This methods responds to that by - * running the response action that corresponds to that option. + * JalviewJS signals option selection by a property change event for the + * option e.g. "OK". This methods responds to that by running the response + * action that corresponds to that option. * * @param evt */ @@ -842,15 +848,33 @@ public class JvOptionPane extends JOptionPane implements DialogRunnerI, public void propertyChange(PropertyChangeEvent evt) { Object newValue = evt.getNewValue(); - int ourOption = ourOptions.indexOf(newValue); + 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(); + parentComponent.requestFocus(); } } }