From 984e67333b47f980e03c7fbc7cf161f604a6aee6 Mon Sep 17 00:00:00 2001 From: hansonr Date: Thu, 28 Jun 2018 17:17:38 +0100 Subject: [PATCH] JAL-3032 JvOptionPane summary of issues with boilerplate modal dialogs. 90 cases no issue; 5 works. --- src/jalview/gui/JvOptionPane.java | 509 ++++++++++++++++++++++++++----- src/jalview/gui/UserDefinedColours.java | 7 +- 2 files changed, 432 insertions(+), 84 deletions(-) diff --git a/src/jalview/gui/JvOptionPane.java b/src/jalview/gui/JvOptionPane.java index d0ed5f6..e1d76f1 100644 --- a/src/jalview/gui/JvOptionPane.java +++ b/src/jalview/gui/JvOptionPane.java @@ -46,215 +46,493 @@ public class JvOptionPane extends JOptionPane : (int) getMockResponse(); } + /** + * Message, title, optionType + * + * @param parentComponent + * @param message + * @param title + * @param optionType + * @return + * @throws HeadlessException + */ public static int showConfirmDialog(Component parentComponent, Object message, String title, int optionType) throws HeadlessException { - return isInteractiveMode() - ? JOptionPane.showConfirmDialog(parentComponent, message, title, - optionType) - : (int) getMockResponse(); + if (!isInteractiveMode()) + return (int) getMockResponse(); + switch (optionType) + { + case JvOptionPane.YES_NO_CANCEL_OPTION: + // FeatureRenderer amendFeatures ?? TODO ?? + // Chimera close + // PromptUserConfig + // $FALL-THROUGH$ + default: + case JvOptionPane.YES_NO_OPTION: + // PromptUserConfig usage stats + // for now treated as "OK CANCEL" + // $FALL-THROUGH$ + case JvOptionPane.OK_CANCEL_OPTION: + // will fall back to simple HTML + return JOptionPane.showConfirmDialog(parentComponent, message, title, + optionType); + } } + /** + * Adds a message type. Fallback is to just add it in the beginning. + * + * @param parentComponent + * @param message + * @param title + * @param optionType + * @param messageType + * @return + * @throws HeadlessException + */ public static int showConfirmDialog(Component parentComponent, Object message, String title, int optionType, int messageType) throws HeadlessException { + // JalviewServicesChanged + // PromptUserConfig raiseDialog return isInteractiveMode() ? JOptionPane.showConfirmDialog(parentComponent, message, title, optionType, messageType) : (int) getMockResponse(); } + /** + * Adds an icon + * + * @param parentComponent + * @param message + * @param title + * @param optionType + * @param messageType + * @param icon + * @return + * @throws HeadlessException + */ public static int showConfirmDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon) throws HeadlessException { + // JvOptionPaneTest only return isInteractiveMode() ? JOptionPane.showConfirmDialog(parentComponent, message, title, optionType, messageType, icon) : (int) getMockResponse(); } + /** + * Internal version "OK" + * + * @param parentComponent + * @param message + * @return + */ public static int showInternalConfirmDialog(Component parentComponent, Object message) { - return isInteractiveMode() - ? JOptionPane.showInternalConfirmDialog(parentComponent, - message) - : (int) getMockResponse(); + // JvOptionPaneTest only; + return isInteractiveMode() ? JOptionPane.showInternalConfirmDialog( + parentComponent, message) : (int) getMockResponse(); } + /** + * Internal version -- changed to standard version for now + * + * @param parentComponent + * @param message + * @param title + * @param optionType + * @return + */ public static int showInternalConfirmDialog(Component parentComponent, - Object message, String title, int optionType) + String message, String title, int optionType) { - return isInteractiveMode() - ? JOptionPane.showConfirmDialog(parentComponent, message, title, - optionType) - : (int) getMockResponse(); + if (!isInteractiveMode()) + return (int) getMockResponse(); + switch (optionType) + { + case JvOptionPane.YES_NO_CANCEL_OPTION: + // ColourMenuHelper.addMenuItmers.offerRemoval TODO + case JvOptionPane.YES_NO_OPTION: + // UserDefinedColoursSave -- relevant? TODO + // $FALL-THROUGH$ + default: + case JvOptionPane.OK_CANCEL_OPTION: + + // EditNameDialog --- uses panel for messsage TODO + + // Desktop.inputURLMenuItem + // WsPreferenses + return JOptionPane.showConfirmDialog(parentComponent, message, title, + optionType); + } } + /** + * + * @param parentComponent + * @param message + * @param title + * @param optionType + * @param messageType + * @return + */ public static int showInternalConfirmDialog(Component parentComponent, Object message, String title, int optionType, int messageType) { - return isInteractiveMode() - ? JOptionPane.showConfirmDialog(parentComponent, message, title, - optionType, messageType) - : (int) getMockResponse(); + if (!isInteractiveMode()) + return (int) getMockResponse(); + switch (optionType) + { + case JvOptionPane.YES_NO_CANCEL_OPTION: + case JvOptionPane.YES_NO_OPTION: + // UserQuestionanaireCheck + // VamsasApplication + // $FALL-THROUGH$ + default: + case JvOptionPane.OK_CANCEL_OPTION: + // will fall back to simple HTML + return JOptionPane.showConfirmDialog(parentComponent, message, title, + optionType, messageType); + } } + /** + * adds icon; no longer internal + * + * @param parentComponent + * @param message + * @param title + * @param optionType + * @param messageType + * @param icon + * @return + */ public static int showInternalConfirmDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon) { - return isInteractiveMode() - ? JOptionPane.showInternalConfirmDialog(parentComponent, - message, title, optionType, messageType, icon) - : (int) getMockResponse(); + if (!isInteractiveMode()) + return (int) getMockResponse(); + switch (optionType) + { + case JvOptionPane.YES_NO_CANCEL_OPTION: + case JvOptionPane.YES_NO_OPTION: + //$FALL-THROUGH$ + default: + case JvOptionPane.OK_CANCEL_OPTION: + // Preferences editLink/newLink + return JOptionPane.showConfirmDialog(parentComponent, message, title, + optionType, messageType, icon); + } + } + /** + * custom options full-featured + * + * @param parentComponent + * @param message + * @param title + * @param optionType + * @param messageType + * @param icon + * @param options + * @param initialValue + * @return + * @throws HeadlessException + */ public static int showOptionDialog(Component parentComponent, - Object message, String title, int optionType, int messageType, + String message, String title, int optionType, int messageType, Icon icon, Object[] options, Object initialValue) throws HeadlessException { - return isInteractiveMode() - ? JOptionPane.showOptionDialog(parentComponent, message, title, - optionType, messageType, icon, options, initialValue) - : (int) getMockResponse(); + if (!isInteractiveMode()) + return (int) getMockResponse(); + // two uses: + // + // TODO + // + // 1) AlignViewport for openLinkedAlignment + // + // Show a dialog with the option to open and link (cDNA <-> protein) as a + // new + // alignment, either as a standalone alignment or in a split frame. Returns + // true if the new alignment was opened, false if not, because the user + // declined the offer. + // + // 2) UserDefinedColors warning about saving over a name already defined + // + return JOptionPane.showOptionDialog(parentComponent, message, title, + optionType, messageType, icon, options, initialValue); } + /** + * Just an OK message + * + * @param message + * @throws HeadlessException + */ public static void showMessageDialog(Component parentComponent, - Object message) throws HeadlessException + String message) throws HeadlessException { - if (isInteractiveMode()) - { - JOptionPane.showMessageDialog(parentComponent, message); - } - else + if (!isInteractiveMode()) { outputMessage(message); + return; } + + // test class only + + JOptionPane.showMessageDialog(parentComponent, message); } + /** + * OK with message, title, and type + * + * @param parentComponent + * @param message + * @param title + * @param messageType + * @throws HeadlessException + */ public static void showMessageDialog(Component parentComponent, - Object message, String title, int messageType) + String message, String title, int messageType) throws HeadlessException { - if (isInteractiveMode()) - { - JOptionPane.showMessageDialog(parentComponent, message, title, - messageType); - } - else + // 30 implementations -- all just fine. + + if (!isInteractiveMode()) { outputMessage(message); + return; } + + JOptionPane.showMessageDialog(parentComponent, + getPrefix(messageType) + message, title, messageType); } + /** + * adds title and icon + * + * @param parentComponent + * @param message + * @param title + * @param messageType + * @param icon + * @throws HeadlessException + */ public static void showMessageDialog(Component parentComponent, - Object message, String title, int messageType, Icon icon) + String message, String title, int messageType, Icon icon) throws HeadlessException { - if (isInteractiveMode()) - { - JOptionPane.showMessageDialog(parentComponent, message, title, - messageType, icon); - } - else + + // test only + + if (!isInteractiveMode()) { outputMessage(message); + return; } + + JOptionPane.showMessageDialog(parentComponent, message, title, + messageType, icon); } + /** + * was internal + * + */ public static void showInternalMessageDialog(Component parentComponent, Object message) { - if (isInteractiveMode()) - { - JOptionPane.showMessageDialog(parentComponent, message); - } - else + + // WsPreferences only + + if (!isInteractiveMode()) { outputMessage(message); + return; } + + JOptionPane.showMessageDialog(parentComponent, message); } + + /** + * Adds title and messageType + * + * @param parentComponent + * @param message + * @param title + * @param messageType + */ public static void showInternalMessageDialog(Component parentComponent, - Object message, String title, int messageType) + String message, String title, int messageType) { - if (isInteractiveMode()) - { - JOptionPane.showMessageDialog(parentComponent, message, title, - messageType); - } - else + + // 41 references + + if (!isInteractiveMode()) { outputMessage(message); + return; } + + JOptionPane.showMessageDialog(parentComponent, + getPrefix(messageType) + message, title, messageType); } + /** + * + * @param parentComponent + * @param message + * @param title + * @param messageType + * @param icon + */ public static void showInternalMessageDialog(Component parentComponent, Object message, String title, int messageType, Icon icon) { - if (isInteractiveMode()) - { - JOptionPane.showMessageDialog(parentComponent, message, title, - messageType, icon); - } - else + + // test only + + if (!isInteractiveMode()) { outputMessage(message); + return; } + + JOptionPane.showMessageDialog(parentComponent, message, title, + messageType, icon); } + /** + * + * @param message + * @return + * @throws HeadlessException + */ public static String showInputDialog(Object message) throws HeadlessException { - return isInteractiveMode() ? JOptionPane.showInputDialog(message) - : getMockResponse().toString(); + // test only + + if (!isInteractiveMode()) + { + return getMockResponse().toString(); + } + + return JOptionPane.showInputDialog(message); } - public static String showInputDialog(Object message, - Object initialSelectionValue) + /** + * adds inital selection value + * + * @param message + * @param initialSelectionValue + * @return + */ + public static String showInputDialog(String message, + String initialSelectionValue) { - return isInteractiveMode() - ? JOptionPane.showInputDialog(message, initialSelectionValue) - : getMockResponse().toString(); + if (!isInteractiveMode()) + { + return getMockResponse().toString(); + } + + // AnnotationPanel character option + + return JOptionPane.showInputDialog(message, initialSelectionValue); } + /** + * centered on parent + * + * @param parentComponent + * @param message + * @return + * @throws HeadlessException + */ public static String showInputDialog(Component parentComponent, - Object message) throws HeadlessException + String message) throws HeadlessException { + // test only + return isInteractiveMode() ? JOptionPane.showInputDialog(parentComponent, message) : getMockResponse().toString(); } + /** + * input with initial selection + * + * @param parentComponent + * @param message + * @param initialSelectionValue + * @return + */ public static String showInputDialog(Component parentComponent, - Object message, Object initialSelectionValue) + String message, String initialSelectionValue) { + + // AnnotationPanel + return isInteractiveMode() ? JOptionPane.showInputDialog(parentComponent, message, initialSelectionValue) : getMockResponse().toString(); } + /** + * + * @param parentComponent + * @param message + * @param title + * @param messageType + * @return + * @throws HeadlessException + */ public static String showInputDialog(Component parentComponent, - Object message, String title, int messageType) + String message, String title, int messageType) throws HeadlessException { - return isInteractiveMode() - ? JOptionPane.showInputDialog(parentComponent, message, title, - messageType) + + // test only + + return isInteractiveMode() ? JOptionPane + .showInputDialog(parentComponent, message, title, messageType) : getMockResponse().toString(); } + /** + * Customized input option + * + * @param parentComponent + * @param message + * @param title + * @param messageType + * @param icon + * @param selectionValues + * @param initialSelectionValue + * @return + * @throws HeadlessException + */ public static Object showInputDialog(Component parentComponent, Object message, String title, int messageType, Icon icon, Object[] selectionValues, Object initialSelectionValue) throws HeadlessException { + + // test only + return isInteractiveMode() ? JOptionPane.showInputDialog(parentComponent, message, title, messageType, icon, selectionValues, @@ -262,27 +540,65 @@ public class JvOptionPane extends JOptionPane : getMockResponse().toString(); } + + + /** + * internal version + * + * @param parentComponent + * @param message + * @return + */ public static String showInternalInputDialog(Component parentComponent, - Object message) + String message) { + // test only + return isInteractiveMode() ? JOptionPane.showInternalInputDialog(parentComponent, message) : getMockResponse().toString(); } + + /** + * internal with title and messageType + * + * @param parentComponent + * @param message + * @param title + * @param messageType + * @return + */ public static String showInternalInputDialog(Component parentComponent, - Object message, String title, int messageType) + String message, String title, int messageType) { + + // AlignFrame tabbedPane_mousePressed + return isInteractiveMode() - ? JOptionPane.showInternalInputDialog(parentComponent, message, - title, messageType) + ? JOptionPane.showInternalInputDialog(parentComponent, + getPrefix(messageType) + message, title, messageType) : getMockResponse().toString(); } + /** + * customized internal + * + * @param parentComponent + * @param message + * @param title + * @param messageType + * @param icon + * @param selectionValues + * @param initialSelectionValue + * @return + */ public static Object showInternalInputDialog(Component parentComponent, - Object message, String title, int messageType, Icon icon, + String message, String title, int messageType, Icon icon, Object[] selectionValues, Object initialSelectionValue) { + // test only + return isInteractiveMode() ? JOptionPane.showInternalInputDialog(parentComponent, message, title, messageType, icon, selectionValues, @@ -290,6 +606,10 @@ public class JvOptionPane extends JOptionPane : getMockResponse().toString(); } + + ///////////// end of options /////////////// + + private static void outputMessage(Object message) { System.out.println(">>> JOption Message : " + message.toString()); @@ -321,4 +641,29 @@ public class JvOptionPane extends JOptionPane JvOptionPane.interactiveMode = interactiveMode; } + @SuppressWarnings("unused") + private static String getPrefix(int messageType) + { + String prefix = ""; // JavaScript only + + if (/** @j2sNative true || */ + false) + { + switch (messageType) + { + default: + case JvOptionPane.INFORMATION_MESSAGE: + prefix = "Note: "; + break; + case JvOptionPane.WARNING_MESSAGE: + prefix = "WARNING! "; + break; + case JvOptionPane.ERROR_MESSAGE: + prefix = "ERRROR! "; + break; + } + } + return prefix; + } + } diff --git a/src/jalview/gui/UserDefinedColours.java b/src/jalview/gui/UserDefinedColours.java index 3290500..df0f189 100755 --- a/src/jalview/gui/UserDefinedColours.java +++ b/src/jalview/gui/UserDefinedColours.java @@ -480,7 +480,9 @@ public class UserDefinedColours extends GUserDefinedColours */ protected void warnIfUnsavedChanges() { - if (!changed) + // BH 2018 no warning in JavaScript TODO + + if (/** @j2sNative true || */ !changed) { return; } @@ -743,7 +745,8 @@ public class UserDefinedColours extends GUserDefinedColours if (ColourSchemes.getInstance().nameExists(name)) { - int reply = JvOptionPane.showInternalConfirmDialog(Desktop.desktop, + // BH 2018 SwingJS bypasses this question with YES_OPTION + int reply = /** @j2sNative 0 && */ JvOptionPane.showInternalConfirmDialog(Desktop.desktop, MessageManager.formatMessage( "label.colour_scheme_exists_overwrite", new Object[] { name, name }), -- 1.7.10.2