opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/event/ClickTooltipDisplayer.java
New file @@ -0,0 +1,176 @@ /* * 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 2009 Sun Microsystems, Inc. */ package org.opends.guitools.controlpanel.event; import java.awt.Component; import java.awt.Dimension; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JComponent; import javax.swing.JTable; import javax.swing.JToolTip; import javax.swing.Popup; import javax.swing.PopupFactory; import javax.swing.table.TableCellRenderer; /** * This class listens to events and displays a tooltip when the user clicks on * the object that registered this listener. * */ public class ClickTooltipDisplayer extends MouseAdapter { private boolean isTooltipVisible = false; private Popup tipWindow; /** * {@inheritDoc} */ public void mouseExited(MouseEvent event) { hideToolTip(event); } /** * {@inheritDoc} */ public void mousePressed(MouseEvent event) { if (isTooltipVisible) { hideToolTip(event); } else { displayToolTip(event); } } /** * Displays a tooltip depending on the MouseEvent received. * @param event the mouse event. */ private void displayToolTip(MouseEvent event) { JComponent component = (JComponent)event.getSource(); String toolTipText; if (component instanceof JTable) { JTable table = (JTable)component; int row = table.rowAtPoint(event.getPoint()); int column = table.columnAtPoint(event.getPoint()); if (row != -1 && column != -1) { TableCellRenderer renderer = table.getCellRenderer(row, column); Component comp = renderer.getTableCellRendererComponent(table, table.getValueAt(row, column), true, true, row, column); if (comp instanceof JComponent) { // The coordinates must be translated. Rectangle rect = table.getCellRect(row, column, true); int x = event.getPoint().x - rect.x; int y = event.getPoint().y - rect.y; MouseEvent tEv = new MouseEvent(table, event.getID(), event.getWhen(), event.getModifiers(), x, y, event.getClickCount(), event.isPopupTrigger(), event.getButton()); toolTipText = ((JComponent)comp).getToolTipText(tEv); } else { toolTipText = null; } } else { toolTipText = null; } } else { toolTipText = component.getToolTipText(); } if (toolTipText != null) { Point preferredLocation = component.getToolTipLocation(event); Rectangle sBounds = component.getGraphicsConfiguration(). getBounds(); JToolTip tip = component.createToolTip(); tip.setTipText(toolTipText); Dimension size = tip.getPreferredSize(); Point location = new Point(); Point screenLocation = component.getLocationOnScreen(); if(preferredLocation != null) { location.x = screenLocation.x + preferredLocation.x; location.y = screenLocation.y + preferredLocation.y; } else { location.x = screenLocation.x + event.getX(); location.y = screenLocation.y + event.getY() + 20; } if (location.x < sBounds.x) { location.x = sBounds.x; } else if (location.x - sBounds.x + size.width > sBounds.width) { location.x = sBounds.x + Math.max(0, sBounds.width - size.width); } if (location.y < sBounds.y) { location.y = sBounds.y; } else if (location.y - sBounds.y + size.height > sBounds.height) { location.y = sBounds.y + Math.max(0, sBounds.height - size.height); } PopupFactory popupFactory = PopupFactory.getSharedInstance(); tipWindow = popupFactory.getPopup(component, tip, location.x, location.y); tipWindow.show(); isTooltipVisible = true; } } /** * Hides the tooltip if we are displaying it. * @param event the mouse event. */ private void hideToolTip(MouseEvent event) { if (tipWindow != null) { tipWindow.hide(); tipWindow = null; isTooltipVisible = false; } } } opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java
@@ -760,6 +760,7 @@ connectionHandlersTable = Utilities.createSortableTable(connectionHandlerTableModel, new CustomCellRenderer()); connectionHandlersTable.setCellSelectionEnabled(false); gbc.insets.top = 5; p.add(connectionHandlersTable.getTableHeader(), gbc); @@ -797,14 +798,19 @@ dbTableModelWithReplication = new BaseDNTableModel(true); dbTableModelWithoutReplication = new BaseDNTableModel(false); BaseDNCellRenderer renderer = new BaseDNCellRenderer(); noReplicatedBaseDNsTable = Utilities.createSortableTable(dbTableModelWithoutReplication, new BaseDNCellRenderer()); renderer); noReplicatedBaseDNsTable.setVisible(false); noReplicatedBaseDNsTable.getTableHeader().setVisible(false); replicationBaseDNsTable = Utilities.createSortableTable(dbTableModelWithReplication, new BaseDNCellRenderer()); renderer); noReplicatedBaseDNsTable.setCellSelectionEnabled(false); replicationBaseDNsTable.setCellSelectionEnabled(false); Utilities.addClickTooltipListener(noReplicatedBaseDNsTable); Utilities.addClickTooltipListener(replicationBaseDNsTable); gbc.insets.top = 5; p.add(noReplicatedBaseDNsTable.getTableHeader(), gbc); @@ -882,4 +888,3 @@ return status.toString(); } } opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/components/LabelWithHelpIcon.java
@@ -22,30 +22,21 @@ * CDDL HEADER END * * * Copyright 2008 Sun Microsystems, Inc. * Copyright 2008-2009 Sun Microsystems, Inc. */ package org.opends.guitools.controlpanel.ui.components; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.Box; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JToolTip; import javax.swing.Popup; import javax.swing.PopupFactory; import javax.swing.ToolTipManager; import org.opends.guitools.controlpanel.ui.ColorAndFontConstants; import org.opends.guitools.controlpanel.util.Utilities; @@ -69,11 +60,7 @@ protected JLabel iconLabel = new JLabel(icon); private static final ImageIcon icon = Utilities.createImageIcon("org/opends/quicksetup/images/help_small.gif"); private static final ToolTipManager ttipManager = ToolTipManager.sharedInstance(); private Popup tipWindow; private boolean isVisible; /** * The left inset of the help icon. @@ -109,33 +96,7 @@ gbc.fill = GridBagConstraints.HORIZONTAL; add(Box.createHorizontalGlue(), gbc); ttipManager.unregisterComponent(iconLabel); iconLabel.addMouseListener(new MouseAdapter() { /** * {@inheritDoc} */ public void mouseExited(MouseEvent event) { hideToolTip(event); } /** * {@inheritDoc} */ public void mousePressed(MouseEvent event) { if (isVisible) { hideToolTip(event); } else { displayToolTip(event); } } }); Utilities.addClickTooltipListener(iconLabel); } /** @@ -221,67 +182,20 @@ } /** * Displays a tooltip depending on the MouseEvent received. * @param event the mouse event. * {@inheritDoc} */ private void displayToolTip(MouseEvent event) public String getToolTipText(MouseEvent ev) { JComponent component = (JComponent)event.getSource(); String toolTipText = component.getToolTipText(); if (toolTipText != null) int x = ev.getPoint().x; boolean display = x > label.getPreferredSize().width - 10; if (display) { Point preferredLocation = component.getToolTipLocation(event); Rectangle sBounds = component.getGraphicsConfiguration(). getBounds(); JToolTip tip = component.createToolTip(); tip.setTipText(toolTipText); Dimension size = tip.getPreferredSize(); Point location = new Point(); Point screenLocation = component.getLocationOnScreen(); if(preferredLocation != null) { location.x = screenLocation.x + preferredLocation.x; location.y = screenLocation.y + preferredLocation.y; } else { location.x = screenLocation.x + event.getX(); location.y = screenLocation.y + event.getY() + 20; } if (location.x < sBounds.x) { location.x = sBounds.x; } else if (location.x - sBounds.x + size.width > sBounds.width) { location.x = sBounds.x + Math.max(0, sBounds.width - size.width); } if (location.y < sBounds.y) { location.y = sBounds.y; } else if (location.y - sBounds.y + size.height > sBounds.height) { location.y = sBounds.y + Math.max(0, sBounds.height - size.height); } PopupFactory popupFactory = PopupFactory.getSharedInstance(); tipWindow = popupFactory.getPopup(component, tip, location.x, location.y); tipWindow.show(); return getHelpTooltip(); } isVisible = true; } /** * Hides the tooltip if we are displaying it. * @param event the mouse event. */ private void hideToolTip(MouseEvent event) { if (tipWindow != null) else { tipWindow.hide(); tipWindow = null; return null; } isVisible = false; } } opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/renderer/CustomCellRenderer.java
@@ -22,14 +22,12 @@ * CDDL HEADER END * * * Copyright 2008 Sun Microsystems, Inc. * Copyright 2008-2009 Sun Microsystems, Inc. */ package org.opends.guitools.controlpanel.ui.renderer; import java.awt.Component; import java.awt.Rectangle; import java.awt.event.MouseEvent; import javax.swing.BorderFactory; import javax.swing.JComponent; @@ -114,27 +112,6 @@ } /** * {@inheritDoc} */ public String getToolTipText(MouseEvent ev) { Rectangle r = new Rectangle(); r.x = label.getPreferredSize().width + INSET_WITH_ICON; r.y = 0; r.width = iconLabel.getPreferredSize().width; r.height = iconLabel.getPreferredSize().height; if (r.contains(ev.getPoint())) { return getHelpTooltip(); } else { return null; } } /** * Returns the border to be used for a given cell in a table. * @param table the table. * @param value the value to be rendered. opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java
@@ -96,6 +96,7 @@ import org.opends.guitools.controlpanel.datamodel.MonitoringAttributes; import org.opends.guitools.controlpanel.datamodel.SortableTableModel; import org.opends.guitools.controlpanel.datamodel.VLVIndexDescriptor; import org.opends.guitools.controlpanel.event.ClickTooltipDisplayer; import org.opends.guitools.controlpanel.event.TextComponentFocusListener; import org.opends.guitools.controlpanel.ui.ColorAndFontConstants; import org.opends.guitools.controlpanel.ui.components.LabelWithHelpIcon; @@ -2452,4 +2453,13 @@ } return returnValue; } /** * Adds a click tool tip listener to the provided component. * @param comp the component. */ public static void addClickTooltipListener(JComponent comp) { comp.addMouseListener(new ClickTooltipDisplayer()); } }