From 685400f4facf2e545cf65b4cbce56ef1c7fdae9f Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Thu, 30 Jul 2009 15:10:51 +0000
Subject: [PATCH] Fix for issue 4159 ('?' sign in Base DNs table should display the tooltip when clicking on it) Create a new listener that will be in charge of displaying the tool tip when the user clicks on the component that registered it as listener.
---
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/event/ClickTooltipDisplayer.java | 176 +++++++++++++++++++++++++++++
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/renderer/CustomCellRenderer.java | 25 ----
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java | 11 +
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/components/LabelWithHelpIcon.java | 108 +----------------
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java | 10 +
5 files changed, 206 insertions(+), 124 deletions(-)
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/event/ClickTooltipDisplayer.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/event/ClickTooltipDisplayer.java
new file mode 100644
index 0000000..3f0d183
--- /dev/null
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/event/ClickTooltipDisplayer.java
@@ -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;
+ }
+ }
+}
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java
index 09e1ea8..d91560b 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java
+++ b/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();
}
}
-
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/components/LabelWithHelpIcon.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/components/LabelWithHelpIcon.java
index 2e5b3c5..fb885be 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/components/LabelWithHelpIcon.java
+++ b/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;
}
}
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/renderer/CustomCellRenderer.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/renderer/CustomCellRenderer.java
index 4dace8d..661f8da 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/renderer/CustomCellRenderer.java
+++ b/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.
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java
index 745e713..6ab40ec 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java
+++ b/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());
+ }
}
--
Gitblit v1.10.0