/******************************************************************************* * Copyright (c) 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.menus;/** * <p> * An event describing changes to an <code>SItem</code>. * </p> * <p> * Clients may instantiate this class, but must not extend. * </p> * <p> * <strong>EXPERIMENTAL</strong>. This class or interface has been added as * part of a work in progress. There is a guarantee neither that this API will * work nor that it will remain the same. Please do not use this API without * consulting with the Platform/UI team. * </p> *  * @since 3.2 * @see IItemListener#itemChanged(ItemEvent) */public final class ItemEvent extends MenuElementEvent {	/**	 * The bit used to represent whether the item has changed its	 * fully-qualified command.	 */	private static final int CHANGED_COMMAND = LAST_USED_BIT_MENU_ELEMENT << 1;	/**	 * The bit used to represent whether the item has changed its associated	 * menu.	 */	private static final int CHANGED_MENU = LAST_USED_BIT_MENU_ELEMENT << 2;	/**	 * The item that has changed; this value is never <code>null</code>.	 */	private final SItem item;	/**	 * Creates a new instance of <code>ItemEvent</code>.	 * 	 * @param item	 *            The instance that has changed; must not be <code>null</code>.	 * @param commandChanged	 *            <code>true</code>, iff the command property changed.	 * @param menuChanged	 *            <code>true</code> if the menu has changed;	 *            <code>false</code> otherwise.	 * @param locationsChanged	 *            <code>true</code> if the locations have changed;	 *            <code>false</code> otherwise.	 * @param definedChanged	 *            <code>true</code>, iff the defined property changed.	 * @param visibilityChanged	 *            <code>true</code>, iff the visibility property change.	 */	public ItemEvent(final SItem item, final boolean commandChanged,			final boolean menuChanged, final boolean locationsChanged,			final boolean definedChanged, final boolean visibilityChanged) {		super(locationsChanged, definedChanged, visibilityChanged);		if (item == null)			throw new NullPointerException("An item event needs an item"); //$NON-NLS-1$		this.item = item;		if (commandChanged) {			changedValues |= CHANGED_COMMAND;		}		if (menuChanged) {			changedValues |= CHANGED_MENU;		}	}	/**	 * Returns the instance that changed.	 * 	 * @return the instance that changed. Guaranteed not to be <code>null</code>.	 */	public final SItem getItem() {		return item;	}	/**	 * Returns whether or not the command property changed.	 * 	 * @return <code>true</code>, iff the command property changed.	 */	public final boolean isCommandChanged() {		return ((changedValues & CHANGED_COMMAND) != 0);	}	/**	 * Returns whether or not the menu changed.	 * 	 * @return <code>true</code>, iff the menu changed.	 */	public final boolean isMenuChanged() {		return ((changedValues & CHANGED_MENU) != 0);	}}