Package com.jbidwatcher.ui.util

Source Code of com.jbidwatcher.ui.util.OptionUI

package com.jbidwatcher.ui.util;
/*
* Copyright (c) 2000-2007, CyberFOX Software, Inc. All Rights Reserved.
*
* Developed by mrs (Morgan Schweers)
*/

import com.jbidwatcher.util.config.JConfig;

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.StyleSheet;
import java.util.List;

public class OptionUI {
  public static Object showInputDialog(Component parentComponent,
                                       Object message, String title, int messageType, Icon icon,
                                       Object[] selectionValues, Object initialSelectionValue)
      throws HeadlessException {
    JOptionPane pane = new JOptionPane(message, messageType, JOptionPane.OK_CANCEL_OPTION, icon, null, null);

    pane.setWantsInput(true);
    pane.setSelectionValues(selectionValues);
    pane.setInitialSelectionValue(initialSelectionValue);
    pane.setComponentOrientation(((parentComponent == null) ? JOptionPane.getRootFrame() : parentComponent).getComponentOrientation());

    JDialog dialog = pane.createDialog(parentComponent, title);
    dialog.setResizable(true);

    pane.selectInitialValue();
    dialog.setVisible(true);
    dialog.dispose();

    Object value = pane.getInputValue();

    if (value == JOptionPane.UNINITIALIZED_VALUE) {
      return null;
    }
    return value;
  }

  public String promptString(Component parent, String prePrompt, String preTitle, String preFill) {
    return (String)showInputDialog(parent, prePrompt, preTitle, JOptionPane.PLAIN_MESSAGE, null, null, preFill);
  }

  /**
   * @brief Get a basic editor pane for text/html, that listens for
   * hyperlinks properly, and chains to the Hyperactive module.
   *
   * @param sb - The StringBuffer to fill in as the text.
   * @param inSize - The preferred size for the editor.
   * @param fixed - Whether it's fixed in position or not.
   * @param html - True if this is HTML data.
   *
   * @return - A JBEditorPane to be embedded in a frame.
   */
  public JBEditorPane getBasicEditor(StringBuffer sb, Dimension inSize, boolean fixed, boolean html) {
    JBEditorPane jep;

    jep = new JBEditorPane(html ? "text/html" : "text/plain", sb.toString());
    jep.setEditable(false);
    jep.addHyperlinkListener(new Hyperactive(jep));

    if(fixed) {
      jep.setPreferredSize(inSize);
      jep.setMaximumSize(inSize);
      jep.setMinimumSize(inSize);
    }

    return jep;
  }

  /**
   * @brief Get a basic editor pane for text/html, that listens for
   * hyperlinks properly, and chains to the Hyperactive module.
   *
   * @param s - The String to fill in as the text.
   *
   * @return - A JBEditorPane to be embedded in a frame.
   */
  public static JBEditorPane getHTMLLabel(String s) {
    JBEditorPane jep;

    jep = new JBEditorPane("text/html", s);
    jep.setEditable(false);
    jep.setOpaque(false);
    jep.addHyperlinkListener(new Hyperactive(jep));

    return jep;
  }

  /**
   * @brief Get the upper left point of a box which would be centered
   * exactly, given the provided dimensions.
   *
   * @param inSize - The dimensions of the rectangle to place.
   *
   * @return - The upper left corner to place a window at.
   */
  public Point getCenter(Dimension inSize) {
    Rectangle centerBounds = findCenterBounds(inSize);
    Point screenCenter;
    screenCenter = new Point( (centerBounds.width / 2) + centerBounds.x, (centerBounds.height / 2)+centerBounds.y);
    screenCenter.x -= inSize.width/2;
    screenCenter.y -= inSize.height/2;
    return screenCenter;
  }

  /**
   * Helps client code place components on the center of the screen.  It
   * handles multiple monitor configuration correctly
   *
   * @param componentSize the size of the component
   * @return bounds of the centered component
   * @since 2.5
   */
  public static Rectangle findCenterBounds(Dimension componentSize) {
    return findCenterBounds(JMouseAdapter.getCurrentGraphicsConfiguration(), componentSize);
  }

  /**
   * Helps client code place components on the center of the screen.  It
   * handles multiple monitor configuration correctly
   *
   * @param gconf         the GraphicsConfiguration of the monitor
   * @param componentSize the size of the component
   * @return bounds of the centered component
   */
  private static Rectangle findCenterBounds(GraphicsConfiguration gconf, Dimension componentSize) {
    if (gconf == null) {
      gconf = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
    }

    Rectangle bounds = gconf.getBounds();

    return new Rectangle(
        bounds.x + ((bounds.width - componentSize.width) / 2),
        bounds.y + ((bounds.height - componentSize.height) / 2), componentSize.width, componentSize.height
    );
  }

  /**
   * @brief Show a big HTML-formatted text display.
   *
   * @param inSB - The data to show.
   * @param inSize - The size to show it at.
   * @param frameName - The name of the frame to show.
   * @return - The JFrame of the display.
   */
  public JFrame showHTMLDisplay(StringBuffer inSB, Dimension inSize, String frameName) {
    JFrame otherFrame = getTextDisplay(inSB, inSize, frameName, true);
    otherFrame.pack();
    otherFrame.setSize(inSize.width, inSize.height);
    otherFrame.setVisible(true);

    return otherFrame;
  }

  public JBidFrame getTextDisplay(StringBuffer inSB, Dimension inSize, String frameName, boolean isHTML) {
    JBidFrame otherFrame;
    JBEditorPane jep;
    JScrollPane jsp;

    jep = getBasicEditor(inSB, inSize, false, isHTML);

    otherFrame = new JBidFrame(frameName);

    jsp = new JScrollPane(jep);
    jsp.getVerticalScrollBar().setValue(0);
    otherFrame.getContentPane().add(jsp);
    jep.setCaretPosition(0);
    otherFrame.setLocation(getCenter(inSize));
    otherFrame.setEditor(jep);
    return otherFrame;
  }

  public JFrame showTextDisplayWithButtons(StringBuffer inSB, Dimension inSize, String frameName, final String config, final String buttonText1, final String value1, final String buttonText2, final String value2) {
    final JBEditorPane jep = getBasicEditor(inSB, inSize, false, true);
    final JFrame otherFrame = new JBidFrame(frameName);
    final JScrollPane jsp;

    otherFrame.setUndecorated(true);
    otherFrame.getRootPane().setWindowDecorationStyle(JRootPane.QUESTION_DIALOG);
    otherFrame.getContentPane().setLayout(new BorderLayout());
    JPanel buttonPanel = new JPanel(new BorderLayout());
    JButton button1 = new JButton(buttonText1);
    button1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        if(e.getActionCommand().equals(buttonText1)) {
          JConfig.setConfiguration(config, value1);
          otherFrame.setVisible(false);
        }
      }
    });

    JButton button2 = new JButton(buttonText2);
    button2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        if(e.getActionCommand().equals(buttonText2)) {
          JConfig.setConfiguration(config, value2);
          otherFrame.setVisible(false);
        }
      }
    });

    buttonPanel.add(button1, BorderLayout.WEST);
    buttonPanel.add(button2, BorderLayout.EAST);
    otherFrame.getContentPane().add(buttonPanel, BorderLayout.SOUTH);

    jsp = new JScrollPane(jep);
    jsp.getVerticalScrollBar().setValue(0);
    otherFrame.getContentPane().add(jsp, BorderLayout.CENTER);
    jep.setCaretPosition(0);
    otherFrame.setLocation(getCenter(inSize));
    otherFrame.pack();
    otherFrame.setSize(inSize.width, inSize.height);
    otherFrame.setVisible(true);

    return otherFrame;
  }

  /**
   * @brief Show a large HTML-formatted text display, with buttons
   * below, to select what to do.
   *
   * @param inSB - The data to show in the buffer.
   * @param inSize - The size to show it at.
   * @param frameName - The name of the frame to show.
   * @param choices - The array of choices to show.
   * @param borderTitle - The title to surround the panel with.
   * @param al - Who to notify that a choice was made.
   *
   * @return - The JFrame of the display.
   */
  public JFrame showChoiceTextDisplay(StringBuffer inSB, Dimension inSize, String frameName, List<String> choices, String borderTitle, ActionListener al) {
    JEditorPane jep = new JEditorPane();
    HTMLEditorKit hek = new HTMLEditorKit();

    jep.setEditable(false);
    jep.setEditorKit(hek);
    jep.addHyperlinkListener(new Hyperactive(jep));
    jep.setPreferredSize(inSize);
    jep.setMaximumSize(inSize);
    jep.setMinimumSize(inSize);

    JFrame otherFrame = new JBidFrame(frameName);
    JPanel insidePanel = new JPanel(new BorderLayout());
    JScrollPane jsp = new JScrollPane(jep);
    StyleSheet sheet = hek.getStyleSheet();
    sheet.addRule(".smaller { font-size: 85%; }");
    sheet.addRule(".banner { font-size: 110%; }");
    sheet.addRule("body { font-family: Verdana, Geneva, Tahoma, sans-serif; }");
    sheet.addRule("ul li { margin-bottom: 4px; }");
    sheet.addRule(".changelog { color: #333333; margin-left: 20px; padding-left: 3px; background-color: #eeeeee; }");
    sheet.addRule(".changelog h1 { font-size: 110%; }");

    jep.setDocument(hek.createDefaultDocument());
    jep.setText(inSB.toString());

    jsp.getVerticalScrollBar().setValue(0);
    otherFrame.setPreferredSize(inSize);
    otherFrame.setMaximumSize(inSize);
    otherFrame.setMinimumSize(inSize);
    otherFrame.getContentPane().add(insidePanel);
    insidePanel.add(jsp, BorderLayout.CENTER);
    if(borderTitle != null) {
      insidePanel.setBorder(BorderFactory.createTitledBorder(borderTitle));
    } else {
      insidePanel.setBorder(BorderFactory.createEmptyBorder());
    }
    JPanel bottomPanel = new JPanel();
    bottomPanel.setLayout(new BoxLayout(bottomPanel, BoxLayout.X_AXIS));

    boolean isFirst = true;
    JButton firstButton = null;
    for (String info : choices) {
      if (info.startsWith("CHECK")) {
        JCheckBox tmpCheck = new JCheckBox(info.substring(6));
        tmpCheck.addActionListener(al);
        bottomPanel.add(tmpCheck);
      } else if (info.startsWith("TEXT")) {
        JLabel tmpLabel = new JLabel(info.substring(5));
        bottomPanel.add(tmpLabel);
      } else {
        JButton step_button = new JButton(info);
        step_button.addActionListener(al);
        bottomPanel.add(step_button);
        if (isFirst) {
          isFirst = false;
          firstButton = step_button;
        }
      }
    }
    insidePanel.add(bottomPanel, BorderLayout.SOUTH);
    jep.setCaretPosition(0);
    otherFrame.setLocation(getCenter(inSize));
    otherFrame.pack();
    otherFrame.setVisible(true);

    if(firstButton != null) firstButton.requestFocusInWindow();

    return otherFrame;
  }

  public int promptWithCheckbox(Component parent, String message, String title, String tf_config, int optionType, int defaultOption) {
    return promptWithCheckbox(parent, message, title, tf_config, null, optionType, defaultOption);
  }

  public int promptWithCheckbox(Component parent, String message, String title, String tf_config) {
    return promptWithCheckbox(parent, message, title, tf_config, null, JOptionPane.OK_CANCEL_OPTION, JOptionPane.OK_OPTION);
  }

  /**
   * This function puts up a message, allows buttons to be clicked, and a
   * checkbox to be set (most often for "don't ever show me this again."),
   * and it will set the configuration appropriately.
   *
   * @param parent - The higher level component to become a child of; this is to attempt to handle modal blocking dialog issues.
   * @param message - The message to display.
   * @param title - The window title.
   * @param tf_config - The configuration value that will be set to true if
   *                    the checkbox is selected, or false otherwise.
   * @param val_config - the configuration value that will be set to the
   *                     result of their choice (OK or Cancel, for
   *                     instance).
   * @param optionType - The prompt type of the dialog box, for instance JOptionPane.OK_CANCEL_OPTION.
   * @param defaultOption - The default option to be returned if the button
   *                        to not show this dialog was clicked.  This only
   *                        applies if val_config is null.
   *
   * @return - The button value selected, usually of
   *           JOptionPane.CANCEL_OPTION or OK_OPTION, or the val_config
   *           stored value, or the defaultOption.
   */
  public int promptWithCheckbox(Component parent, String message, String title, String tf_config, String val_config, int optionType, int defaultOption) {
    Integer buttonChoiceObject;
    Object[] myComponents;
    JCheckBox dontShowBox;
    JOptionPane jopPrompt;
    JDialog jdInput;
    Object result;

    //  If we were marked in the past as 'don't show this box'...
    if(JConfig.queryConfiguration(tf_config, "false").equals("true")) {
      if(val_config != null) {
        String cfg_val = JConfig.queryConfiguration(val_config, null);

        if(cfg_val != null) {
          return Integer.parseInt(cfg_val);
        }
      }
      return defaultOption;
    }

    dontShowBox = new JCheckBox("Don't show this dialog again.");

    myComponents = new Object[2];
    myComponents[0] = message;
    myComponents[1] = dontShowBox;

    jopPrompt = new JOptionPane(myComponents, JOptionPane.QUESTION_MESSAGE, optionType);

    jdInput = jopPrompt.createDialog(parent, title);
    jdInput.addWindowListener(new WindowAdapter() {
        public void windowDeactivated(WindowEvent ev) {
          ev.getWindow().toFront();
        }
      });
    jdInput.setVisible(true);

    result = jopPrompt.getValue();

    if(result == null || result.toString().equals("") || result.equals(JOptionPane.UNINITIALIZED_VALUE)) {
      buttonChoiceObject = JOptionPane.CANCEL_OPTION;
    } else {
      buttonChoiceObject = new Integer(result.toString());
    }

    if(tf_config != null) {
      JConfig.setConfiguration(tf_config, dontShowBox.isSelected() ? "true" : "false");
    }
    if(val_config != null) {
      JConfig.setConfiguration(val_config, buttonChoiceObject.toString());
    }

    return buttonChoiceObject;
  }
}
TOP

Related Classes of com.jbidwatcher.ui.util.OptionUI

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.