package prefuse.controls; import java.awt.event.MouseEvent; import prefuse.Display; import prefuse.visual.VisualItem; /** * Control that enables a tooltip display for items based on mouse hover. * * @author <a href="http://jheer.org">jeffrey heer</a> */ public class ToolTipControl extends ControlAdapter { private String[] label; private StringBuffer sbuf; /** * Create a new ToolTipControl. * @param field the field name to use for the tooltip text */ public ToolTipControl(String field) { this(new String[] {field}); } /** * Create a new ToolTipControl. * @param fields the field names to use for the tooltip text. The * values of each field will be concatenated to form the tooltip. */ public ToolTipControl(String[] fields) { label = fields; if ( fields.length > 1 ) sbuf = new StringBuffer(); } /** * @see prefuse.controls.Control#itemEntered(prefuse.visual.VisualItem, java.awt.event.MouseEvent) */ public void itemEntered(VisualItem item, MouseEvent e) { Display d = (Display)e.getSource(); if ( label.length == 1 ) { // optimize the simple case if ( item.canGetString(label[0]) ) d.setToolTipText(item.getString(label[0])); } else { sbuf.delete(0, sbuf.length()); for ( int i=0; i<label.length; ++i ) { if ( item.canGetString(label[i]) ) { if ( sbuf.length() > 0 ) sbuf.append("; "); sbuf.append(item.getString(label[i])); } } d.setToolTipText(sbuf.toString()); } } /** * @see prefuse.controls.Control#itemExited(prefuse.visual.VisualItem, java.awt.event.MouseEvent) */ public void itemExited(VisualItem item, MouseEvent e) { Display d = (Display)e.getSource(); d.setToolTipText(null); } } // end of class ToolTipControl