/******************************************************************************* * 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;import org.eclipse.core.commands.common.AbstractHandleObjectEvent;/** * <p> * An event describing changes to an <code>MenuElement</code>. * </p> * <p> * Clients must not instantiate or extend this class. * </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 */class MenuElementEvent extends AbstractHandleObjectEvent {	/**	 * The bit used to represent whether the menu has changed its locations.	 */	private static final int CHANGED_LOCATIONS = LAST_BIT_USED_ABSTRACT_HANDLE << 1;	/**	 * The bit used to represent whether the menu has changed its visibility.	 */	private static final int CHANGED_VISIBILITY = LAST_BIT_USED_ABSTRACT_HANDLE << 2;	/**	 * The last used bit so that subclasses can add more properties.	 */	protected static final int LAST_USED_BIT_MENU_ELEMENT = CHANGED_VISIBILITY;	/**	 * Creates a new instance of <code>MenuElementEvent</code>.	 * 	 * @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.	 */	protected MenuElementEvent(final boolean locationsChanged,			final boolean definedChanged, final boolean visibilityChanged) {		super(definedChanged);		if (locationsChanged) {			changedValues |= CHANGED_LOCATIONS;		}		if (visibilityChanged) {			changedValues |= CHANGED_VISIBILITY;		}	}	/**	 * Returns whether or not the locations have changed.	 * 	 * @return <code>true</code>, iff the locations property changed.	 */	public final boolean isLocationsChanged() {		return ((changedValues & CHANGED_LOCATIONS) != 0);	}	/**	 * Returns whether or not the visbility has changed.	 * 	 * @return <code>true</code>, iff the visibility property changed.	 */	public final boolean isVisibilityChanged() {		return ((changedValues & CHANGED_VISIBILITY) != 0);	}}