/******************************************************************************* * 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.List; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.action.ContributionItem; import org.eclipse.jface.action.IContributionItem; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.ui.ISelectionService; 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.INavigatorManager; import com.rcpcompany.utils.extensionpoints.CEResourceHolder; import com.rcpcompany.utils.selection.SelectionUtils; /** * Adds items to the "Open With" sub-menu based on the type of the current selection. * * @author Tonny Madsen, The RCP Company */ public class OpenWithContributionFactory extends ExtensionContributionFactory { @Override public void createContributionItems(IServiceLocator serviceLocator, IContributionRoot additions) { final ISelectionService ss = (ISelectionService) serviceLocator.getService(ISelectionService.class); final List<EObject> list = SelectionUtils.computeSelection(ss.getSelection(), EObject.class); /* * Only know how to handle one item */ if (list.size() != 1) return; final EObject obj = list.get(0); final IEditorInformation mt = INavigatorManager.Factory.getManager().getEditorInformation(obj.getClass()); if (mt == null) return; 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 based on the name and image */ for (final IEditorPartDescriptor d : editors) { final IContributionItem item = new ContributionItem() { @Override public void fill(Menu menu, int index) { final MenuItem mi = new MenuItem(menu, SWT.NONE); mi.setText(d.getName()); final CEResourceHolder image = d.getImage(); if (image != null) { mi.setImage(image.getImage()); } mi.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { mt.setPreferredEditor(d); INavigatorManager.Factory.getManager().openView(obj, false); } }); } }; additions.addContributionItem(item, null); } } }