/*******************************************************************************
* Copyright (c) 2006-2013 The RCP Company 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:
* The RCP Company - initial API and implementation
*******************************************************************************/
package com.rcpcompany.uibindings.navigator.internal.handlers;
import java.util.HashMap;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.menus.CommandContributionItem;
import org.eclipse.ui.menus.CommandContributionItemParameter;
import org.eclipse.ui.menus.ExtensionContributionFactory;
import org.eclipse.ui.menus.IContributionRoot;
import org.eclipse.ui.services.IServiceLocator;
import com.rcpcompany.uibindings.navigator.IEditorInformation;
import com.rcpcompany.uibindings.navigator.IEditorPartDescriptor;
import com.rcpcompany.uibindings.navigator.IEditorPartView;
import com.rcpcompany.uibindings.navigator.INavigatorManager;
import com.rcpcompany.uibindings.navigator.internal.NavigatorConstants;
/**
* Adds items to the "Select Editor" sub-menu based on the current object of the current editor.
*
* @author Tonny Madsen, The RCP Company
*/
public class SelectEditorPartMenuContributor extends ExtensionContributionFactory {
@Override
public void createContributionItems(IServiceLocator serviceLocator, IContributionRoot additions) {
final IWorkbenchPartSite site = (IWorkbenchPartSite) serviceLocator.getService(IWorkbenchPartSite.class);
if (site == null) return;
final IWorkbenchPart part = site.getPart();
if (part == null) return;
if (!(part instanceof IEditorPartView)) return;
final IEditorPartView view = (IEditorPartView) part;
final EObject obj = view.getCurrentObject();
if (obj == null) return;
final IEditorInformation mt = INavigatorManager.Factory.getManager().getEditorInformation(obj.getClass());
final List<IEditorPartDescriptor> editors = mt.getEnabledEditors();
/*
* Less than two editors... no need for an open with menu... Ignore.
*/
if (editors.size() < 2) return;
/*
* Create contributions items for all the editors
*/
for (final IEditorPartDescriptor d : editors) {
final CommandContributionItemParameter parameters = new CommandContributionItemParameter(serviceLocator,
null, NavigatorConstants.SELECT_EDITOR_PART_COMMAND, CommandContributionItem.STYLE_CHECK);
parameters.parameters = new HashMap<Object, Object>();
parameters.parameters.put(NavigatorConstants.EDITOR_ID_PARAMETER, d.getId());
final IContributionItem item = new CommandContributionItem(parameters);
additions.addContributionItem(item, null);
}
}
}