X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FJvOptionPane.java;h=b3df2f749cf930cda30142240de3860ef840adad;hb=bd7b3138379c2db8507fe7e8d25f5a921e2d9df7;hp=3a5e0f7a0a55ced94037e2ad294bb7a64772ee66;hpb=99427a60fd0b57bc3e6af84637bb2983b2edc871;p=jalview.git diff --git a/src/jalview/gui/JvOptionPane.java b/src/jalview/gui/JvOptionPane.java index 3a5e0f7..b3df2f7 100644 --- a/src/jalview/gui/JvOptionPane.java +++ b/src/jalview/gui/JvOptionPane.java @@ -21,6 +21,7 @@ package jalview.gui; +import jalview.bin.Jalview; import jalview.util.dialogrunner.DialogRunner; import jalview.util.dialogrunner.DialogRunnerI; import jalview.util.dialogrunner.RunResponse; @@ -36,11 +37,9 @@ import javax.swing.Icon; import javax.swing.JOptionPane; import javax.swing.JPanel; -public class JvOptionPane extends JOptionPane - implements DialogRunnerI, PropertyChangeListener +public class JvOptionPane extends JOptionPane implements DialogRunnerI, + PropertyChangeListener { - // BH 2018 no changes needed here. - private static final long serialVersionUID = -3019167117756785229L; private static Object mockResponse = JvOptionPane.CANCEL_OPTION; @@ -49,10 +48,17 @@ public class JvOptionPane extends JOptionPane private Component parentComponent; - public JvOptionPane(final Component parentComponent) + private DialogRunnerI runner = new DialogRunner(); + + /* + * 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 = parentComponent; + this.parentComponent = Jalview.isJS() ? this : parent; } public static int showConfirmDialog(Component parentComponent, @@ -704,39 +710,33 @@ public class JvOptionPane extends JOptionPane return interactiveMode; } - public static void setInteractiveMode(boolean interactiveMode) + public static void setInteractiveMode(boolean interactive) { - JvOptionPane.interactiveMode = interactiveMode; + JvOptionPane.interactiveMode = interactive; } - @SuppressWarnings("unused") private static String getPrefix(int messageType) { - String prefix = ""; // JavaScript only - - if (/** @j2sNative true || */ - false) + String prefix = ""; + + // JavaScript only + if (Jalview.isJS()) { switch (messageType) { - default: - case JvOptionPane.INFORMATION_MESSAGE: - prefix = "Note: "; - break; case JvOptionPane.WARNING_MESSAGE: prefix = "WARNING! "; break; case JvOptionPane.ERROR_MESSAGE: - prefix = "ERRROR! "; + prefix = "ERROR! "; break; + default: + prefix = "Note: "; } } return prefix; } - DialogRunner runner = new DialogRunner(this); - - private List ourOptions; /** * create a new option dialog that can be used to register responses - along * lines of showOptionDialog @@ -763,7 +763,7 @@ public class JvOptionPane extends JOptionPane if (!isInteractiveMode()) { - runner.firstRun((int) getMockResponse()); + runner.handleResponse(getMockResponse()); } // two uses: // @@ -779,25 +779,20 @@ public class JvOptionPane extends JOptionPane // // 2) UserDefinedColors warning about saving over a name already defined // - Component parent; - /** - * @j2sNative - * parent = this; - */ - { - parent = parentComponent; - } - ; + ourOptions = Arrays.asList(options); - int response = JOptionPane.showOptionDialog(parent, message, title, + + int response = JOptionPane.showOptionDialog(parentComponent, message, title, optionType, messageType, icon, options, initialValue); - /** - * @j2sNative + + /* + * In Java, the response is returned to this thread and handled here; + * (for Javascript, see propertyChange) */ + if (!Jalview.isJS()) { - runner.firstRun(response); + runner.handleResponse(response); } - } public void showInternalDialog(JPanel mainPanel, String title, @@ -806,67 +801,56 @@ public class JvOptionPane extends JOptionPane { if (!isInteractiveMode()) { - runner.firstRun((int) getMockResponse()); - } - Component parent; - /** - * @j2sNative parent = this; - */ - { - parent = parentComponent; + runner.handleResponse(getMockResponse()); } - ; - ourOptions = Arrays.asList(options); + ourOptions = Arrays.asList(options); int response; - if (parent!=this) { - - response = JOptionPane.showInternalOptionDialog(parent, mainPanel, + if (parentComponent != this) + { + response = JOptionPane.showInternalOptionDialog(parentComponent, mainPanel, title, yesNoCancelOption, questionMessage, icon, options, initresponse); } else { - response = JOptionPane.showOptionDialog(parent, mainPanel, title, + response = JOptionPane.showOptionDialog(parentComponent, mainPanel, title, yesNoCancelOption, questionMessage, icon, options, initresponse); } - /** - * @j2sNative - */ + if (!Jalview.isJS()) { - runner.firstRun(response); + runner.handleResponse(response); } - } + @Override - public JvOptionPane response(RunResponse action) + public JvOptionPane addResponse(Object response, RunResponse action) { - - runner.response(action); - return this; - } - - public JvOptionPane defaultResponse(Runnable runnable) - { - runner.setDefaultResponse(runnable); + runner.addResponse(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. + * + * @param evt + */ @Override public void propertyChange(PropertyChangeEvent evt) { - int ourOption = ourOptions.indexOf(evt.getNewValue()); - if (ourOption == -1) + Object newValue = evt.getNewValue(); + int ourOption = ourOptions.indexOf(newValue); + if (ourOption >= 0) { - // try our luck.. - runner.run(evt.getNewValue()); + runner.handleResponse(ourOption); } else { - runner.run(ourOption); + // try our luck.. + runner.handleResponse(newValue); } } - - }