Package org.eclipse.ecf.internal.ui.wizards

Source Code of org.eclipse.ecf.internal.ui.wizards.WorkbenchLabelProvider

/*******************************************************************************
* Copyright (c) 2000, 2006 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
*******************************************************************************/
package org.eclipse.ecf.internal.ui.wizards;

import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.PlatformObject;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.IFontProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorRegistry;
import org.eclipse.ui.IPropertyListener;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.model.IWorkbenchAdapter;
import org.eclipse.ui.model.IWorkbenchAdapter2;

/**
* Provides basic labels for adaptable objects that have the
* <code>IWorkbenchAdapter</code> adapter associated with them. All dispensed
* images are cached until the label provider is explicitly rootDisposed. This
* class provides a facility for subclasses to define annotations on the labels
* and icons of adaptable objects.
*/
public class WorkbenchLabelProvider extends LabelProvider implements
    IColorProvider, IFontProvider {

  /**
   * Returns a workbench label provider that is hooked up to the decorator
   * mechanism.
   *
   * @return a new <code>DecoratingLabelProvider</code> which wraps a <code>
   *   new <code>WorkbenchLabelProvider</code>
   */
  public static ILabelProvider getDecoratingWorkbenchLabelProvider() {
    return new DecoratingLabelProvider(new WorkbenchLabelProvider(),
        PlatformUI.getWorkbench().getDecoratorManager()
            .getLabelDecorator());
  }

  /**
   * Listener that tracks changes to the editor registry and does a full
   * update when it changes, since many workbench adapters derive their icon
   * from the file associations in the registry.
   */
  private IPropertyListener editorRegistryListener = new IPropertyListener() {
    public void propertyChanged(Object source, int propId) {
      if (propId == IEditorRegistry.PROP_CONTENTS) {
        fireLabelProviderChanged(new LabelProviderChangedEvent(
            WorkbenchLabelProvider.this));
      }
    }
  };

  /**
   * Creates a new workbench label provider.
   */
  public WorkbenchLabelProvider() {
    PlatformUI.getWorkbench().getEditorRegistry().addPropertyListener(
        editorRegistryListener);
  }

  /**
   * Returns an image descriptor that is based on the given descriptor, but
   * decorated with additional information relating to the state of the
   * provided object.
   *
   * Subclasses may reimplement this method to decorate an object's image.
   *
   * @param input
   *            The base image to decorate.
   * @param element
   *            The element used to look up decorations.
   * @return the resuling ImageDescriptor.
   * @see org.eclipse.jface.resource.CompositeImageDescriptor
   */
  protected ImageDescriptor decorateImage(ImageDescriptor input,
      Object element) {
    return input;
  }

  /**
   * Returns a label that is based on the given label, but decorated with
   * additional information relating to the state of the provided object.
   *
   * Subclasses may implement this method to decorate an object's label.
   *
   * @param input
   *            The base text to decorate.
   * @param element
   *            The element used to look up decorations.
   * @return the resulting text
   */
  protected String decorateText(String input, Object element) {
    return input;
  }

  /*
   * (non-Javadoc) Method declared on ILabelProvider
   */
  public void dispose() {
    PlatformUI.getWorkbench().getEditorRegistry().removePropertyListener(
        editorRegistryListener);
    super.dispose();
  }

  protected static final Object getAdapterUtil(Object sourceObject,
      Class adapterType) {
    Assert.isNotNull(adapterType);
    if (sourceObject == null)
      return null;
    if (adapterType.isInstance(sourceObject))
      return sourceObject;

    if (sourceObject instanceof IAdaptable) {
      IAdaptable adaptable = (IAdaptable) sourceObject;

      Object result = adaptable.getAdapter(adapterType);
      if (result != null) {
        // Sanity-check
        Assert.isTrue(adapterType.isInstance(result));
        return result;
      }
    }

    if (!(sourceObject instanceof PlatformObject)) {
      Object result = Platform.getAdapterManager().getAdapter(
          sourceObject, adapterType);
      if (result != null)
        return result;
    }
    return null;
  }

  /**
   * Returns the implementation of IWorkbenchAdapter for the given object.
   *
   * @param o
   *            the object to look up.
   * @return IWorkbenchAdapter or<code>null</code> if the adapter is not
   *         defined or the object is not adaptable.
   */
  protected final IWorkbenchAdapter getAdapter(Object o) {
    return (IWorkbenchAdapter) getAdapterUtil(o, IWorkbenchAdapter.class);
  }

  /**
   * Returns the implementation of IWorkbenchAdapter2 for the given object.
   *
   * @param o
   *            the object to look up.
   * @return IWorkbenchAdapter2 or<code>null</code> if the adapter is not
   *         defined or the object is not adaptable.
   */
  protected final IWorkbenchAdapter2 getAdapter2(Object o) {
    return (IWorkbenchAdapter2) getAdapterUtil(o, IWorkbenchAdapter2.class);
  }

  /*
   * (non-Javadoc) Method declared on ILabelProvider
   */
  public final Image getImage(Object element) {
    // obtain the base image by querying the element
    IWorkbenchAdapter adapter = getAdapter(element);
    if (adapter == null)
      return null;
    ImageDescriptor descriptor = adapter.getImageDescriptor(element);
    if (descriptor == null)
      return null;

    // add any annotations to the image descriptor
    descriptor = decorateImage(descriptor, element);
    /*
     * Image image = (Image)
     * SWTResourceUtil.getImageTable().get(descriptor); if (image == null) {
     * image = descriptor.createImage();
     * SWTResourceUtil.getImageTable().put(descriptor, image); }
     */
    Image image = descriptor.createImage();
    return image;
  }

  /*
   * (non-Javadoc) Method declared on ILabelProvider
   */
  public final String getText(Object element) {
    // query the element for its label
    IWorkbenchAdapter adapter = getAdapter(element);
    if (adapter == null)
      return ""; //$NON-NLS-1$
    String label = adapter.getLabel(element);

    // return the decorated label
    return decorateText(label, element);
  }

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

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

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object)
   */
  public Font getFont(Object element) {
    IWorkbenchAdapter2 adapter = getAdapter2(element);
    if (adapter == null)
      return null;

    FontData descriptor = adapter.getFont(element);
    if (descriptor == null)
      return null;
    /*
     * Font font = (Font) SWTResourceUtil.getFontTable().get(descriptor); if
     * (font == null) { font = new Font(Display.getCurrent(), descriptor);
     * SWTResourceUtil.getFontTable().put(descriptor, font); }
     */
    Font font = new Font(Display.getCurrent(), descriptor);
    return font;
  }

  private Color getColor(Object element, boolean forground) {
    IWorkbenchAdapter2 adapter = getAdapter2(element);
    if (adapter == null)
      return null;
    RGB descriptor = forground ? adapter.getForeground(element) : adapter
        .getBackground(element);
    if (descriptor == null)
      return null;
    /*
     * Color color = (Color)
     * SWTResourceUtil.getColorTable().get(descriptor); if (color == null) {
     * color = new Color(Display.getCurrent(), descriptor);
     * SWTResourceUtil.getColorTable().put(descriptor, color); }
     */
    Color color = new Color(Display.getCurrent(), descriptor);
    return color;
  }
}
TOP

Related Classes of org.eclipse.ecf.internal.ui.wizards.WorkbenchLabelProvider

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.