blob: a4862d8959092b98b3980b7aa8abaf31dc7b8070 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2009 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.ui.menus;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.jface.action.ContributionManager;
import org.eclipse.ui.services.IServiceWithSources;
/**
* <p>
* Provides services related to the menu architecture within the workbench. It
* can be used to contribute additional items to the menu, tool bar and status
* line.
* </p>
* <p>
* This service can be acquired from your service locator:
* <pre>
* IMenuService service = (IMenuService) getSite().getService(IMenuService.class);
* </pre>
* <ul>
* <li>This service is available globally.</li>
* </ul>
* </p>
*
* @noimplement This interface is not intended to be implemented by clients.
* @noextend This interface is not intended to be extended by clients.
*
* @since 3.3
*/
public interface IMenuService extends IServiceWithSources {
/**
* Contribute and initialize the contribution factory. This should only be
* called once per factory. After the call, the factory should be treated as
* an unmodifiable object.
* <p>
* <b>Note:</b> factories should be removed when no longer necessary. If
* not, they will be removed when the IServiceLocator used to acquire this
* service is disposed.
* </p>
*
* @param factory
* the contribution factory. Must not be <code>null</code>
* @see #removeContributionFactory(AbstractContributionFactory)
*/
public void addContributionFactory(AbstractContributionFactory factory);
/**
* Remove the contributed factory from the menu service. If the factory is
* not contained by this service, this call does nothing.
*
* @param factory
* the contribution factory to remove. Must not be
* <code>null</code>.
*/
public void removeContributionFactory(AbstractContributionFactory factory);
/**
* Populate a <code>ContributionManager</code> at the specified starting
* location with a set of <code>IContributionItems</code>s. It applies
* <code>AbstractContributionFactory</code>s that are stored against the
* provided location.
*
* @param mgr
* The ContributionManager to populate
* @param location
* The starting location to begin populating this contribution
* manager. The format is the Menu API URI format.
* @see #releaseContributions(ContributionManager)
*/
public void populateContributionManager(ContributionManager mgr,
String location);
/**
* Before calling dispose() on a ContributionManager populated by the menu
* service, you must inform the menu service to release its contributions.
* This takes care of unregistering any IContributionItems that have their
* visibleWhen clause managed by this menu service.
* <p>
* This will not update the ContributionManager (and any widgets). It will
* simply remove all menu service references to the contents of this
* ContributionManager.
* </p>
*
* @param mgr
* The manager that was populated by a call to
* {@link #populateContributionManager(ContributionManager, String)}
*/
public void releaseContributions(ContributionManager mgr);
/**
* Get the current state of eclipse as seen by the menu service.
*
* @return an IEvaluationContext containing state variables.
*
* @see org.eclipse.ui.ISources
* @see org.eclipse.ui.services.IEvaluationService
*/
public IEvaluationContext getCurrentState();
}