| /******************************************************************************* |
| * Copyright (c) 2000, 2015 IBM Corporation and others. |
| * |
| * This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ui; |
| |
| import org.eclipse.jface.action.IAction; |
| import org.eclipse.jface.viewers.ISelection; |
| |
| /** |
| * Interface for actions contributed via an extension point. |
| * <p> |
| * This interface should be implemented by clients who need to contribute |
| * actions via an extension point. The workbench will generate a <b>proxy |
| * action</b> object on behalf of the plug-in to avoid having to activate the |
| * plug-in until the user needs it. If the action is performed the workbench |
| * will load the class that implements this interface and create what is called |
| * an <b>action delegate</b> object. Then the request, and all subsequent ones, |
| * are forwarded through the proxy action to the action delegate, which does the |
| * real work. |
| * </p> |
| * <p> |
| * The proxy action is the one that appears in the UI, so the action delegate |
| * will need to talk to the proxy action in order to keep up an appropriate |
| * appearance. Once the action delegate has been created, it will be notified of |
| * all selection changes, allowing it to enable or disable the proxy action |
| * appropriately. |
| * </p> |
| * <p> |
| * An action delegate cannot be consulted about selection changes before the |
| * action is performed because it does not exist. For this reason, control of |
| * the action's enable state should also be exercised through simple XML rules |
| * contained in the extension. These rules allow enable state control before the |
| * action delegate's plug-in is loaded. |
| * </p> |
| * <p> |
| * Clients can choose to subclass the provided abstract implementation |
| * <code>org.eclipse.ui.actions.ActionDelegate</code> or implement the interface |
| * directly. |
| * </p> |
| * |
| * @see org.eclipse.ui.actions.ActionDelegate |
| * @see org.eclipse.ui.IActionDelegate2 |
| */ |
| public interface IActionDelegate { |
| /** |
| * Performs this action. |
| * <p> |
| * This method is called by the proxy action when the action has been triggered. |
| * Implement this method to do the actual work. |
| * </p> |
| * <p> |
| * <b>Note:</b> If the action delegate also implements |
| * <code>IActionDelegate2</code>, then this method is not invoked but instead |
| * the <code>runWithEvent(IAction, Event)</code> method is called. |
| * </p> |
| * |
| * @param action the action proxy that handles the presentation portion of the |
| * action |
| */ |
| void run(IAction action); |
| |
| /** |
| * Notifies this action delegate that the selection in the workbench has |
| * changed. |
| * <p> |
| * Implementers can use this opportunity to change the availability of the |
| * action or to modify other presentation properties. |
| * </p> |
| * <p> |
| * When the selection changes, the action enablement state is updated based on |
| * the criteria specified in the plugin.xml file. Then the delegate is notified |
| * of the selection change regardless of whether the enablement criteria in the |
| * plugin.xml file is met. |
| * </p> |
| * |
| * @param action the action proxy that handles presentation portion of the |
| * action |
| * @param selection the current selection, or <code>null</code> if there is no |
| * selection. |
| */ |
| void selectionChanged(IAction action, ISelection selection); |
| } |