/******************************************************************************* * 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.swt.widgets.Composite;import org.eclipse.swt.widgets.CoolBar;import org.eclipse.swt.widgets.Menu;import org.eclipse.swt.widgets.ToolBar;/** * <p> * Provides a hook by which third-party code can contribute SWT widgets to a * menu, tool bar or status line. This can be used, for example, to add a combo * box to the status line, or a "Location" bar to the tool bar. * </p> * <p> * It is possible for fill and dispose to be called multiple times for a single * instance of <code>IWidget</code>. * </p> * <p> * Clients may implement, 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 */public interface IWidget {	/**	 * Disposes of the underlying widgets. This can be called when the widget is	 * becoming hidden.	 */	public void dispose();	/**	 * Fills the given composite control with controls representing this widget.	 * 	 * @param parent	 *            the parent control	 */	public void fill(Composite parent);	/**	 * Fills the given menu with controls representing this widget.	 * 	 * @param parent	 *            the parent menu	 * @param index	 *            the index where the controls are inserted, or <code>-1</code>	 *            to insert at the end	 */	public void fill(Menu parent, int index);	/**	 * Fills the given tool bar with controls representing this contribution	 * item.	 * 	 * @param parent	 *            the parent tool bar	 * @param index	 *            the index where the controls are inserted, or <code>-1</code>	 *            to insert at the end	 */	public void fill(ToolBar parent, int index);	/**	 * Fills the given cool bar with controls representing this contribution	 * item.	 * 	 * @param parent	 *            the parent cool bar	 * @param index	 *            the index where the controls are inserted, or <code>-1</code>	 *            to insert at the end	 */	public void fill(CoolBar parent, int index);}