Package org.bndtools.core.ui

Source Code of org.bndtools.core.ui.ConfigElementLabelProvider

package org.bndtools.core.ui;

import java.util.HashMap;
import java.util.Map;

import org.bndtools.utils.eclipse.ConfigurationElementCategory;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.graphics.Device;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.plugin.AbstractUIPlugin;

import bndtools.Plugin;

public class ConfigElementLabelProvider extends StyledCellLabelProvider {

    private final Device device;
    private final Image defaultImg;

    private final Map<ImageDescriptor,Image> imgCache = new HashMap<ImageDescriptor,Image>();

    public ConfigElementLabelProvider(Device device, String defaultIconPath) {
        this.device = device;
        if (defaultIconPath != null)
            defaultImg = AbstractUIPlugin.imageDescriptorFromPlugin(Plugin.PLUGIN_ID, defaultIconPath).createImage(device);
        else
            defaultImg = null;
    }

    @Override
    public void update(ViewerCell cell) {
        Image icon = defaultImg;
        ImageDescriptor iconDescriptor = null;

        Object data = cell.getElement();
        if (data instanceof ConfigurationElementCategory) {
            ConfigurationElementCategory category = (ConfigurationElementCategory) data;
            cell.setText(category.toString());
            iconDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(Plugin.PLUGIN_ID, "icons/fldr_obj.gif");
        } else if (data instanceof IConfigurationElement) {
            IConfigurationElement element = (IConfigurationElement) data;
            cell.setText(element.getAttribute("name"));

            String iconPath = element.getAttribute("icon");
            if (iconPath != null)
                iconDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(element.getContributor().getName(), iconPath);
        } else {
            cell.setText("<<ERROR>>");
            iconDescriptor = null;
        }

        if (iconDescriptor != null) {
            icon = imgCache.get(iconDescriptor);
            if (icon == null) {
                icon = iconDescriptor.createImage(device);
                imgCache.put(iconDescriptor, icon);
            }
        }

        if (icon != null)
            cell.setImage(icon);
    }

    @Override
    public void dispose() {
        super.dispose();
        safeDispose(defaultImg);
        for (Image cached : imgCache.values()) {
            safeDispose(cached);
        }
    }

    private void safeDispose(Image img) {
        if (img != null && !img.isDisposed())
            img.dispose();
    }
}
TOP

Related Classes of org.bndtools.core.ui.ConfigElementLabelProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.