blob: 64cff25bf1b1ae2fc0fb49487c45861c0b4b2b8b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Tom Shindl <tom.schindl@bestsolution.at> - initial API and implementation
* - bug fixes for 182443
*******************************************************************************/
package org.eclipse.jface.viewers;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
/**
* The CellLabelProvider is an abstract implementation of a label provider for
* structured viewers.
*
* <p><b>This class is intended to be subclassed</b></p>
*
* @since 3.3
* @see ColumnLabelProvider as a concrete implementation
*/
public abstract class CellLabelProvider extends BaseLabelProvider {
/**
* Create a new instance of the receiver.
*/
public CellLabelProvider() {
super();
}
/**
* Create a ViewerLabelProvider for the column at index
*
* @param labelProvider
* The labelProvider to convert
* @return ViewerLabelProvider
*/
/* package */static CellLabelProvider createViewerLabelProvider(
ColumnViewer viewer, IBaseLabelProvider labelProvider) {
boolean noColumnTreeViewer = viewer instanceof AbstractTreeViewer && viewer
.doGetColumnCount() == 0;
if (!noColumnTreeViewer
&& (labelProvider instanceof ITableLabelProvider
|| labelProvider instanceof ITableColorProvider || labelProvider instanceof ITableFontProvider))
return new TableColumnViewerLabelProvider(labelProvider);
if (labelProvider instanceof CellLabelProvider)
return (CellLabelProvider) labelProvider;
return new WrappedViewerLabelProvider(labelProvider);
}
/**
* Get the image displayed in the tool tip for object.
*
* <p>
* <b>If {@link #getToolTipText(Object)} and
* {@link #getToolTipImage(Object)} both return <code>null</code> the
* control is set back to standard behavior</b>
* </p>
*
* @param object
* the element for which the tool tip is shown
* @return {@link Image} or <code>null</code> if there is not image.
*/
public Image getToolTipImage(Object object) {
return null;
}
/**
* Get the text displayed in the tool tip for object.
*
* <p>
* <b>If {@link #getToolTipText(Object)} and
* {@link #getToolTipImage(Object)} both return <code>null</code> the
* control is set back to standard behavior</b>
* </p>
*
* @param element
* the element for which the tool tip is shown
* @return the {@link String} or <code>null</code> if there is not text to
* display
*/
public String getToolTipText(Object element) {
return null;
}
/**
* Return the background color used for the tool tip
*
* @param object
* the {@link Object} for which the tool tip is shown
*
* @return the {@link Color} used or <code>null</code> if you want to use
* the default color {@link SWT#COLOR_INFO_BACKGROUND}
* @see SWT#COLOR_INFO_BACKGROUND
*/
public Color getToolTipBackgroundColor(Object object) {
return null;
}
/**
* The foreground color used to display the the text in the tool tip
*
* @param object
* the {@link Object} for which the tool tip is shown
* @return the {@link Color} used or <code>null</code> if you want to use
* the default color {@link SWT#COLOR_INFO_FOREGROUND}
* @see SWT#COLOR_INFO_FOREGROUND
*/
public Color getToolTipForegroundColor(Object object) {
return null;
}
/**
* Get the {@link Font} used to display the tool tip
*
* @param object
* the element for which the tool tip is shown
* @return {@link Font} or <code>null</code> if the default font is to be
* used.
*/
public Font getToolTipFont(Object object) {
return null;
}
/**
* Return the amount of pixels in x and y direction you want the tool tip to
* pop up from the mouse pointer. The default shift is 10px right and 0px
* below your mouse cursor. Be aware of the fact that you should at least
* position the tool tip 1px right to your mouse cursor else click events
* may not get propagated properly.
*
* @param object
* the element for which the tool tip is shown
* @return {@link Point} to shift of the tool tip or <code>null</code> if the
* default shift should be used.
*/
public Point getToolTipShift(Object object) {
return null;
}
/**
* Return whether or not to use the native tool tip. If you switch to native
* tool tips only the value from {@link #getToolTipText(Object)} is used all
* other features from custom tool tips are not supported.
*
* <p>
* To reset the control to native behavior you should return
* <code>true</code> from this method and <code>null</code> from
* {@link #getToolTipText(Object)} or <code>null</code> from
* {@link #getToolTipText(Object)} and {@link #getToolTipImage(Object)} at
* the same time
* </p>
*
* @param object
* the {@link Object} for which the tool tip is shown
* @return <code>true</code> if native tool tips should be used
*/
public boolean useNativeToolTip(Object object) {
return false;
}
/**
* The time in milliseconds the tool tip is shown for.
*
* @param object
* the {@link Object} for which the tool tip is shown
* @return time in milliseconds the tool tip is shown for
*/
public int getToolTipTimeDisplayed(Object object) {
return 0;
}
/**
* The time in milliseconds until the tool tip is displayed.
*
* @param object
* the {@link Object} for which the tool tip is shown
* @return time in milliseconds until the tool tip is displayed
*/
public int getToolTipDisplayDelayTime(Object object) {
return 0;
}
/**
* The {@link SWT} style used to create the {@link CLabel} (see there for
* supported styles). By default {@link SWT#SHADOW_NONE} is used.
*
* @param object
* the element for which the tool tip is shown
* @return the style used to create the label
* @see CLabel
*/
public int getToolTipStyle(Object object) {
return SWT.SHADOW_NONE;
}
/**
* Update the label for cell.
*
* @param cell
* {@link ViewerCell}
*/
public abstract void update(ViewerCell cell);
/**
* Initialize this label provider for use with the given column viewer for
* the given column. Subclasses may extend but should call the super
* implementation (which at this time is empty but may be changed in the
* future).
*
* @param viewer
* the viewer
* @param column
* the column, or <code>null</code> if a column is not
* available.
*
* @since 3.4
*/
protected void initialize(ColumnViewer viewer, ViewerColumn column) {
}
/**
* Dispose of this label provider which was used with the given column
* viewer and column. Subclasses may extend but should call the super
* implementation (which calls {@link #dispose()}).
*
* @param viewer
* the viewer
* @param column
* the column, or <code>null</code> if a column is not
* available.
*
* @since 3.4
*/
public void dispose(ColumnViewer viewer, ViewerColumn column) {
dispose();
}
}