package com.toedter.e4.ui.workbench.renderers.swt;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.PostConstruct;
import org.eclipse.e4.ui.model.application.ui.MUILabel;
import org.eclipse.emf.common.util.URI;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import com.toedter.e4.ui.workbench.generic.GenericRenderer;
@SuppressWarnings("restriction")
public class SWTRenderer extends GenericRenderer {
protected Map<String, Image> imageMap = new HashMap<String, Image>();
@PostConstruct
public void init() {
Display.getCurrent().disposeExec(new Runnable() {
@Override
public void run() {
for (Image image : imageMap.values()) {
image.dispose();
}
}
});
}
protected Image getImage(MUILabel element) {
String iconURI = element.getIconURI();
if (iconURI != null && iconURI.length() > 0) {
Image image = imageMap.get(iconURI);
if (image == null) {
image = imageDescriptorFromURI(URI.createURI(iconURI)).createImage();
imageMap.put(iconURI, image);
}
return image;
}
return null;
}
public ImageDescriptor getImageDescriptor(MUILabel element) {
String iconURI = element.getIconURI();
if (iconURI != null && iconURI.length() > 0) {
return imageDescriptorFromURI(URI.createURI(iconURI));
}
return null;
}
public ImageDescriptor imageDescriptorFromURI(URI iconPath) {
try {
return ImageDescriptor.createFromURL(new URL(iconPath.toString()));
} catch (MalformedURLException e) {
System.err.println("iconURI \"" + iconPath.toString()
+ "\" is invalid, a \"missing image\" icon will be shown");
return ImageDescriptor.getMissingImageDescriptor();
}
}
}