mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

jvergara
30.10.2009 685400f4facf2e545cf65b4cbce56ef1c7fdae9f
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.
4 files modified
1 files added
326 ■■■■■ changed files
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/event/ClickTooltipDisplayer.java 176 ●●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java 11 ●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/components/LabelWithHelpIcon.java 104 ●●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/renderer/CustomCellRenderer.java 25 ●●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java 10 ●●●●● patch | view | raw | blame | history
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)
    {
      Point preferredLocation = component.getToolTipLocation(event);
      Rectangle sBounds = component.getGraphicsConfiguration().
      getBounds();
    int x = ev.getPoint().x;
    boolean display = x > label.getPreferredSize().width - 10;
      JToolTip tip = component.createToolTip();
      tip.setTipText(toolTipText);
      Dimension size = tip.getPreferredSize();
      Point location = new Point();
      Point screenLocation = component.getLocationOnScreen();
      if(preferredLocation != null)
    if (display)
      {
        location.x = screenLocation.x + preferredLocation.x;
        location.y = screenLocation.y + preferredLocation.y;
      return getHelpTooltip();
      }
      else
      {
        location.x = screenLocation.x + event.getX();
        location.y = screenLocation.y + event.getY() + 20;
      return null;
      }
      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();
    }
    isVisible = 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;
    }
    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());
  }
}