/*******************************************************************************
 * Copyright (c) 2009, 2010 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.swt.accessibility;

import org.eclipse.swt.internal.SWTEventListener;

/**
 * Classes which implement this interface provide methods
 * that handle AccessibleAction events.
 * <p>
 * After creating an instance of a class that implements
 * this interface it can be added to an accessible using the
 * <code>addAccessibleActionListener</code> method and removed using
 * the <code>removeAccessibleActionListener</code> method.
 * </p>
 *
 * @see AccessibleActionAdapter
 * @see AccessibleActionEvent
 *
 * @since 3.6
 */
public interface AccessibleActionListener extends SWTEventListener {
	/**
	 * Returns the number of accessible actions available in this object.
	 * <p>
	 * If there are more than one, the first one (index 0) is considered the
	 * "default" action of the object.
	 * </p>
	 * 
	 * @param e an event object containing the following fields:<ul>
	 * <li>[out] count - the number of actions, or zero if there are no actions</li>
	 * </ul>
	 */
	public void getActionCount(AccessibleActionEvent e);

	/**
	 * Performs the specified action on the object.
	 * 
	 * @param e an event object containing the following fields:<ul>
	 * <li>[in] index - a 0 based index specifying the action to perform.
	 * 		If the index lies outside the valid range no action is performed.</li>
	 * <li>[out] result - set to {@link ACC#OK} if the action was performed.</li>
	 * </ul>
	 */
	public void doAction(AccessibleActionEvent e);

	/**
	 * Returns a description of the specified action.
	 * 
	 * @param e an event object containing the following fields:<ul>
	 * <li>[in] index - a 0 based index specifying which action's description to return</li>
	 * <li>[out] result - a localized string describing the specified action,
	 * 		or null if the index lies outside the valid range</li>
	 * </ul>
	 */
	public void getDescription(AccessibleActionEvent e);

	/**
	 * Returns a string representing one or more key bindings, if there
	 * are any, associated with the specified action.
	 * <p>
	 * The returned string is of the following form: mnemonic;accelerator
	 * for example: "C;CTRL+C" for the Copy item in a typical Edit menu.
	 * </p>
	 * 
	 * @param e an event object containing the following fields:<ul>
	 * <li>[in] index - a 0 based index specifying which action's key bindings to return</li>
	 * <li>[out] result - a semicolon-delimited string of localized key bindings
	 * 		(example: "C;CTRL+C"), or null if the index lies outside the valid range</li>
	 * </ul>
	 */
	public void getKeyBinding(AccessibleActionEvent e);

	/**
	 * Returns the name of the specified action.
	 * <p>
	 * There is no need to implement this method for single action controls
	 * since that would be redundant with AccessibleControlListener.getDefaultAction.
	 * </p>
	 * 
	 * @param e an event object containing the following fields:<ul>
	 * <li>[in] index - a 0 based index specifying which action's name to return</li>
	 * <li>[in] localized - a boolean indicating whether or not to return a localized name</li>
	 * <li>[out] result - the name of the specified action,
	 * 		or null if the index lies outside the valid range</li>
	 * </ul>
	 */
	public void getName(AccessibleActionEvent e);
}
