/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at * trunk/opends/resource/legal-notices/OpenDS.LICENSE * or https://OpenDS.dev.java.net/OpenDS.LICENSE. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, * add the following below this CDDL HEADER, with the fields enclosed * by brackets "[]" replaced with your own identifying information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Copyright 2008-2010 Sun Microsystems, Inc. */ package org.opends.guitools.controlpanel.ui.components; import java.awt.Color; import java.awt.Component; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.MouseEvent; import javax.swing.Box; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; import org.opends.guitools.controlpanel.ui.ColorAndFontConstants; import org.opends.guitools.controlpanel.util.Utilities; import org.opends.messages.Message; /** * A panel containing a label an a help icon. A customized tool tip is used, * the tool tip is also displayed when the user clicks on the help icon. * */ public class LabelWithHelpIcon extends JPanel { private static final long serialVersionUID = 4502977901538910797L; /** * The label with the text. */ protected JLabel label = Utilities.createDefaultLabel(); /** * The label with the icon. */ protected JLabel iconLabel = new JLabel(icon); private static final ImageIcon icon = Utilities.createImageIcon("org/opends/quicksetup/images/help_small.gif"); /** * The left inset of the help icon. */ protected final int INSET_WITH_ICON= 3; /** * The constructor of this panel. * @param text the text of the panel. * @param tooltipIcon the tool tip of the help icon. */ public LabelWithHelpIcon(Message text, Message tooltipIcon) { super(new GridBagLayout()); setOpaque(false); label.setText(text.toString()); label.setForeground(ColorAndFontConstants.foreground); if (tooltipIcon != null) { iconLabel.setToolTipText(tooltipIcon.toString()); } GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.gridwidth = 1; gbc.anchor = GridBagConstraints.WEST; add(label, gbc); gbc.gridx ++; gbc.insets.left = INSET_WITH_ICON; add(iconLabel, gbc); gbc.insets.left = 0; gbc.weightx = 1.0; gbc.fill = GridBagConstraints.HORIZONTAL; add(Box.createHorizontalGlue(), gbc); Utilities.addClickTooltipListener(iconLabel); updateAccessibleContext(); } /** * Set the component this is labeling. Can be {@code null} if this does not * label a {@code Component}. * @param comp the {@code Component} to be labeled. */ public void setLabelFor(Component comp) { label.setLabelFor(comp); } /** * Sets the text on the label. * @param text the text to be displayed. */ public void setText(String text) { label.setText(text); updateAccessibleContext(); } /** * Returns the text displayed on the panel. * @return the text displayed on the panel. */ public String getText() { return label.getText(); } /** * Sets the font to be used in this panel. * @param font the font. */ public void setFont(Font font) { // This is call by the constructor of JPanel. if (label != null) { label.setFont(font); } } /** * Sets the tool tip to be used in the help icon. * @param tooltip the tool tip text. */ public void setHelpTooltip(String tooltip) { iconLabel.setToolTipText(tooltip); updateAccessibleContext(); } /** * Returns the tool tip to be used in the help icon. * @return the tool tip to be used in the help icon. */ public String getHelpTooltip() { return iconLabel.getToolTipText(); } /** * Sets whether the help icon is visible or not. * @param visible whether the help icon is visible or not. */ public void setHelpIconVisible(boolean visible) { if (visible) { if (iconLabel.getIcon() != icon) { iconLabel.setIcon(icon); } } else if (iconLabel.getIcon() != null) { iconLabel.setIcon(null); } } /** * Sets the foreground color for the text in this panel. * @param color the foreground color for the text in this panel. */ public void setForeground(Color color) { super.setForeground(color); if (label != null) { // This is called in the constructor of the object. label.setForeground(color); } } /** * {@inheritDoc} */ public String getToolTipText(MouseEvent ev) { int x = ev.getPoint().x; boolean display = x > label.getPreferredSize().width - 10; if (display) { return getHelpTooltip(); } else { return null; } } private void updateAccessibleContext() { StringBuilder sb = new StringBuilder(); String s = label.getText(); if (s != null) { sb.append(s); } if (iconLabel.getIcon() != null) { String toolTip = iconLabel.getToolTipText(); toolTip = Utilities.stripHtmlToSingleLine(toolTip); if (toolTip != null) { sb.append(" - "+toolTip); } } getAccessibleContext().setAccessibleName(sb.toString()); } }