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

import java.util.*;

/**
 * Classes which implement this interface provide methods
 * that handle AccessibleAttribute events.
 * <p>
 * After creating an instance of a class that implements
 * this interface it can be added to an accessible using the
 * <code>addAccessibleAttributeListener</code> method and removed using
 * the <code>removeAccessibleAttributeListener</code> method.
 * </p>
 *
 * @see AccessibleAttributeAdapter
 * @see AccessibleAttributeEvent
 * @see AccessibleTextAttributeEvent
 *
 * @since 3.6
 */
public interface AccessibleAttributeListener extends EventListener {
	/**
	 * Returns attributes specific to this Accessible object.
	 *
	 * @param e an event object containing the following fields:<ul>
	 * <li>[out] topMargin - the top margin in pixels</li>
	 * <li>[out] bottomMargin - the bottom margin in pixels</li>
	 * <li>[out] leftMargin - the left margin in pixels</li>
	 * <li>[out] rightMargin - the right margin in pixels</li>
	 * <li>[out] tabStops - an array of pixel locations</li>
	 * <li>[out] justify - whether or not to justify the text</li>
	 * <li>[out] alignment - one of <code>SWT#LEFT</code>, <code>SWT#RIGHT</code> or <code>SWT#CENTER</code></li>
	 * <li>[out] indent - the indent in pixels</li>
	 * <li>[out] groupLevel - the level of this accessible in its group</li>
	 * <li>[out] groupCount - the number of similar children in this accessible's group</li>
	 * <li>[out] groupIndex - the index of this accessible in its group</li>
	 * <li>[out] attributes - an array of alternating key and value Strings
	 * 		which represent additional (i.e. non predefined) attributes</li>
	 * </ul>
	 */
	public void getAttributes(AccessibleAttributeEvent e);

	/**
	 * Returns text attributes specific to this Accessible object.
	 *
	 * @param e an event object containing the following fields:<ul>
	 * <li>[in] offset - the 0 based text offset for which to return attribute information</li>
	 * <li>[out] start - the 0 based starting offset of the character range
	 * 		over which all text attributes match those of offset</li>
	 * <li>[out] end - the 0 based offset after the last character of the character range
	 * 		over which all text attributes match those of offset</li>
	 * <li>[out] textStyle - the TextStyle of the character range</li>
	 * <li>[out] attributes - an array of alternating key and value Strings
	 * 		that represent additional attributes that do not correspond to TextStyle fields</li>
	 * </ul>
	 */
	public void getTextAttributes(AccessibleTextAttributeEvent e);
}
