blob: 00ab5eae8e17900506044ad8873581b60a4dd33e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 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.jface.action;
import org.eclipse.core.commands.IHandlerAttributes;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.swt.events.HelpListener;
import org.eclipse.swt.widgets.Event;
/**
* An action represents the non-UI side of a command which can be triggered
* by the end user. Actions are typically associated with buttons, menu items,
* and items in tool bars. The controls for a command are built by some container,
* which furnished the context where these controls appear and configures
* them with data from properties declared by the action. When the end user
* triggers the command via its control, the action's <code>run</code>
* method is invoked to do the real work.
* <p>
* Actions support a predefined set of properties (and possibly others as well).
* Clients of an action may register property change listeners so that they get
* notified whenever the value of a property changes.
* </p>
* <p>
* Clients should subclass the abstract base class <code>Action</code> to define
* concrete actions rather than implementing <code>IAction</code> from scratch.
* </p>
* <p>
* This interface exists only to define the API for actions.
* It is not intended to be implemented by clients.
* </p>
*
* @see Action
*/
public interface IAction {
/**
* Action style constant (value <code>0</code>) indicating action style
* is not specified yet. By default, the action will assume a push button
* style. If <code>setChecked</code> is called, then the style will change
* to a check box, or if <code>setMenuCreator</code> is called, then the
* style will change to a drop down menu.
*
* @since 2.1
*/
public static int AS_UNSPECIFIED = 0x00;
/**
* Action style constant (value <code>1</code>) indicating action is
* a simple push button.
*/
public static int AS_PUSH_BUTTON = 0x01;
/**
* Action style constant (value <code>2</code>) indicating action is
* a check box (or a toggle button).
*/
public static int AS_CHECK_BOX = 0x02;
/**
* Action style constant (value <code>4</code>) indicating action is
* a drop down menu.
*/
public static int AS_DROP_DOWN_MENU = 0x04;
/**
* Action style constant (value <code>8</code>) indicating action is
* a radio button.
*
* @since 2.1
*/
public static int AS_RADIO_BUTTON = 0x08;
/**
* Property name of an action's text (value <code>"text"</code>).
*/
public static final String TEXT = "text"; //$NON-NLS-1$
/**
* Property name of an action's enabled state
* (value <code>"enabled"</code>).
*/
public static final String ENABLED = "enabled"; //$NON-NLS-1$
/**
* Property name of an action's image (value <code>"image"</code>).
*/
public static final String IMAGE = "image"; //$NON-NLS-1$
/**
* Property name of an action's tooltip text (value <code>"toolTipText"</code>).
*/
public static final String TOOL_TIP_TEXT = "toolTipText"; //$NON-NLS-1$
/**
* Property name of an action's description (value <code>"description"</code>).
* Typically the description is shown as a (longer) help text in the status line.
*/
public static final String DESCRIPTION = "description"; //$NON-NLS-1$
/**
* Property name of an action's checked status (value
* <code>"checked"</code>). Applicable when the style is
* <code>AS_CHECK_BOX</code> or <code>AS_RADIO_BUTTON</code>.
*/
public static final String CHECKED = "checked"; //$NON-NLS-1$
/**
* Property name of an action's success/fail result
* (value <code>"result"</code>). The values are
* <code>Boolean.TRUE</code> if running the action succeeded and
* <code>Boolean.FALSE</code> if running the action failed or did not
* complete.
* <p>
* Not all actions report whether they succeed or fail. This property
* is provided for use by actions that may be invoked by clients that can
* take advantage of this information when present (for example, actions
* used in cheat sheets). Clients should always assume that running the
* action succeeded in the absence of notification to the contrary.
* </p>
*
* @since 3.0
*/
public static final String RESULT = "result"; //$NON-NLS-1$
/**
* Property name of an action's handler. Some actions delegate some or all
* of their behaviour or state to another object. In this case, if the
* object to which behaviour has been delegated changes, then a property
* change event should be sent with this name.
*
* This is used to support backward compatibility of actions within the
* commands framework.
*
* @since 3.1
*/
public static final String HANDLED = IHandlerAttributes.ATTRIBUTE_HANDLED;
/**
* Adds a property change listener to this action.
* Has no effect if an identical listener is already registered.
*
* @param listener a property change listener
*/
public void addPropertyChangeListener(IPropertyChangeListener listener);
/**
* Returns the accelerator keycode for this action.
* The result is the bit-wise OR of zero or more modifier masks
* and a key, as explained in <code>MenuItem.getAccelerator</code>.
*
* @return the accelerator keycode
* @see org.eclipse.swt.widgets.MenuItem#getAccelerator()
*/
public int getAccelerator();
/**
* Returns the action definition id of this action.
*
* @return the action definition id of this action, or
* <code>null</code> if none
* @since 2.0
*/
public String getActionDefinitionId();
/**
* Returns the action's description if it has one.
* Otherwise it returns <code>getToolTipText()</code>.
*
* @return a description for the action; may be <code>null</code>
*/
public String getDescription();
/**
* Returns the disabled image for this action as an image descriptor.
* <p>
* This method is associated with the <code>IMAGE</code> property;
* property change events are reported when its value changes.
* </p>
*
* @return the image, or <code>null</code> if this action has no image
* @see #IMAGE
*/
public ImageDescriptor getDisabledImageDescriptor();
/**
* Returns a help listener for this action.
*
* @return a help listener for this action
*/
public HelpListener getHelpListener();
/**
* Returns the hover image for this action as an image descriptor.
* <p>
* Hover images will be used on platforms that support changing the image
* when the user hovers over the item. This method is associated with
* the <code>IMAGE</code> property;
* property change events are reported when its value changes.
* </p>
*
* @return the image, or <code>null</code> if this action has no image
* @see #IMAGE
*/
public ImageDescriptor getHoverImageDescriptor();
/**
* Returns a unique identifier for this action, or <code>null</code> if it has
* none.
*
* @return the action id, or <code>null</code> if none
*/
public String getId();
/**
* Returns the image for this action as an image descriptor.
* <p>
* This method is associated with the <code>IMAGE</code> property;
* property change events are reported when its value changes.
* </p>
*
* @return the image, or <code>null</code> if this action has no image
* @see #IMAGE
*/
public ImageDescriptor getImageDescriptor();
/**
* Returns the menu creator for this action.
*
* @return the menu creator, or <code>null</code> if none
*/
public IMenuCreator getMenuCreator();
/**
* Return this action's style.
*
* @return one of <code>AS_PUSH_BUTTON</code>, <code>AS_CHECK_BOX</code>,
* <code>AS_RADIO_BUTTON</code> and <code>AS_DROP_DOWN_MENU</code>.
*/
public int getStyle();
/**
* Returns the text for this action.
* <p>
* This method is associated with the <code>TEXT</code> property;
* property change events are reported when its value changes.
* </p>
*
* @return the text, or <code>null</code> if none
* @see #TEXT
*/
public String getText();
/**
* Returns the tool tip text for this action.
* <p>
* This method is associated with the <code>TOOL_TIP_TEXT</code> property;
* property change events are reported when its value changes.
* </p>
*
* @return the tool tip text, or <code>null</code> if none
* @see #TOOL_TIP_TEXT
*/
public String getToolTipText();
/**
* Returns the checked status of this action. Applicable only if the style is
* <code>AS_CHECK_BOX</code> or <code>AS_RADIO_BUTTON</code>.
* <p>
* This method is associated with the <code>CHECKED</code> property;
* property change events are reported when its value changes.
* </p>
*
* @return the checked status
* @see #CHECKED
*/
public boolean isChecked();
/**
* Returns whether this action is enabled.
* <p>
* This method is associated with the <code>ENABLED</code> property;
* property change events are reported when its value changes.
* </p>
*
* @return <code>true</code> if enabled, and
* <code>false</code> if disabled
* @see #ENABLED
*/
public boolean isEnabled();
/**
* Returns whether this action is handled. In the default case, this is
* always <code>true</code>. However, if the action delegates some of its
* behaviour to some other object, then this method should answer whether
* such an object is currently available.
*
* @return <code>true</code> if all of the action's behaviour is
* available; <code>false</code> otherwise.
* @since 3.1
*/
public boolean isHandled();
/**
* Removes the given listener from this action.
* Has no effect if an identical listener is not registered.
*
* @param listener a property change listener
*/
public void removePropertyChangeListener(IPropertyChangeListener listener);
/**
* Runs this action.
* Each action implementation must define the steps needed to carry out this action.
* The default implementation of this method in <code>Action</code>
* does nothing.
*/
public void run();
/**
* Runs this action, passing the triggering SWT event.
* As of 2.0, <code>ActionContributionItem</code> calls this method
* instead of <code>run()</code>.
* The default implementation of this method in <code>Action</code>
* simply calls <code>run()</code> for backwards compatibility.
*
* @param event the SWT event which triggered this action being run
* @since 2.0
*/
public void runWithEvent(Event event);
/**
* Sets the action definition id of this action.
*
* @param id the action definition id
* @since 2.0
*/
public void setActionDefinitionId(String id);
/**
* Sets the checked status of this action. Applicable for the styles
* <code>AS_CHECK_BOX</code> or <code>AS_RADIO_BUTTON</code>.
* <p>
* Fires a property change event for the <code>CHECKED</code> property
* if the checked status actually changes as a consequence.
* </p>
*
* @param checked the new checked status
* @see #CHECKED
*/
public void setChecked(boolean checked);
/**
* Sets this action's description.
* Typically the description is shown as a (longer) help text in the status line.
* <p>
* Fires a property change event for the <code>DESCRIPTION</code> property
* if the description actually changes as a consequence.
* </p>
*
* @param text the description, or <code>null</code> to clear the description
* @see #DESCRIPTION
*/
public void setDescription(String text);
/**
* Sets the disabled image for this action, as an image descriptor.
* <p>
* Disabled images will be used on platforms that support changing the image
* when the item is disabled.Fires a property change event for
* the <code>IMAGE</code> property
* if the image actually changes as a consequence.
* </p>
*
* @param newImage the image, or <code>null</code> if this
* action should not have an image
* @see #IMAGE
*/
public void setDisabledImageDescriptor(ImageDescriptor newImage);
/**
* Sets the enabled state of this action.
* <p>
* When an action is in the enabled state, the control associated with
* it is active; triggering it will end up inkoking this action's
* <code>run</code> method.
* </p>
* <p>
* Fires a property change event for the <code>ENABLED</code> property
* if the enabled state actually changes as a consequence.
* </p>
*
* @param enabled <code>true</code> to enable, and
* <code>false</code> to disable
* @see #ENABLED
*/
public void setEnabled(boolean enabled);
/**
* Sets a help listener for this action.
*
* @param listener a help listener for this action
*/
public void setHelpListener(HelpListener listener);
/**
* Sets the hover image for this action, as an image descriptor.
* <p>
* Hover images will be used on platforms that support changing the image
* when the user hovers over the item.Fires a property change event for
* the <code>IMAGE</code> property
* if the image actually changes as a consequence.
* </p>
*
* @param newImage the image, or <code>null</code> if this
* action should not have an image
* @see #IMAGE
*/
public void setHoverImageDescriptor(ImageDescriptor newImage);
/**
* Sets the unique identifier for this action. This is used to identify actions
* when added to a contribution manager.
* It should be set when the action is created. It should not be modified once
* the action is part of an action contribution item.
*
* @param id the action id
*
* @see ActionContributionItem
* @see IContributionItem#getId
*/
public void setId(String id);
/**
* Sets the image for this action, as an image descriptor.
* <p>
* Fires a property change event for the <code>IMAGE</code> property
* if the image actually changes as a consequence.
* </p>
*
* @param newImage the image, or <code>null</code> if this
* action should not have an image
* @see #IMAGE
*/
public void setImageDescriptor(ImageDescriptor newImage);
/**
* Sets the menu creator for this action. Applicable for style
* <code>AS_DROP_DOWN_MENU</code>.
*
* @param creator the menu creator, or <code>null</code> if none
*/
public void setMenuCreator(IMenuCreator creator);
/**
* Sets the text for this action.
* <p>
* An accelerator specification may follow the actual text, separated from it by
* an '@' or a '\t' character. An accelerator specification consists of zero or more
* modifier tokens followed by a key code token. The tokens are separated by a '+' character.
* </p>
* <p>
* Fires a property change event for the <code>TEXT</code> property
* if the text actually changes as a consequence.
* </p>
*
* @param text the text, or <code>null</code> if none
* @see #TEXT
* @see Action#findModifier
* @see Action#findKeyCode
*/
public void setText(String text);
/**
* Sets the tool tip text for this action.
* <p>
* Fires a property change event for the <code>TOOL_TIP_TEXT</code> property
* if the tool tip text actually changes as a consequence.
* </p>
*
* @param text the tool tip text, or <code>null</code> if none
* @see #TOOL_TIP_TEXT
*/
public void setToolTipText(String text);
/**
* <p>
* Sets the accelerator keycode that this action maps to. This is a bitwise OR
* of zero or more SWT key modifier masks (i.e. SWT.CTRL or SWT.ALT) and a
* character code. For example, for Ctrl+Z, use <code>SWT.CTRL | 'Z'</code>.
* Use 0 for no accelerator.
* </p>
* <p>
* This method should no longer be used for actions in the Eclipse workbench.
* <code>IWorkbenchCommandSupport</code> and
* <code>IWorkbenchContextSupport</code> provide all the functionality
* required for key bindings. If you set an accelerator using this method, then
* it will not work in the workbench if it conflicts any existing key binding,
* or if there is a different key binding defined for this action's definition
* id. The definition id should be used instead -- referring to the command in
* the workbench from which the key binding should be retrieved.
* </p>
*
* @param keycode
* the keycode to be accepted.
*/
public void setAccelerator(int keycode);
}