org.overture.ide.ui.internal.viewsupport.VdmUILabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.overture.ide.ui.internal.viewsupport.VdmUILabelProvider.java

Source

/*
 * #%~
 * org.overture.ide.ui
 * %%
 * Copyright (C) 2008 - 2014 Overture
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public
 * License along with this program.  If not, see
 * <http://www.gnu.org/licenses/gpl-3.0.html>.
 * #~%
 */
package org.overture.ide.ui.internal.viewsupport;

import java.util.ArrayList;

import org.eclipse.core.runtime.ListenerList;
import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.overture.ide.ui.VdmUIPlugin;

public class VdmUILabelProvider implements ILabelProvider, IColorProvider, IStyledLabelProvider {
    //   private List<Image> images = new Vector<Image>();

    protected ListenerList fListeners = new ListenerList();

    protected VdmElementImageProvider fImageLabelProvider;
    // protected StorageLabelProvider fStorageLabelProvider;

    private ArrayList<ILabelDecorator> fLabelDecorators;

    private int fImageFlags;
    private long fTextFlags;

    /**
     * Creates a new label provider with default flags.
     */
    public VdmUILabelProvider() {
        this(VdmElementLabels.ALL_DEFAULT, VdmElementImageProvider.OVERLAY_ICONS);
    }

    /**
     * @param textFlags
     *            Flags defined in <code>JavaElementLabels</code>.
     * @param imageFlags
     *            Flags defined in <code>JavaElementImageProvider</code>.
     */
    public VdmUILabelProvider(long textFlags, int imageFlags) {
        fImageLabelProvider = new VdmElementImageProvider();
        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 = (ILabelDecorator) fLabelDecorators.get(i);
                image = decorator.decorateImage(image, element);
            }
        }
        return image;
    }

    /*
     * (non-Javadoc)
     * @see ILabelProvider#getImage
     */
    public Image getImage(Object element) {
        try {
            Image resultB = fImageLabelProvider.getImageLabel(element, evaluateImageFlags(element));
            // if (result == null && (element instanceof IStorage)) {
            // result= fStorageLabelProvider.getImage(element);
            // }
            Image result = decorateImage(resultB, element);

            return result;
        } catch (Exception e) {
            VdmUIPlugin.log(e);
            return null;
        }
    }

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

    /*
     * (non-Javadoc)
     * @see ILabelProvider#getText
     */
    public String getText(Object element) {
        String result = VdmElementLabels.getTextLabel(element, evaluateTextFlags(element));
        // if (result.length() == 0 && (element instanceof IStorage)) {
        // result= fStorageLabelProvider.getText(element);
        // }
        return decorateText(result, element);
    }

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

    /*
     * (non-Javadoc)
     * @see IBaseLabelProvider#dispose
     */
    public void dispose() {
        if (fLabelDecorators != null) {
            for (int i = 0; i < fLabelDecorators.size(); i++) {
                ILabelDecorator decorator = (ILabelDecorator) fLabelDecorators.get(i);
                decorator.dispose();
            }
            fLabelDecorators = null;
        }
        // fStorageLabelProvider.dispose();
        fImageLabelProvider.dispose();

        // for (Image img : images)
        // {
        // if (!img.isDisposed())
        // {
        // img.dispose();
        // }
        // }
    }

    /*
     * (non-Javadoc)
     * @see IBaseLabelProvider#addListener(ILabelProviderListener)
     */
    public void addListener(ILabelProviderListener listener) {
        if (fLabelDecorators != null) {
            for (int i = 0; i < fLabelDecorators.size(); i++) {
                ILabelDecorator decorator = (ILabelDecorator) fLabelDecorators.get(i);
                decorator.addListener(listener);
            }
        }
        fListeners.add(listener);
    }

    /*
     * (non-Javadoc)
     * @see IBaseLabelProvider#isLabelProperty(Object, String)
     */
    public boolean isLabelProperty(Object element, String property) {
        return true;
    }

    /*
     * (non-Javadoc)
     * @see IBaseLabelProvider#removeListener(ILabelProviderListener)
     */
    public void removeListener(ILabelProviderListener listener) {
        if (fLabelDecorators != null) {
            for (int i = 0; i < fLabelDecorators.size(); i++) {
                ILabelDecorator decorator = (ILabelDecorator) fLabelDecorators.get(i);
                decorator.removeListener(listener);
            }
        }
        fListeners.remove(listener);
    }

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

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
     */
    public Color getForeground(Object element) {
        return null;
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
     */
    public Color getBackground(Object element) {
        return null;
    }

    /**
     * Fires a label provider changed event to all registered listeners Only listeners registered at the time this
     * method is called are notified.
     * 
     * @param event
     *            a label provider changed event
     * @see ILabelProviderListener#labelProviderChanged
     */
    protected void fireLabelProviderChanged(final LabelProviderChangedEvent event) {
        Object[] listeners = fListeners.getListeners();
        for (int i = 0; i < listeners.length; ++i) {
            final ILabelProviderListener l = (ILabelProviderListener) listeners[i];
            SafeRunner.run(new SafeRunnable() {
                public void run() {
                    l.labelProviderChanged(event);
                }
            });
        }
    }
}