net.sf.eclipsensis.wizard.settings.NSISInstallElementLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for net.sf.eclipsensis.wizard.settings.NSISInstallElementLabelProvider.java

Source

/*******************************************************************************
 * Copyright (c) 2004-2010 Sunil Kamath (IcemanK).
 * All rights reserved.
 * This program is made available under the terms of the Common Public License
 * v1.0 which is available at http://www.eclipse.org/legal/cpl-v10.html
 *
 * Contributors:
 *     Sunil Kamath (IcemanK) - initial API and implementation
 *******************************************************************************/
package net.sf.eclipsensis.wizard.settings;

import net.sf.eclipsensis.EclipseNSISPlugin;
import net.sf.eclipsensis.util.Common;

import org.eclipse.jface.resource.CompositeImageDescriptor;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.graphics.*;

public class NSISInstallElementLabelProvider extends CellLabelProvider {
    private static Image cErrorImage = EclipseNSISPlugin.getImageManager()
            .getImage(EclipseNSISPlugin.getResourceString("error.decoration.icon")); //$NON-NLS-1$
    private static ImageData cErrorImageData = cErrorImage.getImageData();

    public NSISInstallElementLabelProvider() {
        super();
    }

    public NSISInstallElementLabelProvider(boolean withErrors) {
        this();
    }

    public Image getImage(Object element) {
        if (element instanceof INSISInstallElement) {
            Image image = ((INSISInstallElement) element).getImage();
            if (((INSISInstallElement) element).getError() != null) {
                image = decorateImage(image, (INSISInstallElement) element);
            }
            return image;
        } else {
            return null;
        }
    }

    public String getText(Object element) {
        if (element instanceof INSISInstallElement) {
            return ((INSISInstallElement) element).getDisplayName();
        } else {
            return Common.toString(element, ""); //$NON-NLS-1$
        }
    }

    @Override
    public boolean isLabelProperty(Object element, String property) {
        if (element instanceof INSISInstallElement) {
            return false;
        } else {
            return super.isLabelProperty(element, property);
        }
    }

    private Image decorateImage(final Image image, INSISInstallElement element) {
        String name = Integer.toString(image.hashCode()) + "$error"; //$NON-NLS-1$
        Image image2 = EclipseNSISPlugin.getImageManager().getImage(name);
        if (image2 == null) {
            EclipseNSISPlugin.getImageManager().putImageDescriptor(name, new CompositeImageDescriptor() {
                @Override
                protected void drawCompositeImage(int width, int height) {
                    drawImage(image.getImageData(), 0, 0);
                    drawImage(cErrorImageData, 0, getSize().y - cErrorImageData.height);
                }

                @Override
                protected Point getSize() {
                    return new Point(image.getBounds().width, image.getBounds().height);
                }
            });
            image2 = EclipseNSISPlugin.getImageManager().getImage(name);
        }
        return image2;
    }

    @Override
    public String getToolTipText(Object element) {
        return (element instanceof INSISInstallElement ? ((INSISInstallElement) element).getError() : null);
    }

    @Override
    public Image getToolTipImage(Object element) {
        return (element instanceof INSISInstallElement
                ? (((INSISInstallElement) element).getError() != null ? cErrorImage : null)
                : null);
    }

    @Override
    public boolean useNativeToolTip(Object object) {
        return false;
    }

    @Override
    public void update(ViewerCell cell) {
        cell.setImage(getImage(cell.getElement()));
        cell.setText(getText(cell.getElement()));
    }
}