diff options
Diffstat (limited to 'Master/texmf-dist/source/support/arara/src/main/java/com/github/cereda/arara/utils/MessageUtils.java')
-rw-r--r-- | Master/texmf-dist/source/support/arara/src/main/java/com/github/cereda/arara/utils/MessageUtils.java | 313 |
1 files changed, 313 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/support/arara/src/main/java/com/github/cereda/arara/utils/MessageUtils.java b/Master/texmf-dist/source/support/arara/src/main/java/com/github/cereda/arara/utils/MessageUtils.java new file mode 100644 index 00000000000..52a5d095a8e --- /dev/null +++ b/Master/texmf-dist/source/support/arara/src/main/java/com/github/cereda/arara/utils/MessageUtils.java @@ -0,0 +1,313 @@ +/** + * Arara, the cool TeX automation tool + * Copyright (c) 2012 -- 2018, Paulo Roberto Massa Cereda + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the project's author nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY + * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +package com.github.cereda.arara.utils; + +import com.github.cereda.arara.controller.ConfigurationController; +import javax.swing.JOptionPane; +import javax.swing.UIManager; + +/** + * Implements utilitary methods for displaying messages. + * @author Paulo Roberto Massa Cereda + * @version 4.0 + * @since 4.0 + */ +public class MessageUtils { + + // holds the default width for the + // message body, in pixels + private static final int WIDTH = 250; + + // let's start the UI manager and set + // the default look and feel to be as + // close as possible to the system + static { + + // get the current look and feel + String laf = (String) ConfigurationController. + getInstance().get("ui.lookandfeel"); + + // check if one is actually set + if (!laf.equals("none")) { + + // use a special keyword to indicate + // the use of a system look and feel + if (laf.equals("system")) { + laf = UIManager.getSystemLookAndFeelClassName(); + } + + // let's try it, in case it fails, + // rely to the default look and feel + try { + + // get the system look and feel name + // and try to set it as default + UIManager.setLookAndFeel(laf); + } + catch (Exception exception) { + // quack, quack, quack + } + + } + } + + /** + * Normalizes the icon type to one of the five available icons. + * @param value An integer value. + * @return The normalized integer value. + */ + private static int normalizeIconType(int value) { + + // do the normalization according to the available + // icons in the underlying message implementation + switch (value) { + case 1: + value = JOptionPane.ERROR_MESSAGE; + break; + case 2: + value = JOptionPane.INFORMATION_MESSAGE; + break; + case 3: + value = JOptionPane.WARNING_MESSAGE; + break; + case 4: + value = JOptionPane.QUESTION_MESSAGE; + break; + default: + value = JOptionPane.PLAIN_MESSAGE; + break; + } + return value; + } + + /** + * Normalizes the message width, so only valid nonzero values are accepted. + * @param value An integer value corresponding to the message width. + * @return The normalized width. + */ + private static int normalizeMessageWidth(int value) { + return (value > 0 ? value : WIDTH); + } + + /** + * Shows the message. + * @param width Integer value, in pixels. + * @param type Type of message. + * @param title Title of the message. + * @param text Text of the message. + */ + public static void showMessage(int width, int type, + String title, String text) { + + // effectively shows the message based + // on the provided parameters + JOptionPane.showMessageDialog( + null, + String.format( + "<html><body style=\"width:%dpx\">%s</body></html>", + normalizeMessageWidth(width), + text + ), + title, + normalizeIconType(type) + ); + } + + /** + * Shows the message. It relies on the default width. + * @param type Type of message. + * @param title Title of the message. + * @param text Text of the message. + */ + public static void showMessage(int type, String title, String text) { + showMessage(WIDTH, type, title, text); + } + + /** + * Shows a message with options presented as an array of buttons. + * @param width Integer value, in pixels. + * @param type Type of message. + * @param title Title of the message. + * @param text Text of the message. + * @param buttons An array of objects to be presented as buttons. + * @return The index of the selected button, starting from 1. + */ + public static int showOptions(int width, int type, String title, + String text, Object... buttons) { + + // returns the index of the selected button, + // zero if nothing is selected + return JOptionPane.showOptionDialog( + null, + String.format( + "<html><body style=\"width:%dpx\">%s</body></html>", + normalizeMessageWidth(width), + text + ), + title, + JOptionPane.DEFAULT_OPTION, + normalizeIconType(type), + null, + buttons, + buttons[0] + ) + 1; + } + + /** + * Shows a message with options presented as an array of buttons. It relies + * on the default width. + * @param type Type of message. + * @param title Title of the message. + * @param text Text of the message. + * @param buttons An array of objects to be presented as buttons. + * @return The index of the selected button, starting from 1. + */ + public static int showOptions(int type, String title, + String text, Object... buttons) { + return showOptions(WIDTH, type, title, text, buttons); + } + + /** + * Shows a message with a text input. + * @param width Integer value, in pixels. + * @param type Type of message. + * @param title Title of the message. + * @param text Text of the message. + * @return The string representing the input text. + */ + public static String showInput(int width, int type, + String title, String text) { + + // get the string from the + // input text, if any + String input = JOptionPane.showInputDialog( + null, + String.format( + "<html><body style=\"width:%dpx\">%s</body></html>", + normalizeMessageWidth(width), + text + ), + title, + normalizeIconType(type) + ); + + // if the input is not null, that is, + // the user actually typed something + if (input != null) { + + // return the trimmed string + return input.trim(); + } + + // nothing was typed, so let's + // return an empty string + return ""; + } + + /** + * Shows a message with a text input. It relies on the default width. + * @param type Type of message. + * @param title Title of the message. + * @param text Text of the message. + * @return The string representing the input text. + */ + public static String showInput(int type, String title, String text) { + return showInput(WIDTH, type, title, text); + } + + /** + * Shows a message with options presented as a dropdown list of elements. + * @param width Integer value, in pixels. + * @param type Type of message. + * @param title Title of the message. + * @param text Text of the message. + * @param elements An array of objects representing the elements. + * @return The index of the selected element, starting from 1. + */ + public static int showDropdown(int width, int type, String title, + String text, Object... elements) { + + // show the dropdown list and get + // the selected object, if any + Object index = JOptionPane.showInputDialog( + null, + String.format( + "<html><body style=\"width:%dpx\">%s</body></html>", + normalizeMessageWidth(width), + text + ), + title, + normalizeIconType(type), + null, + elements, + elements[0] + ); + + // if it's not a null object, let's + // find the corresponding index + if (index != null) { + + // iterate through the array of elements + for (int i = 0; i < elements.length; i++) { + + // if the element is found, simply + // return the index plus 1, as zero + // corresponds to no selection at all + if (elements[i].equals(index)) { + return i + 1; + } + + } + } + + // nothing was selected, + // simply return zero + return 0; + } + + /** + * Shows a message with options presented as a dropdown list of elements. It + * relies on the default width. + * @param type Type of message. + * @param title Title of the message. + * @param text Text of the message. + * @param elements An array of objects representing the elements. + * @return The index of the selected element, starting from 1. + */ + public static int showDropdown(int type, String title, + String text, Object... elements) { + return showDropdown(WIDTH, type, title, text, elements); + } + +} |