ObjectPluginAction.java :  » IDE-Eclipse » ui-workbench » org » eclipse » ui » internal » Java Open Source

Java Open Source » IDE Eclipse » ui workbench 
ui workbench » org » eclipse » ui » internal » ObjectPluginAction.java
/*******************************************************************************
 * Copyright (c) 2000, 2007 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;

import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.ISafeRunnable;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ui.IActionDelegate;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IPartListener2;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartReference;

/**
 * An object action extension in a popup menu.
 * <p>
 * For backward compatibility, the delegate object can implement either
 * <code>IActionDelegate</code> or <code>IObjectActionDelegate</code>.
 * </p>
 */
public class ObjectPluginAction extends PluginAction implements IPartListener2 {
  /**
   * The configuration element attribute for the identifier of the action
   * which this action is intended to override (i.e., replace).
   */
  public static final String ATT_OVERRIDE_ACTION_ID = "overrideActionId";//$NON-NLS-1$

    private String overrideActionId;

    private IWorkbenchPart activePart;
    
  public void partActivated(IWorkbenchPartReference partRef) {
  }

  public void partBroughtToTop(IWorkbenchPartReference partRef) {
  }

  public void partClosed(IWorkbenchPartReference partRef) {
    if (activePart != null && partRef.getPart(false) == activePart) {
      selectionChanged(StructuredSelection.EMPTY);
      disposeDelegate();
      activePart = null;
    }
  }

  public void partDeactivated(IWorkbenchPartReference partRef) {
  }

  public void partHidden(IWorkbenchPartReference partRef) {
  }

  public void partInputChanged(IWorkbenchPartReference partRef) {
  }

  public void partOpened(IWorkbenchPartReference partRef) {
  }

  public void partVisible(IWorkbenchPartReference partRef) {
  }

    /**
   * Constructs a new ObjectPluginAction.
   * 
   * @param actionElement
   *            The configuration element used to construct this action; must
   *            not be <code>null</code>.
   * @param id
   *            The identifier for this action; must not be <code>null</code>.
   * @param style
   *            The style bits
   */
    public ObjectPluginAction(IConfigurationElement actionElement, String id,
            int style) {
        super(actionElement, id, style);
        overrideActionId = actionElement.getAttribute(ATT_OVERRIDE_ACTION_ID);
    }

    /* (non-Javadoc)
     * Method declared on PluginAction.
     */
    protected void initDelegate() {
        super.initDelegate();
    final IActionDelegate actionDelegate = getDelegate();
    if (actionDelegate instanceof IObjectActionDelegate
        && activePart != null) {
      final IObjectActionDelegate objectActionDelegate = (IObjectActionDelegate) actionDelegate;
      final ISafeRunnable runnable = new ISafeRunnable() {
        public void run() throws Exception {
          objectActionDelegate.setActivePart(ObjectPluginAction.this,
              activePart);
        }

        public void handleException(Throwable exception) {
          // Do nothing.
        }
      };
      Platform.run(runnable);
    }
  }

    /**
   * Sets the active part for the delegate.
   * <p>
   * This method will be called every time the action appears in a popup menu.
   * The targetPart may change with each invocation.
   * </p>
   * 
   * @param targetPart
   *            the new part target
   */
    public void setActivePart(IWorkbenchPart targetPart) {
      if (activePart != targetPart) {
      if (activePart != null) {
        activePart.getSite().getPage().removePartListener(this);
      }
      if (targetPart != null) {
        targetPart.getSite().getPage().addPartListener(this);
      }
    }
        activePart = targetPart;
        IActionDelegate delegate = getDelegate();
        if (delegate instanceof IObjectActionDelegate && activePart != null) {
      final IObjectActionDelegate objectActionDelegate = (IObjectActionDelegate) delegate;
      final ISafeRunnable runnable = new ISafeRunnable() {
        public void run() throws Exception {
          objectActionDelegate.setActivePart(ObjectPluginAction.this,
              activePart);
        }

        public void handleException(Throwable exception) {
          // Do nothing.
        }
      };
      Platform.run(runnable);
    }
  }

    /**
     * Returns the action identifier this action overrides.
     * 
     * @return the action identifier to override or <code>null</code>
     */
    public String getOverrideActionId() {
        return overrideActionId;
    }
    
    /* (non-Javadoc)
     * @see org.eclipse.ui.internal.PluginAction#dispose()
     */
    public void dispose() {
      if (activePart!=null) {
        activePart.getSite().getPage().removePartListener(this);
        activePart = null;
      }
      super.dispose();
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.