org.eclipse.cdt.internal.ui.viewsupport.CUILabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.cdt.internal.ui.viewsupport.CUILabelProvider.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 2010 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
 *     Anton Leherbauer (Wind River Systems)
 *     Patrick Hofer [bug 325799]
 *******************************************************************************/
package org.eclipse.cdt.internal.ui.viewsupport;

import java.util.ArrayList;

import org.eclipse.core.resources.IStorage;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;

import org.eclipse.cdt.core.model.ISourceReference;
import org.eclipse.cdt.internal.ui.viewsupport.CElementLabels;
import org.eclipse.cdt.ui.CUIPlugin;

public class CUILabelProvider extends LabelProvider implements IColorProvider, IStyledLabelProvider {
    protected CElementImageProvider fImageLabelProvider;
    protected StorageLabelProvider fStorageLabelProvider;

    private ArrayList<ILabelDecorator> fLabelDecorators;

    private int fImageFlags;
    private long fTextFlags;
    private Color fInactiveColor;
    private Color fDefaultColor;

    /**
     * Creates a new label provider with default flags.
     */
    public CUILabelProvider() {
        this(CElementLabels.M_PARAMETER_TYPES, CElementImageProvider.OVERLAY_ICONS);
    }

    /**
     * @param textFlags Flags defined in <code>CElementLabels</code>.
     * @param imageFlags Flags defined in <code>CElementImageProvider</code>.
     */
    public CUILabelProvider(long textFlags, int imageFlags) {
        fImageLabelProvider = new CElementImageProvider();
        fLabelDecorators = null;

        fStorageLabelProvider = new StorageLabelProvider();
        fImageFlags = imageFlags;
        fTextFlags = textFlags;
    }

    /**
     * Adds a decorator to the label provider
     * @param decorator the decorator to add
     */
    public void addLabelDecorator(ILabelDecorator decorator) {
        if (fLabelDecorators == null) {
            fLabelDecorators = new ArrayList<ILabelDecorator>(2);
        }
        fLabelDecorators.add(decorator);
    }

    /**
     * Sets the textFlags.
     * @param textFlags The textFlags to set
     */
    public final void setTextFlags(long textFlags) {
        fTextFlags = textFlags;
    }

    /**
     * Sets the imageFlags
     * @param imageFlags The imageFlags to set
     */
    public final void setImageFlags(int imageFlags) {
        fImageFlags = imageFlags;
    }

    /**
     * Gets the image flags.
     * Can be overwritten by super classes.
     * @return Returns a int
     */
    public final int getImageFlags() {
        return fImageFlags;
    }

    /**
     * Gets the text flags.
     * @return Returns a int
     */
    public final long getTextFlags() {
        return fTextFlags;
    }

    /**
     * Evaluates the image flags for a element.
     * Can be overwritten by super classes.
     * @param element the element to compute the image flags for
     * @return Returns a int
     */
    protected int evaluateImageFlags(Object element) {
        return getImageFlags();
    }

    /**
     * Evaluates the text flags for a element. Can be overwritten by super classes.
     * @param element the element to compute the text flags for
     * @return Returns a int
     */
    protected long evaluateTextFlags(Object element) {
        return getTextFlags();
    }

    protected Image decorateImage(Image image, Object element) {
        if (fLabelDecorators != null && image != null) {
            for (int i = 0; i < fLabelDecorators.size(); i++) {
                ILabelDecorator decorator = fLabelDecorators.get(i);
                image = decorator.decorateImage(image, element);
            }
        }
        return image;
    }

    @Override
    public Image getImage(Object element) {
        Image result = fImageLabelProvider.getImageLabel(element, evaluateImageFlags(element));
        if (result == null && (element instanceof IStorage)) {
            result = fStorageLabelProvider.getImage(element);
        }

        return decorateImage(result, element);
    }

    protected String decorateText(String text, Object element) {
        if (fLabelDecorators != null && text.length() > 0) {
            for (int i = 0; i < fLabelDecorators.size(); i++) {
                ILabelDecorator decorator = fLabelDecorators.get(i);
                text = decorator.decorateText(text, element);
            }
        }
        return text;
    }

    @Override
    public String getText(Object element) {
        String result = CElementLabels.getTextLabel(element, evaluateTextFlags(element));
        if (result.length() == 0 && (element instanceof IStorage)) {
            result = fStorageLabelProvider.getText(element);
        }

        return decorateText(result, element);
    }

    @Override
    public StyledString getStyledText(Object element) {
        StyledString string = CElementLabels.getStyledTextLabel(element,
                (evaluateTextFlags(element) | CElementLabels.COLORIZE));
        if (string.length() == 0 && (element instanceof IStorage)) {
            string = new StyledString(fStorageLabelProvider.getText(element));
        }
        String decorated = decorateText(string.getString(), element);
        if (decorated != null) {
            return StyledCellLabelProvider.styleDecoratedString(decorated, StyledString.DECORATIONS_STYLER, string);
        }
        return string;
    }

    @Override
    public void dispose() {
        if (fLabelDecorators != null) {
            for (int i = 0; i < fLabelDecorators.size(); i++) {
                ILabelDecorator decorator = fLabelDecorators.get(i);
                decorator.dispose();
            }
            fLabelDecorators = null;
        }
        fStorageLabelProvider.dispose();
        fImageLabelProvider.dispose();
    }

    @Override
    public void addListener(ILabelProviderListener listener) {
        if (fLabelDecorators != null) {
            for (int i = 0; i < fLabelDecorators.size(); i++) {
                ILabelDecorator decorator = fLabelDecorators.get(i);
                decorator.addListener(listener);
            }
        }
        super.addListener(listener);
    }

    @Override
    public boolean isLabelProperty(Object element, String property) {
        return true;
    }

    @Override
    public void removeListener(ILabelProviderListener listener) {
        if (fLabelDecorators != null) {
            for (int i = 0; i < fLabelDecorators.size(); i++) {
                ILabelDecorator decorator = fLabelDecorators.get(i);
                decorator.removeListener(listener);
            }
        }
        super.removeListener(listener);
    }

    public static ILabelDecorator[] getDecorators(boolean errortick, ILabelDecorator extra) {
        if (errortick) {
            if (extra == null) {
                return new ILabelDecorator[] {};
            }
            return new ILabelDecorator[] { extra };
        }
        if (extra != null) {
            return new ILabelDecorator[] { extra };
        }
        return null;
    }

    @Override
    public Color getForeground(Object element) {
        if (element instanceof ISourceReference) {
            ISourceReference sref = (ISourceReference) element;
            if (!sref.isActive()) {
                if (fInactiveColor == null && Display.getCurrent() != null) {
                    fInactiveColor = CUIPlugin.getStandardDisplay().getSystemColor(SWT.COLOR_DARK_GRAY);
                    fDefaultColor = CUIPlugin.getStandardDisplay().getSystemColor(SWT.COLOR_LIST_FOREGROUND);
                }
                return fInactiveColor;
            }
        }
        return fDefaultColor;
    }

    @Override
    public Color getBackground(Object element) {
        return null;
    }
}