package at.bestsolution.efxclipse.runtime.workbench.renderers;
import java.net.URL;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuItem;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javax.inject.Inject;
import org.eclipse.core.commands.ParameterizedCommand;
import org.eclipse.core.commands.common.NotDefinedException;
import org.eclipse.e4.core.services.contributions.IContributionFactory;
import org.eclipse.e4.ui.model.application.ui.MElementContainer;
import org.eclipse.e4.ui.model.application.ui.MUIElement;
import org.eclipse.e4.ui.model.application.ui.menu.MDirectMenuItem;
import org.eclipse.e4.ui.model.application.ui.menu.MHandledItem;
import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
import org.eclipse.e4.ui.model.application.ui.menu.MMenuItem;
import org.eclipse.emf.common.util.URI;
@SuppressWarnings("restriction")
public class MenuItemRenderer extends ItemRenderer {
@Inject
IContributionFactory contributionFactory;
@Override
public Object createWidget(MUIElement element, Object parent) {
if (parent != null && parent instanceof Menu && element instanceof MMenuItem) {
MenuItem menuItem = new MenuItem();
setItemText((MMenuItem) element, menuItem);
return menuItem;
}
return null;
}
@Override
public void processContents(MElementContainer<MUIElement> container) {
super.processContents(container);
if (container.getWidget() instanceof Menu) {
Menu menu = (Menu) container.getWidget();
for (MUIElement e : container.getChildren()) {
menu.getItems().add((MenuItem) e.getWidget());
}
}
}
protected void setItemText(MMenuItem model, MenuItem item) {
String text = model.getLocalizedLabel();
if (model instanceof MHandledItem) {
MHandledItem handledItem = (MHandledItem) model;
generateParameterizedCommand(handledItem, context);
ParameterizedCommand cmd = handledItem.getWbCommand();
if (cmd != null && (text == null || text.length() == 0)) {
try {
text = cmd.getName();
} catch (NotDefinedException e) {
e.printStackTrace();
}
}
}
item.setMnemonicParsing(true);
text = text.replaceAll("&", "_");
item.setText(text);
if (model.getIconURI() != null) {
URL url = Util.convertToOSGiURL(URI.createURI(model.getIconURI()));
Image img = new Image(url.toExternalForm());
item.setGraphic(new ImageView(img));
}
// item.setAccelerator(new KeyCharacterCombination("k"));
}
@Override
public void hookControllerLogic(MUIElement me) {
if (me instanceof MDirectMenuItem) {
final MDirectMenuItem item = (MDirectMenuItem) me;
item.setObject(contributionFactory.create(item.getContributionURI(), getContext(item)));
MenuItem menuItem = (MenuItem) item.getWidget();
menuItem.setOnAction(createEventHandler(item));
} else if (me instanceof MHandledMenuItem) {
final MHandledMenuItem item = (MHandledMenuItem) me;
MenuItem menuItem = (MenuItem) item.getWidget();
menuItem.setOnAction(createParametrizedCommandEventHandler(item));
}
}
}