From ba0c82bc1cb8926ca329a4eae78263ee8bbe1094 Mon Sep 17 00:00:00 2001
From: kenneth_suter <kenneth_suter@localhost>
Date: Thu, 12 Jul 2007 15:47:29 +0000
Subject: [PATCH] moved UI specific utilties to UI specific utility class
---
opends/src/quicksetup/org/opends/quicksetup/ui/Utilities.java | 207 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 207 insertions(+), 0 deletions(-)
diff --git a/opends/src/quicksetup/org/opends/quicksetup/ui/Utilities.java b/opends/src/quicksetup/org/opends/quicksetup/ui/Utilities.java
index c3aa9af..954f9a5 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/ui/Utilities.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/ui/Utilities.java
@@ -32,6 +32,7 @@
import javax.swing.*;
import javax.swing.text.JTextComponent;
import java.awt.*;
+import java.util.StringTokenizer;
/**
* A set of utilities specific to GUI QuickSetup applications.
@@ -92,4 +93,210 @@
frame.setIconImage(UIFactory.getImageIcon(ic).getImage());
}
+ /**
+ * Center the component location based on its preferred size. The code
+ * considers the particular case of 2 screens and puts the component on the
+ * center of the left screen
+ *
+ * @param comp the component to be centered.
+ */
+ public static void centerOnScreen(Component comp)
+ {
+ Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+
+ int width = (int) comp.getPreferredSize().getWidth();
+ int height = (int) comp.getPreferredSize().getHeight();
+
+ boolean multipleScreen = screenSize.width / screenSize.height >= 2;
+
+ if (multipleScreen)
+ {
+ comp.setLocation((screenSize.width / 4) - (width / 2),
+ (screenSize.height - height) / 2);
+ } else
+ {
+ comp.setLocation((screenSize.width - width) / 2,
+ (screenSize.height - height) / 2);
+ }
+ }
+
+ /**
+ * Center the component location of the ref component.
+ *
+ * @param comp the component to be centered.
+ * @param ref the component to be used as reference.
+ *
+ */
+ public static void centerOnComponent(Window comp, Component ref)
+ {
+ comp.setLocationRelativeTo(ref);
+ }
+
+ /**
+ * Displays a confirmation message dialog.
+ *
+ * @param parent
+ * the parent frame of the confirmation dialog.
+ * @param msg
+ * the confirmation message.
+ * @param title
+ * the title of the dialog.
+ * @return <CODE>true</CODE> if the user confirms the message, or
+ * <CODE>false</CODE> if not.
+ */
+ public static boolean displayConfirmation(JFrame parent, String msg,
+ String title)
+ {
+ return JOptionPane.YES_OPTION == JOptionPane.showOptionDialog(
+ parent, wrapMsg(msg, 100), title, JOptionPane.YES_NO_OPTION,
+ JOptionPane.QUESTION_MESSAGE, null, // don't use a custom
+ // Icon
+ null, // the titles of buttons
+ null); // default button title
+ }
+
+ /**
+ * Displays an error message dialog.
+ *
+ * @param parent
+ * the parent component of the error dialog.
+ * @param msg
+ * the error message.
+ * @param title
+ * the title for the dialog.
+ */
+ public static void displayError(Component parent, String msg, String title)
+ {
+ JOptionPane.showMessageDialog(parent, wrapMsg(msg, 100), title,
+ JOptionPane.ERROR_MESSAGE);
+ }
+
+ /**
+ * Displays an information message dialog.
+ *
+ * @param parent
+ * the parent frame of the information dialog.
+ * @param msg
+ * the error message.
+ * @param title
+ * the title for the dialog.
+ */
+ public static void displayInformationMessage(JFrame parent, String msg,
+ String title)
+ {
+ JOptionPane.showMessageDialog(parent, wrapMsg(msg, 100), title,
+ JOptionPane.INFORMATION_MESSAGE);
+ }
+
+ /**
+ * Private method used to wrap the messages that are displayed in dialogs
+ * of type JOptionPane.
+ * @param msg the message.
+ * @param width the maximum width of the column.
+ * @return the wrapped message.
+ */
+ public static String wrapMsg(String msg, int width)
+ {
+ StringBuilder buffer = new StringBuilder();
+ StringTokenizer lineTokenizer = new StringTokenizer(msg, "\n", true);
+ while (lineTokenizer.hasMoreTokens())
+ {
+ String line = lineTokenizer.nextToken();
+ if (line.equals("\n"))
+ {
+ // It's an end-of-line character, so append it as-is.
+ buffer.append(line);
+ }
+ else if (line.length() < width)
+ {
+ // The line fits in the specified width, so append it as-is.
+ buffer.append(line);
+ }
+ else
+ {
+ // The line doesn't fit in the specified width, so it needs to be
+ // wrapped. Do so at space boundaries.
+ StringBuilder lineBuffer = new StringBuilder();
+ StringBuilder delimBuffer = new StringBuilder();
+ StringTokenizer wordTokenizer = new StringTokenizer(line, " ", true);
+ while (wordTokenizer.hasMoreTokens())
+ {
+ String word = wordTokenizer.nextToken();
+ if (word.equals(" "))
+ {
+ // It's a space, so add it to the delim buffer only if the line
+ // buffer is not empty.
+ if (lineBuffer.length() > 0)
+ {
+ delimBuffer.append(word);
+ }
+ }
+ else if (word.length() > width)
+ {
+ // This is a long word that can't be wrapped, so we'll just have to
+ // make do.
+ if (lineBuffer.length() > 0)
+ {
+ buffer.append(lineBuffer);
+ buffer.append("\n");
+ lineBuffer = new StringBuilder();
+ }
+ buffer.append(word);
+
+ if (wordTokenizer.hasMoreTokens())
+ {
+ // The next token must be a space, so remove it. If there are
+ // still more tokens after that, then append an EOL.
+ wordTokenizer.nextToken();
+ if (wordTokenizer.hasMoreTokens())
+ {
+ buffer.append("\n");
+ }
+ }
+
+ if (delimBuffer.length() > 0)
+ {
+ delimBuffer = new StringBuilder();
+ }
+ }
+ else
+ {
+ // It's not a space, so see if we can fit it on the current line.
+ int newLineLength = lineBuffer.length() + delimBuffer.length() +
+ word.length();
+ if (newLineLength < width)
+ {
+ // It does fit on the line, so add it.
+ lineBuffer.append(delimBuffer).append(word);
+
+ if (delimBuffer.length() > 0)
+ {
+ delimBuffer = new StringBuilder();
+ }
+ }
+ else
+ {
+ // It doesn't fit on the line, so end the current line and start
+ // a new one.
+ buffer.append(lineBuffer);
+ buffer.append("\n");
+
+ lineBuffer = new StringBuilder();
+ lineBuffer.append(word);
+
+ if (delimBuffer.length() > 0)
+ {
+ delimBuffer = new StringBuilder();
+ }
+ }
+ }
+ }
+
+ // If there's anything left in the line buffer, then add it to the
+ // final buffer.
+ buffer.append(lineBuffer);
+ }
+ }
+ return buffer.toString();
+ }
}
--
Gitblit v1.10.0