package rocks.inspectit.ui.rcp.editor.tooltip; import org.eclipse.jface.util.Policy; import org.eclipse.jface.viewers.CellLabelProvider; import org.eclipse.jface.viewers.ColumnViewer; import org.eclipse.jface.viewers.ColumnViewerToolTipSupport; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.jface.window.ToolTip; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Event; /** * Small extension of the {@link ColumnAwareToolTipSupport}. This one will check if the label * provider of the cell is {@link IColumnToolTipProvider} and if so if will pull the tip and image * from that interface and not directly from the label provider. * * @author Ivan Senic * */ public class ColumnAwareToolTipSupport extends ColumnViewerToolTipSupport { /** * Viewer cell key. Copied from super class. */ private static final String VIEWER_CELL_KEY = Policy.JFACE + "_VIEWER_CELL_KEY"; /** * Shift X. Copied from super class. */ private static final int DEFAULT_SHIFT_X = 10; /** * Shift Y. Copied from super class. */ private static final int DEFAULT_SHIFT_Y = 0; /** * {@link ColumnViewer}. */ private ColumnViewer viewer; /** * @param viewer * the viewer the support is attached to * @param style * style passed to control tool tip behavior * * @param manualActivation * <code>true</code> if the activation is done manually using {@link #show(Point)} * @See {@link ColumnAwareToolTipSupport#ColumnAwareToolTipSupport(ColumnViewer, int, boolean)} */ public ColumnAwareToolTipSupport(ColumnViewer viewer, int style, boolean manualActivation) { super(viewer, style, manualActivation); this.viewer = viewer; } /** * Enable ToolTip support for the viewer by creating an instance from this class. To get all * necessary informations this support class consults the {@link CellLabelProvider}. * * @param viewer * the viewer the support is attached to */ public static void enableFor(ColumnViewer viewer) { new ColumnAwareToolTipSupport(viewer, ToolTip.NO_RECREATE, false); } /** * Enable ToolTip support for the viewer by creating an instance from this class. To get all * necessary informations this support class consults the {@link CellLabelProvider}. * * @param viewer * the viewer the support is attached to * @param style * style passed to control tool tip behavior * * @see ToolTip#RECREATE * @see ToolTip#NO_RECREATE */ public static void enableFor(ColumnViewer viewer, int style) { new ColumnAwareToolTipSupport(viewer, style, false); } /** * {@inheritDoc} */ @Override protected boolean shouldCreateToolTip(Event event) { Point point = new Point(event.x, event.y); ViewerCell cell = viewer.getCell(point); if (cell == null) { return false; } CellLabelProvider labelProvider = viewer.getLabelProvider(cell.getColumnIndex()); if (labelProvider instanceof IColumnToolTipProvider) { IColumnToolTipProvider columnToolTipProvider = (IColumnToolTipProvider) labelProvider; Object element = cell.getViewerRow().getItem().getData(); String text = columnToolTipProvider.getToolTipText(element, cell.getColumnIndex()); Image image = columnToolTipProvider.getToolTipImage(element, cell.getColumnIndex()); if ((null == text) && (null == image)) { return false; } viewer.getControl().setToolTipText(""); setPopupDelay(labelProvider.getToolTipDisplayDelayTime(element)); setHideDelay(labelProvider.getToolTipTimeDisplayed(element)); Point shift = labelProvider.getToolTipShift(element); if (shift == null) { setShift(new Point(DEFAULT_SHIFT_X, DEFAULT_SHIFT_Y)); } else { setShift(new Point(shift.x, shift.y)); } setData(VIEWER_CELL_KEY, cell); setText(text); setImage(image); setStyle(labelProvider.getToolTipStyle(element)); setForegroundColor(labelProvider.getToolTipForegroundColor(element)); setBackgroundColor(labelProvider.getToolTipBackgroundColor(element)); setFont(labelProvider.getToolTipFont(element)); return true; } else { return super.shouldCreateToolTip(event); } } }