/** * Copyright (c) 2012 Eclipse contributors 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 */ package org.eclipse.emf.edit.ui.provider; import org.eclipse.emf.common.ui.viewer.IStyledLabelDecorator; import org.eclipse.emf.common.ui.viewer.IUndecoratingLabelProvider; import org.eclipse.jface.viewers.CellLabelProvider; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider; import org.eclipse.jface.viewers.IColorProvider; import org.eclipse.jface.viewers.IFontProvider; import org.eclipse.jface.viewers.ILabelDecorator; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.StyledString; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; /** * A column label provider that delegates to a label provider and a label decorator. * * @since 2.9 */ public class DecoratingColumLabelProvider extends ColumnLabelProvider implements IUndecoratingLabelProvider { /** * An extended version of the decorating column label provider that also provides for styled string. * * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a> * @since 2.10 */ public static class StyledLabelProvider extends DecoratingColumLabelProvider implements IStyledLabelProvider { public StyledLabelProvider(ILabelProvider labelProvider, ILabelDecorator labelDecorator) { super(labelProvider, labelDecorator); } public StyledString getStyledText(Object element) { if (labelDecorator instanceof IStyledLabelDecorator) { StyledString styledString; if (labelProvider instanceof IStyledLabelProvider) { styledString = ((IStyledLabelProvider) labelProvider).getStyledText(element); } else { styledString = new StyledString(getText(element)); } return ((IStyledLabelDecorator)labelDecorator).decorateStyledText(styledString, element); } else { return new StyledString(labelDecorator.decorateText(labelProvider.getText(element), element)); } } } protected ILabelProvider labelProvider; protected IFontProvider fontProvider; protected IColorProvider colorProvider; protected ILabelDecorator labelDecorator; protected CellLabelProvider cellLabelProvider; public DecoratingColumLabelProvider(ILabelProvider labelProvider, ILabelDecorator labelDecorator) { this.labelProvider = labelProvider; if (labelProvider instanceof IFontProvider) { this.fontProvider = (IFontProvider)labelProvider; } if (labelProvider instanceof IColorProvider) { this.colorProvider = (IColorProvider)labelProvider; } this.labelDecorator = labelDecorator; if (labelDecorator instanceof CellLabelProvider) { this.cellLabelProvider = (CellLabelProvider)labelDecorator; } } @Override public Font getFont(Object element) { return fontProvider == null ? null : fontProvider.getFont(element); } @Override public Color getBackground(Object element) { return colorProvider == null ? null : colorProvider.getBackground(element); } @Override public Color getForeground(Object element) { return colorProvider == null ? null : colorProvider.getForeground(element); } @Override public Image getImage(Object element) { return labelDecorator.decorateImage(labelProvider.getImage(element), element); } @Override public String getText(Object element) { return labelDecorator.decorateText(labelProvider.getText(element), element); } public Image getUndecoratedImage(Object element) { return labelProvider.getImage(element); } public String getUndecoratedText(Object element) { return labelProvider.getText(element); } @Override public Image getToolTipImage(Object object) { return cellLabelProvider == null ? null : cellLabelProvider.getToolTipImage(object); } @Override public String getToolTipText(Object element) { return cellLabelProvider == null ? null : cellLabelProvider.getToolTipText(element); } @Override public Color getToolTipBackgroundColor(Object object) { return cellLabelProvider == null ? null : cellLabelProvider.getToolTipBackgroundColor(object); } @Override public Color getToolTipForegroundColor(Object object) { return cellLabelProvider == null ? null : cellLabelProvider.getToolTipForegroundColor(object); } @Override public Font getToolTipFont(Object object) { return cellLabelProvider == null ? null : cellLabelProvider.getToolTipFont(object); } @Override public Point getToolTipShift(Object object) { return cellLabelProvider == null ? null : cellLabelProvider.getToolTipShift(object); } @Override public boolean useNativeToolTip(Object object) { return cellLabelProvider != null && cellLabelProvider.useNativeToolTip(object); } @Override public int getToolTipTimeDisplayed(Object object) { return cellLabelProvider == null ? 0 : cellLabelProvider.getToolTipTimeDisplayed(object); } @Override public int getToolTipDisplayDelayTime(Object object) { return cellLabelProvider == null ? 0 : cellLabelProvider.getToolTipDisplayDelayTime(object); } @Override public int getToolTipStyle(Object object) { return cellLabelProvider == null ? 0 : cellLabelProvider.getToolTipStyle(object); } @Override public void dispose() { super.dispose(); labelProvider.dispose(); labelDecorator.dispose(); } @Override public boolean isLabelProperty(Object element, String property) { return labelProvider.isLabelProperty(element, property); } }