/******************************************************************************* * 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; import org.eclipse.core.runtime.*; import org.eclipse.ui.*; /** * 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 { /** * 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; /** * 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) { 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; } }