Package org.eclipse.ui.part

Source Code of org.eclipse.ui.part.IntroPart

/*******************************************************************************
* Copyright (c) 2004, 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.part;

import org.eclipse.core.commands.common.EventManager;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExecutableExtension;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IPropertyListener;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.intro.IntroMessages;
import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
import org.eclipse.ui.internal.util.Util;
import org.eclipse.ui.intro.IIntroPart;
import org.eclipse.ui.intro.IIntroSite;
import org.eclipse.ui.plugin.AbstractUIPlugin;

/**
* Abstract base implementation of an intro part.
* <p>
* Subclasses must implement the following methods:
* <ul>
* <li><code>createPartControl</code>- to create the intro part's controls
* </li>
* <li><code>setFocus</code>- to accept focus</li>
* <li><code>standbyStateChanged</code>- to change the standby mode</li>
* </ul>
* </p>
* <p>
* Subclasses may extend or reimplement the following methods as required:
* <ul>
* <li><code>setInitializationData</code>- extend to provide additional
* initialization when the intro extension is instantiated</li>
* <li><code>init(IIntroSite, IMemento)</code>- extend to provide additional
* initialization when intro is assigned its site</li>
* <li><code>dispose</code>- extend to provide additional cleanup</li>
* <li><code>getAdapter</code>- reimplement to make their intro adaptable
* </li>
* </ul>
* </p>
* @since 3.0
*/
public abstract class IntroPart extends EventManager implements IIntroPart,
    IExecutableExtension {

    private IConfigurationElement configElement;

    private ImageDescriptor imageDescriptor;

    private IIntroSite partSite;

    private Image titleImage;

  private String titleLabel;

    /**
     * Creates a new intro part.
     */
    protected IntroPart() {
        super();
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.intro.IIntroPart#addPropertyListener(org.eclipse.ui.IPropertyListener)
     */
    public void addPropertyListener(IPropertyListener l) {
        addListenerObject(l);
    }

    /*
     * (non-Javadoc) Creates the SWT controls for this intro part. <p>
     * Subclasses must implement this method. For a detailed description of the
     * requirements see <code> IIntroPart </code></p>
     *
     * @param parent the parent control
     *
     * @see IIntroPart
     */
    public abstract void createPartControl(Composite parent);

    /**
     * The <code>IntroPart</code> implementation of this
     * <code>IIntroPart</code> method disposes the title image loaded by
     * <code>setInitializationData</code>. Subclasses may extend.
     */
    public void dispose() {
        if (titleImage != null) {
            JFaceResources.getResources().destroyImage(imageDescriptor);
            titleImage = null;
        }

        // Clear out the property change listeners as we
        // should not be notifying anyone after the part
        // has been disposed.
        clearListeners();
    }

    /**
     * Fires a property changed event.
     *
     * @param propertyId
     *            the id of the property that changed
     */
    protected void firePropertyChange(final int propertyId) {
        Object[] array = getListeners();
        for (int nX = 0; nX < array.length; nX++) {
            final IPropertyListener l = (IPropertyListener) array[nX];
            Platform.run(new SafeRunnable() {

                public void run() {
                    l.propertyChanged(this, propertyId);
                }
            });
        }
    }

    /**
     * This implementation of the method declared by <code>IAdaptable</code>
     * passes the request along to the platform's adapter manager; roughly
     * <code>Platform.getAdapterManager().getAdapter(this, adapter)</code>.
     * Subclasses may override this method (however, if they do so, they should
     * invoke the method on their superclass to ensure that the Platform's
     * adapter manager is consulted).
     */
    public Object getAdapter(Class adapter) {
        return Platform.getAdapterManager().getAdapter(this, adapter);
    }

    /**
     * Returns the configuration element for this part. The configuration
     * element comes from the plug-in registry entry for the extension defining
     * this part.
     *
     * @return the configuration element for this part
     */
    protected IConfigurationElement getConfigurationElement() {
        return configElement;
    }

    /**
     * Returns the default title image.
     *
     * @return the default image
     */
    protected Image getDefaultImage() {
        return PlatformUI.getWorkbench().getSharedImages().getImage(
                ISharedImages.IMG_DEF_VIEW);
    }

    /*
     * (non-Javadoc)
     *
     * @see org.eclipse.ui.intro.IIntroPart#getIntroSite()
     */
    public final IIntroSite getIntroSite() {
        return partSite;
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.intro.IIntroPart#getTitleImage()
     */
    public Image getTitleImage() {
        if (titleImage != null) {
            return titleImage;
        }
        return getDefaultImage();
    }
   
    /* (non-Javadoc)
     * @see org.eclipse.ui.intro.IIntroPart#getTitle()
     */
    public String getTitle() {
      if (titleLabel != null) {
        return titleLabel;
      }
      return getDefaultTitle();
    }

    /**
     * Return the default title string.
     *
   * @return the default title string
   */
  private String getDefaultTitle() {
    return IntroMessages.Intro_default_title;
  }

  /**
     * The base implementation of this {@link org.eclipse.ui.intro.IIntroPart}method ignores the
     * memento and initializes the part in a fresh state. Subclasses may extend
     * to perform any state restoration, but must call the super method.
     *
     * @param site
     *            the intro site
     * @param memento
     *            the intro part state or <code>null</code> if there is no
     *            previous saved state
     * @exception PartInitException
     *                if this part was not initialized successfully
     */
    public void init(IIntroSite site, IMemento memento)
            throws PartInitException {
        setSite(site);
    }

    /**
     * Sets the part site.
     * <p>
     * Subclasses must invoke this method from {@link org.eclipse.ui.intro.IIntroPart#init(IIntroSite, IMemento)}.
     * </p>
     *
     * @param site the intro part site
     */
    protected void setSite(IIntroSite site) {
        this.partSite = site;
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.intro.IIntroPart#removePropertyListener(org.eclipse.ui.IPropertyListener)
     */
    public void removePropertyListener(IPropertyListener l) {
        removeListenerObject(l);
    }

    /**
     * The base implementation of this {@link org.eclipse.ui.intro.IIntroPart} method does nothing.
     * Subclasses may override.
     *
     * @param memento
     *            a memento to receive the object state
     */
    public void saveState(IMemento memento) {
        //no-op
    }

    /*
     * (non-Javadoc) Asks this part to take focus within the workbench.
     * <p>
     * Subclasses must implement this method. For a detailed description of the
     * requirements see <code>IIntroPart</code>
     * </p>
     *
     * @see IIntroPart
     */
    public abstract void setFocus();

    /**
     * The <code>IntroPart</code> implementation of this
     * <code>IExecutableExtension</code> records the configuration element in
     * and internal state variable (accessible via <code>getConfigElement</code>).
     * It also loads the title image, if one is specified in the configuration
     * element. Subclasses may extend.
     *
     * Should not be called by clients. It is called by the core plugin when
     * creating this executable extension.
     */
    public void setInitializationData(IConfigurationElement cfig,
            String propertyName, Object data) {

        // Save config element.
        configElement = cfig;

        titleLabel = cfig.getAttribute(IWorkbenchRegistryConstants.ATT_LABEL);
       
        // Icon.
        String strIcon = cfig.getAttribute(IWorkbenchRegistryConstants.ATT_ICON);
        if (strIcon == null) {
      return;
    }

        imageDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(
                configElement.getNamespace(), strIcon);

        if (imageDescriptor == null) {
      return;
    }

        Image image = JFaceResources.getResources().createImageWithDefault(imageDescriptor);
        titleImage = image;
    }

    /**
     * Sets or clears the title image of this part.
     *
     * @param titleImage
     *            the title image, or <code>null</code> to clear
     */
    protected void setTitleImage(Image titleImage) {
        Assert.isTrue(titleImage == null || !titleImage.isDisposed());
        //Do not send changes if they are the same
        if (this.titleImage == titleImage) {
      return;
    }
        this.titleImage = titleImage;
        firePropertyChange(IIntroPart.PROP_TITLE);
    }
   
    /**
     * Set the title string for this part.
     *
     * @param titleLabel the title string.  Must not be <code>null</code>.
     * @since 3.2
     */
    protected void setTitle(String titleLabel) {
      Assert.isNotNull(titleLabel);
      if (Util.equals(this.titleLabel, titleLabel))
        return;
      this.titleLabel = titleLabel;
      firePropertyChange(IIntroPart.PROP_TITLE);
    }
}
TOP

Related Classes of org.eclipse.ui.part.IntroPart

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.