com.aptana.theme.ThemedDelegatingLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for com.aptana.theme.ThemedDelegatingLabelProvider.java

Source

/**
 * Aptana Studio
 * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
 * Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions).
 * Please see the license.html included with this distribution for details.
 * Any modifications to this file must keep this entire header intact.
 */
package com.aptana.theme;

import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.IFontProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;

import com.aptana.theme.preferences.IPreferenceConstants;

/**
 * This label provider wraps another label provider and extends it to use them active theme's colors and font. This is
 * basically used to wrap label providers for the outline view.
 * 
 * @author cwilliams
 */
public class ThemedDelegatingLabelProvider implements ILabelProvider, IColorProvider, IFontProvider {

    private ILabelProvider wrapped;
    private boolean disabled;

    public ThemedDelegatingLabelProvider(ILabelProvider wrapped) {
        this.wrapped = wrapped;
    }

    public void disable() {
        disabled = true;
    }

    public Image getImage(Object element) {
        return wrapped.getImage(element);
    }

    public String getText(Object element) {
        return wrapped.getText(element);
    }

    public Color getForeground(Object element) {
        if (disabled || !invasiveThemesEnabled()) {
            if (wrapped instanceof IColorProvider) {
                return ((IColorProvider) wrapped).getForeground(element);
            }
            return null;
        }
        return getThemeManager().getCurrentTheme().getForegroundColor();
    }

    protected boolean invasiveThemesEnabled() {
        return getThemeManager().getCurrentTheme().isInvasive();
    }

    protected IThemeManager getThemeManager() {
        return ThemePlugin.getDefault().getThemeManager();
    }

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

    public Font getFont(Object element) {
        if (disabled) {
            if (wrapped instanceof IFontProvider) {
                return ((IFontProvider) wrapped).getFont(element);
            }
            return null;
        }
        if (!useEditorFont()) {
            return null;
        }
        Font font = JFaceResources.getFont(IThemeManager.VIEW_FONT_NAME);
        if (font == null) {
            font = JFaceResources.getTextFont();
        }
        return font;
    }

    protected boolean useEditorFont() {
        return Platform.getPreferencesService().getBoolean(ThemePlugin.PLUGIN_ID,
                IPreferenceConstants.INVASIVE_FONT, false, null);
    }

    public void addListener(ILabelProviderListener listener) {
        wrapped.addListener(listener);
    }

    public void dispose() {
        wrapped.dispose();
    }

    public boolean isLabelProperty(Object element, String property) {
        return wrapped.isLabelProperty(element, property);
    }

    public void removeListener(ILabelProviderListener listener) {
        wrapped.removeListener(listener);
    }

    public void enable() {
        disabled = false;
    }

}