Package org.eclipse.ui.internal.decorators

Source Code of org.eclipse.ui.internal.decorators.FullDecoratorDefinition

/*******************************************************************************
* 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.ui.internal.decorators;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.internal.WorkbenchMessages;
import org.eclipse.ui.internal.WorkbenchPlugin;

/**
* The RunnableDecoratorDefinition is the definition for
* decorators that have an ILabelDecorator class to instantiate.
*/

class FullDecoratorDefinition extends DecoratorDefinition {

  ILabelDecorator decorator;

    /**
     * Create a new instance of the receiver with the
     * supplied values.
     */

    FullDecoratorDefinition(String identifier, IConfigurationElement element) {
        super(identifier, element);
    }

    /**
     * Gets the decorator and creates it if it does
     * not exist yet. Throws a CoreException if there is a problem
     * creating the decorator.
     * This method should not be called unless a check for
     * enabled to be true is done first.
     * @return Returns a ILabelDecorator
     */
    protected ILabelDecorator internalGetDecorator() throws CoreException {
        if (labelProviderCreationFailed) {
      return null;
    }

        final CoreException[] exceptions = new CoreException[1];

        if (decorator == null) {
            Platform
                    .run(new SafeRunnable(
                            NLS.bind(WorkbenchMessages.DecoratorManager_ErrorActivatingDecorator, getName() )) {
                        public void run() {
                            try {
                                decorator = (ILabelDecorator) WorkbenchPlugin
                                        .createExtension(
                                                definingElement,
                                                DecoratorDefinition.ATT_CLASS);
                                decorator.addListener(WorkbenchPlugin
                                        .getDefault().getDecoratorManager());
                            } catch (CoreException exception) {
                                exceptions[0] = exception;
                            }
                        }
                    });
        } else {
      return decorator;
    }

        if (decorator == null) {
            this.labelProviderCreationFailed = true;
            setEnabled(false);
        }

        if (exceptions[0] != null) {
      throw exceptions[0];
    }

        return decorator;
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.internal.decorators.DecoratorDefinition#refreshDecorator()
     */
    protected void refreshDecorator() {
        //Only do something if disabled so as to prevent
        //gratutitous activation
        if (!this.enabled && decorator != null) {
            IBaseLabelProvider cached = decorator;
            decorator = null;
            disposeCachedDecorator(cached);
        }
    }

    /**
     * Decorate the image provided for the element type.
     * This method should not be called unless a check for
     * isEnabled() has been done first.
     * Return null if there is no image or if an error occurs.
     */
    Image decorateImage(Image image, Object element) {
        try {
            //Internal decorator might be null so be prepared
            ILabelDecorator currentDecorator = internalGetDecorator();
            if (currentDecorator != null) {
        return currentDecorator.decorateImage(image, element);
      }

        } catch (CoreException exception) {
            handleCoreException(exception);
        }
        return null;
    }

    /**
     * Decorate the text provided for the element type.
     * This method should not be called unless a check for
     * isEnabled() has been done first.
     * Return null if there is no text or if there is an exception.
     */
    String decorateText(String text, Object element) {
        try {
            //Internal decorator might be null so be prepared
            ILabelDecorator currentDecorator = internalGetDecorator();
            if (currentDecorator != null) {
        return currentDecorator.decorateText(text, element);
      }
        } catch (CoreException exception) {
            handleCoreException(exception);
        }
        return null;
    }

    /**
     * Returns the decorator, or <code>null</code> if not enabled.
     *
     * @return the decorator, or <code>null</code> if not enabled
     */
    public ILabelDecorator getDecorator() {
        return decorator;
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.internal.decorators.DecoratorDefinition#internalGetLabelProvider()
     */
    protected IBaseLabelProvider internalGetLabelProvider()
            throws CoreException {
        return internalGetDecorator();
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.internal.decorators.DecoratorDefinition#isFull()
     */
    public boolean isFull() {
        return true;
    }

}
TOP

Related Classes of org.eclipse.ui.internal.decorators.FullDecoratorDefinition

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.