package at.bestsolution.e4.ui.workbench.renderers.swing;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import org.eclipse.core.commands.ParameterizedCommand;
import org.eclipse.e4.core.commands.ECommandService;
import org.eclipse.e4.core.commands.EHandlerService;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.ui.model.application.commands.MParameter;
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.MUILabel;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.model.application.ui.menu.MHandledItem;
import org.eclipse.e4.ui.model.application.ui.menu.MItem;
import org.eclipse.e4.ui.model.application.ui.menu.MToolItem;
import org.eclipse.emf.common.util.URI;
@SuppressWarnings("restriction")
public class ToolItemRenderer extends SwingPartRenderer {
private ParameterizedCommand generateParameterizedCommand(
final MHandledItem item, final IEclipseContext lclContext) {
ECommandService cmdService = (ECommandService) lclContext
.get(ECommandService.class.getName());
Map<String, Object> parameters = null;
List<MParameter> modelParms = item.getParameters();
if (modelParms != null && !modelParms.isEmpty()) {
parameters = new HashMap<String, Object>();
for (MParameter mParm : modelParms) {
parameters.put(mParm.getName(), mParm.getValue());
}
}
ParameterizedCommand cmd = cmdService.createCommand(item.getCommand()
.getElementId(), parameters);
item.setWbCommand(cmd);
return cmd;
}
@Override
public Object createWidget(MUIElement element, Object parent) {
JLabel button = new JLabel(" ");
MToolItem item = (MToolItem) element;
String uri = item.getIconURI();
if( uri != null ) {
try {
ImageIcon icon = new ImageIcon(new URL(URI.createURI(uri).toString()));
button.setIcon(icon);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return button;
}
public void hookControllerLogic(MUIElement me) {
if (me instanceof MHandledItem) {
final MHandledItem item = (MHandledItem) me;
final IEclipseContext lclContext = getContext(me);
JLabel l = (JLabel) item.getWidget();
l.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
EHandlerService service = (EHandlerService) lclContext
.get(EHandlerService.class.getName());
ParameterizedCommand cmd = item.getWbCommand();
if (cmd == null) {
cmd = generateParameterizedCommand(item, lclContext);
}
if (cmd == null) {
System.err.println(
"Failed to execute: " + item.getCommand());
return;
}
lclContext.set(MItem.class.getName(), item);
service.executeHandler(cmd);
lclContext.remove(MItem.class.getName());
}
});
}
}
@Override
protected Object getParentWidget(MUIElement element) {
// TODO Auto-generated method stub
return null;
}
@Override
public void disposeWidget(MUIElement part) {
// TODO Auto-generated method stub
}
@Override
public void childRendered(MElementContainer<MUIElement> parentElement,
MUIElement element) {
// TODO Auto-generated method stub
}
@Override
protected Object getImage(MUILabel element) {
// TODO Auto-generated method stub
return null;
}
@Override
protected boolean requiresFocus(MPart element) {
// TODO Auto-generated method stub
return false;
}
}