package bndtools.editor.workspace; import java.util.LinkedList; import java.util.List; import org.bndtools.utils.jface.StrikeoutStyler; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.StyledCellLabelProvider; import org.eclipse.jface.viewers.StyledString; import org.eclipse.jface.viewers.StyledString.Styler; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.plugin.AbstractUIPlugin; public class PluginDeclarationLabelProvider extends StyledCellLabelProvider { private List<Image> images = new LinkedList<Image>(); @Override public void update(ViewerCell cell) { IConfigurationElement element = (IConfigurationElement) cell.getElement(); boolean deprecated = element.getAttribute("deprecated") != null; Styler mainStyler = deprecated ? new StrikeoutStyler(null) : null; StyledString label = new StyledString(element.getAttribute("name"), mainStyler); Styler classStyle = deprecated ? new StrikeoutStyler(StyledString.QUALIFIER_STYLER) : StyledString.QUALIFIER_STYLER; label.append(" [" + element.getAttribute("class") + "]", classStyle); cell.setText(label.toString()); cell.setStyleRanges(label.getStyleRanges()); String iconPath = element.getAttribute("icon"); if (iconPath != null) { ImageDescriptor descriptor = AbstractUIPlugin.imageDescriptorFromPlugin(element.getContributor().getName(), iconPath); if (descriptor != null) { Image image = descriptor.createImage(); images.add(image); cell.setImage(image); } } } @Override public void dispose() { super.dispose(); for (Image image : images) { image.dispose(); } } }