/*****************************************************************************
* Copyright (c) 2011 CEA LIST.
*
* 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:
* Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
*****************************************************************************/
package org.eclipse.papyrus.infra.table.menu.handler;
import org.eclipse.core.expressions.EvaluationResult;
import org.eclipse.core.expressions.Expression;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.facet.widgets.nattable.INatTableWidget;
import org.eclipse.emf.facet.widgets.nattable.INatTableWidgetProvider;
import org.eclipse.emf.facet.widgets.nattable.tableconfiguration.InstantiationMethod;
import org.eclipse.jface.action.ContributionItem;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.papyrus.infra.table.menu.messages.Messages;
import org.eclipse.papyrus.uml.diagram.common.Activator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.ui.menus.IContributionRoot;
import org.eclipse.ui.services.IServiceLocator;
/**
*
* This class create a menu to get the action to create new elements in the table in the popup menu.
* This code is adapted from the class org.eclipse.emf.facet.widgets.nattable.workbench.internal.handlers.CreateNewElementContributionItem
*/
public class CreateNewElementInPopupContributionItem extends AbstractTableExtensionContributionFactory {
/**
*
* Constructor.
*
*/
public CreateNewElementInPopupContributionItem() {
}
/**
*
* {@inheritDoc}
*/
@Override
public void createContributionItems(IServiceLocator serviceLocator, IContributionRoot additions) {
super.createContributionItems(serviceLocator, additions);
final INatTableWidgetProvider provider = getINatTableWidgetProvider();
if(provider != null) {
final INatTableWidget natTableWidget = provider.getNatTableWidget();
MenuManager manager = new MenuManager(Messages.CreateMenuForNewElementInPopupContributionItem_CreateNewElementMenu) {
/**
*
* {@inheritDoc}
*/
@Override
public void fill(Menu parent, int index) {
super.fill(parent, index);
getMenu().getParentItem().setEnabled(natTableWidget.getInstantionMethodHistory().size() != 0);
Image image = Activator.getImage("IMG_OBJ_ADD"); //$NON-NLS-1$
getMenu().getParentItem().setImage(image);
}
};
manager.setVisible(true);
IContributionItem item = new ContributionItem() {
/**
*
* {@inheritDoc}
*/
@Override
public void fill(final Menu menu, int index) {
for(int i = 0; i < natTableWidget.getInstantionMethodHistory().size(); i++) {
final InstantiationMethod meth = natTableWidget.getInstantionMethodHistory().get(i);
MenuItem menuItem = new MenuItem(menu, SWT.CHECK);
menuItem.setText(i + " " + meth.getName()); //$NON-NLS-1$
menuItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
for(MenuItem menuItem2 : menu.getItems()) {
menuItem2.setSelection(false);
}
MenuItem localMenuItem = (MenuItem)e.widget;
localMenuItem.setSelection(true);
natTableWidget.createNewElement(meth);
}
});
}
boolean enabled = menu.getItemCount() != 0;
menu.setEnabled(enabled);
}
};
Menu menu = manager.getMenu();
if(menu != null) {
menu.setEnabled(false);
}
manager.add(item);
Expression visibleWhen = new Expression() {
/**
*
* {@inheritDoc}
*/
@Override
public EvaluationResult evaluate(IEvaluationContext context) throws CoreException {
return EvaluationResult.TRUE;
}
};
additions.addContributionItem(manager, visibleWhen);
}
}
}