/******************************************************************************* * 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>SGroup</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 IGroupListener#groupChanged(GroupEvent) */public final class GroupEvent extends MenuCollectionEvent {	/**	 * The bit used to represent whether the group has changed whether its	 * separators are visible.	 */	private static final int CHANGED_SEPARATORS = 1;	/**	 * The bit used to represent whether the group has changed its locations.	 */	private static final int CHANGED_LOCATIONS = 1 << 1;	/**	 * The bit used to represent whether the group has changed its dynamic	 * class.	 */	private static final int CHANGED_DYNAMIC = 1 << 2;	/**	 * The group that has changed; this value is never <code>null</code>.	 */	private final SGroup group;	/**	 * Creates a new instance of <code>GroupEvent</code>.	 * 	 * @param group	 *            The instance that has changed; must not be <code>null</code>.	 * @param separatorsChanged	 *            <code>true</code>, iff the visibility property changed.	 * @param locationsChanged	 *            <code>true</code> if the locations have changed;	 *            <code>false</code> otherwise.	 * @param dynamicChanged	 *            <code>true</code> if the dynamic class has 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 GroupEvent(final SGroup group, final boolean separatorsChanged,			final boolean locationsChanged, final boolean dynamicChanged,			final boolean definedChanged, final boolean visibilityChanged) {		super(locationsChanged, dynamicChanged, definedChanged,				visibilityChanged);		if (group == null)			throw new NullPointerException("A group event needs a group"); //$NON-NLS-1$		this.group = group;		if (separatorsChanged) {			changedValues |= CHANGED_SEPARATORS;		}		if (locationsChanged) {			changedValues |= CHANGED_LOCATIONS;		}		if (dynamicChanged) {			changedValues |= CHANGED_DYNAMIC;		}	}	/**	 * Returns the instance that changed.	 * 	 * @return the instance that changed. Guaranteed not to be <code>null</code>.	 */	public final SGroup getGroup() {		return group;	}	/**	 * Returns whether or not the visibility property changed.	 * 	 * @return <code>true</code>, iff the visibility property changed.	 */	public final boolean isSeparatorsChanged() {		return ((changedValues & CHANGED_SEPARATORS) != 0);	}}